//半ティック稼働 //xBarsの判定ではなく、Volume[0]で始値と、その後数ティック判定を行う //Volume[0]は始値。ただし始値で注文が判定されないこともあり、数ティック判定を予備で行うと約定しやすい。 //全ティック稼働に比べ、処理が軽くなる。 //開発塾のxBars判定では、始値の1ティック目しか判定を行えない //数ティック判定を行うタイミングで決済処理がある場合は、連続発注・決済を繰り返すこともある。 //全ティックでのバックテストで、連続発注が無いかチェック必要 //連続防止のコードも以下記載(1ポジション用) //計測の結果、通常10~20ティックまであればエントリー補助判定としては機能した(それ以上ではレートが変わりすぎるなど問題あり) //スプレッド判定がタイトな朝方などでは、判定ティック数を増やして対応も可能 void PositionClose() { // 始値から指定ティックのみ判定 if(Volume[0] <= 20) // 20ティック目まで判定 { ///////////////////////////// //注文選択 ///////////////////////////// //マジックナンバー確認(マジックナンバーが一致しない場合は、for文の先頭に戻る) if (OrderMagicNumber() != MagicNumber) continue; //エントリーからのローソク足本数が1本未満なら、for文の先頭に戻る) int OrderOpenCandleCount = iBarShift(NULL, 0, OrderOpenTime()); if (OrderOpenCandleCount == 0) continue; } } void PositionOpen() { int OrderOpen_BarCount_buy = 1; // 0にすると、履歴無いときにエントリーしないため、他の値を初期値にする int OrderOpen_BarCount_sell = 1; int OrderClose_BarCount_buy = 1; // 0にすると、履歴無いときにエントリーしないため、他の値を初期値にする int OrderClose_BarCount_sell = 1; // 始値から指定ティックのみ判定 if(Volume[0] <= 20 || (xxTime == 1 && Volume[0] <= 200)) // 20(1時台は200)ティック目まで判定 { ////////////////////////// //ポジションカウント ////////////////////////// // 最終エントリー・決済からのローソク足本数をカウントする(連続エントリー防止) for(int j=OrdersHistoryTotal()-1; j>=0; j--) { //オーダー選択(エラーを生じた場合、ループから抜け出す) if (OrderSelect( j, SELECT_BY_POS, MODE_HISTORY ) == false) { Print("OrderSelect returned the error of ", GetLastError() ); break; } //オーダー確認(通貨ペアが一致しない場合は、for文の先頭に戻る) if (OrderSymbol() != Symbol()) continue; //マジックナンバー確認(マジックナンバーが一致しない場合は、for文の先頭に戻る) if (OrderMagicNumber() != MagicNumber) continue; //最終エントリー・決済からのローソク足本数 if (OrderType() == OP_BUY) // 買いの場合 { OrderOpen_BarCount_buy = iBarShift(NULL, 0, OrderOpenTime()); OrderClose_BarCount_buy = iBarShift(NULL, 0, OrderCloseTime()); if (OrderClose_BarCount_buy != -1) break; // 一度最終決済を抽出したらループから抜ける } if (OrderType() == OP_SELL) // 売りの場合 { OrderOpen_BarCount_sell = iBarShift(NULL, 0, OrderOpenTime()); OrderClose_BarCount_sell = iBarShift(NULL, 0, OrderCloseTime()); if (OrderClose_BarCount_sell != -1) break; // 一度最終決済を抽出したらループから抜ける } } // 最終エントリー・決済からのローソク足本数をカウントする(ココマデ) /////////////////////////// //注文部 /////////////////////////// } // 始値から指定ティックのみ判定(ココマデ) }