![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
In PositionGet senza il PositionSelect prima.
Michael, facciamo un altro "foglio" con i ritardi, sta diventando noioso. :))))
Quando andrai all'inaugurazione? :)))))))
Ti sbagli, PositionSelect è chiamato su ogni tick e prima dell'ultima uscita informativa nel blocco 3, funzionerà anche questo. Quindi, la ragione non è ovviamente in questo caso.
A volte mi sbaglio, ma non è questo il caso, chiaramente in questo)
I valori dei dati di posizione al momento della chiamata di PositionSelect.
I valori non vengono aggiornati dopo OrderSend.
Se PositionSelect(...)==falso, non ha senso PositionGet.
Quindi: dopo OrderSend i dati di posizione possono essere recuperati non immediatamente... l'asincronia è un male.
A volte mi sbaglio, ma non è questo il caso, chiaramente in questo)
I valori dei dati di posizione al momento della chiamata di PositionSelect.
I valori non vengono aggiornati dopo OrderSend.
Se PositionSelect(...)==falso, non ha senso PositionGet.
Quindi: dopo OrderSend i dati di posizione possono essere recuperati non immediatamente... l'asincronia è un male.
Sono felicemente d'accordo - non mi vergogno di ammettere gli errori. Ma guarda: prima di arrivare al blocco 3, proprio all'inizio dell'handler OnTick() viene chiamata la PositionSelect() da te menzionata, e non viene eseguita la OrderSend(). Nel codice ho aggiunto intenzionalmente un contatore di ritardo di 1000 tick tra l'esecuzione dei blocchi 1, 2 e 3 - si tratta di asincronia, penso che nel tester questo sia più che sufficiente per fissare la posizione. Inoltre, ho cambiato la condizione nel blocco 3:
Il risultato non è cambiato: l'ordine di chiudere la posizione viene eseguito, ma la dimensione della posizione rimane uguale a 1.
:-(
non dovrebbe compilare... PositionSelect(_Symbol)
non dovrebbe compilare... PositionSelect(_Symbol)
non dovrebbe compilare... PosizioneSelezionare(_Simbolo
Corretto _Simbolo.
In conclusione: avevi ragione! Ora il blocco 3 non funziona, il che significa che la posizione non è selezionata. Grazie per il dialogo! :-)
I cucchiai sono stati ritrovati, ma i residui rimangono: se non c'è più posizione, come può il volume della posizione essere 1?
Il che non corrisponde alla documentazione:
Quindi chiamarePositionSelect() con un risultato di false non aggiorna le informazioni sulla posizione? Peccato!
Quindi chiamarePositionSelect() con un risultato di false non aggiorna le informazioni sulla posizione? Peccato!
Sono passati 10 mesi ormai.....