Λάδι Βιώσας

http://profile.hatena.ne.jp/kenkitii/

MetaTrader4メモ

FXメタトレーダー実践プログラミング (現代の錬金術師シリーズ)

FXメタトレーダー実践プログラミング (現代の錬金術師シリーズ)

結構前にこの本を読んで、MQL(MetaQuotes Language)の書き方は覚えたつもり・・・だったけどしばらくしたら、すっかり忘れてたのでここに Hello world 的なものをメモ。参考:MQL日本語リファレンス

#property indicator_chart_window
#property indicator_color1 Red

double Buf[];

int init()
  {
   IndicatorBuffers(1);
   SetIndexBuffer(0, Buf);   

   return(0);
  }

int start()
  {
   int limit = Bars - IndicatorCounted();
   for (int i=limit-1; i>=0; i--)
   {
      Buf[i] = iMA(NULL, 0, 200, 0, MODE_SMA, PRICE_CLOSE, i);
   }
   
   return(0);
  }

上記のコードは、200期間の単純移動平均を表示する最小限必要なコードです。ちなみに、MT4で使える移動平均は以下の4種類

で、EMA、SMMA は基本同じものらしい。以下に計算式をコピペ。

  • SMA

直近の n 日間の終値を pM, pM−1, ..., pM-n+1 とすると、n 日間の移動平均 SMA(m, n)は
{SMA}_{M} = { p_{M} + p_{M-1} + \cdots + p_{M-n+1} \over n }

  • LWMA

{LWMA}_{M} = { n p_{M} + (n-1) p_{M-1} + \cdots + 2 p_{M-n+2} + p_{M-n+1} \over n + (n-1) + \cdots + 2 + 1}

  • EMA, SMMA

{EMA}_\mathrm{today} = \alpha \times \text{price}_\mathrm{today} + (1 - \alpha) \times \text{EMA}_\mathrm{yesterday}
αを平滑化係数とし、 \alpha = {2 \over n + 1}のとき EMA、 \alpha = {1 \over n}のとき、SMMA になる