Afflitto dall'errore non ci sono operazioni commerciali - pagina 21

 
Arkadii Zagorulko:

Esattamente MT5...

Dicono che solo MT4 è il problema.

Forse è un sabotaggio per passare a MT5...

 

Se aiuta qualcuno, ecco come ho superato la convalida. EA senza stop e modifiche agli ordini ma su tutti i timeframe.

Il validatore ha dato l'errore 131 (lotto sbagliato) e nessun trade. Questo è il mio primo EA, quindi ci sono stati probabilmente tutti gli errori che ho fatto.

Prima ho aggiunto tutti i commenti in inglese per controllare le funzioni di trading, cioè se l'EA non fa trading, dovrebbe emettere un errore in Print().

Ho anche aggiunto il controllo del margine libero e rimosso ExpertRemove() ma non ha aiutato, gli errori sono rimasti gli stessi.

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

Ho fatto diversi altri cambiamenti in una volta sola, e non so quale di questi abbia aiutato.

Ho azzerato gli errori all'inizio e alla fine dell'Expert Advisor, ho controllato le quotazioni per tutti i TF

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();
  }

e il calcolo del lotto viene ricalcolato per tutti i casi, se il passo è (0,1), (0,01) e anche (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));

Come risultato posso dire che sono riuscito a risolvere tutto velocemente, solo 2 giorni e circa 10 tentativi

 
Descriverò i miei esperimenti con "non ci sono operazioni di trading":

1. Dopo aver ricompilato il vecchio EA da Market e aver provato a caricarlo sul sito, è apparso l'errore "non ci sono operazioni di trading":
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. Il controllo della disponibilità di quotazioni per tutti i TF non ha mostrato alcun errore (ho usato la divisione per 0).
3. Poi ho iniziato a controllare il volume delle operazioni di trading, ma allo stesso tempo ho ottenuto l'errore "non ci sono operazioni di trading".
4. Poi ha cambiato il numero di lotti in tutti gli OrderSend a SYMBOL_VOLUME_MIN - "non ci sono operazioni di trading"
5. Chiaramente c'è qualcosa che non va con il tester del validatore. E ho provato ad aggiungere l'apertura della posizione in OnInit():
double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
int ticket1=OpenPosition(NULL,OP_SELL,min_volume,0,0,magic);

e questo è ciò che ho ottenuto (a proposito, è la prima volta che lo vedo così dettagliato nel validatore):

 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'errore "non ci sono operazioni commerciali" è già chiaro qui. Se abbiamo un saldo di 1.00, ovviamente non possiamo aprire un ordine con 0.20 (SYMBOL_VOLUME_MIN). E il controllo del saldo nel codice soddisfa il suo scopo e non permette di piazzare un tale ordine e mostra una stampa nel giornale sul saldo insufficiente (solo che non viene mostrato nel validatore).

Come pensi che vada bene il validatore?


Aspetteremo che il validatore sia sistemato.

 
Il margine libero non mi disturba, perché sono stufo dell'Honduras.
 
Алексей Тарабанов #:
Il margine libero non mi preoccupa, sono stufo dell'Honduras.

Difficile? Sto parlando di espressione.

 
Sì, sto parlando dei parametri di test
 
Liberate la vostra memoria da ogni tipo di problema.
 

Ho trovato il problema, per default ho un limite sul lotto massimo di posizioni nei parametri di input.

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

Ecco perché non permette di aprire posizioni se SYMBOL_VOLUME_MIN nel validatore è 0,20. Non è possibile impostare un limite così piccolo sul lotto massimo di posizioni di default per il validatore.