テンプレートのタグを付けられた記事一覧

インジケータの情報を取得する2

4XP => メタトレーダー対応、固定スプレッド、最小1000通貨
50種類以上の通貨ペア、各種CFD(金、株など)対応

前回に引き続き、「ZigZag」インジケータを利用します。

この「ZigZag」インジケータをつかって、別のインジケータを作ってみましょう。

簡単インジケータ作成テンプレート」を使ったサンプルを作ってみます。

テンプレートを適当なファイル名にコピーして、

インストールパス\MetaTrader\experts\indicators

に入れてください。

コピーした、テンプレートのinit()を以下のように修正してください。

int init()

{

//—- indicators

SetIndexStyle(0,DRAW_ARROW, EMPTY, 4);

SetIndexArrow(0,159);

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexStyle(1,DRAW_ARROW, EMPTY, 2);

SetIndexBuffer(1,ExtMapBuffer2);

SetIndexStyle(2,DRAW_ARROW, EMPTY, 2);

SetIndexBuffer(2,ExtMapBuffer3);

//—-

return(0);

}

次は、DataSet()を以下のように修正してください。

void DataSet(int i)

{

ExtMapBuffer1[i]=iCustom(NULL, 0, “ZigZag”,12,5,3,0,i);

ExtMapBuffer2[i]=iCustom(NULL, 0, “ZigZag”,12,5,3,1,i);

ExtMapBuffer3[i]=iCustom(NULL, 0, “ZigZag”,12,5,3,2,i);

}

これで終了です。

今回注目する点は、

iCustom(NULL, 0, “ZigZag”,12,5,3,2,i);

インターフェース仕様は、

double iCustom( string symbol, int timeframe, string name, …, int mode, int shift)

で、symbolにNULLを入れることで、今利用している通貨ペアを使用します。

timeframeに0を入れことで、今利用している通貨ペアの時間軸を使います。

nameは、利用したいインジケータ名「ZigZag」。

ファイル名の拡張子をのぞいた名前を使います。

問題は、次の

ここは、利用元のインジケータのパラメータを入れます。

「ZigZag」は、3つパラメータがあるので、3つ。

12,5,3

を指定しています。

利用元のインジケータのパラメータが0なら0、20なら20。

引数が可変になるので、分かりにくいところです。

modeは、何番目のバッファから取得するか。

shiftは、何番目の足の情報を取得するかです。

パラメータ設定部分が、わかりにくいので注意してくださいね。

コンパイルして、動かすと元々線が出ていた場所は、赤丸。

バッファ1が青い×。

バッファ2が緑の×。

が表示されるはずです。

この方法は、いろいろなインジケータから情報を取得できるので、おもしろいことができると思います。


タグ

メール送信インジケータ

4XP => メタトレーダー対応、固定スプレッド、最小1000通貨
50種類以上の通貨ペア、各種CFD(金、株など)対応

前回のインジケータを派手にするで、アラートウィンドウを開いたり、音を鳴らしたりしました。

今回は、メールを送信してみたいと思います。

ですが、メールの設定は結構めんどうなので、簡単にユーザを作れるYahooメールを例に設定を説明します。

とりあえず、Yahooメールと契約してください。

で、メール設定に「POPアクセスとメール転送」があります。

「ブラウザアクセスとPOPアクセス」にチェックを入れて、設定してください。

これで、Yahooメールの設定は終了です。

次は、メタトレーダーの設定です。

メニューのツール-オプションを開いてください。

「E-メール」タブで、

「有効にする」にチェックを入れます。

SMTPサーバー:「smtp.mail.yahoo.jpsmtp.mail.yahoo.co.jp:587」

SMTPログインID:「YahooのユーザID」

SMTPパスワード:「Yahooのパスワード」

発信元:「ユーザID@yahoo.co.jp」

送信先:「送信したいメールアドレス」

これを入力して、「Test」ボタンを押してください。

テストメールが送信されれば、設定OKです。

では、プログラムの方に行ってみましょう。

前回のソースを使います。

ここから、読み始めた人は、前回のインジケータを派手にするを見てくださいね。

では、DataSetを以下のように書き換えてください。

void DataSet(int i)

{

double dBBUp = iBands(NULL,0,Param1,2,0,PRICE_CLOSE,MODE_UPPER,i);

double dBBDown = iBands(NULL,0,Param1,2,0,PRICE_CLOSE,MODE_LOWER,i);

if(dBBUp < High[i])

{

ExtMapBuffer1[i]=dBBUp;

if(ExtMapBuffer1[i+1] == EMPTY_VALUE)

{

if(i == 0){

SendMail(”Test BB” , “BBUp Over:” + DoubleToStr(High[i],Digits));

PlaySound(”alert.wav”);

}

ExtMapBuffer1[i+1] = ExtMapBuffer2[i+1];

}

}

else

{

ExtMapBuffer2[i]=dBBUp;

if(ExtMapBuffer2[i+1] == EMPTY_VALUE)ExtMapBuffer2[i+1] = ExtMapBuffer1[i+1];

}

if(dBBDown > Low[i])

{

ExtMapBuffer3[i]=dBBDown;

if(ExtMapBuffer3[i+1] == EMPTY_VALUE)

{

if(i == 0){

SendMail(”Test BB” , “BBDown Over:” + DoubleToStr(Low[i],Digits));

PlaySound(”alert.wav”);

}

ExtMapBuffer3[i+1] = ExtMapBuffer4[i+1];

}

}

else

{

ExtMapBuffer4[i]=dBBDown;

if(ExtMapBuffer4[i+1] == EMPTY_VALUE)ExtMapBuffer4[i+1] = ExtMapBuffer3[i+1];

}

//   ExtMapBuffer5[i]=iMA(NULL,0,14,0,MODE_SMA,PRICE_WEIGHTED,i);

//   ExtMapBuffer6[i]=iMA(NULL,0,14,0,MODE_EMA,PRICE_WEIGHTED,i);

//   ExtMapBuffer7[i]=iMA(NULL,0,14,0,MODE_SMMA,PRICE_WEIGHTED,i);

//   ExtMapBuffer8[i]=iMA(NULL,0,14,0,MODE_LWMA,PRICE_WEIGHTED,i);

}

今回は、前回のアラートウィンドウの代わりにメール送信を行います。

SendMail(タイトル,本文);

を使います。

DoubleToStr(High[i],Digits)

で、High[i]の数字を文字型に変更しています。

DoubleToStr(double型の変数,有効小数点桁数)

Digitsは、現在の通貨ペアの小数点桁数を表します。

ということで、ボリンジャーバンドにタッチしたときの高値か安値をメールで送信するプログラムのできあがりです。

いままで、数回同じようなネタで行いましたが、結構簡単にいろいろなことができることが分かったと思います。

小難しいことを知らなくても意外と何とかなるでしょ!

では、また次回。

→この記事の続きを読む

タグ

ちょっと賢いボリンジャーバンドインジケータ

4XP => メタトレーダー対応、固定スプレッド、最小1000通貨
50種類以上の通貨ペア、各種CFD(金、株など)対応

前回に引き続き、「簡単インジケータ作成テンプレート」を使ったサンプルを作ってみます。

今回もボリンジャーバンドを利用します。

 

ボリンジャーバンドにタッチしたら、売ったり買ったりすることが結構あると思います。

でも、本当にタッチしているかどうか分かりにくいですよね。

なので、タッチしているときだけ色を変えるようなインジケータを作ってみます。

 

まだ、テンプレートをダウンロードしていない人は、「簡単インジケータ作成テンプレート」からダウンロードしてください。

 

indicator_temp.mq4をコピーして、適当な名前にしてください。

例として、BB_I.mq4とします。

このファイルは、

インストールパス\MetaTrader\experts\indicators

に入れてくださいね。

 

いつものようにメタトレーダーを起動して、メタエディターを開いてください。

そこで、先ほど作ったBB_I.mq4を開きます。

 

変更する場所は、一番下の関数

DataSetだけです。

 

以下のように修正してみてください。

 

void DataSet(int i)

{

   double dBBUp = iBands(NULL,0,Param1,2,0,PRICE_CLOSE,MODE_UPPER,i);

   double dBBDown = iBands(NULL,0,Param1,2,0,PRICE_CLOSE,MODE_LOWER,i);

   if(dBBUp < High[i])

   {

      ExtMapBuffer1[i]=dBBUp;

   }

   else

   {

      ExtMapBuffer2[i]=dBBUp;

   }

   if(dBBDown > Low[i])

   {

      ExtMapBuffer3[i]=dBBDown;

   }

   else

   {

      ExtMapBuffer4[i]=dBBDown;

   }

//   ExtMapBuffer5[i]=iMA(NULL,0,14,0,MODE_SMA,PRICE_WEIGHTED,i);

//   ExtMapBuffer6[i]=iMA(NULL,0,14,0,MODE_EMA,PRICE_WEIGHTED,i);

//   ExtMapBuffer7[i]=iMA(NULL,0,14,0,MODE_SMMA,PRICE_WEIGHTED,i);

//   ExtMapBuffer8[i]=iMA(NULL,0,14,0,MODE_LWMA,PRICE_WEIGHTED,i);

}

今回は、上下2色使うので、上側にExtMapBuffer1、ExtMapBuffer2

下側に、ExtMapBuffer3、ExtMapBuffer4を割り当てます。

ボリンジャーバンドの上側のラインより高値が高い場合に、ExtMapBuffer1に値をセット。

低い場合に、ExtMapBuffer2にセットします。

下側も同様にセットしています。

 

ボリンジャーバンドで利用する足の数を変えられるように、Param1を使いました。

 

コンパイルして、描画させたいグラフにドロップしてみてください。

Param1は0になっているので、21とか適当な値にしてください。

線の太さや色もパラメータで設定できますので、いじってみてくださいね。

 

表示させた結果、ちゃんと色が変わっているのが分かりましたか?

 

 

でも、なんか線が飛んでいませんか?

データを入れていないところは、デフォルトでEMPTY_VALUEという描画しない値が、入っています。

ちょうど、書き始めに値が入っていないため抜けているんですね。

 

というわけで、ちょっと気持ち悪いので、たりない情報を別のバッファからもらうように修正してみます。

 

void DataSet(int i)

{

   double dBBUp = iBands(NULL,0,Param1,2,0,PRICE_CLOSE,MODE_UPPER,i);

   double dBBDown = iBands(NULL,0,Param1,2,0,PRICE_CLOSE,MODE_LOWER,i);

   if(dBBUp < High[i])

   {

      ExtMapBuffer1[i]=dBBUp;

      if(ExtMapBuffer1[i+1] == EMPTY_VALUE)ExtMapBuffer1[i+1] = ExtMapBuffer2[i+1];

   }

   else

   {

      ExtMapBuffer2[i]=dBBUp;

      if(ExtMapBuffer2[i+1] == EMPTY_VALUE)ExtMapBuffer2[i+1] = ExtMapBuffer1[i+1];

   }

   if(dBBDown > Low[i])

   {

      ExtMapBuffer3[i]=dBBDown;

      if(ExtMapBuffer3[i+1] == EMPTY_VALUE)ExtMapBuffer3[i+1] = ExtMapBuffer4[i+1];

   }

   else

   {

      ExtMapBuffer4[i]=dBBDown;

      if(ExtMapBuffer4[i+1] == EMPTY_VALUE)ExtMapBuffer4[i+1] = ExtMapBuffer3[i+1];

   }

//   ExtMapBuffer5[i]=iMA(NULL,0,14,0,MODE_SMA,PRICE_WEIGHTED,i);

//   ExtMapBuffer6[i]=iMA(NULL,0,14,0,MODE_EMA,PRICE_WEIGHTED,i);

//   ExtMapBuffer7[i]=iMA(NULL,0,14,0,MODE_SMMA,PRICE_WEIGHTED,i);

//   ExtMapBuffer8[i]=iMA(NULL,0,14,0,MODE_LWMA,PRICE_WEIGHTED,i);

}

これで、試してみてください。

うまくいったでしょ。

ちなみにコンパイルするとパラメータの設定が初期化されてしまいます。

 

気になる人は、上の方の

#property indicator_color1 Red

#property indicator_color2 Blue

#property indicator_color3 Green

#property indicator_color4 Yellow

extern int Param1=0;

 

の値を変えてみてくださいね。

タグ