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

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

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

にほんブログ村 為替ブログ FX システムトレード派へ

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

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

 

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

 

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

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

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

 

為替は、上昇トレンド、下降トレンド、レンジ相場の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

に入れてください。

 

icon-check082009/05/09 23:45 修正

初回投稿時に、古い関数を利用したソースを紹介してしまいました。

機能的には、問題ありませんが最新の関数を利用するように修正を行いました。

ダウンロードしたファイルも同様です。

修正時刻以前にダウンロードした方で気になる方は、再ダウンロードしてください。

 

修正点は、

Lowest → iLowest

Highest → iHighest

機能や引数に変更はありません。

にほんブログ村 為替ブログ FX システムトレード派へ 人気ブログランキングへ

タグ

トラックバック&コメント

この記事のトラックバックURL:

トラックバック

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

    ピングバック投稿者: トレンドラインを書いてみる3 | メタトレーダープログラミング めたぷろ — 2009年05月11日

  2. [...] めたぷろで紹介した「トレンドラインを書いてみる」で作成したインジケーター。 [...]

    ピングバック投稿者: TrendLine 最新のトレンドラインを引きます | MT4 めたぷろ ダウンロードセンター — 2009年05月16日

  3. [...] 「トレンドラインを書いてみる」で作成したインジケーターをプログラム的にも効率を考えて組み直してあります。 [...]

    ピングバック投稿者: TrendLine_v2 複数のトレンドラインを自動的に引きます | MT4 めたぷろ ダウンロードセンター — 2009年05月16日


コメント

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

  2. [...] めたぷろで紹介した「トレンドラインを書いてみる」で作成したインジケーター。 [...]

  3. [...] 「トレンドラインを書いてみる」で作成したインジケーターをプログラム的にも効率を考えて組み直してあります。 [...]


コメントを投稿する



この記事のコメントだけのRSSフィードを取得

Spam Protection by WP-SpamFree


FXのしくみ »
« トレンドラインを書いてみる2