自分の力でテクニカルインジケータを作成できるようになると、
相場分析能力が格段に向上します。

「これをこうしたらこういう結果になった。」

「では次にこうしたらどうなるのだろう???」

という具合に次から次へと探究心が湧いてきて、いろいろやってみたくなって止まらなくなります。

簡単で良いので矢印サインを出すインジケータのMQ4
ソースファイルファイルを入手して、いろいろと試してみることをお勧めいたします。

MQ4ソースファイルは以下のサイトや海外のサイトでもたくさん配布されています。

http://www.abysse.co.jp/mt4/

ダウンロードしたファイルは
「ファイル」→「データフォルダを開く」とやったところの
MQL4/Indicatorsフォルダに保存し、一度再起動します。

そのあとMetaEditorを起動します。MT4の上部のメニューアイコンの「自動売買」と書かれているアイコンの左側に
あるオレンジ色のアイコンをクリックすると起動します。
今回は
ADX Crossing v.2.0.mq4を題材にしてやってみようと思います。

//+------------------------------------------------------------------+
//| ADX Crossing.mq4 
//| Amir
//+------------------------------------------------------------------+
#property  copyright "Author - Amir"

#property indicator_chart_window //チャートウインドに矢印を出すことを宣言
#property indicator_buffers 2   //矢印サインを上下で2つ使う
#property indicator_color1 Lime //矢印の色の設定  ライム色
#property indicator_color2 Red //矢印の色の設定  赤色

//---- input parameters
extern int ADXbars=50; //外部入力パラメータ  パラメータ設定画面に出てくるパラメータ
extern int CountBars=350;
extern bool UseSound = True;
extern string SoundFile = "wait.waw";    

//---- buffers
double val1[]; //上矢印に使うバッファー
double val2[]; //下矢印に使うバッファー
double b4plusdi,nowplusdi,b4minusdi,nowminusdi;  //変数の宣言
bool SoundBuy = False;
bool SoundSell = False;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() //初期化ルーチン 起動時に1回だけしか実行されない
  {
   string short_name;
//---- indicator line
   IndicatorBuffers(2);  //矢印バッファーの数の宣言 決まり文句
   SetIndexStyle(0,DRAW_ARROW); //矢印バッファーのタイプの宣言 決まり文句
   SetIndexArrow(0,108); //矢印の形状宣言数字で設定 決まり文句
   SetIndexStyle(1,DRAW_ARROW);//矢印バッファーのタイプの宣言 決まり文句
   SetIndexArrow(1,108);//矢印の形状宣言数字で設定 決まり文句
   SetIndexBuffer(0,val1);// 決まり文句
   SetIndexBuffer(1,val2);// 決まり文句
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2                                            |
//+------------------------------------------------------------------+
int start()  //ティックが入る度に実行される処理
  {   
   if (CountBars>=Bars) CountBars=Bars;
   SetIndexDrawBegin(0,Bars-CountBars);
   SetIndexDrawBegin(1,Bars-CountBars);
   int i,shift,limit,CountedBars = IndicatorCounted();
   
if (CountedBars < 1)
   {
    for (i=0; i<=CountBars; i++) {val1[i] = 0.0; val2[i] = 0.0;}
   }    
   
if(CountedBars > 0) CountedBars--;
limit = Bars - CountedBars;   

for (shift = limit; shift>=0; shift--) 
b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift+1);//1本前の+DIの値
nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);//現在の+DIの値
b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift+1);//1本前の-DIの値
nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);//現在の-DIの値
 
if (b4plusdi<b4minusdi && nowplusdi>nowminusdi)//+DIが-DIとクロスして+DIが上になったことを示す
{
val1[shift]=Low[shift]-5*Point;  //上矢印を出すところ
}
if (b4plusdi>b4minusdi && nowplusdi<nowminusdi)//+DIが-DIとクロスして-DIが上になったことを示す
 
{
val2[shift]=High[shift]+5*Point; //下矢印を出すところ
}


}
if (val1[0] != EMPTY_VALUE && val1[0] != 0 && SoundBuy) //音声アラートを出す処理 上
  {
   SoundBuy = False;
   if (UseSound) PlaySound (SoundFile);
  } 
if (!SoundBuy && (val1[0] == EMPTY_VALUE || val1[0] == 0)) SoundBuy = True;  
  
if (val2[0] != EMPTY_VALUE && val2[0] != 0 && SoundSell)//音声アラートを出す処理 下 
  {
   SoundSell = False;
   if (UseSound) PlaySound (SoundFile);
  } 
if (!SoundSell && (val2[0] == EMPTY_VALUE || val2[0] == 0)) SoundSell = True;  
     
return(0);
}
//+------------------------------------------------------------------+

自分でインジケータを作れるようになってくるとだんだん楽しくなってきますので、どんどん上達します。

頑張って作れるようになりましょう!


ブログ記事、動画を見た感想、質問・相談・疑問点など受け付けています。


ブログ右上の「まっさんへのメール」から何でもいいので

お気軽に送ってください。

あなた様からのメールをお待ちしております。 

あなた様からのメールは動画のネタにしてしまうこともあるので、

ネタにして欲しくない場合はその旨メールにご記載ください。