81 lines
No EOL
5.3 KiB
Text
81 lines
No EOL
5.3 KiB
Text
//半ティック稼働
|
|
//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; // 一度最終決済を抽出したらループから抜ける
|
|
}
|
|
} // 最終エントリー・決済からのローソク足本数をカウントする(ココマデ)
|
|
|
|
///////////////////////////
|
|
//注文部
|
|
///////////////////////////
|
|
|
|
} // 始値から指定ティックのみ判定(ココマデ)
|
|
} |