入門のタグを付けられた記事一覧

ねた募集!

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

メタトレーダーのプログラミングをメインにした、このブログをスタートして、1ヶ月半近くになりました。

色々うれしいコメントをいただいて、ありがたい限りです。

基本的な部分は、ほぼ終了かなと思っています。

後は、紹介していない関数などの使い方などがメインになると思います。

ですが、せっかくですので、みなさんからのリクエストを受け付けたいと思います。

このブログや本などを参考に、簡単なプログラムは組めるようになったけど、ちょっと難しいことをやろうとしてちょこっと挫折気味!!

どうしてもこの関数の使い方が分からない。

こんな方のリクエストを募集します。

MT4、MQL4に関することならなんでもOKです。

ただし、プログラムに関することだけです。

一応、プログラムを組めるようになるためのブログなので。。。

一応、初心者のための情報を載せておきます。

メタトレーダーの書籍としては、

これが、有名です。

というか、これしかありません。

本じゃないと分かりにくいという方は、購入をお勧めします。

ちょこっと知りたいという方は、本屋で立ち読みでもいいかもしれません。

でも、関数のリファレンス関係がほとんどありません。

このあたりは本家MQL4の英文ですが、日本語に直訳してくれているサイトがあります。

MT4使い倒シストレ

わたしもよく使っている大変ありがたいサイトです。

無料ですし。。。

でも、ちょっと直訳過ぎて分かりにくいところもあります。

ちょこっと高めですので買ってくださいとは言いませんが、こんなのもあります。

FX完全自動売買システム構築のための250の技 MetaTrader4逆引き大全集

有料だけあって、詳しく書かれています。

半額だったら、買ってくださいとおすすめできますが、ちょこっと高めですね。

気合いを入れて、やろうと思っているなら本を3冊買ったと思って手に入れてもいいかもしれません。

ということで、ネタ募集と入門書関係のお知らせでした。

タグ

インジケータの情報を取得する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(金、株など)対応

インジケータから、情報を取得することを考えたいと思います。

 

有料のインジケータを買った(右の広告みたいなところから)ときに、そのインジケータを元にEAを作りたくなった。

インジケータとインジケータを組み合わせたときのあるタイミングで、シグナルを出したい。

 

たぶん、こんなこと思う人が結構いると思います。

 

ということで、インジケータのデータは、どうやってみるか?

ということを考えてみます。

 

リクエストにもあったので、標準で付いてくるインジケータで「ZigZag」というので考えてみます。

まず、どこの通貨ペアでもいいので、「ZigZag」を張り付けてみてください。

ほかのインジケータを使っていない状態の方が、わかりやすいので「ZigZag」だけにしてください。

 

アップダウンが、ジグザグに表示されるおもしろいインジケータですね。

「ZigZag」はソースが付いていますが、わからないと仮定します。

 

データウィンドウを表示してください。

スコープみたいなアイコンをクリックするか、「Ctrl+D」で表示できます。

datawindow

こんな感じのものが表示されたはずです。

マウスカーソルの位置のデータが表示されて、大変便利です。

 

で、「ZigZag」のデータは、

ZigZag、Value2、Value3の3つです。

実際に、マウスを動かして、データがどうなっているか調べていきます。

 

調べていくと、ZigZagというところが、山と谷の位置でデータが入っていることがわかります。

ということは、表示されている線のデータですね。

Value2、Value3は、山と思わしき場所、谷と思わしき場所の値が入っています。

 

ZigZagの値が、線のデータでほかのデータも使えそうですね。

 

次は、プログラムでデータを取得してみます。

タグ

週末にまとめてクローズするEA

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

サンプルプログラムばかりであまり役に立っていないと思うので、ほしい人はほしいもの。

 

週末持ち越しは、いやだけどEAがポジション持ちっぱなしなんだよね!

という人のために、週末に強制的にクローズするEAです。

 

121証券のようにサーバが日本時間であることを前提に話します。

別の時間帯を採用しているFX会社と契約している方は、時間を調整してください。

 

EAを作ってみるを参考にEAを作ってください。

名前は、WeekendCloseとします。

 

パラメータは、ウィザードで設定してもらっても構いませんし、コードに以下のように指定してもらっても構いません。

extern int CloseWeek=6;

extern int CloseTime=5;

CloseWeekの6は、土曜日。

CloseTimeの5は、5時です。

 

曜日は、日曜日が0で、月曜日が1。

順番になっています。

 

まず、曜日と時刻をチェックする関数を追加します。

int ChkCloseTime()

{

    int ChkWeek=DayOfWeek();

    int ChkHour=Hour();

 

    if((ChkWeek==CloseWeek && ChkHour>=CloseTime))

    {

        return(1);

    }

    return(0);

}

 

曜日と時間を取得して、指定した曜日と時間以上なら、1を返します。

 

次に、チケット番号をクローズする関数を追加します。

 

void ClosingTicket(int CloseTicket)

{

    if(OrderSelect(CloseTicket, SELECT_BY_TICKET)==true)

    {

        if(OrderType() == OP_SELL || OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP)

        {

            // Closing

            if(OrderClose(OrderTicket(),OrderLots(),Ask,3,Green) == false)

            {

                OrderDelete(OrderTicket());

            }

        }

        else

        {

            // Closing

            if(OrderClose(OrderTicket(),OrderLots(),Bid,3,Green) == false)

            {

                OrderDelete(OrderTicket());

            }

        }

    }

}

 

指定された、チケットのオーダーをコントロールできるようにしてからクローズします。

クローズに失敗したときは、未確定の注文として注文の取り消しを行っています。

 

次に、実装部分を作ります。

 

int start()

  {

    if(ChkCloseTime() == 0) return(0);

 

    int total=OrdersTotal();

    int i;

    for(i=0;i < total;i++){

        if(OrderSelect(i, SELECT_BY_POS)==true)

        {

           ClosingTicket(OrderTicket());

        }

    }

 

   return(0);

  }

 

まず、終了時間かチェックします。

まだなら、そのまま関数を抜けます。

 

終了時間の場合は、現在もっているポジションを調べ、すべてのポジションをクローズしていきます。

 

サンプルを参考に改造して使ってみてください。

 

 

今回のプログラムは、以下からダウンロードできます。

ここから、ダウンロード

 

EA(自動売買)は、

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

に入れてください。

タグ

メール送信インジケータ

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(金、株など)対応

前回のちょっと賢いボリンジャーバンドインジケータをちょっと派手にしたいと思います。

 

前回のソースをそのまま使うので、今回からお読みの方は、前回を参考にソースを作成してください。

 

で、どのように派手にするかというと、アラートウィンドウを開き、音を鳴らします。

リクエストもあったので、今回の例で説明します。

 

アラートウィンドウと音を鳴らすタイミングは、ボリンジャーバンドを抜けたときに行います。

 

では、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){

            Alert(”BBUp Over:”,High[i]);

            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){

            Alert(”BBDown Over:”,Low[i]);

            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);

}

if(i == 0)でくくっているのは、過去のラインを描画するときにもメッセージや音が出てしまうためです。

新規にボリンジャーバンドを抜けたときだけ、処理を行います。

 

Alertは、アラートウィンドウを表示する関数で、引数はコメントと同じで「,」カンマ区切りで、文字や数値を連結できます。

PlaySoundは、音を出す命令で、引数にサウンドファイル名を指定します。

インストールパス\MetaTrader\sounds

に入っているファイルを指定できます。

 

これで、好きなときに音を出したりできますね。

 

色々挑戦してみてください。

タグ

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

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;

 

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

タグ

コメントについて

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

たくさんのコメントありがとうございます。

コメントにはすべて目を通していますが、基本的に回答は深夜になることが多くなります。

 

また、確認のタイミングによっては、1日以上かかってしまう場合もあるかもしれません。

 

なるべく早く回答を行いたいと思いますが、ご了承ください。

 

また、スパムや中傷など不適切と判断したコメントは、削除させていただく場合があります。

 

質問やリクエストは、歓迎ですのでどんどん書き込んでください。

答えられる範囲で、回答したり、記事として取り上げたりしていきたいと思います。

 

できれば、ランキングに参加しているのでポチッとクリックしていただけると助かります。

お買いもししていただけるともっとうれしいですが。。。

 

それでは、よろしくお願いします。

タグ

簡単インジケータ作成テンプレート

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

インジケータプログラムの楽しさを知ってもらうために、「簡単インジケータ作成テンプレート」を作成しました。

まず、ダウンロードしてください。

 

それでは、簡単に使い方を説明します。

 

indicator_temp.mq4

を作りたいインジケータ名に変更します。

 

今回は、サンプルでボリンジャーバンドを表示してみたいと思います。

ですので、ファイル名を「Bands_I.mq4」に変更してください。

 

リネームしたファイルを以下のフォルダーへコピーしてください。

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

 

では、メタトレーダーを起動して、メタエディターを起動してください。

ナビゲータウィンドウのFilesタブにindicatorsを開くと、ファイル一覧が表示されます。

ここに先ほどコピーした、「Bands_I.mq4」があるはずなので、ダブルクリックして開いてください。

 

下の方に、「DataSet」という関数があります。

このテンプレートでは、基本的にこの中だけをいじります。

 

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

 

void DataSet(int i)

{

   ExtMapBuffer1[i]=iBands(NULL,0,21,3,0,PRICE_CLOSE,MODE_UPPER,i);

   ExtMapBuffer2[i]=iBands(NULL,0,21,2,0,PRICE_CLOSE,MODE_UPPER,i);

   ExtMapBuffer3[i]=iBands(NULL,0,21,1,0,PRICE_CLOSE,MODE_UPPER,i);

   ExtMapBuffer4[i]=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,i);

   ExtMapBuffer5[i]=iBands(NULL,0,21,1,0,PRICE_CLOSE,MODE_LOWER,i);

   ExtMapBuffer6[i]=iBands(NULL,0,21,2,0,PRICE_CLOSE,MODE_LOWER,i);

   ExtMapBuffer7[i]=iBands(NULL,0,21,3,0,PRICE_CLOSE,MODE_LOWER,i);

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

}

 

ラインは、7本使うので最後の1行はコメントアウトしています。

ボリンジャーバンドの3θ、2θ、1θを上下1本ずつ、合計6本と中央に移動平均を引くので、合計7本です。

このように、メタトレーダー標準の関数の値を代入するだけで、お手軽にいろいろな線を引くことができるテンプレートとなっています。

標準では、メインウィンドウへ書きますので、現在のレートに近い値を代入しないと表示できません。

※範囲外になってしまうので。。。

もし、サブウィンドウに表示したいときは、
上の方にある
#property indicator_chart_window
//#property indicator_separate_window
//#property indicator_chart_window
#property indicator_separate_window

 

のようにコメントを変更してください。

ちなみに以下のように書き直すと、RSIが表示できます。

 

void DataSet(int i)
{
   ExtMapBuffer1[i]=iRSI(NULL,0,21,PRICE_CLOSE,i);
//   ExtMapBuffer2[i]=iMA(NULL,0,7,0,MODE_EMA,PRICE_WEIGHTED,i);
//   ExtMapBuffer3[i]=iMA(NULL,0,7,0,MODE_SMMA,PRICE_WEIGHTED,i);
//   ExtMapBuffer4[i]=iMA(NULL,0,7,0,MODE_LWMA,PRICE_WEIGHTED,i);
//   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);
}

 

このように、比較的簡単にいろいろな指標を表示できます。

次回から、このテンプレートを使って遊んでみたいと思います。

タグ

プログラムが組める自分を想像する

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

FXや株でも何でもそうですが、過去のデータを参考に投資を行うと思います。

自分なりに、相場がこうなるといい感じになりそうだから買おう、とかルールを決めている人が多いと思います。

 

というか、ルールを決めないとほとんどギャンブルになっちゃうので、決めましょうね。

 

で、このルールを見つけるのが大変ですよね。

私も日々、見つけようと努力しています。

 

グラフなどをみて、この線を組み合わせるといいかもしれない!

と思ったら、過去にどうなっているか調べるわけです。

 

ここからが、プログラムを組める人と組めない人の差が開きます。

 

組めない人は、グラフとにらめっこして、ここでは増えた、ここではダメ。

とかすべて、見ていかなければなりません。

その上、パラメータをいじってみたら、もう一度同じことを繰り返す必要があります。

 

大変ですよね。

たぶん、ルールを見つける作業がいやになるのは、この辺ではないかと。。。

 

逆にプログラムを組める人は、最初にルールを元にしたプログラムを組みます。

後は、解析結果を待つだけです。

バックテストで、パラメータを変えながら最適な結果を見つける方法も説明しました。

 

1度組んでしまえば、解析まで自動でできます。

 

まあ、プログラムを組むのが面倒なんですがね。

 

プログラムを組める場合と組めない場合では、どちらが有利か説明するまでも無いと思います。

 

いままで、いろいろなサンプルで説明してきましたが、難しいと思う人も多いかと思います。

 

でも、行数を見てください。

 

100行ぐらいで、できているはずです。

たった100行ですよ。

 

これで、それなりのものができてしまうんです。

少し頑張ればできそうな気がしませんか?

 

メタトレーダーのプログラムは、ウィンドウズのプログラムを書こうと思うより、はるかに楽です。

 

よく考えてください。

やることは、値の比較だけ。

やっても何か特殊な計算をするぐらいですよね。

たくさんの指標を計算する関数がMT4には用意されているので、オリジナルで作ることは少ないと思います。

 

だから、指標の組み合わせと比較だけです。

 

全く目的が違うんです。

 

だから複雑なことをやらせないので、短いステップ数で完成することが多いんです。

 

いくつか、自分で組んでみると分かると思います。

まずは、まねから始めてみませんか?

 

覚えることは、

  1. 変数の宣言
  2. if文
  3. for文
  4. 標準で用意されている関数の呼び方

 

この4つをマスターすれば、あらかた組めますのでチャレンジしてみましょう。

4の標準で用意されている関数は、基本的に覚える必要はありません。

使いたいときに探して、目的のものがあれば使う。

無ければ計算で求めるだけです。

 

単純に考えましょう。

 

では、頑張ってください。

タグ