Domande da un "manichino" - pagina 213

 
lazarev-d-m:

Uno dei modi più semplici per inserire

dove si vuole controllare se il codice funziona o controllare se una condizione è vera (cioè, se tutte le condizioni sono vere e un'azione deve essere presa)

Io, per esempio, inserisco Alert all'interno di ogni funzione complessa con un testo diverso, per controllare se la funzione è stata eseguita e se l'EA la raggiunge

Forse usate alcune condizioni e sono sempre false.

Grazie.
L'EA smette semplicemente di funzionare, senza alcun errore, e dopo aver riavviato il terminale riprende a funzionare.
Ho bisogno di sapere come controllare programmaticamente se funziona o no. Anche se è verde e non ci sono errori nel registro.
E dopo quella funzione di controllo metterò un avviso o una stampa o un commento.
 
G001: Potete dirmi per favore come controllare se l'Expert Advisor funziona o no?

Il fatto è che non ci sono errori nel log, ma l'EA a volte smette di funzionare, e viene ripristinato solo dopo aver riavviato il terminale.

Non mi è molto chiaro come definisci che "l'Expert Advisor smette di funzionare a volte". Forse, inizia solo un ciclo infinito. Il suo registro è vuoto e l'Expert Advisor lavora senza sosta. O forse ha qualche altra caratteristica speciale.

 

Ho bisogno di una risposta alla domanda di questo post: https://www.mql5.com/ru/forum/3775/page215#comment_379520

Qualcuno conosce la risposta?

 
tol64: Ho bisogno di una risposta alla domanda di questo post: https://www.mql5.com/ru/forum/3775/page215#comment_379520 Qualcuno conosce la risposta?

Sembra che non ci sia una risposta diretta, quindi siamo lasciati a speculare.

Quindi, il tipo di licenza può essere scoperto usando Mql5InfoInteger(MQL5_LICENSE_TYPE). Cioè, tra tutti i possibili valori dell'enumerazione ENUM_LICENSE_TYPE ne verrà restituito uno. Inoltre - con il metodo delle eccezioni: il limite di tempo operativo(LICENSE_TIME) non può essere restituito insieme ai tre valori precedenti dell'enumerazione specificata. In particolare, LICENSE_TIME non deve essere restituito contemporaneamente a LICENSE_DEMO .

Con questo ragionamento, darei una risposta negativa alla domanda "è implicito che un programma a pagamento per il Mercato possa essere limitato nel tempo in un test demo?" Perchéla demo di un prodotto a pagamento del mercato ha un proprio identificatore - LICENSE_DEMO.

 
Yedelkin:

Sembra che non ci sia una risposta diretta, quindi siamo lasciati a speculare.

Quindi, il tipo di licenza può essere scoperto usando Mql5InfoInteger(MQL5_LICENSE_TYPE). Cioè, tra tutti i possibili valori dell'enumerazione ENUM_LICENSE_TYPE ne verrà restituito uno. Inoltre - con il metodo delle eccezioni: il limite di tempo operativo(LICENSE_TIME) non può essere restituito insieme ai tre valori precedenti dell'enumerazione specificata. In particolare, LICENSE_TIME non deve essere restituito contemporaneamente a LICENSE_DEMO .

Con questo ragionamento, darei una risposta negativa alla domanda "è implicito che un programma a pagamento per il Mercato possa essere limitato nel tempo in un test demo?" Perchéla demo di un prodotto a pagamento del mercato ha un proprio identificatore - LICENSE_DEMO.

Penso che LICENSE_TIME possa contenere sia LICENSE_DEMO che LICENSE_TIME. Un chiaro esempio è dato da identificatori come MQL5_VISUAL_MODE e MQL5_TESTING. Quindi, entrambi ci fanno sapere che siamo in un tester. ))

Quindi mi chiedo: cosa hanno messo gli sviluppatori in questo identificatore? E in generale, se non c'è la possibilità di limitare il tempo di alcuni programmi a pagamento in modalità demo, sarebbe bello avere tale possibilità. Perché ci possono essere opzioni che possono essere molto redditizie da usare per i propri programmi anche senza comprarli. )))

 
tol64: E penso che sia LICENSE_DEMO che LICENSE_TIME possano essere contenuti in LICENSE_TIME allo stesso tempo .

Sono d'accordo che mi sono completamente perso le peculiarità terminologiche dei materiali di riferimento, a causa delle quali il metodo di esclusione può portare a risultati errati per una ragione o per l'altra. ...Beh, almeno, i malintesi sull'argomento sono espressi, e solo gli autori di questo elenco possono rispondere.

 
tol64: E in generale, se non c'è la possibilità di limitare il tempo di alcuni programmi a pagamento in modalità demo, mi piacerebbe avere tale possibilità. Perché ci possono essere opzioni che possono essere molto redditizie da usare per i propri programmi anche senza comprarli. )))
E fate questa proposta direttamente al Service Desk. Allo stesso tempo e scoprire come stanno veramente le cose :)
 
Yedelkin:

Non sono del tutto sicuro di come tu determini che "l'EA a volte smette di funzionare". Forse, inizia solo un ciclo infinito. Il registro è vuoto, ma l'Expert Advisor lavora senza sosta. O forse viene innescata qualche altra peculiarità.

Non ci sono anelli. Si apre abbastanza spesso, 10-20 volte al giorno, quando vedo segnali di indicatori sul grafico ma l'EA non ha aperto una posizione, significa che non sta funzionando. Riavvioil terminale e funziona di nuovo.
 
G001 quando vedo i segnali degli indicatori su un grafico ma Expert Advisor non ha aperto una posizione, significa che non sta funzionando

Questo si avvicina all'argomento. Quindi risulta che il tuo EA smette di reagire ai segnali dell'indicatore? Ma non significa che l'EA "non funziona". Forse, funziona ancora, ma non nel modo inteso dall'autore.

Prova a impostare un timer con un periodo, per esempio, di 10 minuti. E stampate tutti gli indici che sono significativi per il vostro Expert Advisor. Vedi se le cifre cambiano nel tempo. Se il log è vuoto anche in questo caso, dovreste sicuramente andare al Service Desk con una copia del codice.

Aggiunta. Oppure ecco un'altra idea. Hai un posto nel tuo codice con una condizione come se, dopo l'attivazione della quale deve essere inviata la richiesta di scambio. Provate a stampare i casi di innesco/non innesco di questa condizione, per esempio:

if ()
  {
   ... 
   Print("Сработало условие такое-то, время такое-то");
  }
else
  {
   ...
   Print("Не сработало условие такое-то, время такое-то");
  }
 
Grazie. È improbabile che il problema sia con l'EA, altrimenti la regola del riavvio del terminale non funzionerebbe sempre. Inoltre, è un problema anche in MT4 con alcuni broker. Ho solo bisogno di controllare programmaticamente quando smette di funzionare per riavviare prima del prossimo segnale. Aggiunte entrambe le stampe e i commenti.