パラメータを定義
ストラテジーのパラメータはonStartメソッド実行前にセットします。
エディターでストラテジーJavaファイルを開き、Javaファイルにパラメータを追加します。
ストラテジーパラメータの詳細については、
ストラテジーパラメータの項目を参照して下さい。
パラメータ定義の例
@Configurable( value = "通貨ペア" )
public Instrument myInstrument = Instrument.EURGBP;
@Configurable( value = "オーダータイプ", obligatory = true )
public OfferSide myOfferSide = OfferSide.ASK;
@Configurable( value = "時間軸" )
public Period myPeriod = Period.TEN_MINS;
public void onStart(IContext context) throws JFException {
this.engine = context.getEngine();
this.console = context.getConsole();
ファイルをコンパイルし、
ストラテジーを起動すると"パラメータを定義"ダイアログが表示されます。
パラメータを設定完了後、"起動"ボタンを押すとストラテジーを開始します。
サンプルソースコード:
StrategyParameters.java
バーとティックを取得する
このパートでは前回定義したパラメータを使用します。
このパラメータは
IBarと
ITickオブジェクトの取得に使用します。
バーとティックについての詳細は、
ヒストリーバーの項目と
ヒストリーティックの項目を参照して下さい。
ますIBarとITickのクラスオブジェクトを宣言します。
private IBar previousBar;
private ITick myLastTick;
onStartメソッド内で、
previousBarオブジェクトを
IHistory.getBarメソッドで初期化し、
myLastBarオブジェクトを
IHistory.getLastTickメソッドで初期化します。
previousBar = history.getBar( myInstrument, myPeriod, myOfferSide, 1 );
myLastTick = history.getLastTick( myInstrument );
続いて、チャートの値をチェック出来るようにする為、ストラテジーのアウトプットに値を出力させます。
console.getOut().println(previousBar);
console.getOut().println(myLastTick);
ストラテジーを実行する前に、
IContext.setSubscribedInstrumentsを使って、通貨ペアリストに対象の
通貨ペアを登録をする必要があります。
IBarを初期化する前に次のコードを追加します。
Set<Instrument> instruments = new HashSet<Instrument>();
instruments.add(myInstrument);
context.setSubscribedInstruments(instruments, true);
Set -
HashSetは、
値の重複を許さない順不同のオブジェクトを扱うコレクションです。
詳細は
java.utilパッケージのAPI仕様書参照。
サンプルソースコード:
BarsAndTicks.java
サンプルソースコードの
ストラテジーを起動すると以下のような動作になります。
- 銘柄ウインドウの通貨ペアリストに対象の通貨ペアが登録されていない場合、対象の通貨ペアが追加されます。
(対象の通貨ペアが登録されていないとストラテジーが起動出来ないので、追加する必要があります。)
左:ストラテジー起動前。 右:ストラテジー起動後(パラメータでEUR/GBPを指定)。
- メッセージタブのメッセージにパラメータ値が表示されます。
- ストラテジーのアウトプットメッセージは、Strategyタブに表示されます。
バーの始値と終値に注意してください。チャート上の値を比較する必要があります。
チャートの値とストラテジーのアウトプットを比較します。
"パラメータを定義"ダイアログで選択した"
通貨ペア"のチャートを開きます。
"パラメータを定義"ダイアログで選択した"時間軸"と同じ時間軸になるようにチャートを設定します。
"パラメータを定義"ダイアログで選択した"オーダータイプ"と同じ(アスクまたはビッド)になるようにチャートを設定します。
チャートの設定が完了したら、
ストラテジーを実行します。
Strategyタブに出力された始値、終値、高値、安値、ボリュームが、チャート上の最後に確定したバーの値と比較し同じになっている事を確認します
(注意:最後に確定したバーなので、未確定の最新のバーの事ではありません)。
トレード部分を作成する
まず最初に、
OrderCommand列挙をインポートするimport文を書きます。
この列挙は
SELLと
BUYのコマンドを定義しています。
この列挙の定数は後で必要になります。
import com.dukascopy.api.IEngine.OrderCommand;
この例では、前回作成したストラテジーJavaファイル(
BarsAndTicks.java)を使い、取引する為のソースコードを追加します。
最初に買うか売るかを決定するソースコードを書きます。
このケースでは、最後に確定したバーに基づいて決定します。
次のコードを
onStartメソッドに追加します。
バーの
getOpenメソッドの戻り値と
getCloseメソッドの戻り値を比較して、買うか売るかを決定します。
OrderCommand myCommand = previousBar.getOpen() > previousBar.getClose() ? OrderCommand.SELL : OrderCommand.BUY;
↑の例では三項演算子が使われていて分かり難いかもしれないので、崩して分かり易く書くと
OrderCommand myCommand;
if ( previousBar.getOpen() > previousBar.getClose() ) {
myCommand = OrderCommand.SELL;
} else {
myCommand = OrderCommand.BUY;
}
になります。
トレード操作を行う際は、
IEngineメソッドの
submitOrderを使用します。
トレードの種類については
OrderCommandを用います。
submitOrderメソッドはオーダーラベル(Stringオブジェクトパラメータ)が必要です。
全てのオーダーに個別のオーダーラベルが必要になります。
(オーダーラベルに日本語は使えませんでした。)
engine.submitOrder( "MyStrategyOrder2" , myInstrument, myCommand, 0.001);
サンプルソースコード:
BarsAndTicksTrade.java
ファイルをコンパイルし
ストラテジーを起動します。
ポジションタブを確認すると、Ext.IDの欄に"MyStrategyOrder2"ラベルを持った新しいエントリー(ポジション)がある事を確認出来ます。
これは
IEngine.submitOrderメソッドのパラメータに与えたラベルの名前です。
ポジションをクローズするには、対象のポジションの左側にあるチェックボックスにチェックを入れて、右クリックをして"ポジションをクローズ"をクリックします。