直近の勝率を知る。

ぐれ 2010/10/06 21:00
http://kakakufx.com/mk2/trader/programming.html  この様なサ−ポトが あるのですが

↑コメント文が欠けているのか意味がよくわかりませんが、リンク先の dukascopyのシステムと直結する自動売買プラットフォームには興味があります。。暇になったら口座開設でもしようかなと思ってます。ただ、1000通貨単位からトレードできるという点が微妙に妖しさを醸しだしている気がします...orz







さて、本題です。

nu 2010/10/01 11:13
直近n回の勝率に応じてパラメータを変化させるというロジックです。
mql4で実現可能でしょうか?
私が今運用しているEAは発注時にリミット、ストップを指定しています。
その後の値動きを検証するような機構を作れば不可能ではないような気はするのですが・・

直近n回の勝率を取得したい場合は、MQL4で売買履歴を参照すればよいと思います。
以下のような関数を用意して、GetWinningPercentage(n,magicnumber) とすれば、EAを動かしている通貨ペアでマジックナンバーが一致するトレードの直近n回の勝率が取得できるはずです。
3連敗したらその日はトレードを止めるといった応用にも使えます。

double GetWinningPercentage(int TradeCount = 10,int MagicNumber = 0){
   int win,lose,count = 0;
   int total=OrdersHistoryTotal();
   for(int pos=total-1;pos>=0;pos--)
   {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY)==false) continue;
      if(OrderSymbol()== Symbol() && 
         OrderMagicNumber() == MagicNumber)
      {
         double profit = OrderProfit();
         if(profit >=0){
            win++;
         }else{
            lose++;
         }
         count++;
         if(count >=TradeCount) break;
      }
   }
   if(count == 0) return(100);
   return(100.0*(win)/(win+lose));
}

売買履歴を参照するコードを使う場合、MT4のターミナルの口座履歴でも十分な期間の履歴を表示させる設定にする必要があります。参照期間を、全履歴や3ヶ月、1ヶ月、など適宜設定してください。