見出し画像

【MQL4/MT4】EMAゴールデンクロスサインインジケーター ソースコード無料公開

今日は、EMAの12本と26本を使ったクロスポイントにサイン矢印を付与したインジケーターを公開します。


■EMA01 インジケーター

▶動作サンプル画像

はじめは「大循環MACD」のインジケーターを作っていたんですが、大循環MACDを構成する部品の5つのうちの2つ、「EMA2本」だけでも結構エントリーに最適なポイントを図示してくれるなと思って、まずは今回それだけを公開することにします。

別記事で、さらに3つのインジケーターを同梱したサインツールを作って、合せ技で「大循環MADC」を成立させるものを公開する予定です。
ただ、今回のツールだけで結構面白いトレード手法を確立できるんじゃないかと思っているので、ぜひ活用してみてください。

実際は矢印がある場所でエントリーできるわけではなく、その矢印が示すローソク足でエントリーになるので、レンジ相場の勝率はトントンか、スプレッド分損してしまいますが、トレンド相場ではかなり価値がでてくるかと思います。

▶エントリーポイント

  • 上矢印を付けたゴールデンクロスで買いエントリー

  • 下矢印を付けたデッドクロスで売りエントリー

▶決済ポイント

逆にクロスした場合に手仕舞い

▶設定内容

短期は12本、長期は26本を標準にしています。

▶ダウンロード

以下から実行ファイル(ex4)とソースコード(mq4)をダウンロード頂けます。

▶ソースコード

ソースコードの中身はこちらです。

#property copyright   "2024-2025, Hiromax."
#property link        "https://note.com/hiro_max"
#property description "Hiromx Indicator EMA 01"
#property strict

#property indicator_chart_window
#property indicator_buffers 4

input int Term1 = 12;        //EMA:短期 期間設定値
input int Term2 = 26;        //EMA:長期 期間設定値
input int Shift = 0;        //EMA:シフト

double     Buf1[];
double     Buf2[];
double     DrawDot1[];
double     DrawDot2[];

int OnInit(void)
  {
   SetIndexBuffer(0, Buf1);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,LightSeaGreen);

   SetIndexBuffer(1, Buf2);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,Red);

   SetIndexBuffer(2,DrawDot1);  
   SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID,3,Cyan);
   SetIndexArrow(2,233);

   SetIndexBuffer(3,DrawDot2);  
   SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID,3,Pink);
   SetIndexArrow(3,234);

   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int counted_bars=IndicatorCounted();
   int limit = Bars - counted_bars - 1;

   double ma1x = 0;
   double ma2x = 0;

   for(int i=0; i<limit; i++)
   {
      double ma1 = iMA(Symbol(), Period(), Term1, Shift, MODE_EMA, PRICE_CLOSE, i);
      double ma2 = iMA(Symbol(), Period(), Term2, Shift, MODE_EMA, PRICE_CLOSE, i);

      Buf1[i] = ma1;
      Buf2[i] = ma2;

      if(ma1x != 0){
         if((ma1x >= ma2x) && (ma1 <  ma2)){
           DrawDot1[i] = ma1;
         }
         if((ma1x <  ma2x) && (ma1 >= ma2)){
           DrawDot2[i] = ma2;
         }
      }
      
      ma1x = ma1;
      ma2x = ma2;
   }
   return(rates_total);
  }

一つ前のEMAのそれぞれの値「ma1x」「ma2x」の位置関係と、今のEMAのそれぞれの値「ma1」「ma2」が逆になった時にサイン(矢印)を表示するというロジックになっています。

      if(ma1x != 0){
         if((ma1x >= ma2x) && (ma1 <  ma2)){
           DrawDot1[i] = ma1;
         }
         if((ma1x <  ma2x) && (ma1 >= ma2)){
           DrawDot2[i] = ma2;
         }
      }

このままEAもすぐ作れそうなので、次回かその次ぐらいに作りますね!お楽しみに!

■編集後記

全然話は変わるんですが、
別で有料で販売しているMT4画像通知のソースコードを買ってくれた方から連絡があって、私が作ったDiscordの画像通知ロジックが動かなくなっていることが判明しました。

確認したところ、画像を登録するための外部のAPIが使えなくなっていたことが分かったため、所有サーバーの一つでAPIを稼働させることで事なきを得ました。ソースコードは正常可動版に差し替え完了できました。焦りましたが、すぐ対応できて良かったです。

ということで、そういったサポートもさせて頂きつつ、引き続き、毎日1記事!・・ができてないのですが・・・その意気込みでw、コード書いて意欲的に記事アップしていきます。さらに加速して収益化に繋がるコードを日々探求していくので、有益記事を見逃さないようフォローとスキボタン押しといてください!

ということで、最後までお読み頂いてありがとうございました。
それではまた!


いいなと思ったら応援しよう!