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

 
Alexey Viktorov:

Il computer è un idiota. © M.M. Botvinnik.

Quindi, fate finta di essere un idiota e provate a passare l'algoritmo dal punto di vista di un idiota e con i parametri fissati da un idiota. È da questo punto di vista che l'autovalidatore si adatta. Fate attenzione al "feedback". L'Expert Advisor vi informa degli errori?

Ho finalmente capito, forse qualcuno può aiutare, in generale, il Soviet ha solo quando la MM è stato controllato per un lotto minimo, e così hardcore set lot = 0,01, bene, nel deposito validatore risulta essere $ 1 (trovato questa informazione in uno dei topic), rispettivamente, utilizza il lotto 0,001 (o giù di lì) per il commercio e perché ho sempre avuto in un posto era lotto 0,01, rispettivamente, gli mancava il mezzo e il robot non commercia)

 
Roman Gergert:

Ho finalmente capito, forse qualcuno aiuterà, in generale, la scheda solo quando la MM è stata controllata per un lotto minimo, e così hardcore set lot = 0.01, bene, nel deposito validatore risulta essere $ 1 (trovato questa informazione in uno dei topic), rispettivamente, utilizza il lotto 0.001 (o così) per il commercio e perché ho sempre avuto in un posto un lotto di 0.01, rispettivamente, mancava i fondi e il robot non commercia)

Vorrei riproporre l'argomento. La sua risposta non mi aiuta. Ho un calcolo del volume e se tutto non ci sta, si usa il volume minimo:

SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN)

Alla fine, metti subito il volume minimo senza fare calcoli. Poi arriva il controllo dei margini... e nessuna operazione commerciale.

Ieri mi sono imbattuto in una risposta del forum che diceva che a volte uno stesso codice può essere inviato dopo un po' di tempo e passerà. Il tempo è passato, non viene inviato.

Cosa fare, 2 settimane fa questa funzione di rilevamento del volume è passata e da allora non è cambiata in nessun modo!!!

 
Evgeniy Scherbina:

Vorrei riproporre l'argomento. La sua risposta non mi aiuta. Ho un calcolo del volume, e se tutto non ci sta, allora si usa il volume minimo:

Alla fine, metti subito il volume minimo senza alcun calcolo. Poi arriva il controllo dei margini... e nessuna operazione commerciale.

Ieri mi sono imbattuto in una risposta del forum che diceva che a volte uno stesso codice può essere inviato dopo un po' di tempo e passerà. Il tempo è passato, non manda.

Cosa fare, 2 settimane fa questa funzione di rilevamento del volume è passata, e da allora non è cambiata in nessun modo!!!

Sarò un veterano. Con una tale valutazione, numeri sotto l'avatar, e avendo un problema non hai in qualche modo visto il topic dove se ne parlava. Ed è qui che è stata trovata la soluzione.

Автоматический валидатор - проблемы
Автоматический валидатор - проблемы
  • 2019.04.26
  • www.mql5.com
Пытаюсь обновить версию советника и получаю ошибку. Тот же советник в тестере стратегий. Паралельно пишу советники и для MT4, там все ОК...
 
Alexey Viktorov:

Sarò un veterano. Con una tale valutazione, numeri sotto l'avatar, e avendo un problema non hai in qualche modo visto il topic dove se ne parlava. Ed ecco che avete trovato una soluzione.

Tra i popoli della Russia c'è chi prega gli dei pagani e chi risponde
 
Evgeniy Scherbina:
Tra i popoli della Russia ci sono quelli che pregano gli dei pagani e quelli che rispondono

Ho risposto, ma non sono un dio pagano. Penso che questa sia una soluzione temporanea al problema, speriamo che venga risolto presto.

 
Nota - questo commento è probabilmente più per me stesso la prossima volta che cerco l'errore "non ci sono operazioni commerciali".
Usato ForceStop in luoghi dubbi. Inoltre sarà visualizzato nel rapporto come una divisione con zero e la posizione esatta di questo errore.
Esempio nel mio caso:
//+------------------------------------------------------------------+
//|  Проверяет объем ордера на корректность                          |
//+------------------------------------------------------------------+
int ForceStop=0;
int sstop=0;
bool CheckVolumeValue(double volume,string &description)
  {
  
//--- минимально допустимый объем для торговых операций
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {     
      description=StringFormat("Volume is less than the minimum allowable SYMBOL_VOLUME_MIN=%.2f",min_volume);
      sstop=5/ForceStop; // force stop, zerro divide
      return(false);
     }

//--- максимально допустимый объем для торговых операций
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
      description=StringFormat("Volume is greater than the maximum allowable SYMBOL_VOLUME_MAX=%.2f",max_volume);
      sstop=5/ForceStop; // force stop, zerro divide
      return(false);
     }

//--- получим минимальную градацию объема
   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
     {
      description=StringFormat("The volume is not a multiple of the minimum gradation SYMBOL_VOLUME_STEP=%.2f, Closest correct volume %.2f",
                               volume_step,ratio*volume_step);
      sstop=5/ForceStop; // force stop, zerro divide
      return(false);
     }
   description="Correct value of volume";
   return(true);
  }
 

Fratello, mi ha aiutato a spostare tutte le variabili nell'intestazione del codice.

void OnDeinit

{
Alert(GetLastError());

}

E nell'init ResetLastError();

Non so cosa abbia funzionato, ma qualcosa del genere

 

Mi aiuta a cambiare (modificare) semplicemente qualche riga del codice.
O semplicemente aggiungere linee vuote e ricompilare di nuovo.

Penso che sia una specie di bug sul server.

 
Taras Slobodyanik:

O semplicemente aggiungere linee vuote e ricompilare di nuovo.

Confermato, a volte basta ricompilare e funziona.

 
Nauris Zukas:

Confermato, a volte basta ricompilare e passa.

Non è perché l'ho ricompilato, è perché il test è partito da una data diversa. E ho notato un tale bug, se si infila qualcosa che è già stato, allora il test non avviene, e dà immediatamente il risultato del test precedente. Quindi, non fatevi ingannare da queste stampelle. Cerca di renderlo normale. Se manca qualcosa o i parametri non sono validi, segnalalo tramite Print e tutto sarà corretto.