JForexプラットフォームで利用可能なデータフィードのヒストリカルデータを取得する事が出来ます。
- レンジバー
- ティックバー
- ポイント&フィギア
- 蓮子バー
シフト・タイムインターバル・ユニットインターバルでロードする事が可能で、ローソク足の原理を反映しています。
同期と非同期の両方でロードする事が出来ます。同期/非同期ロードの違いについてはヒストリーバーのページを参照して下さい。
より効率良くヒストリカルフィードをロードするには、対象のデータフィードを登録します。
サンプル
フィードロードの原理は、ローソク足のロードと良く似ているので、サンプル紹介は簡単なものだけにします。
シフトとユニットインターバルによるフィードロード(サンプル)
private IConsole console;
private IHistory history;
int dataCount = 0;
@Configurable(value = "フィードタイプ", description = "choose any type of feed (except ticks) in the strategy parameters dialog")
public IFeedDescriptor feedDescriptor = new RangeBarFeedDescriptor(Instrument.EURUSD, PriceRange.TWO_PIPS, OfferSide.ASK);
@Override
public void onStart(final IContext context) throws JFException {
history = context.getHistory();
console = context.getConsole();
context.setSubscribedInstruments(java.util.Collections.singleton(feedDescriptor.getInstrument()), true);
context.subscribeToFeed(feedDescriptor, this);
ITimedData lastFeedData = history.getFeedData(feedDescriptor, 0);
List<ITimedData> feedDataList = history.getFeedData(feedDescriptor, 3, lastFeedData.getTime(), 0);
console.getOut().format("フィードタイプ:%s 最新のデータ=%s \n 3つ前のデータ=%s",
feedDescriptor.getDataType(), lastFeedData, feedDataList).println();
サンプルソースコード:
FeedHistory.java
非同期フィードロード(サンプル)
ITimedData lastFeedData = history.getFeedData(feedDescriptor, 0);
List<ITimedData> feedDataList = history.getFeedData(feedDescriptor, 3, lastFeedData.getTime(), 0);
console.getOut().format("フィードタイプ:%s 最新のデータ=%s \n 3つ前のデータ=%s",
feedDescriptor.getDataType(), lastFeedData, feedDataList).println();
final long from = lastFeedData.getTime() - TimeUnit.DAYS.toMillis(1);
final long to = lastFeedData.getTime();
history.readFeedData(
feedDescriptor,
from,
to,
new IFeedListener(){
@Override
public void onFeedData(IFeedDescriptor feedDescriptor, ITimedData feedData) {
dataCount++;
}
},
new LoadingProgressListener(){
@Override
public void dataLoaded(long start, long end, long currentPosition, String information) {
}
@Override
public void loadingFinished(boolean allDataLoaded, long start, long end, long currentPosition) {
if(allDataLoaded){
console.getOut().format("取得期間:%s 〜 %s、 ロード件数:%s、 %sフィードでのロード完了",
DateUtils.format(from), DateUtils.format(to), dataCount, feedDescriptor.getDataType()).println();
context.stop();
}
}
@Override
public boolean stopJob() {
return false;
}
}
);
サンプルソースコード:
FeedHistory.java
シフトによるティックバーチャート取得(サンプル)
以下例は、現在のティックバーの残ティック数をチャート表示表示します。
ティックバーのサイズはチャートから取得します。
if(instrument != this.instrument){
return;
}
if(chart == null || chart.getTickBarSize() == null){
print("ティックバーチャートが開かれていません。");
return;
}
ITickBar currentTickBar = history.getTickBar(instrument, OfferSide.BID, chart.getTickBarSize(), 0);
int remaining = (int) (chart.getTickBarSize().getSize() - currentTickBar.getFormedElementsCount());
print("残ティック: " + remaining + " 現在のティックバー: " + currentTickBar);
chart.comment("残ティック " + remaining);
サンプルソースコード:
TickBarTicksRemaining.java