1) Base period works as a starting point from which to calculate bars. Examples:
a) base period 1 - P&F bars will be calculated from every day's 00:00 or 21:00 (depends on chosen time zone in Preferences - Chart - Day start time)
b) base period 7 - P&F bars will be calculated from every week's 00:00 or 21:00 (depends on chosen time zone in Preferences - Chart - Day start time)
In theory the calculation of price aggregated bars starts with the first tick of the history. Practically for JForex this means to load all history and calculate bars from the first available tick. This would be very time and resource consuming process.
To speed it up, we invented base period. When the base period starts, price aggregation bars are calculated as if this would be the beginning of the history. So, as a result we don't load all history, but just e.g. 7 days (in case of base period [7]).
2) It is possible, that after some time price aggregation bars become equal. But theoretically there is no limit of time span in which this should happen or happen at all.
3) The line:
List<IPointAndFigure> bars = history.getPointAndFigures(instrument, myOfferSide,PriceRange.ONEMINITE, ReversalAmount.THREE,3, currBarTime, 0);
Received bars are different from bars in chart, because this method uses default base period, which is 7 days with time zone EET (+3h utc). As a result a different bar is returned.
If you change time zone in Preferences - Chart - Day start time to EET, it will work correctly.
We apologize that the API is not updated yet. To indicate all parameters properly, you should use IHistory.getFeedData methods. Here is example with UTC base period:
long currBarTime = history.getTimeOfLastTick(Instrument.EURUSD);
IFeedDescriptor descriptor = new PointAndFigureFeedDescriptor(
Instrument.EURUSD,
PriceRange.ONE_PIP,
ReversalAmount.THREE,
OfferSide.BID,
Period.createCustomPeriod(Unit.Day, 7, JFTimeZone.UTC));
List<ITimedData> data = history.getFeedData(descriptor, 3, currBarTime, 0);