解決済み

オプション「建値ストップ」の間隔について

2025/08/01 13:01
52

オプションで「建値ストップ」という機能がありますが、「間隔」を固定値pipsではなく、例えば、執行足の1本前の日足ATR値(計算期間22)×0.5 のように設定したいのですが、コードをどのように変更すればいいでしょうか?

これは、ボラティリティの違う通貨ペアで有効性を確認したり、時期によって異なるボラティリティに対応するためです。

コメント

GogoJungle
2025/08/01 16:06

通常通り「建値ストップ」オプションにチェックを入れてダウンロードしていただいた後、コードを次のように修正すればOKです。

【修正前】

if(isBreakEven == true) BreakEven(BreakEvenValue, CorrectionValue, Magic1);

【修正後】

if(isBreakEven == true) BreakEven(iATR(Symbol(), D1, 22, 1) * 0.5, CorrectionValue, Magic1);

BreakEvenValueが「間隔」ですので、これをATRを用いた計算式に置き換えるわけです。

iATR

iATR(通貨ペア, 時間足, 計算期間, シフト数)

の形式で指定します。

今回の設定では、 日足(D1)で1本前のATR(計算期間22) を使用したいとのことですので、以下のように指定します:

iATR(Symbol(), D1, 22, 1)

これにより、「現在の1つ前の日足バーにおけるATR22の値」が取得されます。
ご参考になりましたら幸いでございます。

ganesha
2025/08/06 21:33

ご丁寧な回答ありがとうございます。

ganesha
2025/08/06 21:44

MT4でEAを運用予定ですが、

iATR(Symbol(), D1, 22, 1) ではなく、
iATR(Symbol(), PERIOD_D1, 22, 1)ではないでしょうか?

ご回答いただければ幸いです。よろしくお願いいたします。

ganesha
2025/08/07 09:38

追加で2点質問させていただきたいのですが、
1.
MT4でEAを運用予定ですが、
iATR(Symbol(), D1, 22, 1) ではなく、
iATR(Symbol(), PERIOD_D1, 22, 1)ではないでしょうか?
2.
if(isBreakEven == true) BreakEven(iATR(Symbol(), D1, 22, 1) * 0.5, CorrectionValue, Magic1); ではなく,
if(isBreakEven == true) BreakEven(PriceToPips(iATR(Symbol(), D1, 22, 1) * 0.5), CorrectionValue, Magic1); ではないでしょうか?

ご回答いただければ幸いです。よろしくお願いいたします。

GogoJungle
2025/08/07 12:03

1点目につきまして

ご安心ください。
EAつくーるでは、コードの上部にて下記のようにD1をはじめとする各時間足ごとの値を定義しております。

enum timeframe {
   CURRENT = 0, // チャートの時間足
   M1      = 1,
   M5      = 5,
   M15     = 15,
   M30     = 30,
   H1      = 60,
   H4      = 240,
   D1      = 1440,
   W1      = 10080,
   MN1     = 43200,
};

つきましては、MT4自体で定義されておりますPERIOD_D1、あるいは独自に定義したD1の、どちらを使用しても結果は変化しない仕様となっております。

2点目につきまして

ご指摘ありがとうございます。

EAつくーるでは、内部的に「pips」と「価格差(Price)」を明確に区別しており、BreakEven()関数の第一引数は「pips」で指定することが想定されています。

したがって、iATR(...) の戻り値(価格差)をそのまま渡すと、一部の通貨ペアで意図した挙動にならない可能性があります。
このため、PriceToPips(...) を使って、価格差をpipsに変換する必要があります。

ご指摘いただいた通り、正しい形はこちらになります。

if(isBreakEven == true) BreakEven(PriceToPips(iATR(Symbol(), D1, 22, 1) * 0.5), CorrectionValue, Magic1);

PERIOD_D1 を使いたい場合は D1PERIOD_D1 に置き換えていただいても構いません。)

ganesha
2025/08/08 11:02

承知いたしました。ご丁寧な回答ありがとうございます。

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。