Con cosa sostituire OnTradeTransaction() in mql4? - pagina 6

 
Vitaly Muzichenko:

No, ma forse stiamo parlando di cose diverse.

Questo funzionerà sempre.

Ancora mi ha fatto aprire il terminale e controllare... Ecco tre esecuzioni dello stesso script e tre risultati.

C'è solo una riga nella sceneggiatura.

  Print("OrdersHistoryTotal ", OrdersHistoryTotal());
2020.01.27 18:28:51.063 Script 00 EURGBP,H4: removed
2020.01.27 18:28:51.063 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:51.063 00 EURGBP,H4: OrdersHistoryTotal 48
2020.01.27 18:28:51.063 00 EURGBP,H4: initialized
2020.01.27 18:28:51.043 Script Test\00 EURGBP,H4: loaded successfully
2020.01.27 18:28:38.203 Script 00 EURGBP,H4: removed
2020.01.27 18:28:38.193 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:38.193 00 EURGBP,H4: OrdersHistoryTotal 47
2020.01.27 18:28:38.193 00 EURGBP,H4: initialized
2020.01.27 18:28:38.183 Script Test\00 EURGBP,H4: loaded successfully
2020.01.27 18:28:16.443 Script 00 EURGBP,H4: removed
2020.01.27 18:28:16.443 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:16.443 00 EURGBP,H4: OrdersHistoryTotal 4
2020.01.27 18:28:16.443 00 EURGBP,H4: initialized
2020.01.27 18:28:16.423 Script Test\00 EURGBP,H4: loaded successfully

Voglio dire che se un EA sta lavorando e un utente ha deciso di cambiare la gamma di visualizzazione della storia con le sue mani cattive, l'EA impazzirà durante il secondo switch. Ora sarà più piccolo, ora sarà più grande, ora sarà diverso da quello memorizzato. E anche se la linea

  if(HT!=__TotalHist)

mettere > invece di !=, la situazione non cambierà. Se l'EA è in esecuzione quando l'impostazione è impostata su "Oggi" e passa a "Tutta la storia"... cosa succede?

 
Aleksandr Volotko:

Non mi sognerei mai di toccare OrderHistoryTotal(), perché dovrei?

Non si sa mai:))))

 
Alexey Viktorov:

Non si sa mai:))))

:))) OrdersTotal() è abbastanza buono per me

Forse per fare due timer? uno confronta i valori di OrdersTotal() anche una volta in 100 ms, e il secondo per sicurezza una volta in un minuto (o meno frequentemente) in un ciclo - non un mouse può passare lì, se una delle due dozzine di transazioni si chiude/apre 100500 volte al minuto dopo - certamente non morirò, suppongo anche il deposito.

 
Aleksandr Volotko:

:))) OrdersTotal() è sufficiente per me

Forse dovrei fare due timer? Uno di loro confronta i valori di OrdersTotal() anche solo una volta ogni 100 ms, e il secondo - una volta ogni minuto (o meno frequentemente) passa attraverso il ciclo - non un singolo mouse può passare lì, se uno di due dozzine di ordini chiude/apre un minuto dopo, di 100500 volte - sicuramente non morirò e suppongo anche il mio deposito.

E quanti ordini aperti allo stesso tempo sono forniti dall'algoritmo?

 
Alexey Viktorov:

Ancora mi ha fatto aprire il terminale e controllare... Ecco tre esecuzioni dello stesso script e tre risultati.

C'è solo una linea nello script

Quello che voglio dire è che se l'EA funziona e un utente ha deciso di cambiare la gamma di visualizzazione della storia con le sue mani cattive, l'EA impazzirà durante il secondo switch. Ora sarà più piccolo, ora sarà più grande, ora sarà diverso da quello memorizzato. E anche se la linea

La situazione non cambia se mettiamo > invece di !=. Se l'Expert Advisor viene eseguito nel momento in cui l'impostazione è "Oggi" e passa a "Tutta la storia"... cosa succede?

In ogni caso, non sarà uguale, e il codice andrà oltre. Ma se impostiamoif(HT >__TotalHist), allora avremo dei problemi.

 
Alexey Viktorov:

E quanti ordini aperti prevede l'algoritmo in totale?

Due o tre dozzine al massimo.

 
Vitaly Muzichenko:

In ogni caso, non sarà uguale e il codice andrà avanti. Ma se (HT >__TotalHist)allora c'è un problema

Vitaly, ci saranno problemi in ogni caso. In qualsiasi modo la si guardi, se l'EA deve reagire ai cambiamenti nella quantità di ordini nella storia, reagirà indipendentemente da come è cambiata la quantità di ordini. Di fatto, la quantità di ordini nella storia può solo aumentare, per questo ho suggerito che sarebbe meno pericoloso, ma non risolve il problema. Anche se l'avete scritto solo per voi stessi, non potete escludere la possibilità di una commutazione manuale. Non sai mai che tipo di messaggio ti verrà in mente)))

 
Aleksandr Volotko:

2-3 dozzine al massimo

Per un tale numero, sarebbe più facile creare un array di biglietti o anche un array di strutture con proprietà di ordine e controllare il cambiamento del tipo e il tempo di chiusura su ogni tick. Questo ci permetterà di tracciare l'attivazione di un ordine in sospeso o la chiusura di una posizione. E aprendo subito dopo l'invio di OrderSend(), aggiungete la dimensione dell'array e metteteci dentro tutto quello che vi serve.

 
Questo è il punto, puoi agitare gli ordini 86400 volte al giorno, ma non vuoi farlo.
 
Aleksandr Volotko:
Questo è il punto, puoi agitare gli ordini 86400 volte al giorno, ma non vuoi farlo.

In questo caso, sarebbe difficile vivere senza la biblioteca di Artem.