Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 239

 
Anatoli Kazharski #:

Come posso sapere se un simbolo ha dei dati, in modo da non lasciarlo nella finestra [Market Watch] se non li ha?

SymbolInfoTick.

 
fxsaber #:

SymbolInfoTick.

Ho provato questa opzione. Purtroppo non funziona. Se un simbolo viene aggiunto per la prima volta alla finestra [Market Watch], non ci sono ancora dati su di esso e SymbolInfoTick restituisce valori nulli.

Ho provato anche le funzioni CopyXXX, ma non hanno un timeout e il processo di attesa dei dati dal server dura circa 45 secondi, un tempo troppo lungo.

Ho bisogno di un modo rapido per scoprire se un carattere è inutilizzabile. Mi riferisco a casi come questo:


//---

Questi simboli non hanno dati sul server e serve un modo per identificarli in modo che non vengano aggiunti alla finestra [Panoramica del mercato] o rimossi dall'elenco se lo sono.

P.S. Forse esiste un modo per rimuovere il blocco della rimozione dei simboli dall'elenco nella finestra[ Market Watch]?

 
Anatoli Kazharski #:

Ho provato questa opzione. Purtroppo non funziona. Se un simbolo viene aggiunto per la prima volta alla finestra [Market Watch], non ci sono ancora dati su di esso e SymbolInfoTick restituisce valori nulli.

È facile ottenere simboli funzionanti a mano.

  1. Aggiungete tutti i simboli al Market Watch con un paio di clic.
  2. In un paio di secondi si riceveranno i tick su di essi.
  3. Ordinamento per tempo con un solo clic del mouse.
  4. Eliminazione di una delle code dell'elenco ottenuto con il tasto Del.
Tutto questo richiederà fino a mezzo minuto.
 
Anatoli Kazharski #:

Ho provato questa opzione. Purtroppo non funziona. Se un simbolo viene aggiunto per la prima volta alla finestra [Market Watch], non ci sono ancora dati su di esso e SymbolInfoTick restituisce valori nulli.

Ho provato anche le funzioni CopyXXX, ma non hanno timeout e il processo di attesa dei dati dal server dura circa 45 secondi, un tempo troppo lungo.

Ho bisogno di un modo rapido per scoprire se un carattere è inutilizzabile. Mi riferisco a casi come questo:


//---

Questi simboli non hanno dati sul server e hanno bisogno di un modo per essere identificati in modo che non vengano aggiunti alla finestra [Market Watch] o rimossi dall'elenco se lo sono.

P.S. Forse esiste un modo per rimuovere il blocco alla rimozione dei simboli dall'elenco nella finestra [Market Watch]?

Sono circa 6 anni che combatto con questo problema e chiedo agli sviluppatori di mettere ordine.

Purtroppo questo problema non è stato risolto e al momento ci sono situazioni in cui il terminale si blocca quando si accede per la prima volta a uno strumento finanziario.

 
Anatoli Kazharski #:

Come posso sapere se un simbolo ha dei dati, in modo da non lasciarlo nella finestra [Market Watch] se non li ha?

Utilizzo questo controllo in un ciclo:

Ma poi non posso rimuovere manualmente i simboli dalla finestra [Market Watch], né uno per uno né tutti insieme, mentre l'Expert Advisor è sul grafico:


Provare a controllare l'ora dell'ultima quotazione.

SymbolInfoInteger(name, SYMBOL_TIME);

Se 0, non ci sono dati.

Ho appena controllato con i grafici aperti.

2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) NZDUSD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EURGBP 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) GBPUSD 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) POZ3 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EDH4 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) BRZ3 1970.01.01 00:00:00
 
È possibile ottenere dati aggiuntivi passando da un server all'altro. Non so se sia possibile implementarlo tramite codice.
 
Nauris Zukas #:
È possibile ottenere dati aggiuntivi passando da un server all'altro. Non so se sia possibile implementarlo attraverso il codice.

Se per "tra server" si intende "tra broker", allora difficilmente, a meno che non si cerchi di giocare con i profili.

Ma se avessi davvero bisogno di passare da un server all'altro di un broker (Open ne aveva molti, Finam ne aveva due), lo farei tramite iptables/nftables e i miei script bash. Ma qui è più facile per me, ho Linux.

 
JRandomTrader #:

Se per "tra server" si intende "tra broker".


.

 
Nauris Zukas #:


Sì, in linea di principio è possibile.

Ma, poiché non c'è modo di scoprire il nome e l'ip del server dal programma MQL, dovrete scoprirli manualmente cambiando server e controllando a quale ip sta andando la connessione.

Poi è possibile, apportando modifiche alla configurazione del firewall, vietare la connessione a qualche server (in questo caso è necessario reindirizzare i pacchetti, non lasciarli cadere per evitare il timeout), costringendo MT a passare a un altro.

Anche in questo caso, per me non è difficile farlo con Linux, ma non riesco a immaginare come farlo con Windows.

 
Alexey Viktorov #:

Provare a controllare l'ora dell'ultima citazione.

Se 0, non ci sono dati.

Ho appena controllato i grafici aperti.

Questo vale anche per un caso simile:

Ho provato questa opzione. Purtroppo non è adatta. Se un simbolo viene aggiunto per la prima volta alla finestra [Market Watch], non ci sono ancora dati su di esso e SymbolInfoTick restituisce valori nulli.

Se i tick arrivano raramente, tutti questi simboli saranno esclusi.

fxsaber #:

È facile ottenere simboli funzionanti a mano.

  1. Aggiungete tutti i simboli al Market Watch con un paio di clic.
  2. In un paio di secondi si riceveranno i tick su di essi.
  3. Ordinare con un clic del mouse per tempo.
  4. Eliminazione di una delle code dell'elenco ottenuto con il tasto Del.
Tutto questo richiederà fino a mezzo minuto.

No. Avete bisogno di un programma completamente automatico.

Vladimir Pastushak #:

Sono già 6 anni che combatto con questo problema e chiedo agli sviluppatori di mettere ordine qui.

Purtroppo il problema non è stato risolto e al momento si verificano situazioni in cui il terminale si blocca quando si accede per la prima volta a uno strumento finanziario.

L'ho notato solo quando si chiamano le seguenti funzioni:

  • Bars()
  • iBars()
  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_BARS_COUNT)

//---

Sviluppatori del terminale:

1. escludere la possibilità di aggiungere simboli senza dati sul server di trading.

2. Rendere possibile disabilitare il blocco della cancellazione dei simboli dalla finestra [Market Watch] o correggerlo se si tratta di un bug. Ora è possibile farlo solo riavviando il terminale.

3. Per funzioni come CopyXXX , aggiungere un parametro opzionale per impostare il timeout (tempo massimo di attesa dei dati dal server).

Al momento non riesco a riprodurre questo problema. Finora funziona senza ritardi. Ma sembra che in alcuni casi possa accadere.

4. risolvere il bug dell'attesa infinita quando si utilizzano le funzioni Bars(), iBars(), SeriesInfoInteger(symbol, PERIOD_M1, SERIES_BARS_COUNT) nei casi in cui:

  • nessuna connessione al server
  • nessun dato sul simbolo

Il tentativo di cancellare il programma dal grafico può causare il blocco del terminale per diversi minuti.

5. Correggere il bug dell'attesa infinita quando si utilizzano le funzioni in assenza di connessione al server:

  • SeriesInfoInteger(simbolo, PERIOD_M1, SERIES_FIRSTDATE)
  • SerieInfoInteger(simbolo, PERIODO_M1, DATA ULTIMA BARRA)
  • SerieInfoInteger(simbolo, PERIOD_M1, SERIES_SERVER_FIRSTDATE)

In questo caso è possibile aggiungere un ulteriore parametro opzionale per impostare il timeout (tempo massimo di attesa dei dati dal server).

//---

P.S. Finora ho optato per la variante che prevede il controllo dei dati con funzioni come CopyXXX. Ma osserverò se il problema descritto sopra si ripresenterà.