MT4(MQL4)で仕手チェック(暴騰&暴落の検知)プログラムを作成

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

MQL4でEAを作成する際に困るのが暴騰と暴落のケース。検知する関数を作成してみました。

どんなテクニカル使っても、どんな手法で組んでも仕手が入ると崩れてしまいます。

 

それを検出して、仕手が入ったらと検知する関数作ってみました。

動かしてみて、ちゃんと検知できたので、たぶんイケてる思います。

目次

仕手の原理

仕手の原理をちゃんと把握しておかないと、プログラム組めません。

有名なトレーダーさんも推奨しているこちらの本を参考にしました。

仕手株投資に勝つ!

矢野テック
矢野テック

内容は株だけど、FXやってる方も読んだ方が良いです。仮想通貨やってる方は、絶対読んだ方がよいです(仕手入りまくりなので)

仕手でこういうケースを避けたい

MT4のEAだと、こういうケースですね。テクニカルだけ見ていると、マッチしてしまう。

暴落時も同様です。

これを検知したい。

仕手チェック関数

MQL4で組んでます。

確認はしていませんが、簡単なコードなので、MQL5(MT5)でも動作すると思います。

//+------------------------------------------------------------------+
//| 仕手チェック
//| 引数1 検知価格差: double max_check_kakaku 
//| 引数2 現在のAsk or Bid : double my_now
//| 戻り値 1=仕手あり 0=なし
//+------------------------------------------------------------------+
int Pump_check(double max_check_kakaku,double my_now){
   int ret = 0;
   int min_array_no = 0;
   int max_array_no = 0;
      
   double my_array[16];
   double my_kakakusa = 0;

   //配列に過去の終値をセット
   for(int i = 0; i < 15; i++){
      my_array[i] = Close[i+1];
   }
   
   my_array[15] = my_now;

   //最小の配列番号
   min_array_no = ArrayMinimum(my_array,WHOLE_ARRAY,0);

   //最大の配列番号
   max_array_no = ArrayMaximum(my_array,WHOLE_ARRAY,0);

   //期間内の価格差
   my_kakakusa = my_array[max_array_no] - my_array[min_array_no];

   //パンプチェック
   if(my_kakakusa >= max_check_kakaku){
      ret = 1;
   }else{
      ret = 0;
   }

   return ret;
}

使い方

呼び出して、1が返ってくれば仕手あり。0は、仕手なし。

   //仕手チェック
   int pump_check_flg = Pump_check(0.7,Ask);

 

前にお見せしたSMAの短期と長期のゴールデンクロスでの売買トレードに組み込むと(★の箇所)

   //・・・省略

   //ゴールデンクロスでBUYエントリー
   if((sma_short_before < sma_long_before) && //1バー前の短期移動平均線が長期移動平均線より小さい
      (sma_short_now >= sma_long_now) &&      //今の短期移動平均線が長期以上?
      (sma_short_now <  Ask) && //20SMAよりASKが大きい
      (damashi_chk >= 0.65) && //騙し対処
      (pump_check_flg != 1) &&   //★仕手チェック
       flg_buy == 0){

      ClosePositions_SELL();

      // レートのリフレッシュ
      RefreshRates();

      losscut_normalize = NormalizeDouble(Ask*(1-SLrate),trade_digit);
      profit_normalize  = NormalizeDouble(Ask*(1+Profitrate),trade_digit);

      //成り行きbuyオーダー
      OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,losscut_normalize,profit_normalize,"Buy order",MAGIC,0,clrOrangeRed);
   
      //フラグON      
      flg_buy = 1;
      

   }

   //・・・省略

仕手チェック関数のアルゴリズム

直前の15本のバーの終値と、現在の値(Ask or Bid)の最小と最大の価格差をチェックします。10本だと短すぎて、20本だと多いので、ちょうどよいのがこのくらいでした。

 

前のバーだけでなく、今現在のTickで超暴騰、暴落しているケースもあったので、買いの時はAskを、売りの時はBidを引数で渡して含めました。

 

価格差は、通貨ペア、見ている足によって変わるので、それも引数で渡せるようにしました。

例えば、USDJPYの1時間足であれば、0.7円くらい。0.5円だと検知しすぎてトレード出来なくなります

組み込んでみた結果

前に公開した「20SMAの短期、長期のゴールデンクロスでエントリーする」っていうEAに組み込んでみました

あわせて読みたい
【MT4のEA自作】SMA(単純移動平均線)のゴールデンクロスとデッドクロスで売買するEA 移動平均線のゴールデンクロスでエントリーするという、古典的なトレード手法をEAにしてみました。 ソースコードも公開しているので、ご参考くださいませ。 MT4のインス...

 

2019年のデータで、USDJPYペアの1時間足での結果は以下のとおり。

  • USDJPY1時間足でテスト
  • 10000$スタートで、+137$の黒字
  • 勝率100%
  • 7勝0敗

 

対処前と比べると、だいぶ変わったのが分かります。

 

 

 

 

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

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

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

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

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

友だち追加

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

この記事を書いた人

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

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

コメントする

目次