目次
ゴールデンクロスとは
ゴールデンクロスって何?という方は以下の記事を参考にしてください。
ゴールデンクロスとは何か?2つの強みと2つの弱みを解説
トレードルール
一般的には、以下のようなルールでトレードします。
エントリールール
・短期移動平均線が長期移動平均線を下から上に抜けたら、買う
・短期移動平均線が長期移動平均線を上から下に抜けたら、売る
エクジットルール
・短期移動平均線と長期移動平均線が閉じる(再び交わる)
単純なこのルールだと、レンジ相場のような場合何度も取引をしてしまいます。
(例えば、短期移動平均線が長期移動平均線を下から上に抜けた後、すぐに値段か下がる場合)
これを解決するには以下のような対応方法が考えられます。
(1)シグナルが発生してから、一定時間経って問題ないことを確認する。
(例1) シグナルが発生してから、10分経っても平均移動線が閉じていないことを確認する。
(例2)ローソク足が確定するまで待つ。終値(Close)のみで取引する。
(2)一定のギャップが開くまで待つ
(例)短期移動平均線の期間と長期移動平均線の間に1Pipsのギャップが生じるまで待つ。
ここでは、(2)の対応方法を取ります。
以下のシミュレーションでは、以下のようなルールで行います。
エントリールール
・短期移動平均線が長期移動平均線を下から上に抜け、2Pipsギャップができたら買う
・短期移動平均線が長期移動平均線を上から下に抜けたら、2Pipsギャップができたら売る
※以下のソースコードでMinGap(単位はPoint、Pipsではない)として定義している
エクジットルール
・短期移動平均線と長期移動平均線が閉じる(再び交わる)
フィルター
・短期移動平均線が十分に傾いている。
傾きがフラットな場合を除きたいため、1Pips以上傾いていることを条件としている。
※ここで傾きは、現在の値段と1つ前の値段の差として定義している。
※ソースコードでMinSlope (単位はPoint、Pipsではない)として定義している
その他設定
・短期移動平均線は12SMA
・長期移動平均線は26SMA
・スプレッド:5Point(0.5Pips)
ソースコード
※以下のソースコードは、
『FXメタトレーダー実践プログラミング (現代の錬金術師シリーズ)』(豊嶋久道)
で紹介されているライブラリーを使用しています。
そのため、コピペだと動きません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
// マイライブラリー #include <MyLib.mqh> // マジックナンバー #define MAGIC 20094060 #define COMMENT "ゴールデンクロス" // 外部パラメータ extern double Lots=0.1; extern int Slippage=3; extern int FastMAPeriod=12; extern int SlowMAPeriod=26; extern double MinGap=20; // ギャップ(Point) extern double MinSlope=10; // 傾き最小値(Point) extern ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; extern ENUM_MA_METHOD ma_method=MODE_SMA; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ /* (エントリー)買う条件 ・fastMAがslowMAより高い(ギャップが空いている) ・fastMAの傾きが十分にある (エグジット) ・fastMAがslowMA交差する(ギャップが閉じる) */ //+------------------------------------------------------------------+ int EntrySignal(int magic) { // オープンポジションの計算 double pos=MyCurrentOrders(MY_OPENPOS,magic); double fastMA=iMA(_Symbol,0,FastMAPeriod,0,ma_method,applied_price,0); double slowMA=iMA(_Symbol,0,SlowMAPeriod,0,ma_method,applied_price,0); double fastMASlope=(iMA(_Symbol,0,FastMAPeriod,0,ma_method,applied_price,0) -iMA(_Symbol,0,FastMAPeriod,0,ma_method,applied_price,1))/Point; double slowMASlope=(iMA(_Symbol,0,SlowMAPeriod,0,ma_method,applied_price,0) -iMA(_Symbol,0,SlowMAPeriod,0,ma_method,applied_price,1))/Point; //fastMAがslowMAより高い(ギャップが空いている) double gap=(fastMA-slowMA)/Point; bool isFastMAUp=gap>MinGap; bool isFastMADown=gap<-MinGap; //fastMA十分が上向きにある(フラットでない) bool isFastMASlopeUp=fastMASlope>MinSlope; bool isFastMASlopeDown=fastMASlope<MinSlope; bool BuySignal=isFastMAUp && isFastMASlopeUp; bool SellSignal=isFastMADown && isFastMASlopeDown; int ret=0; // 買いシグナル if(pos<=0 && BuySignal) ret=1; // 売りシグナル if(pos>=0 && SellSignal) ret=-1; return(ret); } // エグジット関数 void ExitPosition(int magic) { // オープンポジションの計算 double pos=MyCurrentOrders(MY_OPENPOS,magic); double fastMA=iMA(_Symbol,0,FastMAPeriod,0,ma_method,applied_price,0); double slowMA=iMA(_Symbol,0,SlowMAPeriod,0,ma_method,applied_price,0); //fastMAがslowMAが交差する(ギャップが閉じている) bool isFastMADown=fastMA<slowMA; bool isFastMAUp=fastMA>slowMA; int ret=0; //if(pos < 0 && 売りポジションの決済シグナル) ret = 1; if(pos<0 && isFastMAUp) ret=1; //if(pos > 0 && 買いポジションの決済シグナル) ret = -1; if(pos>0 && isFastMADown) ret=-1; // オープンポジションの決済 if(ret!=0) MyOrderClose(Slippage,magic); } // スタート関数 int start() { // 売買ポジションのエグジット ExitPosition(MAGIC); // エントリーシグナル int sig_entry=EntrySignal(MAGIC); // 買い注文 if(sig_entry>0) { MyOrderClose(Slippage,MAGIC); MyOrderSend(OP_BUY,Lots,Ask,Slippage,0,0,COMMENT,MAGIC); } // 売り注文 if(sig_entry<0) { MyOrderClose(Slippage,MAGIC); MyOrderSend(OP_SELL,Lots,Bid,Slippage,0,0,COMMENT,MAGIC); } return(0); } //+------------------------------------------------------------------+ |
結果
プロフィットファクタが0.94なので、このルールでは利益を出しません。
今回の検証はスプレッドが0.5Pipsで設定した結果です。
現実にはありえませんが、スプレッドが0Pipsなら利益をだしていた可能性があります。
そのため、一定のエッジ(優位性)はありそうだが、スプレッドを考えると勝てないように思えます。
今回の検証は適当なパラメータで行ったので、まだまだ改善の余地はあります。
改善案
・長期移動平均線が、十分に下(または下)を向いている時のみトレードする
・他の指標を使って、フィルターをかける
・損切をもうける
・利確の判断を早くする
(トレンドの兆候が消えても、平均移動線が閉じるのに時間がかかります。その結果、獲得できる利益を減らしている可能性があります。
・パラメータの最適化
長期移動平均線の期間、短期移動平均線の期間、ギャップ(MinGap)、傾き(MinSlope)、平均線の種類(SMA、EMA、WMA)
~FXを始めてみませんか?~
XMは、口座を開設するだけで、3000円のボーナスが無料でもらえます。
資金はないけど、FXを試しに挑戦してみたい方でも大丈夫です。
(サイト主もXMを使用しています)
コメント