インジケーターのタグを付けられた記事一覧

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

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の標準で用意されている関数は、基本的に覚える必要はありません。

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

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

 

単純に考えましょう。

 

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

タグ

トレンドラインを書いてみる3

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

さて、前回と前々回で、トレンドラインを書くプログラムの基本とプログラムを書くときに気をつけたほうがいいことを書きました。

 

今回は、トレンドラインの総仕上げとして、ループ回数を最小にして、好きな本数のトレンドラインを書くインジケータを作成します。

少々、難易度が上がりますが、がんばってついてきてください。

 

トレンドラインを書いてみるを参考にインジケータのスケルトンを作成してください。

前回のソースにそのまま上書きでもかまいません。

 

まず、前半の定義部分です。

#property indicator_chart_window
extern int nPeriod=9;
extern int Limit=350;
extern int nLine=3;

nLineを追加しました。

これは、トレンドラインの数です。

デフォルトでは、3本ずつ書きます。

 

初期化部分です。

int init()
{
    int i;
    for(i=0;i<nLine;i++)
    {
        ObjectCreate(”Trend DN-”+i,OBJ_TREND,0,0,0,0,0);
        ObjectSet(”Trend DN-”+i,OBJPROP_COLOR,Maroon);
        ObjectSet(”Trend DN-”+i,OBJPROP_WIDTH,3);

        ObjectCreate(”Trend UP-”+i,OBJ_TREND,0,0,0,0,0);
        ObjectSet(”Trend UP-”+i,OBJPROP_COLOR,Green);
        ObjectSet(”Trend UP-”+i,OBJPROP_WIDTH,3);
    }

   return(0);
}

 

オブジェクトの作成ですが、前回と違って指定した数だけ作る必要があるため、ループをまわして指定した数のトレンドラインを書くためのオブジェクトを作成します。

名前が、「Trend UP-0″」など固定でしたが、数にあわせて名前を変更したいので、「Trend UP-”+i」としてループの値を名前に追加するように変更しました。

また、線が細くて見にくかったので、今回は少し太く描画させて見ます。

ObjectSet(”Trend DN-”+i,OBJPROP_WIDTH,3);

の部分で、線の幅をデフォルトの1ポイントから3ポイントに広げます。

 

次は、終了処理です。

int deinit()
{
    int i;
    for(i=0;i<nLine;i++)
    {
        ObjectDelete(”Trend UP-”+i);
        ObjectDelete(”Trend DN-”+i);
    }
   return(0);
}

初期処理と同じく、指定された数分だけ削除するようにループしています。

 

次は、本題のメイン処理です。

int start()
{

//今回は、線の数が分からないので、配列を使います。
//まず、空の配列を用意します。
//固定で指定する場合は、double r[10];の様に数字を指定します。
    double r[];
    int rt[];
    double s[];
    int st[];

//配列に必要な入れ物を指定した数だけ用意します。
//はじめと終わりの入れ物が必要なので、実際の線の数より1つ多い数を指定します。
    ArrayResize(r,nLine+1);
    ArrayResize(rt,nLine+1);
    ArrayResize(s,nLine+1);
    ArrayResize(st,nLine+1);

    int nCurBar;
    int ChkRLine=0;
    int ChkSLine=0;

    if(Bars<Limit) Limit=Bars-nPeriod;

//前回とは逆に最新のものから指定本数までループをまわします。
    for(nCurBar=0; nCurBar<Limit; nCurBar++)
    {

//一番低い谷を見つけます。
        if(Low[nCurBar+(nPeriod-1)/2] == Low[iLowest(NULL,0,MODE_LOW,nPeriod,nCurBar)])
        {
//値が1つだけでは線を引けないので、配列に代入だけします。
            if(ChkSLine==0)
            {
                s[ChkSLine]=Low[nCurBar+(nPeriod-1)/2];
                st[ChkSLine]=nCurBar+(nPeriod-1)/2;
                ChkSLine++;
            }
//2本目の値で、1つ目の値より小さい場合描画します。
            else if(s[ChkSLine-1] < Low[nCurBar+(nPeriod-1)/2] && ChkSLine <= nLine)
            {
//値の代入を行い
                s[ChkSLine]=Low[nCurBar+(nPeriod-1)/2];
                st[ChkSLine]=nCurBar+(nPeriod-1)/2;
//描画させます。
                ObjectMove(”Trend DN-”+(ChkSLine-1),1,Time[st[ChkSLine-1]],s[ChkSLine-1]);
                ObjectMove(”Trend DN-”+(ChkSLine-1),0,Time[st[ChkSLine]],s[ChkSLine]);
//ラインを1つ進めます。
                ChkSLine++;
            }
//もし、1つ前より小さい値が見つかったときに値を入れ替えます。
            else if(s[ChkSLine-1] > Low[nCurBar+(nPeriod-1)/2] && ChkSLine <= nLine)
            {
                s[ChkSLine-1]=Low[nCurBar+(nPeriod-1)/2];
                st[ChkSLine-1]=nCurBar+(nPeriod-1)/2;
            }
        }


//谷と同様に山を見つけます。
        if(High[nCurBar+(nPeriod-1)/2] == High[iHighest(NULL,0,MODE_HIGH,nPeriod,nCurBar)])
        {
            if(ChkRLine==0)
            {
                r[ChkRLine]=High[nCurBar+(nPeriod-1)/2];
                rt[ChkRLine]=nCurBar+(nPeriod-1)/2;
                ChkRLine++;
            }
            else if(r[ChkRLine-1] > High[nCurBar+(nPeriod-1)/2] && ChkRLine <= nLine)
            {
                r[ChkRLine]=High[nCurBar+(nPeriod-1)/2];
                rt[ChkRLine]=nCurBar+(nPeriod-1)/2;
                ObjectMove(”Trend UP-”+(ChkRLine-1),1,Time[rt[ChkRLine-1]],r[ChkRLine-1]);
                ObjectMove(”Trend UP-”+(ChkRLine-1),0,Time[rt[ChkRLine]],r[ChkRLine]);
                ChkRLine++;
            }
            else if(r[ChkRLine-1] < High[nCurBar+(nPeriod-1)/2] && ChkRLine <= nLine)
            {
                r[ChkRLine-1]=High[nCurBar+(nPeriod-1)/2];
                rt[ChkRLine-1]=nCurBar+(nPeriod-1)/2;
            }
        }

//上昇・下降ともに指定本数見つかった場合、ループを抜けます。
        if(ChkSLine > nLine && ChkRLine > nLine)break;
    }

   return(0);
}

 

メイン処理は、ループの中に納まっていて、必要な本数が見つかった後、breakで抜けいていることが分かると思います。

必要な数だけ、ループをまわすようにして負荷を抑えています。

値は、配列に格納しています。

本当は、配列に代入しなくても描画だけなら可能です。

ですが、今後の拡張のために値を残しておくようにしました。

値を残しておくことで、いろいろ拡張できると思います。

 

値の格納も1つ目の変数への格納と、条件を満たした場合に次の配列へ格納すること、一度格納した配列より大きい・小さい値の場合入れ替える処理を追加してあります。

 

少々複雑になりましたが、コンパクトにまとまっていると思います。

 

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

 

インジケータは、

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

に入れてください。

タグ

トレンドラインを書いてみる

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

前回は、インジケーターを作ってみるで足に対応したバッファに代入することで、メタトレーダーの機能を使いグラフを自動的に描画方法を試してみました。

今回は、オブジェクトという機能を使い好きな場所に線や文字などを描画する方法を試してみます。

 

で、単純に線を書いてもおもしろくないのでトレンドラインを書いてみたいと思います。

 

トレンドとは、上下に動きながら移動している為替も平均してみると上昇していたり、下降しているときがあります。

こうした状態をトレンド相場と呼びます。

平均した線が横ばいの場合は、レンジ相場と呼びます。

 

為替は、上昇トレンド、下降トレンド、レンジ相場の3種類のどれかの状態になっています。

 

このトレンドを表す線をトレンドラインと呼びます。

上昇トレンドラインは、上下に動いている山の高値と高値を結んだ線。

下降トレンドラインは、谷の安値と安値を結んだ線のことをいいます。

 

このトレンドラインをインジケーターの機能を使って、描画したいと思います。

 

インジケーターを作ってみるを参考にスケルトンを作ります。

Nameを「TrendLine」。

その他は、何も入力しません。

 

まずは、TrendLineのスケルトンを作成してください。

 

まず、前半の宣言部分を作成します。

//メインウィンドウに描画します。

#property indicator_chart_window

//山と谷を見つける幅をパラメータとして指定します。

extern int nPeriod=9;

//先頭から何本まで山、谷を見つけるかパラメータとして指定します。

extern int Limit=350;

 

次は、初期化処理です。

int init()

{

//下降トレンドライン0番目のオブジェクトを作ります。

    ObjectCreate(”Trend DN-0″,OBJ_TREND,0,0,0,0,0);

//下降トレンドライン0番目のオブジェクトの色を指定します。

    ObjectSet(”Trend DN-0″,OBJPROP_COLOR,Maroon);

 

//上昇トレンド0番目のラインオブジェクトを作成します。

    ObjectCreate(”Trend UP-0″,OBJ_TREND,0,0,0,0,0);

    ObjectSet(”Trend UP-0″,OBJPROP_COLOR,Green);

 

   return(0);

}

上昇、下降用のトレンドラインを引くためのオブジェクトを用意しました。

次は、終了処理です。

int deinit()
{
//オブジェクトを削除します。
    ObjectDelete(”Trend UP-0″);
    ObjectDelete(”Trend DN-0″);
   return(0);
}

 

インジケータを削除したときに、オブジェクトが残ってしまいます。

そのために、インジケータ終了時に自分が作ったオブジェクトを削除する処理を追加します。

次は、トレンドラインを描画するための山、谷を見つけラインを引く処理です。

 

int start()
{

//山、谷の値と足番号を格納する変数と描画する値を格納する変数を宣言します。

    double r1,r2,r3,r_1,r_2;
    int rt1,rt2,rt3,rt_1,rt_2;
    double s1,s2,s3,s_1,s_2;
    int st1,st2,st3,st_1,st_2;
    int nCurBar=0;

 

//表示されている足の数が、Limitより小さい場合、nPeriod引いた値をセットします。
//検査用の領域を確保するためです。
    if(Bars<Limit) Limit=Bars-nPeriod;

 

//検査する足を古い方からセットしていきます。
    for(nCurBar=Limit; nCurBar>0; nCurBar–)
    {

 

//検査する足の数の中心の安値が、検査する足の範囲で最小の安値の場合
//最新の安値をs1に代入します。
//S1を代入する前に過去の安値をS3、S2と古い変数へスライドさせて格納します。
        if(Low[nCurBar+(nPeriod-1)/2] == Low[iLowest(NULL,0,MODE_LOW,nPeriod,nCurBar)])
        {
            s3=s2; s2=s1; s1=Low[nCurBar+(nPeriod-1)/2];
            st3=st2; st2=st1; st1=nCurBar+(nPeriod-1)/2;
        }

 

//安値と同様に高値を変数へ代入します。
        if(High[nCurBar+(nPeriod-1)/2] == High[iHighest(NULL,0,MODE_HIGH,nPeriod,nCurBar)])
        {
            r3=r2; r2=r1; r1=High[nCurBar+(nPeriod-1)/2];
            rt3=rt2; rt2=rt1; rt1=nCurBar+(nPeriod-1)/2;
        }
    }

 

//2つの安値を比べたときに最新の安値が下降している場合のみ描画します。
//そのために各谷の安値を比較して、下降している隣接している谷を見つけます。
//もし、存在しない場合はデフォルトでEMPTY_VALUEがセットされているため、描画されません。
    if(s1 < s2){
        s_1=s1;
        s_2=s2;
        st_1=st1;
        st_2=st2;
    }
    else if(s2 < s3){
        s_1=s2;
        s_2=s3;
        st_1=st2;
        st_2=st3;
    }

 

//描画開始位置と次の点を設定します。
    ObjectMove(”Trend DN-0″,1,Time[st_1],s_1);
    ObjectMove(”Trend DN-0″,0,Time[st_2],s_2);
//上昇トレンドラインも下降トレンドラインと同様にセットします。
    if(r1 > r2){
        r_1=r1;
        r_2=r2;
        rt_1=rt1;
        rt_2=rt2;
    }
    else if(r2 > r3){
        r_1=r2;
        r_2=r3;
        rt_1=rt2;
        rt_2=rt3;
    }
    ObjectMove(”Trend UP-0″,1,Time[rt_1],r_1);
    ObjectMove(”Trend UP-0″,0,Time[rt_2],r_2);
   return(0);
}

 

これで、終了です。

コンパイルして、インジケータを表示させてみてください。

以下のようにトレンドラインが表示されれば成功です。

TrendLineインジケーター

TrendLineインジケーター

ちょっとは、らしいものができたのではないでしょうか?

少しずつレベルをアップしていきますね。

 

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

ここから、ダウンロード

 

インジケータは、

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

に入れてください。

 

→この記事の続きを読む

タグ

インジケーターを作ってみる

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

今回は、インジケータを作ってみようと思います。 3本の移動平均を表示したいと思います。  

 簡単なプログラムを作ってみるを参考にMetaEditorのメニューでFile-Newで「Expert Advisor Wizard」を開きます。 「Custom Indicator」にチェックを入れて、次へを押します。   

3EAパラメータ追加

3EAパラメータ追加

Nameに3EA(名前なので何でもいいです)、Addボタンを押してパラメータを3つ追加します。

Nameをそれぞれ、Peried1、Peried2、Peried3とします。 Typeはintにしてください。  

次へを押します。

 

グラフの種類を選択

グラフの種類を選択

Addボタンを押して、表示するグラフのラインを追加します。

3つ追加して、Red、Yellow、Greenを選んでください。

別に違う色でもかまいません。

今回は、線で表示するのでTypeはLineのままにしてください。

 

完了を押すと、スケルトンが作成されます。

 

先頭の方に以下の行があると思います。

コメントを付けて、説明します。

//メインウィンドウに表示する。

#property indicator_chart_window

//グラフに利用する入れ物が3つ(最大8個)

#property indicator_buffers 3

//1本目は、太さ1の赤

#property indicator_color1 Red

//2本目は、太さ1の黄色

#property indicator_color2 Yellow

//3本目は、太さ1の緑

#property indicator_color3 Green

//入力するパラメータは、以下の3つ

extern int       Peried1;

extern int       Peried2;

extern int       Peried3;

//表示するグラフに対応する入れ物3つ

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double ExtMapBuffer3[];

インジケータを使うときは、必要な数の上記の設定が必要になります。
ちょこっとだけ改造します。
extern int       Peried1=7;
extern int       Peried2=14;
extern int       Peried3=21;
とデフォルトの数字を設定しましょう。
これで、何も入力しなくても利用可能になります。
次は、初期設定です。
int init()
  {
//—- indicators
//1本目(0番から始まる)はライン
   SetIndexStyle(0,DRAW_LINE);
//1本目のバッファをExtMapBuffer1とする
   SetIndexBuffer(0,ExtMapBuffer1);
//2本目はライン
   SetIndexStyle(1,DRAW_LINE);
//2本目のバッファをExtMapBuffer2
   SetIndexBuffer(1,ExtMapBuffer2);
//3本目はライン
   SetIndexStyle(2,DRAW_LINE);
//3本目のバッファをExtMapBuffer3
   SetIndexBuffer(2,ExtMapBuffer3);
//—-
   return(0);
  }
最初の方で、色を設定したのでここでは、どのように描画するか。
線ごとにバッファをどれにするかをしていします。
これで、ExtMapBuffer1などに値を入れるだけで線を書いてくれるようになります。
ExtMapBuffer1などは、描画されている足の数に対応したバッファです。
ExtMapBuffer1[0]から始まり、最新が0になります。

 

実際に、移動平均の値を登録していきましょう。
int start()
  {
//変化していない足の数を取得する
   int counted_bars=IndicatorCounted();
//値を入れる足番号の変数
   int i;
//表示されている足の数から、変化のない足の数を引いたもの(描画すべき足)の値をセット
   i = Bars-counted_bars-1;
//最新の足(0)をを描画するまで繰り返す。
//古いものから書いていきます。
   while(i>=0)
   {
//1本目の単純移動平均の値を取得
       ExtMapBuffer1[i]=iMA(NULL,0,Peried1,0,MODE_SMA,PRICE_CLOSE,i);
//2本目の単純移動平均の値を取得
       ExtMapBuffer2[i]=iMA(NULL,0,Peried2,0,MODE_SMA,PRICE_CLOSE,i);
//3本目の単純移動平均の値を取得
       ExtMapBuffer3[i]=iMA(NULL,0,Peried3,0,MODE_SMA,PRICE_CLOSE,i);
//1つ新しい足番号にする(1引く)
       i–;
   }
   return(0);
  }

 

さて、以上でプログラムは終了です。

コンパイル(F5)してみましょう。

メタトレーダーへ戻って、3EAを表示させたい通貨のウィンドウへドロップしてみてください。

 

3EAパラメータ

3EAパラメータ

ドラッグしたときに表示されるウィンドウの「パラメータ入力」タブを押すと上の画面のようになります。
初期設定した内容が表示されていることが分かると思います。
この設定は、後で変更可能です。
OKボタンを押して、描画させてみましょう。
3EA表示

3EA表示

3種類の移動平均が表示されていることが分かります。

簡単でしょ!!

 

iMaが移動平均を取得する関数です。

パラメータで、いろいろな移動平均を取得できます。

今回は、単純移動平均(MODE_SMA)、終値(PRICE_CLOSE)を利用しました。

他にも、指数平均、平滑平均、加重平均なども選べます。

終値の他にも始値、高値、安値、平均をとったものなどを選ぶことができます。

 

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

ここから、ダウンロード

 

インジケータは、

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

に入れてください。

 

 

タグ

簡単なプログラムを作ってみる

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

とりあえず、プログラムを作ってみましょう。 今回は、現在のレートを表示するものを作ります。 インジケータ、EAどちらでも作れますが、設定の簡単なEAで作ります。   まず、MetaEditorを起動します。  

MetaEditor起動

MetaEditor起動

メタトレーダーの赤丸のボタンを押すとエディターが起動します。    

MetaEditor

MetaEditor

こんな感じの画面が開いたと思います。

次にメニューからFile-Newを選択します。

 

Expert Advisor Wizard インジケータ作成

Expert Advisor Wizard インジケータ作成

こんな感じの画面が開いたと思います。

「Custom Indicator」にチェックを入れて、次へを押します。

 

インジケータ設定

インジケータ設定

Nameにプログラムの名前、今回は「NowRate」

Authorは、作成者名

Linkは、公開先のURLなど

Author、Linkは省略可能です。

Parametersには、外部入力するパラメータを入れますが、今回は利用しないのでそのままにします。

次へを押してください。

 

インジケータ設定

インジケータ設定

Indicator in separete windowにチェックを入れると、サブウィンドウに表示されます。

今回は、メインウィンドウに表示するのでチェックを入れません。

Minimum、Maximumはサブウィンドウの最大・最小を固定するときに利用します。

Indexesは、グラフの線を追加し、色などを設定するときに使います。

今回は利用しません。

完了を押してください。

エディターにスケルトンが表示されたと思います。

int start()

  {

   int    counted_bars=IndicatorCounted();

//—-

 

//—-

   return(0);

  }

int start()
  {
   int    counted_bars=IndicatorCounted();
//—-
   Comment(”Ask=”,Ask,”  Bid=”,Bid);
//—-
   return(0);
  }
と書き換えてください。
「Conpile」ボタンを押すか、F5を押してコンパイルします。
Compile

Compile

下のErrorsにエラーが出ないで、終了していることを確認してください。
これで、現在のレートを表示するインジケータを作ることができました。
簡単です。
今回使った、関数の説明をします。
これは、左上にコメントを表示します。
「,」でつなぐことで複数の変数をまとめて表示することが可能です。
今回は、”"でくくった文字と、Ask、Bidという変数の内容を表示させています。
Askは、表示させたウィンドウの現在の買値
Bidは、売値が入っている予約変数です。
予約変数は、いくつかありますが別の機会に紹介します。
では、インジケータを表示してみましょう。
メタトレーダーで、表示させたい通貨のグラフを表示させます。
通貨のグラフの表示のさせ方などは、121証券の日本語マニュアルを読んでくださいね。
次に、ナビゲーターウィンドウのCustom Indicatorsを展開すると今作成した「NowRate」が表示されているはずです。
これをドラッグして、表示させたい通貨ウィンドウへドロップしてください。
カスタムインジケータパラメータ設定

カスタムインジケータパラメータ設定

こんな画面が、表示されますがOKを押してください。
NowRate

NowRate

左上にAskとBidの値が表示されたと思います。
これで、成功です。
初めてのプログラムとしては、あっさりいけたと思います。
メタトレーダーのプログラムは、あまり複雑なことをやる必要がないんです。
簡単に作れます。
大変なのは、何をどうするかというノウハウ!
とりあえず、こんな感じで進めていきますね。
今回のソースとインジケータをアップしておきます。
必要な方は、ダウンロードしてください。
ちなみに、マニュアルについて以前このサイトを紹介しました。
Eブックとして、まとまったものも以下で販売しています。

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

気になる方は、チェックしてみてください。

 

インジケータは、

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

に入れてください。

タグ