確定バーによるトレード

このチュートリアルでは前回紹介したストラテジー(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オブジェクトは同じラベルを持つオーダーの存在を確認する為に必要になります。



private IOrder order;



続いて、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メソッドに実装します。



// IMessagesからオーダー関連のメッセージをフィルタリングし、Strategyタブへログ出力します。

public void onMessage(IMessage message) throws JFException {        
    if( message.getOrder() != null )
        console.getOut().println("オーダーラベル: " + message.getOrder().getLabel() + " || メッセージログ: " + message.getContent());
}



ログ出力についての詳細はIConsole項目のLogging valuesを参照。

サンプルソースコード:OnBarExample.java


ヒストリカルテスターを使って、リアルなヒストリカルデータに基づいたリアルな状況でストラテジーの動作をチェックする事が出来ます。
昨日のデータに基づいてストラテジーをテストしてみます。
ヒストリカルテスターのタブを開くには、メニューから"ツール"⇒"ヒストリカル・テスター"を選択します。



ヒストリカルテスターのドロップダウンリストからテストするストラテジーを選択します。

テストする通貨ペアを設定するには"銘柄"ボタンをクリックして下さい。
"銘柄"ボタンの右隣にあるドロップダウンリストの期間から"昨日"を選択します。
その右隣にあるドロップダウンリストの時間軸から"ティック"を選択します。




設定が完了したら、  ボタンを押してテストを開始します。


テスト結果はブラウザに表示されます。




スポンサーリンク

スポンサーリンク
検索
リファレンスツリー


Copyright ©2016 JForexAPIで自動売買させ隊! All Rights Reserved.


Top

inserted by FC2 system