Imparare e scrivere insieme in MQL5 - pagina 26

 

Dal manuale:

Все возникающие события клиентский терминал складывает в общую очередь.

...La coda degli eventi ha una dimensione limitata.

Si è già parlato più volte della coda degli eventi, ma non sono riuscito a trovare la dimensione esatta. Quanto è profonda la coda degli eventi? 64? 256? ...eventi?
 

Allora, qualcuno mi aiuterà o no? A pagina 25, due consiglieri...

I rimproveri sono rimproveri. Ora aiutami a capire. Mi avete accusato di non darvi abbastanza dati per analizzare il problema. Non ho bisogno di altro. Puoi controllare quello che vuoi.

Immagino che tutti stiano testando i miei robot... Aspetterò. Probabilmente bisogna assumere un programmatore per soldi per aiutare a trovare un bug.

A proposito, qualcun altro ricorda come si chiama l'argomento del thread....?

 
Yedelkin:

Dal manuale:

C'è stata qualche discussione sulla coda degli eventi, ma non sono riuscito a trovare la dimensione esatta. Quanto è profonda la coda degli eventi? 64? 256? ...eventi?
Volevo anche chiedere, cosa succede se la coda degli eventi inizia ad accumularsi e si intasa? I nuovi eventi saranno ignorati o quelli già in coda saranno eliminati? E quando accadrà (a quale evento nella coda)?
 
Urain:
Volevo anche chiedere cosa succederà se la coda degli eventi inizia ad accumularsi e a soffocare? i nuovi eventi saranno ignorati o quelli già in coda saranno resettati? e naturalmente quando accadrà questo (a quale evento nella coda)?

già risposto

https://www.mql5.com/ru/forum/1621/43941#comment_43941

Таймер
Таймер
  • www.mql5.com
Предпосылки очень просты -- таймер обычно используется для синхронизации (ждем расчета данных) или обсервинга (зацикленный таймером эксперт, имхо, будет гораздо более адекватным).
 

Penso che un chiarimento sia ancora necessario, c'è una risposta ma è offuscata, le mie domande non sono nemmeno accennate.

Né indicazione esatta della lunghezza della coda, né quali eventi saranno saltati (cosa intendi per "parte degli eventi saranno saltati"?) quale parte?, i nuovi eventi o quelli già in coda? la logica è impotente qui, poiché i nuovi eventi possono essere più importanti di quelli in coda, o viceversa.

Quindi è meglio chiarire questo punto.

 
Khomtchenko:

Allora, qualcuno mi aiuterà o no? A pagina 25, due consiglieri...

I rimproveri sono rimproveri. Ora aiutami a capire. Mi avete accusato di non darvi abbastanza dati per analizzare il problema. Non ho bisogno di altro. Puoi controllare quello che vuoi.

Immagino che tutti stiano testando i miei robot... Aspetterò. Probabilmente bisogna assumere un programmatore per soldi per aiutare a trovare un bug.

A proposito, qualcun altro ricorda come si chiama l'argomento del thread....?

Avete uno slittamento di 50 in mql4 e 10 in mql5. Provate a impostare lo stesso slippage, forse la situazione si uniformerà perché molti ordini con un tale slippage potrebbero diventare requotes.

Meglio ancora, in entrambe le varianti impostate lo slippage alla dimensione dello spread.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
molotkovsm:

Ripeterò la domanda:

Come faccio a cancellare correttamente tutti gli ordini con una certa magia?

...

Ho bisogno di scorrere l'elenco degli ordini dall'alto verso il basso, per esempio così:

Ho provato a fare come hai detto tu, ma il problema rimane - l'ordine in sospeso viene cancellato prima, poi viene inviata un'altra richiesta per cancellare lo stesso ordine. Ecco un esempio delle linee di log:

2011.05.12 16:42:57 Traes '726238' : annulla l'ordine #4388299 buy stop 0.02 EURUSD a 1.41700 fatto - ordine cancellato con successo
2011.05.12 16:42:57 Trades '726238' : annulla l'ordine #4388299 buy stop 0.02 EURUSD a 1.41700 - Un'altra richiesta è stata inviata
2011.05.12 16:42:58 Trades '726238' : failed cancel order #4388299 buy 0.00 at 0.00000 [Invalid request] - buying already but buy stop was

Questo non succede sempre, ma a volte, e non influisce sul funzionamento dell'Expert Advisor. Voglio solo fare tutto bene, non caricare il server commerciale con richieste vuote e capire il problema.

Grazie per le vostre risposte e la vostra disponibilità ad aiutare.

-----------------
Cercherò di dare la mia opinione. Cancellare un ordine con un certo numero magico o qualsiasi altro non cambia la questione, così come scorrere gli ordini in senso longitudinale o trasversale. Puoi memorizzare un ordine e poi cancellarlo per biglietto, l'errore apparirà di tanto in tanto.

Come immagino, il server ha effettivamente cancellato l'ordine, come evidenziato dal messaggio nel log e nella risposta retcode del server. Ma il terminale non lo sa ancora, cioè l'ordine sta ancora lavorando per lui (o lo sa ma dà informazioni non aggiornate a EA, anche se poi avrebbe fallito il controllo) e al prossimo tick invia un'altra richiesta per cancellarlo e ottiene un errore dal server.

Il fatto che il server abbia trasformato un ordine buy stop in un semplice ordine buy, sembra essere un errore del server: non distingue questi ordini in caso di errore di richiesta. Questo è qualcosa da ricordare per gli sviluppatori.

Come possiamo evitare richieste ripetute? Penso che ci siano solo due modi:

1. Dopo aver cancellato con successo, analizza l'ultima cronologia, aspettando che l'ordine cancellato appaia in essa, poi continua.

2. introdurre semplicemente un ritardo, diciamo due secondi, dopo la cancellazione. Un secondo potrebbe non essere sufficiente.

Vorrei anche aggiungere che questa situazione si verifica non solo con gli ordini pendenti, ma anche con gli ordini a mercato, così come con le posizioni quando vengono cambiate. Questo accade piuttosto raramente e può essere notato solo quando si fa trading su un conto demo per molto tempo, ma nel tester, ovviamente, non si presenta. Inoltre, dopo aver cambiato una posizione, succede che il livello di margine che esisteva prima del cambiamento è invertito, probabilmente anche altri parametri del conto, non ho controllato.

 

У вас в mql4 стоит проскальзывание 50, а в mql5 10. Попробуйте поставить одинаковое проскальзывание возможно ситуация выровняется тк много приказов с таким слипажем может просто попадать на реквот.

E meglio ancora, in entrambe le varianti, impostare lo slippage alladimensione dello spread.

Ci proverò, ma è improbabile che la situazione migliori in modo manifesto.

Ho problemi di programmazione o va tutto bene?

 
Urain:

Penso che un chiarimento sia ancora necessario, c'è una risposta ma è offuscata, le mie domande non sono nemmeno accennate.

Né indicazione esatta della lunghezza della coda, né quali eventi saranno saltati (cosa intendi per "parte degli eventi saranno saltati"?) quale parte?, i nuovi eventi o quelli già in coda? la logica è impotente qui, perché forse i nuovi eventi possono essere più importanti di quelli in coda, e forse viceversa.

Quindi è meglio chiarire questo punto.

1)"stack nella coda comune" - errore nella documentazione. In realtà ci sono molte code. Attualmente, ogni programma mql5 e ogni grafico ha le proprie code. Le dimensioni delle code sono diverse e non sono piccole in generale, l'overflow della coda è improbabile per un programma scritto correttamente. Non documenteremo la dimensione esatta di ogni coda, il loro numero, o qualsiasi altra descrizione dettagliata dell'implementazione interna. La ragione è abbastanza ovvia - l'implementazione interna può cambiare.

2) Qualsiasi nuovo evento, per il quale non c'è abbastanza spazio in questa particolare coda, sarà saltato.

Vi ricordo che gli eventi di un nuovo tick e del cambiamento di un grafico possono esistere solo in una singola istanza nella coda degli eventi in entrata del programma mql5. La generazione di eventi di creazione e cancellazione di oggetti grafici su un grafico può essere abilitata/disabilitata.

 

Puoi dirmi cosa significano quelle barre verdi in basso? In MT4 significavano il volume del lotto e venivano disegnati quando il lotto cambiava. Ma a cosa serve qui? O il mio volume del lotto cambia? Sembra che io non lo cambi.

Motivazione: