
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
posso chiedere se PositionSelect() controlla il lato client o il lato sever?
Ho la forte sensazione che il problema sia causato dal ritardo in cui il server (lato broker) sta elaborando la richiesta e non ha aggiornato il lato client, ecco perché PositionSelect() funziona di nuovo
Ho la forte sensazione che non ci sia alcuna differenza quando usiamo il modo cTrade vs MqlTradeRequest e la funzione Sleep dovrebbe aiutare a ritardare tutto per far sì che il nostro lato client venga "aggiornato" prima che PositionSelect() venga eseguito nuovamente causando una doppia entrata. Controllando dalla mia scheda giornale, >2013.12.20 08:35:00 Trades '800****': exchange buy 0.01 EURUSD at market placed for execution in 313 ms <
mettere sonno più di 400 dovrebbe essere sicuro??
Cosa ne pensi?
"Ho la forte sensazione che il problema sia causato dal ritardo in cui il server (lato broker) sta elaborando la richiesta e non ha aggiornato il lato client, ecco perché PositionSelect() viene eseguito di nuovo"
Penso anche che questa sia la causa del doppio inserimento. Nel mio codice è teoricamente impossibile inviare un nuovo ordine se la dimensione della posizione corrente è uguale o superiore alla dimensione massima della posizione consentita, quindi quando la PositionSelect() non riceve in tempo lo stato della posizione corrente, il mio EA invierà nuovamente un nuovo ordine.
"Mettere in sleep più di 400 dovrebbe essere sicuro???"
Più grande è l'intervallo di tempo e meglio è, ma c'è un problema. Se girate la vostra posizione, in due passi (LONG a SHORT o SHORT a LONG), questo ritardo extra può essere la causa di un cattivo prezzo di esecuzione, specialmente durante eventi macro economici.
"Ho la forte sensazione che il problema sia causato dal ritardo in cui il server (lato broker) sta elaborando la richiesta e non ha aggiornato il lato client, ecco perché PositionSelect() gira di nuovo"
Penso anche che questa sia la causa del doppio inserimento. Nel mio codice è teoricamente impossibile inviare un nuovo ordine se la dimensione della posizione corrente è uguale o superiore alla dimensione massima della posizione consentita, quindi quando la PositionSelect() non riceve in tempo lo stato della posizione corrente, il mio EA invierà nuovamente un nuovo ordine.
"Mettere uno sleep più di 400 dovrebbe essere sicuro???"
Più grande è l'intervallo di tempo e meglio è, ma c'è un problema. Se girate la vostra posizione, in due passi (LONG a SHORT o SHORT a LONG), questo ritardo extra può essere la causa di un cattivo prezzo di esecuzione, specialmente durante eventi macro economici.
Non so se il broker gioca a parte qui, ma sembra che il nostro broker sia lo stesso. Alpari.
Ho avuto 1 altro doppio ingresso dal 03-10-2013. Uso entrambi i metodi per inviare il mio ordine. Vedi il mio post precedente.
Questo è quello che ho appena implementato. si spera che possa risolvere il problema
Questo è quello che ho appena implementato. si spera che possa risolvere il problema
Penso che sia molto importante trovare la ragione dietro questo problema, naturalmente è anche importante avere un workaround (Sleep ?) fino a quando non possiamo capire completamente cosa sta succedendo. Quindi provo a riprendere la situazione:
Sono d'accordo con snella_moda che la migliore spiegazione è:
I think the problem is the (to slow) execution of the PositionSelect(Symbol()) function. Maybe, the new ticks come in so fast, the EA sends in a new order before it receives a response of the PositionSelect(Symbol()). So the current position size is not calculated properly. In my code, its theoretically impossible to send in a new/double order if the current position size is equal or greater than the max allowed position size, see code.
Ma è difficile da controllare.
Penso che la cosa migliore da fare sia chiedere consiglio a Metaquotes. Ci proverò.
La linea riguardante "ogni tick" potrebbe essere il motivo per cui non succede più.
La funzione viene eseguita solo quando appare una nuova barra. Quindi, molto probabilmente, solo il primo tick di una barra può eseguire un trade. Dopo la prima barra, il codice ottiene un 'ritorno' finché non appare una nuova barra. Forse questo mi ha risolto il problema.
Penso che questo pezzo di codice provenga dagli articoli:
La linea riguardante "ogni tick" potrebbe essere il motivo per cui non succede più.
La funzione viene eseguita solo quando appare una nuova barra. Quindi, molto probabilmente, solo il primo tick di una barra può eseguire un trade. Dopo la prima barra, il codice ottiene un 'ritorno' finché non appare una nuova barra. Forse questo mi ha risolto il problema.
Penso che questo pezzo di codice provenga dagli articoli:
correzione. C'è un doppio"Posizione aperta in..." e sono state aperte 2 operazioni.