TMAバンド(三角移動平均)とバブルバンドを使ったFX自動売買戦略の検証
2017年3月13日
先日、こんなFX売買戦略の記事が私の目にとまりました。
ブラッドリーさん(その2)「買いバブル」と「売りバブル」についてはコチラ!
ブラッドリーさん(その3)「フラクタル・エッジ」の基本についてはコチラ!
ちゃんとした説明は上記記事を読んでいただきたいのですが、簡単に説明すると、このような売買戦略です。画像は上記サイトより引用させていただいております。
三角移動平均
TMA(三角移動平均)という、EMA(指数移動平均)やWMA(加重移動平均)より反応が早い移動平均を使う。TMA : Triangular moving average
TMAバンドとバブルバンド
また、それをATRを使いバンド化した、TMAバンドとバブルバンドという2つのバンドを使う
売買
バブルバンドとローソク足(確定足)がTMAバンドの外に行き、ローソク足が内側に戻ってきて確定したら売買
ストップロスとテイクプロフィット
ストップロスは直近高値安値の少し上(最低20pips離す)、テイクプロフィットは同幅
戦略が明確でプログラム化できそうですし、インジケータも作者サイトで無料配布されていたので、コードを書いて試してみることにしました。
MQLコード
作者サイトからインジケータをダウンロードし、コードを書いてみます。私の理解が正しければ、コードはこんな感じになるはずです。
同時に何ポジション保有するかは書かれていませんでしたが、条件を満たしても無限にポジションを持たないように設定しておきましょう。
static datetime lastExecuted = 0; if(lastExecuted < Time[0]){ lastExecuted = Time[0]; int currentBuy = CountBuyPositions(); int currentSell = CountSellPositions(); if(currentSell < _maxPosition && Bubble(UP,2) > TMA(UP,2) && Close[2] > TMA(UP,2) && Close[1] < TMA(UP,1)){ double stoploss = MathMax(Bid+200*Point,10*Point + iHigh(Symbol(),PERIOD_CURRENT,iHighest(Symbol(),PERIOD_CURRENT,MODE_HIGH,_barPeriod,1))); double takeprofit = Bid - (stoploss-Bid); doOrderSend(OP_SELL,_lot,Bid,stoploss,takeprofit,_magic); } if(currentBuy < _maxPosition && Bubble(DOWN,2) < TMA(DOWN,2) && Close[2] < TMA(DOWN,2) && Close[1] > TMA(DOWN,1)){ double stoploss = MathMin(Ask-200*Point,-10*Point+iLow(Symbol(),PERIOD_CURRENT,iLowest(Symbol(),PERIOD_CURRENT,MODE_LOW,_barPeriod,1))); double takeprofit = Ask + (Ask-stoploss); doOrderSend(OP_BUY,_lot,Ask,stoploss,takeprofit,_magic); }
結果
バックテスト結果はこちらです。EURUSD、15分足、2007年から2016年までの10年間、スプレッドは10point、0.1ロットでのバックテストです。最大ポジション数は3です。
「おつかれ!」と言いたくなるグラフです。著者はこの戦略で年利35%を記録したらしいです。素晴らしいですね。
損切りトレードの例
青い点線が損切りトレードです。この場合は舌から突き抜けてきたので買いを入れていますが、損切りしています。
利確トレードの例
この場合は利益確定しています。青い点線の始めで買いを入れ、終わりで決済しています。
※このインジケータ、リペイントが激しいので(インジケータの線が後から書き換わる)
この図で見ると、「エントリーしている位置、違わない?」と思われるかもしれません。
戦略の改善
一方的に負けすぎていますので次の戦略を試してみました。
- テイクプロフィットをTMAバンドの中央に設定
- ストップロスは同幅
if(currentSell < _maxPosition && Bubble(UP,2) > TMA(UP,2) && Close[2] > TMA(UP,2) && Close[1] < TMA(UP,1)){ takeprofit = TMA(CENTER,0); stoploss = Bid + (Bid - takeprofit); doOrderSend(OP_SELL,_lot,Bid,stoploss,takeprofit,_magic); } if(currentBuy < _maxPosition && Bubble(DOWN,2) < TMA(DOWN,2) && Close[2] < TMA(DOWN,2) && Close[1] > TMA(DOWN,1)){ takeprofit = TMA(CENTER,0); stoploss = Ask - (takeprofit-Ask); doOrderSend(OP_BUY,_lot,Ask,stoploss,takeprofit,_magic); }
バックテスト結果
バックテスト結果はこちらです。同じくEURUSD、15分足、2007年から2016年までの10年間、スプレッドは10point、0.1ロットでのバックテストです。最大ポジション数は3です。
先ほどよりはだいぶ良くなりました。グラフ左〜中央あたりでは猛烈に勝っていますが、最終的には負けています。
一方的に負けているわけではないので、何かしらのフィルタを入れれば最終的には勝てそうです。
トレンドフィルタを導入
こんなフィルタを考えてみました。トレンドに逆らわない戦略です。
- 長期(56期間)TMAが上向きなら買いのみ
- 長期(56期間)TMAが下向きなら売りのみ
バックテスト結果
トレード回数が激減している上に結果は良くなっていないという、ダメフィルターの典型となりました。
EMAによるトレンドフィルタを導入
今度はこんなフィルタです。同じくトレンドに逆らわない戦略ですが、EMAを使っています。
- 中期(21期間)EMAが上向きなら買いのみ
- 中期(21期間)EMAが下向きなら売りのみ
バックテスト結果
今度もダメですね。
ちなみに期間を変えたり、SMAでも試してみましたがダメでした。
他に考えている戦略
あと考えられるものとしては、、
- RSIやCCIなどのオシレータ系インジケータを入れて、買われすぎのときのみ売りを仕掛ける
- ボリンジャーバンドなど他のバンドを入れて、2つともバンドを出ている場合に仕掛ける
などでしょうか。。。時間があったら試してみます。
※ちなみに建値決済とトレーリングストップは入れても改善しませんでした
アイデア募集
どなたか、この戦略を改善させる方法を思いついた方は、ぜひ本ブログの「 お問い合わせ」またはTwitterまでご意見を下さい。
見事に右肩上がりとなる戦略をくださいましたら、このEAをプレゼントさせていただきます!
Posted by auto-ts.net
関連記事
OANDA Japan FX(東京サーバー)のMT4口座がサービス改善!
嬉しい発表がありました。OANDA Japan FX(東京サーバー)のMT4口座 ...
ゴトー日(5・10日)にドル円の買い/売りをするEAを検証する
今回はFXの自動売買の検証です。MetaTrader4で検証しています。 皆さん ...
MT4のEAの注文・約定状況や資産状況をスマホにプッシュ通知するインジケータ
MT4でEAを動かしていると、EAの状況が気になりませんか? EAはちゃんと動い ...
MT4でEAのバックテストをする〜FX自動売買の戦略を改善
さて、MT4の重要な機能の一つに、EAのバックテストがあります。 EAとはFXの ...
MT4で新規チャートを開いたときのデフォルトの見た目、インジケータを変える
MT4を使っていると、自分のお気に入りのチャート表示、インジケータが出てきますよ ...