iMAを使わないEMA

「MT4でEMAを表示するインジケーターを作りなさい」・・・と言われたら出来る?


この課題なら MQLをちょっと齧っていれば大抵の人はクリアできるのではないかと思うが。


では、
「MT4でiMA関数を使わないでEMAを表示するインジケーターを作りなさい。但し直近の価格の和で求めること」


こうなると、中級くらい? でしょうか。。。。



正解例はこちら
このあたりを読むと、指数移動平均(Exponential Moving Average; EMA) は、

EMA = A0 * Close[0] + A1 * Close[1] + A2 * Close[2] + ... + An * Close[n];

と近似的に書き直すことができることが分かります。 係数An が A0 に対して十分に小さければ、そこで計算を打切っても計算結果に影響はほとんどありません。


↑EMA(15)で直近の価格に掛かる係数のグラフがこれで、この減衰関数がEMAの場合は指数関数なのですね。


単純移動平均は、減衰関数が一定期間一定値でその後ゼロになるイメージ(  ̄ ̄ ̄│____ )加重移動平均は、一直線に減衰するこれであることを思い起こせば、移動平均なんて、自分で減衰関数を決めてしまえば、いくらでも作り出せることがわかります。
(厳密には減衰している必要も無いので、重み付け関数です..。正解例は減衰していることを前提にしているので要注意。


直近の価格に対しては、SMAっぽく均等重み付けしつつ、過去の価格には EMA っぽくすることで、SMAの欠点(!)である計算期間から極端な価格が抜ける際のMAの変動を抑えることも可能です。減衰関数には逆数やシグモイド関数、その他の関数に作り変えることもできます。このように作られた移動平均は・・・「名状しがたきEMAのようなもの」・・・とでも呼びましょうか。笑。