「高確率ながら超簡単スキャルピング手法」のEA化

ネットでこんな記事が載っていました。

使うテクニカル分析はストキャスティックスでK%、D%、Slowingがそれぞれ14、3、3のいわゆるスローストキャスティックスの設定です。このトレード手法で使うテクニカル分析はこれだけです。これだけでも勝率が高いというのはバックテスト無しで私が判断し、尚且つ断言するところです。全てのエントリーをトレードロジックを理解しながらトレードする私が何故このような手法を紹介するのかはすぐに分かります。^^

ルール

15分足チャートでトレンドを確認。そして1分足チャートでエントリーのタイミングをストキャスティックス使って計る。上昇中ならストキャスティックスの20のレベルを抜けたら買いのみ。下降中ならストキャスティックスの80のレベルを抜けたら売りのみ。

「高確率ながら超簡単」ということなので、EA化して検証してみました。

バックテストの条件

  • 期間: 2013/7/1~2013/8/5
  • 売買方法: 記事の通り
  • トレンドの判断に使用したインディケーター:#_MTF_MovingAverage.mq4

バックテストの結果


残念ながらこの条件では右肩下がりの結果となってしまいました。
自動売買のポイントはこんな感じ
stochas

バックテストの検証

記事には「バックテストは必要ない」と書かれているので、この手法は裁量トレードが前提なのだと思われますが、敢えてEA化してみた結果、残念ながらこの条件ではあまり良い結果にはなりませんでした。

今回はトレンドの判断に15分足の移動平均線を使いましたが、記事を書かれた方は「トレンドの傾斜」についても触れられているので、もしかしたら単純に移動平均線を使ったトレンドの判断は適切ではないのかもしれませんので、そのあたりをうまく設定できれば爆発的な利益を生むEAになるのかもしれません。

トレンドの押し目を狙った順張りは、ボクが一番好きな手法ですので更に検証させていただきたいと思っています。
記事を書かれた方には大感謝です。

注目のスキャルピングEA

TURBOFXの記事


(参考)

</span></span>
<pre><pre>#property copyright "Copyright(C) 2013,michi"

#define INDIVAL_CNT 4
extern double Lots = 1;
extern int Slippage = 4;

int iIfchk[400];
int Magic = 59872465;

int init(){
   return(0);
}

int start(){
   int limit;
   int i;
   int iTicket;
   int iErrChk;
   double dRate;
   int iCloseTiket;
   double dPipsBuy[256][2];
   double dPipsSell[256][2];
   int iBuyCnt;
   int iSellCnt;
   int iBuyLimitCnt;
   int iSellLimitCnt;
   double dPipsAveBuy;
   double dPipsAveSell;
   double dLotBuy;
   double dLotSell;
   static int iOrderCheckBuy;
   static datetime tOrderTimeBuy;
   static int iOrderCheckSell;
   static datetime tOrderTimeSell;
   double dIndiVal[INDIVAL_CNT];
   ArrayInitialize(dIndiVal,0);

   double dPoint = Point;
   if( Digits==3 || Digits==5 ) dPoint = Point * 10;

   if( OrdersTotal() > 0){
      for( i=0; i<OrdersTotal(); i++ ){
         if( OrderSelect(i, SELECT_BY_POS) == true && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() ){
            if( OrderType() == OP_BUY ){
               dPipsBuy[iBuyCnt][0] = (Close[0] - OrderOpenPrice()) / dPoint;
               dPipsBuy[iBuyCnt][1] = OrderTicket();
               dPipsAveBuy = dPipsAveBuy + (dPipsBuy[iBuyCnt][0] * (OrderLots()/Lots));
               dLotBuy = dLotBuy + OrderLots();
               iBuyCnt++;
            }else if( OrderType() == OP_SELL ){
               dPipsSell[iSellCnt][0] = (OrderOpenPrice() - Close[0]) / dPoint;
               dPipsSell[iSellCnt][1] = OrderTicket();
               dPipsAveSell = dPipsAveSell + (dPipsSell[iSellCnt][0] * (OrderLots()/Lots));
               dLotSell = dLotSell + OrderLots();
               iSellCnt++;
            }else if( OrderType() == OP_BUYLIMIT || OrderType() == OP_BUYSTOP ){
               iBuyLimitCnt++;
            }else if( OrderType() == OP_SELLLIMIT || OrderType() == OP_SELLSTOP ){
               iSellLimitCnt++;
            }
         }
      }
      if( iBuyCnt > 0 ) dPipsAveBuy = dPipsAveBuy / (dLotBuy / Lots);
      if( iSellCnt > 0 ) dPipsAveSell = dPipsAveSell / (dLotSell / Lots);
   }

   dIndiVal[0] = iCustom(NULL,0,"Stochastic",14,3,3,0,0);
   dIndiVal[1] = iCustom(NULL,0,"Stochastic",14,3,3,0,1);
   dIndiVal[2] = iCustom(NULL,0,"!_MTF_MovingAverage",15,13,0,0,0,0,0);
   dIndiVal[3] = iCustom(NULL,0,"!_MTF_MovingAverage",15,13,0,0,0,0,15);

   if( iOrderCheckBuy == 1 ){
      if( tOrderTimeBuy != iTime(NULL,0,1) ){
         iOrderCheckBuy = 0;
      }
   }
   if( iOrderCheckSell == 1 ){
      if( tOrderTimeSell != iTime(NULL,0,1) ){
         iOrderCheckSell = 0;
      }
   }

   if( iBuyCnt < 1 && iSellCnt == 0 ){
      if( dIndiVal[1] <= 20 ){
         if( dIndiVal[0] > 20 ){
            iIfchk[0]++;
            if( dIndiVal[2] > dIndiVal[3] ){
               iIfchk[1]++;
               if( iOrderCheckBuy == 0 ){
                  iTicket = OrderSend( Symbol(),OP_BUY,Lots * 1,MarketInfo(Symbol(),MODE_ASK),Slippage,0,0,"",Magic,0,Red);
                  if( iTicket < 0 ){
                     Print( "Error opening BuyOrder :",GetLastError() );
                  }else{
                     for( i=10; i>=0; i-- ){
                        OrderSelect( iTicket, SELECT_BY_TICKET );
                        if( OrderModify( iTicket,OrderOpenPrice(),OrderOpenPrice()-(dPoint*6),0,0,Red ) ){
                           break;
                        }
                        Sleep(500);
                        RefreshRates();
                     }
                     iOrderCheckBuy = 1;
                     tOrderTimeBuy = iTime(NULL,0,1);
                  }
               }
            }
         }
      }
   }
   if( iSellCnt < 1 && iBuyCnt == 0 ){
      if( dIndiVal[1] >= 80 ){
         if( dIndiVal[0] < 80 ){
            iIfchk[2]++;
            if( dIndiVal[2] < dIndiVal[3] ){
               iIfchk[3]++;
               if( iOrderCheckSell == 0 ){
                  iTicket = OrderSend( Symbol(),OP_SELL,Lots * 1,MarketInfo(Symbol(),MODE_BID),Slippage,0,0,"",Magic,0,Blue);
                  if( iTicket < 0 ){
                     Print( "Error opening SellOrder :",GetLastError() );
                  }else{
                     for( i=10; i>=0; i-- ){
                        OrderSelect( iTicket, SELECT_BY_TICKET );
                        if( OrderModify( iTicket,OrderOpenPrice(),OrderOpenPrice()+(dPoint*6),0,0,Blue ) ){
                           break;
                        }
                        Sleep(500);
                        RefreshRates();
                     }
                     iOrderCheckSell = 1;
                     tOrderTimeSell = iTime(NULL,0,1);
                  }
               }
            }
         }
      }
   }
   if( iBuyCnt > 0 || iBuyLimitCnt > 0 ){
      if( dPipsAveBuy >= 6 ){
         iIfchk[4]++;
         if( iBuyCnt > 0 ){
            while( !IsStopped() ){
               iErrChk = 0;
               for( i=OrdersTotal()-1; i>=0; i-- ){
                  if( OrderSelect(i, SELECT_BY_POS) == true ){
                     if( OrderType() == OP_BUY && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() ){
                        if( !(OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Green)) ){
                           iErrChk = 1;
                        }
                     }
                  }
               }
               if( iErrChk == 0 ) break;
               Sleep(500);
               RefreshRates();
            }
         }
      }
   }
   if( iSellCnt > 0 || iSellLimitCnt > 0 ){
      if( dPipsAveSell >= 6 ){
         iIfchk[5]++;
         if( iSellCnt > 0 ){
            while( !IsStopped() ){
               iErrChk = 0;
               for( i=OrdersTotal()-1; i>=0; i-- ){
                  if( OrderSelect(i, SELECT_BY_POS) == true ){
                     if( OrderType() == OP_SELL && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() ){
                        if( !(OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Slippage,Green)) ){
                           iErrChk = 1;
                        }
                     }
                  }
               }
               if( iErrChk == 0 ) break;
               Sleep(500);
               RefreshRates();
            }
         }
      }
   }

   return(0);
}

int deinit(){
   int i;
   int handle;
   string swrite;

   swrite = ""+iIfchk[0]+","+iIfchk[1]+","+iIfchk[2]+","+iIfchk[3]+","+iIfchk[4]+","+iIfchk[5]+",";
   handle = FileOpen("EAEditorDebug.csv",FILE_CSV|FILE_WRITE,',');
   if( handle > 0 ){
      FileWrite( handle, swrite );
      FileClose( handle );
   }
   return(0);
}

一応下からダウンロードできます。


前へ( )次へ(
★ブログにはちょっと書けないEAの話はこちらで★
★プログラムに関する話も多分こちらで★
メルマガ購読・解除
 

3 Responses to “「高確率ながら超簡単スキャルピング手法」のEA化”

  1. kunis より:

    いつも大変参考になる記事ありがとうございます。

    上記EAの利益確定条件と損切り条件を教えていただけないでしょうか?

  2. kunis より:

    いつも大変参考になる記事ありがとうございます。

    上記EAの利確条件と損切り条件を教えていただけないでしょうか?

    • Michi Michi より:

      kunisさん、おはようございます。

      このEAではTP,SLともに6pipsとしていたようです。
      参考になれば幸いです。
      今後ともよろしくお願いいたしますm(__)m

コメントを残す

Time limit is exhausted. Please reload CAPTCHA.

このページの先頭へ