Pourquoi mon EA donne-t-il toujours un profit négatif lors du back-testing ? - page 2

 
deVries:

J'ai réécrit votre code et essayé un test, voir aussi les paramètres.

Ce n'est pas avec les meilleures données de backtest mais si vous le faites correctement, cela peut être rentable.

Rapport du testeur de stratégie
RSI_strategy_cyxstudio
AlpariUK-Demo - Micro+Classic (Build 451)

SymboleEURUSD (Euro vs Dollar US)
PériodeJournalière (D1) 2010.10.01 00:00 - 2013.01.29 00:00 (2010.10.01 - 2013.01.30)
ModèleChaque tick (la méthode la plus précise basée sur tous les délais les plus courts disponibles)
ParamètresRSIPeriod=3 ; UpperBound=90 ; LowerBound=5 ; MASlowPeriod=200 ; MAFastPeriod=5 ; Lots=0.1 ; StopLoss=60 ; TakeProfit=120 ; TrailingStop=40 ; MagicNumber=54333 ; CommentEA="Stratégie RSI" ; Slippage.Pips=3 ;
Barres dans le test1603Ticks modélisés40187739Qualité de la modélisationn.d.
Erreurs de cartes non concordantes2062601
Dépôt initial3000.00
Bénéfice net total967.18Bénéfice brut2226.34Perte brute-1259.16
Facteur de profit1.77Gain attendu13.62
Pertes absolues107.10Pertes maximales327.47 (7.99%)Tirage relatif7.99% (327.47)
Total des transactions71Positions courtes (% gagné)66 (69.70%)Positions longues (% gagné)5 (80.00%)
Transactions à profit (% du total)50 (70.42%)Transactions perdantes (% du total)21 (29.58%)
Le plus grandtransaction à profit120.07transaction perdante-60.00
Moyenneprofit commercial44.53transaction à perte-59.96
Maximumvictoires consécutives (profit en argent)8 (424.26)Pertes consécutives (perte d'argent)3 (-179.93)
Maximalgains consécutifs (nombre de victoires)424.26 (8)Perte consécutive (nombre de pertes)-179.93 (3)
Moyennegains consécutifs4pertes consécutives2


j'ai écrit au moins 7-10 fois de différentes manières et soit il n'a pas exécuté de position du tout, soit il a fait un profit négatif... comment avez-vous fait ? ? ???
 
RaptorUK:
Cela me fait penser qu'il y a quelque chose qui ne va pas.


    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
Normalement oui mais dans ce cas non, c'est fait avec les paramètresquecyxstudio a choisi pour le RSI.
 
deVries:

J'ai réécrit votre code et essayé un test, voir aussi les paramètres.

Ce n'est pas avec les meilleures données de backtest mais si vous le faites correctement, cela peut être rentable.

Rapport du testeur de stratégie
RSI_strategy_cyxstudio
AlpariUK-Demo - Micro+Classic (Build 451)

SymboleEURUSD (Euro vs Dollar US)
PériodeJournalière (D1) 2010.10.01 00:00 - 2013.01.29 00:00 (2010.10.01 - 2013.01.30)
ModèleChaque tick (la méthode la plus précise basée sur tous les délais les plus courts disponibles)
ParamètresRSIPeriod=3 ; UpperBound=90 ; LowerBound=5 ; MASlowPeriod=200 ; MAFastPeriod=5 ; Lots=0.1 ; StopLoss=60 ; TakeProfit=120 ; TrailingStop=40 ; MagicNumber=54333 ; CommentEA="Stratégie RSI" ; Slippage.Pips=3 ;
Barres dans le test1603Ticks modélisés40187739Qualité de la modélisationn.d.
Erreurs de cartes non concordantes2062601
Dépôt initial3000.00
Bénéfice net total967.18Bénéfice brut2226.34Perte brute-1259.16
Facteur de profit1.77Gain attendu13.62
Pertes absolues107.10Pertes maximales327.47 (7.99%)Tirage relatif7.99% (327.47)
Total des transactions71Positions courtes (% gagné)66 (69.70%)Positions longues (% gagné)5 (80.00%)
Transactions à profit (% du total)50 (70.42%)Transactions perdantes (% du total)21 (29.58%)
Le plus grandtransaction à profit120.07transaction perdante-60.00
Moyenneprofit commercial44.53transaction à perte-59.96
Maximumvictoires consécutives (profit en argent)8 (424.26)Pertes consécutives (perte d'argent)3 (-179.93)
Maximalgains consécutifs (nombre de victoires)424.26 (8)Perte consécutive (nombre de pertes)-179.93 (3)
Moyennegains consécutifs4pertes consécutives2


pourriez-vous me laisser regarder votre code ? j'ai besoin de l'étudier et d'apprendre de mes erreurs.
 
deVries:
Normalement oui, mais dans ce cas non, c'est fait avec les paramètresquecyxstudio a choisi pour le RSI.
Ah OK, si vous pouvez l'expliquer alors il n'y a pas lieu de s'inquiéter ;-)
 

Avec UpperBound 90 et LowerBound 10

Rapport du testeur de stratégie
RSI_stratégie_cyxstudio
AlpariUK-Demo - Micro+Classic (Build 451)

SymboleEURUSD (Euro vs Dollar US)
PériodeJournalière (D1) 2010.10.01 00:00 - 2013.01.29 00:00 (2010.10.01 - 2013.01.30)
ModèleChaque tick (la méthode la plus précise basée sur tous les délais les plus courts disponibles)
ParamètresRSIPeriod=3 ; UpperBound=90 ; LowerBound=10 ; MASlowPeriod=200 ; MAFastPeriod=5 ; Lots=0.1 ; StopLoss=60 ; TakeProfit=120 ; TrailingStop=40 ; MagicNumber=54333 ; CommentEA="Stratégie RSI" ; Slippage.Pips=3 ;
Barres dans le test1603Ticks modélisés40187739Qualité de la modélisationn.d.
Erreurs de cartes non concordantes2062601
Dépôt initial3000.00
Bénéfice net total782.62Bénéfice brut3062.38Perte brute-2279.76
Facteur de profit1.34Gain attendu7.38
Pertes absolues106.90Pertes maximales400.70 (9.90%)Tirage relatif9.90% (400.70)
Total des transactions106Positions courtes (% gagné)66 (69.70%)Positions longues (% de gains)40 (55.00%)
Transactions à profit (% du total)68 (64.15%)Transactions déficitaires (% du total)38 (35.85%)
Le plus grandtransaction à profit120.07transaction à perte-60.12
Moyenneprofit commercial45.04transaction à perte-59.99
Maximumvictoires consécutives (profit en argent)8 (425.96)Pertes consécutives (perte en argent)4 (-240.12)
Maximalgain consécutif (nombre de victoires)490.51 (6)Perte consécutive (nombre de pertes)-240.12 (4)
Moyennegains consécutifs3pertes consécutives2

Comment cela se présente-t-il ?

 
cyxstudio:

Pourriez-vous me laisser regarder votre code ? J'ai besoin de l'étudier et d'apprendre de mes erreurs.

C'est le début.....

Donnez votre commentaire ..... sur ce qui est différent du vôtre jusqu'à présent...

//+------------------------------------------------------------------+
//|                                       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;
        } 

Puis lisez le site https://www.mql5.com/en/forum/139654 et essayez de créer une boucle de décompte pour vérifier les transactions.

 
deVries:

C'est le début.....

Donnez votre commentaire ..... sur ce qui est différent du vôtre jusqu'à présent...

Puis lisez le site https://www.mql5.com/en/forum/139654 et essayez de créer une boucle de décompte pour vérifier les transactions.


Ce n'est pas complet...

J'essaie de remplir le reste et de le tester maintenant...

au fait, pourquoi utiliser alors qu'un simple Ask peut retourner la même valeur ?

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


Ce n'est pas complet...

J'essaie de compléter le reste et de le tester maintenant...

Au fait, pourquoi utiliser alors qu'un simple Ask peut retourner la même valeur ?

Ask peut être obsolète, l'appel ci-dessus sera à jour sans avoir besoin d'appeler RefreshRates().
 

En outre, les int BUYS=1, SELLS=1 ; sont censés être des indicateurs de l'ouverture d'une position, n'est-ce pas ?

J'ai ajouté mes propres scripts et lorsque je les ai testés avec le testeur de stratégie pendant 20 jours... rien ne s'est produit, aucune transaction n'a été exécutée.

 
cyxstudio:

En outre, les int BUYS=1, SELLS=1 ; sont censés être des indicateurs de l'ouverture d'une position, n'est-ce pas ?

J'ai ajouté mes propres scripts et lorsque je l'ai testé avec Strategy Tester pendant 20 jours... rien ne s'est produit, aucune transaction n'a été exécutée.

lorsque vous démarrez votre Metatrader, l'EA doit savoir s'il y a une position ouverte.

Je ne fais que la boucle de décompte pour vérifier les transactions s'il y a une transaction.

Si je le règle au début sur un et que OrdersTotal() >0 alors je le fais vérifier les trades if(.......> || .......> ){faire la boucle....