gryps2/UI-code/T-048_VolumeEntry.txt
super.admin ae3f0ebf03 convert
2025-05-30 14:58:21 +02:00

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