タグクラウド
Firefox をダウンロード!!

移動平均線を作る(移動平均線の描画)。

posted by SBT at 2005-04-28(木) 21:47

MQLの構造と、実行時の簡単な流れがつかめたところで、実際に移動平均線のインジケータスクリプトを書いていきます。 ナビゲータウィンドウの File タブに、MetaTraderをインストールしたフォルダのExpertsフォルダの中が表示されるので、そこから、前回、ウィザードで作ったファイルを開きます。

ウィザードで作ったファイルの中に、次のような部分があるはずです。


int start()
{
int counted_bars=IndicatorCounted(); // (1)
//---- TODO: add your code here (2)

//---- (3)
return(0);
}


この部分はstart関数といって、この中にインジケーターを描くための処理を書きます。

まず、(1)の下に、


int limit;
if(counted_bars<0) return(-1);
limit=Bars-counted_bars;


と書き加えます。

インジケータスクリプトを実行すると、レートが変わるたびに、毎回、一からインジケータの計算が行われます。
これは、そういった無駄を省くために、新しいレートの計算のみをするようにするための処理です。

次に、(2)と(3)の間に、


for(int i=0; i<limit; i++) {
ExtMapBuffer1[i]=iMA(NULL,0,MA_Period,0,MODE_SMA,PRICE_CLOSE,i); //(4)
}


と書き加えます。
ここが、過去のデータも含めて、実際のインジケータを描くための処理になります。
以上で、移動平均線のインジケータは完成です。

ただし、このままではインジケータとしては使えません。
インジケータとして使うためには、コンパイルしなければなりません。
人間の理解できる形で書いたものをソースファイルといいますが、これをMetaTraderで実行できる形式へと変換しなければなりません。

コンパイルするには、メニューから、


 File -> Compile


を選びます。
ソースファイルの拡張子は .mq4 ですが、コンパイルするとファイルが保存され、新しく .ex4 という拡張子のファイルが作られます。

ツールボックスウィンドウの Error(s) タブに、


0 error(s), 0 warning(s)


と表示されれば、コンパイルは成功です。

後は、MetaTraderのナビゲータウィンドウ内の Custom Indicators の中にある Moving Average(Custom) を選べば、作ったインジケータスクリプトが実行されます。

ほとんどの場合には、(4)の部分を書き換えることで、色々なインジケータを作ることができます。

コメント

Posted by Radio at 2006-12-01(金) 23:43

下記のインジケータの計算量を削減するロジックなのですが、なぜ★の処理が必要なのでしょうか。

int limit;
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--; ★
limit=Bars-counted_bars;

IndicatorCounted() は変化が無いバーの本数を返す、とマニュアルに記載されていると思うので、

limit = Bars-IndicatorCounted();で良いような気がするのですが、これでは上手くいかないパターンがあるのでしょうか。

ご教授いただけますと幸いです。

Posted by SBT at 2006-12-02(土) 00:33

Radioさん、こんばんは。

あ、この場合には★の行は不要ですね…。ご指摘、ありがとうございます。
同梱のサンプルがそうなっていたので、コピー&ペーストでそのままペーストしてしまったんだと思います。
これだと、実際には直近2本を再計算するようになってますね。
なので、このケースでは削除してしまって問題ありません(削除しなくても問題ありません)。

過去のバーも再計算・再描画させる必要がある場合には、★のような調整方法も使えますね。
該当部分を修正しておきました。

Posted by Radio at 2006-12-02(土) 00:55

SBTさん、こんばんは。

すばやい返答ありがとうございます。
ご回答いただいたおかげで、とてもスッキリしました。

SBTさんのMQL入門は丁寧に順を追って説明してくださっているので、自分の想像以上の速さで習得が進んでおります。

MQL入門以外のエントリもとても参考になりますし、SKILL UP FX!は私のバイブルといってもいいですね。

これだけ充実したサイトを運営するのは大変だと思いますが、これからもがんばってください。

Posted by タカハシ at 2006-12-28(木) 23:58

移動平均乖離率はソフトに標準装備されていますでしょうか?

Posted by SBT at 2007-01-04(木) 22:48

明けましておめでとうございます。
今年もよろしくお願いします。

乖離率は標準では入っていませんけど、アップローダにだけアップしてあります。
Kairi.mq4, Kairi.ex4っていうやつがそれなので、よろしければどうぞ。

Posted by タカハシ at 2007-01-06(土) 08:01

あけましておめでとうございます。
今年もよろしくお願いいたします。(すみませんです。)

早速出申し訳ないのですが。
?保管庫にある平均足ですが、何本の足を平均足にしているのでしょうか?

?下はMACDヒストグラムの現在値です。
平均足を同じ式で表すと、double以下はどうなるのでしょうか?

 iOsMA(NULL, 0, 12, 26, 9, 
PRICE_CLOSE, Current + 0);

Posted by SBT at 2007-01-10(水) 02:24

こんばんは。

?一般的な平均足だと思うので、何本というのはないと思いますが…つまり、1本かと思います。設定できるパラメータがあれば別ですが…。

?iOsMAのリファレンスを参考にしてみてください。PRICE_CLOSE部分のパラメータの説明に指定できる値一覧へのリンクがあって、その中に平均足と同様のものもあったかと思います。
これは他の関数でも同様ですので、使い方を覚えておくと便利だと思いますよ。

Posted by タカハシ at 2007-01-10(水) 09:40

申し訳ありません。
平均足について少々勘違いしておりました。
下記の表からですと、たぶんですが、パラメーターの指定値はなく、おそらく平均足始値、平均足高値、平均足安値、平均足終値は得られません。
比較的簡単に得られるのが平均足終値((始値+高値+安値+終値))/4ですが、下記の指定値にはありません。
足して4で割る数式を入れる必要があると思われます。

 0 = Close price
  1 = Open price
  2 = High price
  3 = Low price
  4 = Median price, (high+low)/2
  5 = Typical price, (high+low+close)/3
  6 = Weighted close price, (high+low+close+close)/4

平均足を開いてみたのですが、私には分からないint 関数等が混在しておりました。
必要と思われる部分を抜き出して貼り付けてみました。
いちおうコンパイルはできましたので、式的には適合するかもしれません。
一つ前のデータ
アップしておきます。

これをシグナルチェッカーで使えるかどうか試してみます。

Posted by SBT at 2007-01-11(木) 00:15

こんばんは。
すみません、こちらも少し勘違いしてました。

そうですね、指定できる値に平均値はないので、もしやろうとするなら自前で計算するしかないですね。
使うものにこだわるよりは、使えるものの範囲内でやるのも良いと思いますよ。

Posted by てり at 2007-11-09(金) 11:30

>下記のインジケータの計算量を削減するロジックなのですが、なぜ★の処理が必要なのでしょうか。

>int limit;
>if(counted_bars<0) return(-1);
>if(counted_bars>0) counted_bars--; ★
>limit=Bars-counted_bars;

非常に遅いですが、気になったので書き込みます。
私も★でなぜバーを2本計算するのか疑問に思っていました。
確かhttp://www.metatrader4.com/のどこかに書いてあったのですが、
新しいバーが出来る瞬間に値が動くと、バーの値と実際のそのバーの終値が違ってくるケース
があり、それを防ぐために念のため2本計算するそうです。

Posted by SBT at 2007-11-13(火) 20:31

>てりさん

なるほど。
start関数やインディケータ配列周りなど、この辺りはMQL独特なので注意する必要がありそうですね。
ありがとうございました。

Posted by 影虎 at 2010-01-15(金) 21:53

初めまして。
移動平均乖離率について、Kairi.mq4を利用させていただきました。
ありがとうございます。

私の手に入れたバージョンでは、EAに組み込むとテスト中に0 divide exceptionを発生します。
原因はテストデータによってはiMAが値を返さない場合がある為に発生するようです。
そのため0divideを回避するように修正を加えました。
折角なので私のサイトで公開させていただいております。
問題があるようでしたら直ぐに削除いたします。
よろしくお願いいたします。
コメント投稿

トラックバック

このエントリーへのトラックバックはありません。

トラックバックURL
http://core.t3-ism.net/trackback/197

このページの先頭へ