EAお役立ち

TMA(三角移動平均)のコードを考えてみた~自作EAにTMAを組み込む方法【mq4】

この記事ではTMA(三角移動平均)のEA用のコードと、TMAの解釈について説明しています

筆者はFXの裁量トレード、EA(FXの自動売買)、ミラトレードで稼ぐかたわら、自分自身でもMT4で個人使用のためのEAを作成しています

今般、自分用のEAにTMA(三角移動平均)を組み込みたいと思い、mq4でのコードを考えてみました

TMAを使用することにより、通常の移動平均よりもダマしの影響を受けにくくなると考えられます

正直なところ厳密にTMAを表したコードとなっているかは分かりませんが、なんらかの参考にしていただければ幸いです

常識の範囲内であればコードをコピペして使用していただいても結構です
ただし、何か不具合等があっても当方は一切の責任を負いません

当然ですが、コード以外のブログの内容、図表等のコピペや、コードを含む本ページの内容の自作発言は禁止です

こんな下手くそなコードを自作したなんて言っても恥をかくだけだと思いますが……

本記事は筆者の個人的見解を示したものであり、投資判断等に関する助言を行うものではありません。また、本記事の内容が商品・サービス等の仕様等について保証をするものではありません。その他注意事項はページ下部に記載してございます。

TMA(三角移動平均)のコード

最初に自分なりに考えたTMAのコードをご紹介します

繰り返しになりますが、正確にTMAを表せているかは不明ですし、美しいコードとは言い難いと思います

あくまで個人用EAに使用するコードであることを前提にご覧ください

コードをコピペする方はその前に次章以降をご一読いただき、筆者なりのTMAの解釈を確認のうえ、ご自身なりに正確性の検証、修正されることを強く推奨します

// ———————————————
// テクニカル指標TMA算出処理
// ・TMAを算出する処理
// ・引数(通貨ペア、時間足、ローソク足の本数、ローソク足の位置)
// ・戻り値:TMA
// ———————————————-

double iTMA(string symbol, int TMA_timeframe, int TMA_period, int shift)
{
double sum_SMA = 0;
int L1 = 0;
int L2 = 0;

if (TMA_period %2 != 0){ //算出期間が奇数の場合
L1 = (TMA_period + 1)/2; //割り切れる
L2 = (TMA_period + 1)/2; //割り切れる
}
else if (TMA_period %2 == 0){ //算出期間が偶数の場合
L1 = (TMA_period + 1)/2; //切り捨て
L2 = (TMA_period + 1)/2 + 1/2; //切り上げ
}

for (int i = 0; i < L1; i++) {
sum_SMA = sum_SMA + iMA(symbol, TMA_timeframe, L1, 0, MODE_SMA, PRICE_CLOSE, shift + i); //L1期間分のSMAの値を合計
}

return(sum_SMA / L2); //SMAの平均値をTMAとして返す
}

◆◇=*==*==*==*==*=*==*=*==*=◇◆

〇XMTrading キャンペーン情報

TMA(三角移動平均)とは?

TMA(三角移動平均)とは、簡単に言うとSMAをもう一度平均したものです
以下の式に表すことができます

TMA = ΣSMA / L

ここで
n = TMAを求めるローソク足本数 [コードではTMA_period]
L = (n+1)/2 [コードではL1,L2]

なお、
SMA(単純移動平均)を求める期間もLを使用します

なんだか小難しいですね、特に

L = (n+1)/2 の部分がややこしいかと思います

これについては筆者次のように解釈しました
少し具体性を上げて説明します

【例】TMAを求める期間が前日から7日間の場合

L = (7+1)/2 = 4

①まずL個の終値を平均してSMAを求めます

②つぎにL個のSMAを平均してTMAを求めます

これで、7日間の終値の加重平均を求めることができました

もう少し掘り下げてみましょう

ここで1日前終値、2日前終値、・・・・・、7日前終値がそれぞれ出現した回数をカウントしてみます

上図の右側をご確認ください

1,2,3,4,3,2,1とみごとに中央を頂点とした三角形になっていますね

TMA(三角移動平均)は期間の中央に重みを置いた加重移動平均ということになります

TMAの解釈はこんな感じでいいのではないでしょうか

◆◇=*==*==*==*==*=*==*=*==*=◇◆

〇GemForex キャンペーン情報

GemForex 新規口座開設キャンペーン(こちらのリンクから)
2022年9月1日~ 9月はいつもよりもボーナスUP!!
口座を開設するだけで15,000円ボーナスをもらえるので
入金しなくても初期資金ゼロ円でFXを始められます

困ったこと

プログラムを組むにあたり一つ困ったことがありました。それは、

求める期間が偶数の場合、Lが中途半端な数値になってしまう

ということです

例えば、期間を8日間とした場合

L = (8+1)/2 = 4.5

4.5日間のSMAって??となってしまいますね

ここで前述の三角形を思い出します

7日間の場合・・・1,2,3,,3,2,1

8日間の場合・・・1,2,3,4,4,3,2,1

こうなればいいのか??
この考え方が合っているかは分かりませんが、個人使用EAなのでまあ良しとしました

1,2,3,4,4,3,2,1になるのは以下のパターンです

上図ではSMAを期間L=4の終値の平均とし、TMAを期間L=5のSMAの平均として算出しています

最初に示したコードの中で偶数と奇数で分けてL1,L2を求めているのはこのためです

if (TMA_period %2 != 0){ //算出期間が奇数の場合
L1 = (TMA_period + 1)/2; //割り切れる
L2 = (TMA_period + 1)/2; //割り切れる
}
else if (TMA_period %2 == 0){ //算出期間が偶数の場合
L1 = (TMA_period + 1)/2; //切り捨て
L2 = (TMA_period + 1)/2 + 1/2; //切り上げ
}

ちなみにですが、下のパターンでも1,2,3,4,4,3,2,1となりますが、こちらで計算しても結果は変わりません

この場合はSMAを期間L=5の終値の平均とし、TMAを期間L=4のSMAの平均として算出することになりますね

ここまで、自分なりのTMAの解釈とそれをEAに取り込む考え方、コードを紹介してきました

あくまで個人的なものなので正確でもありませんし、胸を張って解説するようなものでありません

しかし、この記事を参考にするなり他山の石にするなりしていただき、読者様のEA開発に少しでも役立てば光栄です

〇安心して使えるオススメ海外FX業者

GemForex GemForex(ゲムフォレックス)日本人トレーダーの利用者が多く日本語サポートで安心。現在、口座開設ボーナス15,000円が貰えるキャンペーン実施中!!初回入金なしでFXを始められます。入金100%ボーナスなどを頻繁に実施していて少額トレーダーにとって魅力的なキャンペーンが充実していておすすめです
XMTRADING XMTRADING 日本で一番有名な海外FX業者、日本語サポートで安心。現在、口座開設ボーナス5,000円に加えて50万円までの100%入金ボーナスのキャンペーンを実施中!!現金とも交換可能なXMP(XMポイント)をトレードの度にもらえるので頻繁にトレードしたい人におすすめです
[上表にはアドセンス情報が含まれます]

◆◇=*==*==*==*==*=*==*=*==*=◇◆

当ブログではFXを運用する上で役立つ情報を多数紹介しています!
ぜひ、他の記事もお読みください!

・本記事は筆者の個人的見解を示したものです
・本サイトに掲載の全ての記事は、F投資判断等に関する助言を行うものではありません
・投資を行う際は自己の判断により、自己責任で行ってください
・記事内で紹介されている企業等の意見を代表するものではありません
・本記事の内容は、商品・サービス等の仕様等について保証をするものではありません
・本記事で紹介している商品・サービスの詳細につきましては、各企業等へご確認願います
・本記事の内容は作成日または更新日現在のものです。作成日または更新日以後に、紹介している商品・サービスの内容が変更されている場合がございます
・本記事の内容及び見解は作成日または更新日当時のものであり、その内容および商品・サービスの仕様等についていかなる保証をするものでもありません
・本記事にはIB、アドセンス等のリンクが含まれます

フォワード実績が優秀なEA一覧

アーカイブ
こちらの記事もおすすめ!

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA