なぜ私のEAはバックテスト時にマイナスの利益を出し続けるのでしょうか? - ページ 2

 
deVries:

あなたのコードを書き換えて、テストしてみました。

最高のバックテスト・データではありませんが、正しく実行すれば、利益を上げることができます。

ストラテジーテスターレポート
RSI_ストラテジー_CYXSTUDIO
AlpariUK-Demo - Micro+Classic (Build 451)

シンボルEURUSD (ユーロ vs 米ドル)
期間日足(D1) 2010.10.01 00:00 ~ 2013.01.29 00:00 (2010.10.01 ~ 2013.01.30)
モデル毎ティック(利用可能なすべての最小時間枠に基づく最も正確な方法)
パラメータRSIPeriod=3; UpperBound=90; LowerBound=5; MASlowPeriod=200; MAFastPeriod=5; Lots=0.1; StopLoss=60; TakeProfit=120; TrailingStop=40; MagicNumber=54333; CommentEA="RSI strategies"; Slippage.Pips=3.1;
テスト中のバー1603モデル化されたティック数40187739モデリング品質n/a
グラフの不一致エラー2062601
初期預金3000.00
純利益の合計967.18売上総利益2226.34総損失-1259.16
利益率1.77期待ペイオフ13.62
絶対的ドローダウン107.10最大ドローダウン327.47 (7.99%)相対ドローダウン7.99% (327.47)
総トレード数71ショートポジション (勝率)66 (69.70%)ロングポジション (ウォン)5 (80.00%)
利益取引 (%)50 (70.42%)損失トレード (% of total)21 (29.58%)
最大の利益取引120.07損失トレード-60.00
平均値利益トレード44.53損切り取引-59.96
最大連勝(儲け)8 (424.26)連続損失(資金での損失)3 (-179.93)
最大連続利益(勝利数)424.26 (8)連続損失-179.93 (3)
平均値連勝4連敗2


少なくとも7-10回はいろいろな方法で書きましたが、全く約定しないか、利益がマイナスになりました。
 
RaptorUK:
そうすると、何かおかしいと思うんです。


    if (BUYS<1 && CurrentRSI < LowerBound && pAsk > MA200) 
        {    //Condition to execute buy entry  
         Ticket = OrderSend(Symbol(), OP_BUY,......


// LowerBound=5


  if (SELLS<1 && CurrentRSI > UpperBound && pBid > MA200) 
      {     //Condition to execute sell entry
       Ticket = OrderSend(Symbol(), OP_SELL, Lots,......


// UpperBound=90
通常は「はい」ですが、今回は「いいえ」で、cyxstudioがRSI用に選択した 設定で行われています。
 
deVries:

あなたのコードを書き換えて、テストしてみました。

最高のバックテスト・データではありませんが、正しく実行すれば、利益を上げることができます。

ストラテジーテスターレポート
RSI_ストラテジー_CYXSTUDIO
AlpariUK-Demo - Micro+Classic (Build 451)

シンボルEURUSD (ユーロ vs 米ドル)
期間日足(D1) 2010.10.01 00:00 ~ 2013.01.29 00:00 (2010.10.01 ~ 2013.01.30)
モデル毎ティック(利用可能なすべての最小時間枠に基づく最も正確な方法)
パラメータRSIPeriod=3; UpperBound=90; LowerBound=5; MASlowPeriod=200; MAFastPeriod=5; Lots=0.1; StopLoss=60; TakeProfit=120; TrailingStop=40; MagicNumber=54333; CommentEA="RSI strategies"; Slippage.Pips=3.1;
テスト中のバー1603モデル化されたティック数40187739モデリング品質n/a
グラフの不一致エラー2062601
初期預金3000.00
純利益の合計967.18売上総利益2226.34総損失-1259.16
利益率1.77期待ペイオフ13.62
絶対的ドローダウン107.10最大ドローダウン327.47 (7.99%)相対ドローダウン7.99% (327.47)
総トレード数71ショートポジション (勝率)66 (69.70%)ロングポジション (ウォン)5 (80.00%)
利益取引 (%)50 (70.42%)損失トレード (% of total)21 (29.58%)
最大の利益取引120.07損失トレード-60.00
平均値利益トレード44.53損切り取引-59.96
最大連勝(儲け)8 (424.26)連続損失(資金での損失)3 (-179.93)
最大連続利益(勝利数)424.26 (8)連続損失-179.93 (3)
平均値連勝4連敗2


あなたのコードを拝見させていただけませんか?
 
deVries:
通常は「はい」ですが、今回は「いいえ」で、cyxstudioがRSI用に選択した 設定で行われます。
あ、そうか、説明できるのなら心配はないですね;-)
 

上値90、下値10で。

ストラテジーテスターレポート
RSI_ストラテジー_CYXSTUDIO
AlpariUK-Demo - Micro+Classic (Build 451)

シンボルEURUSD (ユーロ vs 米ドル)
期間日足(D1) 2010.10.01 00:00 ~ 2013.01.29 00:00 (2010.10.01 ~ 2013.01.30)
モデル毎ティック(利用可能なすべての最小時間枠に基づく最も正確な方法)
パラメータRSIPeriod=3; UpperBound=90; LowerBound=10; MASlowPeriod=200; MAFastPeriod=5; Lots=0.1; StopLoss=60; TakeProfit=120; TrailingStop=40; MagicNumber=54333; CommentEA="RSI strategies"; Slippage.Pips=3.1;
テスト中のバー1603モデル化されたティック数40187739モデリング品質n/a
グラフの不一致エラー2062601
初期預金3000.00
純利益の合計782.62売上総利益3062.38総損失-2279.76
利益率1.34期待ペイオフ7.38
絶対的ドローダウン106.90最大ドローダウン400.70 (9.90%)相対ドローダウン9.90% (400.70)
総トレード数106ショートポジション (勝率)66 (69.70%)ロングポジション (ウォン)40 (55.00%)
利益取引 (%)68 (64.15%)損失トレード (全体に占める割合)38 (35.85%)
最大の利益取引120.07損失トレード-60.12
平均値利益取引45.04損切り取引-59.99
最大連勝(儲け)8 (425.96)連続損失(資金での損失)4 (-240.12)
最大連続利益(勝利数)490.51 (6)連続損失-240.12 (4)
平均値連勝3連敗2

どのように見えるか

 
cyxstudio:

私はそれを勉強し、私の間違いから学ぶ必要があります。

これが始まりです......。

あなたのコメントをどうぞ......今までのあなたと何が違うのか......。

//+------------------------------------------------------------------+
//|                                       RSI_strategy_cyxstudio.mq4 |
//|                                  Copyright 2013, Tjipke de Vries |
//|                                     https://forum.mql4.com/53695/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


extern int RSIPeriod        =  3;      //number of periods for RSI
extern double UpperBound    =  90;     //set upper bound value for RSI
extern double LowerBound    =  5;      //set lower bound value for RSI
extern int MASlowPeriod     = 200;
extern int MAFastPeriod     = 5;
extern double Lots  = 0.1;
extern double StopLoss      = 60;       //Set the stop loss level
extern double TakeProfit    = 120;       //Set the take profit level
extern double TrailingStop = 40;
//extra settings for OrderSend
extern int        MagicNumber = 54333;
extern string     CommentEA = "RSI strategy";
extern int        Slippage.Pips    = 3;


int    BUYS=1,SELLS=1;
//++++ These are adjusted for 5 digit brokers.
int     pips2points;      // slippage  3 pips    3=points    30=points
double  pips2dbl;         // Stoploss 15 pips    0.015      0.0150
int     Digits.pips;      // DoubleToStr(dbl/pips2dbl, Digits.pips)
//---
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----   
   if(Digits % 2 == 1)  // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
     {pips2dbl = Point*10; pips2points = 10;   Digits.pips = 1;}
     else {pips2dbl = Point;    pips2points =  1;   Digits.pips = 0;}
     // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl        
//----      

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   int Ticket;
   double SL,TP;
   int Total;
   
   double pAsk = MarketInfo(Symbol(), MODE_ASK);
   double pBid = MarketInfo(Symbol(), MODE_BID);
   double MA200 = iMA(NULL, 1440, MASlowPeriod, 0,MODE_SMA,PRICE_CLOSE, 0);  //200 day Moving Average   
   double MA5 = iMA(NULL, 1440, MAFastPeriod, 0,MODE_SMA,PRICE_CLOSE, 0);      //  5 day Moving Average
   double CurrentRSI = iRSI (NULL, 1440, RSIPeriod,PRICE_CLOSE ,0);
   
   
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
   
   if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }


   if(OrdersTotal()<1)
        {
         BUYS=0;
         SELLS=0;
        } 

それから、https://www.mql5.com/en/forum/139654 を読んで、トレードをチェックするカウントダウンのループを作ってみてください。

 
deVries:

これが始まりです......。

あなたのコメントをどうぞ......今までのあなたと何が違うのか......。

それから、https://www.mql5.com/en/forum/139654 を読んで、トレードをチェックするカウントダウンのループを作ってみてください。


それは完全ではありません...

私は今、残りを埋めてテストしようとしています...。

ところで、単純なAskでも同じ値を返せるのに、なぜ を使うのでしょうか?

double pAsk = MarketInfo(Symbol(), MODE_ASK);  
 
cyxstudio:


完全ではないのですが...

今、残りを埋めてテストしているところです...。

ところで、単純なAskで同じ値を返せるのに、なぜ を使うのでしょうか?

Askが古くなっても、上の呼び出しはRefreshRates()を呼び出す必要なく最新のものになります。
 

int BUYS=1,SELLS=1;は、ポジションがオープンされたかどうかの指標になるのでしょうか?

自分のスクリプトを追加し、strategy testerで 20日間テストしたところ...何も起こらず、取引も執行されませんでした。

 
cyxstudio:

int BUYS=1,SELLS=1;は、ポジションがオープンされたかどうかの指標になるのでしょうか?

自分のスクリプトを追加し、strategy testerで20日間テストしたところ、何も起こらず、取引も執行されませんでした。

メタトレーダーを起動すると、EAはトレードがオープンされているかどうかを調べなければなりません。

トレードがある場合はトレードをチェック するためのカウントダウンのループだけやっています。

最初に1回でOrdersTotal()>0にしたら、トレードをチェックするようにした if(......> || ......> ){ループを実行する

理由: