Trouble de l'erreur il n'y a pas d'opérations commerciales - page 21

 
Arkadii Zagorulko:

Exactement MT5...

Ils disent que seul MT4 est le problème.

C'est peut-être un sabotage pour passer à MT5...

 

Si cela peut aider quelqu'un, voici comment j'ai passé la validation. EA sans arrêts et modifications d'ordres mais sur tous les horizons temporels.

Le validateur a donné l'erreur 131 (mauvais lot) et aucune transaction. C'est ma première EA, donc j'ai probablement fait toutes les erreurs possibles.

Tout d'abord j'ai ajouté tous les commentaires en anglais pour vérifier les fonctions de trading, c'est-à-dire que si l'EA ne trade pas, il doit sortir une erreur dans Print().

J'ai également ajouté la vérification de la marge libre et supprimé ExpertRemove() mais cela n'a pas aidé, les erreurs sont restées les mêmes.

void buy()
  {
   if(AccountFreeMarginCheck(Symbol(),OP_BUY,Lots)>0)
     {
      if(OrderSend(_Symbol,OP_BUY,Lots,Ask,Slip,SLb,0,comment,Magic,0,Green)<1)
         Print(" Buy ​​order error !"+ IntegerToString(_Period,0) +" Error code = " + IntegerToString(GetLastError(),0));
     }
   else
      Print("Not enough money!" +" Error code = " + IntegerToString(GetLastError(),0));
      /// ExpertRemove();
   return;   
  }

J'ai effectué plusieurs autres changements en même temps, et je ne sais pas lesquels m'ont aidé.

J'ai réinitialisé les erreurs au début et à la fin du Conseiller Expert, vérifié les cotations pour tous les TFs.

int OnInit()
  {
    ResetLastError();   

      for(int cycle=1; cycle<=5; cycle++)
     {
      switch(cycle)
        {
         case 1:
            TF = PERIOD_D1;
            break;
         case 2:
            TF = PERIOD_H4;
            break;
         case 3:
            TF = PERIOD_H1;
            break;
         case 4:
            TF = PERIOD_M15;
            break;
         case 5:
            TF = PERIOD_M5;
            break;
        }
   if(iTime(_Symbol,TF,Limit)<1)
     Print("Missing quotes! " + IntegerToString(TF,0) + " Timeframe"+" Error = " + IntegerToString(GetLastError(),0));            
     }      
   return(INIT_SUCCEEDED);
  }
//****************************
void OnDeinit(const int reason)
  {  
   Alert("Error = "+ IntegerToString(GetLastError(),0));
   ResetLastError();
  }

et le calcul du lot est recalculé pour tous les cas, si le pas est (0,1), (0,01) et même (0,001).

double lotstep = MarketInfo(Symbol(),MODE_LOTSTEP);

   Lots = NormalizeDouble(AccountEquity()/10000*Lot_for_10K,3);
   if(lotstep>0.001)
   Lots = (MathRound(Lots/lotstep))*lotstep;    
   Lots = MathMax(Lots,MarketInfo(Symbol(),MODE_MINLOT));
   Lots = MathMin(Lots,MarketInfo(Symbol(),MODE_MAXLOT));

Je peux donc dire que j'ai réussi à tout régler rapidement, en seulement 2 jours et environ 10 essais.

 
Je vais décrire mes expériences avec "il n'y a pas d'opérations commerciales" :

1. Après avoir recompilé l'ancienne EA à partir de Market et essayé de la télécharger sur le site, l'erreur "there are no trading operations" est apparue :
test on EURUSD,H1
there are no trading operations
test on NZDUSD,H1
there are no trading operations
test on GBPUSDcheck,M30
there are no trading operations
test on XAUUSDcheck,Daily
there are no trading operations
2. La vérification de la disponibilité des citations pour toutes les TF n'a pas montré d'erreur (j'ai utilisé la division par 0).
3. J'ai ensuite commencé à vérifier le volume des opérations de trading, mais en même temps j'ai eu l'erreur "il n'y a pas d'opérations de trading".
4. Ensuite, le nombre de lots dans tous les OrderSend a été changé en SYMBOL_VOLUME_MIN - "il n'y a pas d'opérations de trading"
5. Il est clair que quelque chose ne va pas avec le testeur du validateur. Et j'ai essayé d'ajouter l'ouverture de la position dans OnInit() :
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
int ticket1=OpenPosition(NULL,OP_SELL,min_volume,0,0,magic);

et voici ce que j'ai obtenu (à propos, c'est la première fois que je le vois aussi détaillé dans le validateur) :

 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134
 2019.07.23 01:00:00  Tester: not enough money for sell 0.20 NZDUSD at 0.67567 sl: 0.00000 tp: 0.00000 [2019.07.23 01:00]
 2019.07.23 01:00:00  Tester: PrevBalance: 1.00, PrevPL: 0.00, PrevEquity 1.00, PrevMargin: 0.00, NewMargin: 135, FreeMargin: -134.14
 2019.07.23 01:00:00  Horizon_of_Infinity__1 NZDUSD,H1: OrderSend error 134


L'erreur "il n'y a pas d'opérations commerciales" est déjà claire ici. Si nous avons un solde de 1,00, nous ne pouvons évidemment pas ouvrir un ordre avec 0,20 (SYMBOL_VOLUME_MIN). Et le contrôle du solde dans le code remplit son rôle et ne permet pas de passer un tel ordre et affiche une impression dans le journal au sujet du solde insuffisant (seulement il n'est pas montré dans le validateur).

Comment pensez-vous que le validateur est OK ?


Nous allons attendre que le validateur soit réparé.

 
La margarine gratuite ne me dérange pas, parce que j'en ai marre du Honduras.
 
Алексей Тарабанов #:
La margarine gratuite ne me dérange pas, j'en ai marre du Honduras.

Difficile ? Je parle d'expression.

 
Oui, je parle des paramètres de test.
 
Videz votre mémoire de toutes sortes de choses.
 

J'ai trouvé le problème, par défaut j'ai une limite sur le lot maximum de positions dans les paramètres d'entrée.

input double MaxLots=0.1;
...
lots = MathMin(lots, MaxLots);

C'est pourquoi il ne permet pas d'ouvrir des positions si SYMBOL_VOLUME_MIN dans le validateur est 0.20. Vous ne pouvez pas fixer une limite aussi faible sur le lot maximal de positions par défaut pour le validateur.

Raison: