図に示す条件のEA作成可能ですか?

2025/12/04 13:46
87

EAツクール質問画像.jpg

図にあるようなEAを「EAつくーる」で作りたいのですが可能でしょうか?

コメント

GogoJungle
2025/12/10 10:57

図にある条件のEAを、EAつくーるだけで作成できるかどうか、というご質問ですね。

画像の内容を整理すると、ロングの場合はおおよそ次のようなロジックだと思います。

  1. チャートには EMA13(赤)と EMA100(白)を表示。

  2. ロングエントリー

    • 先に「ローソク足の実体が EMA100 でサポートされた」
    • その後、ローソク足の終値が EMA13 を上抜けたタイミングでエントリー。
  3. ストップロス(SL)

    • 「EMA100 で実体がサポートされた足」の安値に置く。
  4. テイクプロフィット(TP)

    • SL と同じだけの距離、またはその数倍の距離に置く。
  5. ショートは上記の逆条件。

この前提で、EAつくーるで可能な部分と難しい部分を分けてご説明します。


1. EAつくーるで実現しやすい部分

1-1. EMA13 と EMA100 の条件でエントリー

「EMA100 付近で一度サポートされ、その後に終値が EMA13 を上抜け」であれば、
少し簡略化して

  • 1本前のローソク足が EMA100 付近でサポートされている
  • 現在足で終値が EMA13 を上抜ける(ゴールデンクロス)

という形なら、取引条件で設定可能です。

例として、ポジション1の買いエントリー条件を次のように設定します。

/// 1本前の足が EMA100 でサポートされているイメージ
ローソク足(時間足:チャートの足, 適用価格:安値, 計算位置:1本前) <=
移動平均線(計算期間:100, 移動平均線種類:EMA, 適用価格:終値, 計算位置:1本前)
AND
ローソク足(時間足:チャートの足, 適用価格:終値, 計算位置:1本前) >=
移動平均線(計算期間:100, 移動平均線種類:EMA, 適用価格:終値, 計算位置:1本前)

/// 現在足で終値が EMA13 を上抜け(ゴールデンクロス)
AND
ローソク足(時間足:チャートの足, 適用価格:終値, 計算位置:1本前) <=
移動平均線(計算期間:13, 移動平均線種類:EMA, 適用価格:終値, 計算位置:1本前)
AND
ローソク足(時間足:チャートの足, 適用価格:終値, 計算位置:0本前) >
移動平均線(計算期間:13, 移動平均線種類:EMA, 適用価格:終値, 計算位置:0本前)

↓
買いエントリー

ショートエントリーは、上記の「<=」「>=」「>」「<」を逆にして、
さらに「上ヒゲでレジスタンス」「終値が EMA13 を下抜け」と読み替えれば設定できます。

ここまでの「サポート→EMA13クロス」という流れは、
EAつくーるの取引条件機能だけで十分に近い形を再現できます。


2. EAつくーるだけでは難しい部分

問題になるのは次の2点です。

  1. 「EMA100で実体がサポートされた足」の安値を、SLの価格として自動で使うこと
  2. そのSLまでの距離を元に、「TPをSLと同じ距離(または倍数)」に自動計算すること

2-1. SL を「サポート足の安値」に置く

EAつくーるの「基本項目 → 損切り」は、
「エントリー価格から何pips」という“固定値”しか設定できません。

また、決済条件で

  • 最終エントリー足の価格
  • 一定期間の高値・安値

などを使うことはできますが、

  • 「エントリー条件でサポート判定に使った、あの足の安値」

という“特定の足”の値を、そのままSLにすることはできません。

そのため、画像のように「サポート足の安値ピッタリにSLを置く」
という動作を、EAつくーるの標準機能だけで完全に再現するのは難しいです。

現実的な代替案としては、

  • SL は「固定pips」または「ATRベース(オプションのトレーリングストップATR)」
    にしてしまう
  • 代わりに「EMA100を終値で割り込んだら決済」という決済条件を追加する

といった形が考えられます。

2-2. TP を「SL と同じ距離(または倍数)」に置く

同様に、TP も「基本項目 → 利食い」で固定pipsを入れる仕様です。

  • そのトレードごとに変わる SL(サポート足までの距離)を参照し、
  • その距離と同じ、あるいは 2倍・3倍の位置に TP を自動計算する

という機能は、EAつくーるにはありません。

こちらも代替案として、

  • 過去チャートを見て、「サポート足からエントリーまでの平均距離」をざっくり測り、
  • その平均値を基準に「損切り」と「利食い」を固定値で決める
    (例:損切り 30pips、利食い 30pips または 60pips)

という形で近似することになります。


3. どうしても図の通りの挙動にしたい場合(MQL での補足)

もし「必ずサポート足の安値にSL」「その距離に応じてTPを自動計算」という
完全な再現が必要な場合は、

  1. まず EAつくーるで、

    • エントリーロジック(サポート判定+EMA13クロス)
    • 損切り・利食いは「0」にしておく
      というシンプルなEAを作成し、
  2. 出力された mq4/mq5 ファイルを MT4/MT5 のエディタで開き、

  3. エントリー注文を出す部分に

    • 直近で EMA100 とローソク足実体が交差した足を探す処理
    • その足の安値(または高値)からSLを計算
    • SL距離から TP 価格を計算

といったロジックを MQL で追記する必要があります。

MQL編集は中級者以上向けになりますので、
まずは EAつくーるだけで組める「簡易版ロジック」で動きを確認し、
その後どうしても必要なら MQLでのカスタマイズを検討する、という流れがおすすめです。


まとめ

  • EMA13・EMA100 を使った「サポート → EMA13クロスでエントリー」の部分は、
    EAつくーるの取引条件で十分に近い形にできます。
  • ただし、「サポート足の安値にSL」「SL距離を元にTPを可変で設定」という
    ダイナミックなSL/TPは、EAつくーる単体では実装が難しく、
    固定pipsやEMA割れ決済などで代用する形になります。
  • 図の挙動を完全に再現したい場合は、EAつくーるでベースEAを作った上で、
    生成された mq4/mq5 をMQLで追記編集する必要があります。
GogoJungle
2025/12/24 17:44

※前回回答させていただいた内容につきまして、不正確な部分がございましたので、改めてご案内させていただきます。
今回の回答は、EAつくーるで作成したコードを改造する方法となっておりまして、弊社エンジニアの方で動作確認まで完了しております。


EAつくーるには特定の条件が成立したことを保存しておくフラグのような仕組みがなく、通常の方法では実現が難しいです。
そこで、コードを少し改造して実現する方法を考えてみましたので、提案させていただきます。

※説明がかなり長くなりますので、ロングのみについて紹介いたします。
ショートのロジックは、不等号の向き・安値と高値などを反対にしてご作成いただければと存じます。

方針
  • 「サポートされたか?」という状況を保存しておくフラグと、サポート時の安値を保存しておくための変数を用意します。
  • ティック毎にローソク足とEMA(100)の関係を確認し、もしEMA(100)よりもローソク足の安値が下になる瞬間があれば「サポートに失敗した」と判断し、フラグをfalseにします。(もちろん、元からフラグが立っていなかった場合はfalseのままです)
  • 1本前のEMA(100)よりも「1本前のローソク足の安値」が下、かつ1本前のローソク足の実体が1本前のEMA(100)よりも上にあり、さらに「2本前の終値」「その直前4本の安値」がすべてEMA(100)よりも上にある場合は、「上からEMA(100)にタッチした」と判断し、フラグをtrueにします。また同時にその時の安値を保存します。
  • フラグがtrueの状態で「1本前のEMA(13) > 1本前のEMA(100)」かつ「1本前の終値 > 1本前のEMA(13)」を満たした場合に買いエントリーします。同時にフラグをfalseにします。

※「1本前のEMA(13) > 1本前のEMA(100)」という条件は、ご質問時のご要望にはありませんでしたが、必要と判断し追加しています。

事前準備

EAつくーる上で次の条件でEAを作成し、ダウンロードしたコードをMetaEditorで開きます。

基本項目

SL/TPはともに0にしておきます。

フラグをリセットするのに使用する条件

※「買いエントリー」の部分を後で修正します。

1本前のEMA(100) > 1本前のローソク足の安値
↓
買いエントリー
フラグをtrueにする条件

※「買いエントリー」の部分を後で修正します。

1本前のEMA(100) > 1本前のローソク足の安値
AND
1本前のEMA(100) < 1本前の始値
AND 
1本前のEMA(100) < 1本前の終値
AND 
2本前のEMA(100) < 2本前の終値 ※これ以下は、「何本前まで考慮するか」「終値にするか安値にするか」などお好みでご設定ください
AND 
3本前のEMA(100) < 3本前の安値
AND 
4本前のEMA(100) < 4本前の安値
AND 
5本前のEMA(100) < 5本前の安値
AND 
6本前のEMA(100) < 6本前の安値
↓
買いエントリー
エントリーの条件

※以下に加えて「フラグがtrueであること」を後から追加します。

1本前の終値 > 1本前のEMA(13)
AND
1本前のEMA(13) > 1本前のEMA(100)
↓
買いエントリー
改造 フラグと変数の準備

【修正前】

bool Trade = true;

【修正後】

bool Trade = true;
bool flag_long = false; // フラグ
double price_long = 0; // 安値を保存しておく変数
フラグのリセット

【修正前】のコードのうち、「if(iMA(Symbol()~」の行の「signal = 1;」を「flag_long = false;」に変更し、それ以外の行は全て削除します。

【修正前】

   if(Trade == false) return;
   lots = Lots;
   take_profit = TakeProfit;
   stop_loss = StopLoss;
   signal = 0;
   if(iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 1)+PipsToPrice(0)  >  iLow(Symbol(), 0, 1)+PipsToPrice(0)) signal = 1;

   if(signal != 0 && getOpenLots(Magic1) == 0) {

      if(openPosition(signal, lots, take_profit, stop_loss, Magic1)) {
         bars1 = Bars;
      }
   }

【修正後】

if(iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 0)+PipsToPrice(0)  >  iLow(Symbol(), 0, 0)+PipsToPrice(0)) flag_long = false;
フラグをtrueにする処理

【修正前】のコードのうち、「if(iMA(Symbol()~」で始まる行を残して改造し、それ以外の行は全て削除します。

【修正前】

   lots = Lots;
   take_profit = TakeProfit;
   stop_loss = StopLoss;
   signal = 0;
   if(iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 1)+PipsToPrice(0)  >  iLow(Symbol(), 0, 1)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 1)+PipsToPrice(0)  <  iOpen(Symbol(), 0, 1)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 1)+PipsToPrice(0)  <  iClose(Symbol(), 0, 1)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 2)+PipsToPrice(0)  <  iClose(Symbol(), 0, 2)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 3)+PipsToPrice(0)  <  iLow(Symbol(), 0, 3)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 4)+PipsToPrice(0)  <  iLow(Symbol(), 0, 4)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 5)+PipsToPrice(0)  <  iLow(Symbol(), 0, 5)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 6)+PipsToPrice(0)  <  iLow(Symbol(), 0, 6)+PipsToPrice(0)) signal = 1;

   if(signal != 0 && getOpenLots(Magic1) == 0) {

      if(openPosition(signal, lots, take_profit, stop_loss, Magic1)) {
         bars1 = Bars;
      }
   }

【修正後】

   if(iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 1)+PipsToPrice(0)  >  iLow(Symbol(), 0, 1)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 1)+PipsToPrice(0)  <  iOpen(Symbol(), 0, 1)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 1)+PipsToPrice(0)  <  iClose(Symbol(), 0, 1)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 2)+PipsToPrice(0)  <  iClose(Symbol(), 0, 2)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 3)+PipsToPrice(0)  <  iLow(Symbol(), 0, 3)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 4)+PipsToPrice(0)  <  iLow(Symbol(), 0, 4)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 5)+PipsToPrice(0)  <  iLow(Symbol(), 0, 5)+PipsToPrice(0)
    && iMA(Symbol(), 0, 100, 0, MODE_EMA, PRICE_CLOSE, 6)+PipsToPrice(0)  <  iLow(Symbol(), 0, 6)+PipsToPrice(0)) {
      flag_long = true;
      price_long = iLow(Symbol(), 0, 0);
    }
エントリー

【修正前】のコードを【修正後】のコードに置き換えます。

【修正前】

   if(signal != 0 && getOpenLots(Magic1) == 0) {

      if(openPosition(signal, lots, take_profit, stop_loss, Magic1)) {
         bars1 = Bars;
      }
   }

【修正後】

   if(signal != 0 && getOpenLots(Magic1) == 0 && flag_long == true) {
      double new_stop_loss = PriceToPips(Ask - price_long); // エントリー価格からの距離を計算
      if (new_stop_loss > stop_loss) {
         stop_loss = new_stop_loss;
      }
      take_profit = stop_loss; // 必要ならここで倍率をかけます

      if(openPosition(signal, lots, take_profit, stop_loss, Magic1)) {
         bars1 = Bars;
         flag_long = false; // 決済直後に再エントリーしないようにフラグをリセット
      }
   }

以上でございます。
注意点といたしまして、現在のロジックでは「サポートされたと判定される=上からEMA(100)にタッチした」ローソク足の終値がEMA(13)を超えていた場合、次の足で即エントリーする動きになります。

フラグを立てる条件に「判定のタイミングでEMA(13)を下回っていること」を追加すると、より一層、ご提供いただいた画像に近い状況でエントリーできるかもしれません。

関連トピックス

検索結果がありません。

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

注目トピックス

検索結果がありません。