今日はMACDとモメンタム、パラボリックSARというテクニカル分析を3つ使用したトレンドフォロー手法の検証をしていきます。
MACD、モメンタム、パラボリックSARを使ったトレンドフォロー手法の検証
以下の条件のうち3つ適合した場合に買い注文を出します。
1.MACDが0より上
2.MACDがシグナルより上
3.モメンタムが0より上(MT4の場合、100より上)
4.パラボリックSARが価格より下にある(ローソク足の下に点)
売り注文はこの条件の逆です。
1.MACDが0より下
2.MACDがシグナルより下
3.モメンタムが0より下(MT4の場合、100より下)
4.パラボリックSARが価格より上にある(ローソク足の上に点)
手仕舞いは「買いの場合、売りの条件が2つ適合した場合(売りの場合、買いの条件が2つ適合した場合)」となっています。
※この手法はFX Worksで紹介されていたものです。
MetaTrader4でプログラミング!
元サイトの方で「裁量を持ち込まず機械的にトレードしている」と書かれていました。それならプログラムを作れば良いじゃない!
売買条件のロジック
さて、この手法は「すべての買いシグナルが点灯したら」ということではなく「3つ以上」となっているのでAND条件で書くことができません。
シグナルの数を加算して、最終的なシグナルの数で仕掛け&手仕舞いをしましょうか。
int buySignal = 0;
int sellSignal = 0;
とりあえず変数宣言。条件に合致していたらこの数値を加算していきます。
//macd signal
macd=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
signal=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
if(macd > 0) buySignal++;
if(macd < 0) sellSignal++;
if(macd > signal) buySignal++;
if(signal > macd) sellSignal++;
MACDはこんな感じですかね。
0より上か下か、MACDがシグナルより上か下かを判断してシグナルの数を加算しています。(※ブログ用に整形しているので実際に作ったものとは少し違います)
モメンタムもMACDと同じ形で書いていきます。
//momentum
signal momentum=iMomentum(NULL,0,14,PRICE_CLOSE,0);
if(momentum > 100) buySignal++;
if(momentum < 100) sellSignal++;
モメンタムの本数は元サイトの設定(14)です。
最後はパラボリック。
今回は現在の価格(Bid)より上か下かでシグナルを発生させることにしました。
//parabolic SAR signal
double sar = iSAR(NULL, 0, 0.02, 2, 0);
if(Bid > sar) buySignal++;
if(sar > Bid) sellSignal++;
パラメータの指定は無かったのでMT4の規定値(ステップ 0.02, 上限2)を使いました。
後はこのシグナルの数を見て仕掛け・手仕舞いをするだけです。まずは手仕舞いのロジック。
if(CountOrders() > 0) {
bool isBuyClose = false;
bool isSellClose = false;
if(buySignal >= 2) isSellClose = true;
if(sellSignal >= 2) isBuyClose = true;
CloseOrder(isBuyClose, isSellClose);
}
CountOrdersという独自関数を使っていますが、他に稼動しているEAが無ければOrdersTotal()でOKです。
注文が入っていたらシグナルの数を見て2以上なら手仕舞いします。 ※CloseOrder関数も独自関数です。
そして仕掛けのロジックです。
if(CountOrders() == 0) {
if(buySignal >= 3)
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,comment,Magic,0,Blue);
if(sellSignal >= 3)
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,comment,Magic,0,Red);
}
単純に買いシグナルが3以上なら買い、売りシグナルが3以上なら売りをするだけです。
これで完成!所要時間は15分くらいでしょうか。
ブログの記事を書くほうが時間かかります(笑)
※上記ソースコードをコピペしても動きません。変数宣言と独自関数の部分は作る必要があります。
プログラムが終わったらバックテスト!この手法の実力は・・・?
強いトレンドにはしっかり乗って稼げるのですが、右端の四角の中のようにトレンドが無い状態(揉み合い)になるとシグナルを連発して無駄なトレードを繰り返します・・・。
※ユーロ円:期間2014年1月1日~2015年2月13日[MACD_Mom_ParSAR_EA.ex4]
全然ダメです!(笑)
コンピュータは例えばMACDがほんの僅かに0より上(0.001)であれば「MACDが0より上」と判断しますので、0付近で上下されるとダマシ頻発です・・・。
仕掛けロジックの変更
仕掛けのロジックを変更しました。
if(CountOrders() == 0) {
if(buySignal >= 3 && sellSignal == 0)
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,comment,Magic,0,Blue);
if(sellSignal >= 3 && buySignal == 0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,comment,Magic,0,Red);
}
買いシグナルが3以上になっても売りのシグナルが1つでも出ているときには仕掛けないようにします。
だいぶ良くなりました!全然使い物にならないけど(笑)
損切り(ストップロス)の追加
FX Worksの手法でたまに「損切りしません(ドヤァ)」って書いている人がいますが、それダメなやつですから!(苦笑)
ロジックによっては設定しない方が上手くいく場合もありますが、それでも想定外の動きに備えて設定しておくべきでしょう。
※仕掛けてから30pips逆行で損切り
見た目はあまり変わっていませんが、ちょっとだけ良くなっています。
1時間足より長い方が良さそう?
※4時間足でバックテスト
大きなトレンドを掴んで大きい利益が2回。それ以外はダマシの方が多い印象。
ちなみに日足はダメでした・・・。
トレード時間制限の追加
※UTC9時~13時(日本時間 18時~21時)
トレード時間をロンドン(欧州)市場のオープン~NY市場のオープン前までに限定することでプラスになりました。
(トレンドが発生しやすいロンドン市場のみトレードし、NY勢が入ってくる時間帯からは仕掛けない)
結論:レンジ相場になると、まるで役に立たない
トレンドフォローの宿命ですが・・・
レンジ相場ではダマシしかありません!(笑)
「どうやってレンジを避けてトレンドに乗っていくか?」 この手法を利用するにあたってはそれが課題となりそうです。(ロンドン時間のみに限定するのも、レンジを避ける有効な手段)
※手法の開発者がこれで勝っているとしたら、なんらかの裁量が入っているのは間違いないでしょう・・・。
レンジを避ければ勝てる!?
蛇足になりますが・・・先日、僕のブログを紹介してくれた「軒下のネコ」さんが
「レンジさえ避ければ裁量でもEAでも勝てるんじゃないか?」
と書いていらっしゃいました。これには僕も同感です。
「移動平均だけでも勝てるんじゃないか?」と思っています(笑)※今度検証してみようかな・・・?
参考:FX レンジを避ければ勝てる・・・かも & ブログのご紹介
※ご紹介ありがとうございます!(〃▽〃) 手法販売・無制限サポート付きで一万円とか安すぎる!(笑)
今度買ってみようかな?とか思っていたり・・・?
コメント
おはようございます。
楽しく読ませていただきました。やっぱりトレンドフォロー型のEAはレンジのダマシ回避が肝なんですね。資産グラフを見るとやはりトレード時間の制限をしないとダメなんだと思い知りました。
トレードを始めた頃はMACDとストキャストとパラボリックとATRと・・・なんて山ほどテクニカルを盛り込んだチャートでトレードしていたりしましたが、結局、勝てずチャートがどんどんシンプルになっていきました(苦笑) 今はあるテクニカルが一つだけでトレードする様になってしまいました(笑)
なので検証された手法の様にテクニカルがてんこ盛りだと「ほんとに勝てるのか?」という懐疑的な目で見る習慣がついてしまいました(苦笑)
ブログのご紹介、ありがとうございました。
「レンジを避ければ勝てる」と言うのは「言い過ぎか?」と思いましたが同意いただいてうれしいです(^^)
また、お伺いさせていただきます。
コメントありがとうございます。
>検証された手法の様にテクニカルがてんこ盛りだと「ほんとに勝てるのか?」という懐疑的な目で見る習慣がついてしまいました(苦笑)
この手法、たぶんこのままだと勝てないです(笑)
(数回の大きな勝ちに助けられているだけでマグレに近いかと・・・)
うまくトレンドに乗れば勝てるとは思いますが・・・
インジケーターを複数組み合わせても同じようなタイミングでシグナル出しますし、あまり意味は無いと僕は思ってます(笑)