このチュートリアルパートではSMAインジケータを使ったトレードをするストラテジーを紹介します。
SMAインジケータで上昇トレンドの時に買い、下降トレンドの時に売ります。
前回作成したストラテジーを利用し、SMA(単純移動平均)インジケータを追記します。
ストラテジーの内容は、最後に確定した2本バー(1つ前のバーと、2つ前のバー)のSMAインジケータの値を使用し、
その値に応じて売買の判断を行います。
SMAメソッドのパラメータでローソク足間の取得方法を指定します。
インジケータ算出のローソク足間については、
インジケータ算出の項目参照。
onBarメソッドに新しいコードを実装する為の準備をします。
SMAメソッドの為に時間軸設定と、SMAメソッドが返す配列参照の為の定数が必要です。
@Configurable( "SMA期間" )
public int smaTimePeriod = 30;
private static final int PREV = 1;
private static final int SECOND_TO_LAST = 0;
private void printMe(String toPrint){
console.getOut().println(toPrint);
}
onBarメソッドに以下コードを追記します。
public void onBar( Instrument instrument, Period period, IBar askBar, IBar bidBar ) throws JFException {
if (!instrument.equals(myInstrument) || !period.equals(myPeriod)) {
return;
}
IEngine.OrderCommand myCommand = null;
int candlesBefore = 2, candlesAfter = 0;
previousBar = myOfferSide == OfferSide.ASK ? askBar : bidBar;
long currBarTime = previousBar.getTime();
double sma[] = indicators.sma(instrument, period, myOfferSide, IIndicators.AppliedPrice.CLOSE,
smaTimePeriod, Filter.NO_FILTER, candlesBefore, currBarTime, candlesAfter);
printMe( String.format("SMAの値: 2つ前 = %.5f; 1つ前 = %.5f", sma[SECOND_TO_LAST], sma[PREV]));
if( sma[PREV] > sma[SECOND_TO_LAST]){
printMe("SMA上昇");
myCommand = IEngine.OrderCommand.BUY;
} else if ( sma[PREV] < sma[SECOND_TO_LAST]){
printMe("SMA下降");
myCommand = IEngine.OrderCommand.SELL;
} else {
return;
}
order = engine.getOrder("MyStrategyOrder");
if (order != null && engine.getOrders().contains(order) && order.getOrderCommand() != myCommand){
order.close();
order.waitForUpdate(IOrder.State.CLOSED);
console.getOut().println( order.getLabel() + " ラベルのポジションをクローズしました");
}
if ( order == null || !engine.getOrders().contains(order) ){
engine.submitOrder("MyStrategyOrder" , instrument, myCommand, 0.001);
}
}
サンプルソースコード:
SMASampleTrade.java
作成したストラテジーのテストを行います。
チャートを開いたら、ストラテジーのパラメータで設定する時間軸と同じ時間軸にチャート設定します。
このテストでは次のパラメータを使用します。
ボタンをクリックしてチャートにSMAインジケータを追加します。
"検索"欄に"SMA"と入力し、左のツリーから"Common" ⇒ "Overlap Studies"を選択し、"Simple Moving Average"を選択します。
インジケータを選択したら、次のように設定します。
チャート上で最後の2つの確定したバーで判定されている事が確認出来ます。
SMAトレンドラインが変化する度に売買される事が確認出来ます。
続いて、Strategyタブで出力メッセージを確認します。
SMAインジケータの算出値とオーダーメッセージを確認出来ます。
インジケータ算出の詳細については、インジケータ算出の項目を参照して下さい。