FX自動売買(EA)でエントリー後、一定の時間(例えば15分間)決済を禁止する条件を設定したい場合、MQL4やMQL5のコードで簡単に実装することができます。この記事では、その方法をわかりやすく解説します。
EAで決済禁止の条件を設定する基本的な考え方
エントリー後に一定時間、決済を禁止するためには、ポジションを開いた時間を記録し、その時間が経過するまでは決済処理を行わないようにする必要があります。
これを実現するためには、エントリーした時間を記録する変数を作り、現在の時間と比較する条件式を組み込む必要があります。
実装方法:エントリー後15分間の決済禁止
まず、エントリー時にポジションを開いた時間を記録し、その後の15分間は決済処理を行わないようにします。MQL4では、`OrderSend()`関数でエントリー時にタイムスタンプを記録し、`TimeCurrent()`関数を使って現在の時間を取得します。
コード例
// グローバル変数でポジション開設時間を記録
datetime entryTime;
// エントリーのコード
void OnTick() {
if (OrdersTotal() == 0) {
// エントリー条件が満たされた場合
int ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 2, 0, 0, "Buy Order", 0, 0, clrNONE);
if (ticket > 0) {
entryTime = TimeCurrent(); // エントリー時刻を記録
}
}
}
// 決済禁止ロジック
void OnTick() {
if (OrdersTotal() > 0) {
// 現在の時間がエントリー時刻から15分以上経過していない場合、決済しない
if (TimeCurrent() - entryTime < 900) { // 900秒 = 15分
return; // 決済をスキップ
}
// それ以降であれば決済を実行
if (OrderSelect(0, SELECT_BY_POS)) {
OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrNONE);
}
}
}
コード解説:エントリー後の15分間決済禁止の流れ
上記のコードでは、まず`entryTime`という変数を使ってエントリー時の時間を記録しています。この変数には、`TimeCurrent()`で取得した現在のサーバー時間が代入されます。
その後、決済処理を行う際に、現在の時刻(`TimeCurrent()`)とエントリー時刻(`entryTime`)を比較し、15分(900秒)以内であれば決済を行わないようにしています。
注意点:時間の単位とエントリー条件の確認
このコードでは、`TimeCurrent()`関数を使って現在のサーバー時間を取得していますが、これはMT4サーバーの時間となります。もしサーバー時間とローカル時間が異なる場合、適切に時間を補正する必要があります。
また、ポジションがエントリー条件を満たした場合にのみ、上記のロジックを適用するようにしてください。例えば、トレンドフォロー型の戦略であれば、相場の状況に応じてエントリーを判断し、その後の決済条件を設定することが重要です。
まとめ:EAでエントリー後15分間の決済禁止を設定する方法
エントリー後15分間決済を禁止するロジックをEAに組み込むことで、特定の時間帯における不必要な決済を防ぐことができます。上記のコード例を参考にして、エントリー時間を記録し、その時間が経過するまで決済を禁止する設定を実装してみましょう。
このように、MQL4やMQL5では、時間や条件に応じて取引戦略を柔軟に変更できるため、自分のトレードスタイルに合わせたEAの作成が可能です。条件設定を工夫することで、より効果的な自動売買が実現できます。
こんにちは!利益の管理人です。このブログは投資する人を増やしたいという思いから開設し運営しています。株式投資をメインに分散投資をしています。
コメント