![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Devo essermi perso un topic come questo. Dove posso vedere la funzione di controllo degli ordini di KimV?
È per la quarta versione, ma puoi dargli un'occhiata, può essere utile. Potete dare un'occhiata sul suo sito, nella sezione "biblioteche gratuite", la biblioteca per gli ordini.
da un quattro non funzionerà. Io uso
PositionSelect
Seleziona una posizione aperta per ulteriori manipolazioni. Restituisce true se la funzione si completa con successo. Restituisce false se la funzione fallisce. Per ottenere le informazioni sull'errore, chiamate la funzione GetLastError().
boolPositionSelect(
simbolo stringa//nome dello strumento
);
Parametri
simbolo
[Nome dello strumento finanziario.
Valore restituito
Valore di tipo bool.
Nota
Per ogni simbolo, solo una posizione può essere aperta in qualsiasi momento, che è il risultato di uno o più scambi. Le posizioni e gli ordini pendenti attivi che sono anche visualizzati nella scheda "Trade" del pannello "Toolbox" del terminale client non devono essere confusi.
La funzione PositionSelect() copia i dati sulla posizione nell'ambiente del programma, e le chiamate successive PositionGetDouble(), PositionGetInteger() e PositionGetString() restituiscono i dati precedentemente copiati. Questo significa che la posizione stessa potrebbe non esistere più (o potrebbe essere cambiata in volume, direzione, ecc.), ma i dati di questa posizione possono ancora essere recuperati. Per garantire l'acquisizione di dati di posizione freschi, si raccomanda di chiamare la funzione PositionSelect() immediatamente prima di richiederli.
da un quadruplo non funzionerà. Uso PositionSelect per definire la posizione
State analizzando queste situazioni nelle prealternative di una zecca o su diverse zecche?
Ok, procedo da quanto segue:
Un tick è un cambiamento nel prezzo di uno strumento. La frequenza di questi cambiamenti è imprevedibile: da alcuni al secondo a diversi all'ora. Di conseguenza, le funzioni OrderSend() e PositionSelect() non devono dipendere dall'attività dei tick. E poiché è così, penso che dovremmo controllare per evitare la duplicazione degli ordini (e analizzare le situazioni corrispondenti) senza relazione al comportamento (frequenza) dei tick.
Quindi trovo difficile rispondere alla domanda in modo preciso :/.
Non è quello che intendevo quando ho fatto la mia domanda. Il gestore dell'evento OnTick() viene attivato quando arriva il prossimo tick. Per questo motivo, riformulo la mia domanda:
Analizzate queste situazioni all'interno di una chiamata OnTick() o diverse?
Beh, non riesco ancora ad avere una risposta: su un tick esegui OrderSend() e PositionSelect()?
Voglio suggerirvi di fare queste interrogazioni non entro un tick (innescando OnTick()), ma su due tick:
- sul primo segno di spunta
cioè se la richiesta ha successo, si imposta il flag di apertura della posizione su buy=true, e si interrompe l'esecuzione di OnTick() fino al prossimo tick (innesco di OnTick() operator return.
- Al secondo tick - PositionSelect().
In questo caso non si ha la duplicazione dell'apertura della posizione.
Nessuna garanzia che la posizione sia già aperta al prossimo tick. Misura il tempo necessario per aprire una posizione quando si imposta un ordine manualmente,
Ti consiglio di spostare il controllo dell'esecuzione dell'ordine a OnTrade(), questo evento viene generato solo come risposta del server a un'operazione di trading.
Anche se non mi è molto chiaro perché ci sono 4 eventi OnTrade() per ordine?
Beh, non riesco ancora ad avere una risposta: su un tick esegui OrderSend() e PositionSelect()?
Secondo la vostra terminologia, risulta che le mie funzioni OrderSend() e PositionSelect() sono eseguite "entro un tick".
...voglio suggerire che queste query siano eseguite non entro un singolo tick (innesco di OnTick()), ma entro due tick:
- sul primo segno di spunta
cioè se la richiesta risponde con successo, si imposta la bandiera per aprire la posizione in buy=true, e si interrompe l'esecuzione di OnTick() fino al prossimo tick (innesco di OnTick() operatore di ritorno.
- Al secondo tick - PositionSelect().
In questa variante non avrete un'apertura duplicata delle posizioni.
Poco prima ho scritto che l'esecuzione delle funzioni OrderSend() e PositionSelect() non ha niente a che vedere con l'arrivo o il non arrivo dei tick. E ho spiegato brevemente perché. Pertanto, il controllo "sul secondo tick - PositionSelect()" non dovrebbe salvarci dal raddoppio degli ordini in tutti i casi possibili.
Anche se non mi è molto chiaro perché ci sono 4 eventi OnTrade() per ordine?
C'era un articolo in passato su OnTrade().
Non c'è garanzia che la posizione sia già aperta al prossimo tick...
Beh, non riesco ancora ad avere una risposta: su un tick esegui OrderSend() e PositionSelect()?
Voglio suggerirvi di fare queste interrogazioni non entro un tick (innescando OnTick()), ma su due tick:
- sul primo segno di spunta
cioè se la richiesta risponde con successo, si imposta il flag di apertura della posizione su buy=true, e si interrompe l'esecuzione di OnTick() fino al prossimo tick (innesco di OnTick() operatore di ritorno.
- Al secondo tick - PositionSelect().
In questo caso non si ha la duplicazione dell'apertura della posizione.
No - non nella zecca. Nel 1° secondo.
Ecco una semplificazione:
quindi - se senza pausa aprirà 2 ordini di fila. Ma l'ho impostato per 3 secondi - e non me ne pento )))) Tuttavia, è l'apertura dell'ordine.
La contabilità degli ordini in MT5 è tutta una scienza:Gestire gli eventi di compravendita nell'Expert Advisor usando la funzione OnTrade()
Nessuna pausa vi salverà dalla riapertura, può sempre verificarsi una situazione in cui l'ordine impiegherà 1 secondo in più per essere eseguito.
ps: E non dimenticare la magia.