Errori, bug, domande - pagina 1520

 
Slawa:

Non c'è ancora un altro modo.

Abbiamo discusso l'introduzione di un nuovo comando di uscita che terminerebbe immediatamente il programma, ma ci sono questioni irrisolte qui

Che peccato. Sì, un exit() come in C++ sarebbe bello. Oggi tirare la risposta delle funzioni annidate in quella chiamante è piuttosto problematico. E non ci sono biblioteche universali.
 
Alexey Kozitsyn:
Che peccato. Sì, un exit() come in C++ sarebbe bello. Oggi, tirare la risposta delle funzioni annidate in quella chiamante è piuttosto problematico. E non ci sono biblioteche universali.
Un altro modo è creare una funzione che rimuova tutti gli oggetti di un programma separatamente e chiamarla quando la condizione per rimuovere il programma dal terminale è soddisfatta, seguita daExpertRemove(), in questo caso tutto dovrebbe finire più velocemente... anche se non per certo :)
 
coderex:
In alternativa, si può creare una funzione separata per eliminare tutti gli oggetti del programma e chiamarla quando la condizione per eliminare il programma dal terminale è soddisfatta, seguita daExpertRemove(), in questo caso tutto dovrebbe essere completato più velocemente... anche se non per certo :)

Come ho scritto prima, ed è stato suggerito prima in un articolo su questo sito, in caso di errore in una funzione annidata profonda, si può chiamare la divisione per 0 o uscire dall'array. Ma non è bello.

Sì, e non si tratta solo di OOP (per quanto ho capito, tu lo intendi). Semplicemente - se un errore non può essere risolto, il programma sarà terminato.

 
Slawa:
Si ferma, ma non immediatamente
Non capisco, è corretto lavorare con ExpertRemove() negli indicatori o no?
 
Alexey Kozitsyn:
Non capisco, è corretto lavorare con ExpertRemove() negli indicatori o no?

Penso che ci sia una funzione per gli indicatori, o non è più rilevante

ChartIndicatorDelete();
 
Alexey Kozitsyn:
Non capisco, è corretto lavorare con ExpertRemove() negli indicatori o no?

No. ExpertRemove() si sovrappone agli indicatori.

"Si ferma, ma non immediatamente" si dice di ExpertRemove in generale. Questa funzione non interrompe il funzionamento del programma.

 
Slawa:

No. ExpertRemove() si sovrappone negli indicatori.

"Si ferma, ma non immediatamente" si dice di ExpertRemove in generale. Questa funzione non interrompe il funzionamento del programma.

In generale, c'è un piano per risolvere il problema con exit()? O gli utenti lo risolvono con le stampelle?)
 
Slawa:
Per favore, faccia un esempio. Dare il codice sorgente dell'indicatore per illustrare il problema
Inserire il testo nell'OnCalculate dell'indicatore predefinito creato nel redattore. Posizionatelo su qualsiasi grafico. Vedrete il funzionamento dell'indicatore nell'angolo superiore sinistro della finestra del grafico. Dopo aver selezionato "Elimina" dalla lista degli indicatori, non smetterà di funzionare, lo vedrete nell'angolo in alto a sinistra. Continuerà anche dopo la chiusura della finestra. Dopo aver aperto una nuova finestra, continuerà nella nuova finestra. Inoltre, questa finestra non ha necessariamente lo stesso simbolo di quella che avevi all'inizio :)
Il lavoro dell'indicatore si ferma solo quando il terminale è chiuso. E non so se si ferma o no - ho appena dovuto rimuovere manualmente il terminale tramite Task Manager per riavviarlo...

Allo stesso tempo, l'aiuto della funzione IsStopped dice che il funzionamento del programma si ferma dopo 3 secondi se c'è un comando per terminare un programma mql.

   int i=0;
   while(true){
      Comment(i++);
      Sleep(100);
   }

E se while(true) viene sostituito con while(!IsStopped()), l'indicatore si completa con successo quando viene rimosso dal grafico.

 

Un motivo divertente per l'errore interno del compilatore (funzione utilizzata nell'indicatore):

void SaveData ( uint handle_, int wrdata_, int interv_, string dpath_, int tmode_, int tmult_, long ctime_, long& ltime_ )
{
int ierr, wrtint;
// ----
if ( interv_ > 0 ) // modalità di lavoro
{
se ( MQLInfoInteger ( MQL_TESTER ) == 0 ) { wrtint = interv_; } // non ha significato
else{ wrtint = interv_ * tmult_; } // non importa
//
if ( ( ctime_ - ltime_ ) >= ( wrtint * 60 ) ) // se questa linea è commentata, l'errore scomparirà
{
// un po' di codice per salvare i dati ... non ha significato - testato
//
ltime_ = ctime_; // in generale non ha importanza
} // se ( ( ctime_ - ltime_ ) >= ( wrtint * 60 )
} // se ( interv_ > 0 )
// ----
ritorno;

} // void SaveData

(Scusa, non ho usato il pulsante SRC intenzionalmente, perché non posso selezionare le parti necessarie del testo con esso)

La cura è ovvia, ma dovreste essere d'accordo - è un glitch piuttosto divertente. :)))

 

Una società di intermediazione ha una commissione di 16x2 dollari per un fatturato di 1 milione. Sembra che abbiano impostato una commissione di 16 dollari nelle impostazioni del server. E ora durante il test sul loro server la commissione 16x2 viene detratta da ogni transazione indipendentemente dalla dimensione del lotto, cioè un test adeguato può essere fatto solo con 10 lotti.

È la loro mancanza di abilità nell'impostare i server o una reale limitazione di MT5? Cosa posso consigliare loro di fare esattamente sui server, in modo che la commissione sia elaborata correttamente nel tester?

Motivazione: