PythonでSMA、EMAを算出する関数を作ってみた

※本ページはプロモーションが含まれています

テクニカルで何かと必要になるSMA(単純移動平均線)、EMA(指数平滑移動平均線)。

MT4、MT5などでは関数が用意されているのですぐに使えますが、Pythonはそうはいかないです。。

pandasをインポートすれば使えるものもありますが、バージョンに左右されるので、ちょっとって思って1からコーディングしてみた。

 

目次

SMA(単純移動平均)

英語ではSimple Moving Average。頭文字をとってSMAと呼びます。トレンドを見る上で多用されます。

アルゴリズムは簡単で、全てのデータの平均値を計算するだけ。

SMAのPythonコード

#
# SMA
# data : list
# n    : period
def SMA(data, n):
	i=0
	result = 0
	sum=0
	max = len(data) - 1
	chk = int(max) - int(n)

	for i in range(chk,max):
		sum += data[i]

	result = float(sum / n)

	return result

 

EMA(指数平滑移動平均)

Exponential Moving Average(指数平滑移動平均)。MACDを算出する際に使ったり結構多用します。

過去よりも現在の方が影響が強いという考えを入れた移動平均値で、現在に近いレートほど重みをつけて計算します。

計算式は

E(t) = E(t-1) + 2/(n+1)(直近の終値 – E(t-1))

こちらのサイトによると

あわせて読みたい

最初の日のEMAはSMAを使うなどルールがあってややこしいです。

これをコードに起こすと

EMAのPythonコード

n-1番目の要素は、SMAを算出する必要があるので、そこが肝かな。

#
# EMA
# data : price list
# n    : period
def EMA(data, n):
	i=0
	chk_1=0
	chk_1_sum=0
	et_1=0
	result = []
	for p in data:
		i = len(result)
		if i <= (n - 1):
			#SMA
			chk_1_sum = sum(result)
			chk_1 = (float(chk_1_sum) + float(p)) / (i + 1)
			result += [chk_1]
		else:
			#EMA
			et_1 = result[-1]
			result += [float(et_1 + 2 / (n + 1) * (float(p) - et_1))]
	return result[-1]

たぶん合ってると思う。

ブログランキングに参加してます。この記事が少しでもお役に立ちましたら、応援ポチっとお願いします。

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

お友達にMT4インジケータープレゼント中

機械学習使った日々の予測結果や、細かい試行錯誤の結果はLINEで公開しています。パスワード付き記事もこちらから。

また、今ならお友達には矢野テック自作のMT4用のインジケーターをプレゼント中です。

友だち追加

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

プログラマー。FXのMT4を使った自動売買EA作成やBOT作成などが趣味。2016年から元本10万円をどこまで増やせるか挑戦中。一旦は10万⇒700万⇒2017暴落 20万。ガチホからFXトレードに変更。 現在1000万円。その過程やノウハウは無料メール講座にまとめました。1か月で学べます。→無料メール講座

ご質問はコメント欄からお願いします

コメントする

目次