このチュートリアルでは前回紹介したストラテジー(
BarsAndTicksTrade.java)を変更します。
onBarメソッドは
登録されている通貨ペアの、全ての時間軸のバーが確定する度に呼び出されます。
onBarメソッドで特定の通貨ペアに対してのみ処理したい場合は、フィルタリングする必要があります。
この例では
onMessageメソッドを使ってオーダーイベントのログを出力します。
他全てのメッセージから関連するメッセージログのみ出力するにはフィルタリングする必要があります。
この例ではStrategyタブへ出力する事で、ログ出力をシミュレートします。
onBarメソッドでロジックを作成します
Move our previously created strategy's logic from the onStart method to onBar method. Here is the onStart method after movement:
public void onStart(IContext context) throws JFException {
this.engine = context.getEngine();
this.console = context.getConsole();
this.history = context.getHistory();
this.context = context;
this.indicators = context.getIndicators();
this.userInterface = context.getUserInterface();
Set<Instrument> instruments = new HashSet<Instrument>();
instruments.add(myInstrument);
context.setSubscribedInstruments(instruments, true);
}
IOrder型の新しいインスタンスを定義します。
このIOrderオブジェクトは同じラベルを持つオーダーの存在を確認する為に必要になります。
続いて、onBarメソッドに以下のコードを追加します。
public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
if (!instrument.equals(myInstrument) || !period.equals(myPeriod)) {
return;
}
order = engine.getOrder("MyStrategyOrder");
if ( order != null && engine.getOrders().contains(order) ){
order.close();
order.waitForUpdate(IOrder.State.CLOSED);
console.getOut().println(order.getLabel() + " ラベルのポジションをクローズしました" );
} else if (order == null ) {
console.getOut().println("クローズするポジションは有りません");
}
previousBar = myOfferSide == OfferSide.ASK ? askBar : bidBar;
console.getOut().println(" | 最後に確定したバー⇒" + previousBar + " | 時間軸⇒" + period + " | 通貨ペア⇒" + instrument);
OrderCommand myCommand = previousBar.getOpen() > previousBar.getClose() ? OrderCommand.SELL : OrderCommand.BUY;
engine.submitOrder("MyStrategyOrder", myInstrument, myCommand, 0.001);
}
オーダーログフィルタリング
次のようにonMessagesメソッドに実装します。
public void onMessage(IMessage message) throws JFException {
if( message.getOrder() != null )
console.getOut().println("オーダーラベル: " + message.getOrder().getLabel() + " || メッセージログ: " + message.getContent());
}
ログ出力についての詳細はIConsole項目のLogging valuesを参照。
サンプルソースコード:
OnBarExample.java
ヒストリカルテスターを使って、リアルなヒストリカルデータに基づいたリアルな状況でストラテジーの動作をチェックする事が出来ます。
昨日のデータに基づいてストラテジーをテストしてみます。
ヒストリカルテスターのタブを開くには、メニューから"ツール"⇒"ヒストリカル・テスター"を選択します。
ヒストリカルテスターのドロップダウンリストからテストするストラテジーを選択します。
テストする通貨ペアを設定するには"銘柄"ボタンをクリックして下さい。
"銘柄"ボタンの右隣にあるドロップダウンリストの期間から"昨日"を選択します。
その右隣にあるドロップダウンリストの時間軸から"ティック"を選択します。
設定が完了したら、
ボタンを押してテストを開始します。
テスト結果はブラウザに表示されます。