スポンサーサイト





上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

タグ :

Return to page top

  • Comments (Close): -
  • TrackBack (Close): -

移動平均線の描画 (1)





iMA()関数を勉強して移動平均線の最低限の知識を身につけたところで、実際に移動平均線を描くプログラムを作成します。

ファイル名は、移動平均線をMoving Averageと呼ぶので「SampleMA」とでもしましょう。

ツールバーの「New」ボタン→「Custom Indicator」を選択するところまでは、SampleIndicatorファイル作成時と同じです。

次の画面で、Name、Author、Linkのほか、Parametersを追加します。Parametersは、NameとTypeはいじらず、Initial Valueを5と20にします。移動平均線の期間を5と20にしたということです。

20110204_1


次の画面では、Indexesに描画する移動平均線の色を指定します。

20110204_3


完了ボタンを押すとスケルトンが出てきます。

20110204_4


さらに、start()関数を以下のように書き換えます。

int start()
{
int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

int limit=Bars-counted_bars;
for(int i=0; i<limit; i++) {
ExtMapBuffer1[i]=iMA(NULL,0,ExtParam1,0,MODE_SMA,PRICE_CLOSE,i);
ExtMapBuffer2[i]=iMA(NULL,0,ExtParam2,0,MODE_SMA,PRICE_CLOSE,i);
}

return(0);
}


コンパイルして実行すると、2本の移動平均線が描画できました。

20110204_5



プリプロセッサ命令


出来上がったコードを見ると、プログラム全体にかかわる設定をするプリプロセッサ命令の部分にいろいろ書いてあるのが分かります。

#property copyright "Busuibon"  //(1)
#property link "http://metatradermania.blog24.fc2.com/" //(2)
#property indicator_chart_window //(3)
#property indicator_buffers 2 //(4)
#property indicator_color1 Yellow //(5)
#property indicator_color2 MintCream //(6)

//---- input parameters
extern int ExtParam1=5; //(7)
extern int ExtParam2=20; //(8)

//---- buffers
double ExtMapBuffer1[]; //(9)
double ExtMapBuffer2[]; //(10)


(1)~(3)については、以前解説しました。

(4) #property indicator_buffers 2 : インジケータを何個表示するか設定します。今回は移動平均線を2つ表示していますので「2」です。最大で8個まで表示可能です。

バッファ(buffer)とは、データを一時的に保存しておく領域、つまりは配列のことです。(4)は、インジケータを描画するために配列を2つ作りますねという宣言になります。

で、具体的な配列としては、ExtMapBuffer1[] および ExtMapBuffer2[] になります( (9)と(10) )。小数点以下の数値も必要なので、double型になります。

(5)と(6)は、それぞれのインジケータの色を指定しています。

ちなみに、ラインの太さを指定するときは、
  #property indicator_width2 3
とします(上の例は、2番目のラインの太さを3に設定)。太さは1~5まで指定可能です。

(7)と(8)は、移動平均線の期間です。ウィザードでのパラメータ設定のときに、ExtParam1 と ExtParam2 という名前が初期設定でありましたね。ウィザードで好きな名前をつければここに反映されます。

外部変数(extern)は、プログラムをいじらずにプロパティから数値を変えられる変数です。

何のことやらという人は、start()関数内に記述した以下のコードを見てください。

ExtMapBuffer1[i]=iMA(NULL,0,ExtParam1,0,MODE_SMA,PRICE_CLOSE,i);



iMA()関数では、第3引数には期間を指定するはずですが、今回は ExtParam1 を指定しています。

外部変数の便利さを実感してみましょう。

SampleMAを実行して移動平均線を表示したチャート上で右クリック→「表示中の罫線ツール」を選びます。

20110204_7


SampleMAを選択して「編集」をクリック。

20110204_8


外部変数 ExtParam1 の値(Value)を変更することができます。

20110204_9


これに対して、外部変数 ExtParam1 を定義しない場合についてやってみます。

まず、extern の前に「 // 」を記述してコメント化し、外部変数を無効化します。

//extern int ExtParam1=5;



start()関数内のiMA()関数部分の期間を指定する引数部分を、「ExtParam1」から「5」に変更します。

ExtMapBuffer1[i]=iMA(NULL,0,5,0,MODE_SMA,PRICE_CLOSE,i);



これでコンパイルし、先ほどの手順で期間を編集できるか見てみましょう。ExtParam1 は表示されていないので、ソースをいじらなければ変更できません。

20110204_10


このように、iMA()関数内で期間を「5」と定義してしまうと自由に変更できなくて不便ですが、ExtParam1 という外部変数と強い定義すると、「5」は単なる初期値にすぎず、後から自由に変更ができるのです。

init()関数とstart()関数部分の解説が残っていますが、長くなったので今回はここまでとします。

スポンサーサイト

タグ :

Return to page top

Comments:

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://metatradermania.blog24.fc2.com/tb.php/31-21e80bcb
Listed below are links to weblogs that reference
from ど素人のMetaTrader入門
Bookmark
検索フォーム
RSSリンクの表示
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。