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
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:
Naturalmente. Voglio dire "perché ha potuto vedere...". Il punto qui è che non c'è niente nel tuo codice che possa spiegare perché hai ottenuto questi 2 scambi.
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 riassumere la situazione:
* Quando si usa il metodo PositionOpen della classe CTrade, almeno 3 utenti hanno ottenuto, in un certo momento, 2 operazioni nella stessa direzione invece di 1, con il risultato di una posizione con un volume raddoppiato rispetto a quello previsto.
Uso entrambi i metodi, per aprire una nuova posizione = "vecchia maniera", modificando lo stoploss = "CTrade class".
* Questo problema sembra verificarsi sullo stesso broker, con un simbolo in cui è attivato Depth of Market (gli interessati possono confermarlo per favore).
Sì, il server del broker X, Depth of Market è attivato.
* Questo problema si verifica con l'ordine sincrono, l'ordine asincrono non è stato usato (per favore confermate).
Sì, l'ordine asincrono non è stato usato.
* Il problema si verifica casualmente.
Sì, ma solo durante le ore di mercato intenso( eventimacroeconomici ).
Secondo me questo problema può essere facilmente risolto.
L'EA deve sempre aspettare una risposta/risposta se viene utilizzata la funzione "PositionSelect(Symbol())" e il terminale ha aggiornato i dati della funzione, prima di poter riprendere l'esecuzione del codice.
L'EA deve sempre aspettare una risposta/risposta se viene utilizzata la funzione "OrderSend(mrequest,mresult)" e il terminale ha aggiornato i dati della funzione, prima di poter riprendere l'esecuzione del codice.
Cito anche il terminale stesso perché i dati della funzione saranno copiati nel terminale e anche questo richiederà un po' di tempo.
In questo modo la dimensione della posizione corrente sarà sempre calcolata correttamente, quindi il doppio ordine non avrà più luogo.
Cosa ne pensate?
Secondo me questo problema può essere facilmente risolto.
L'EA deve sempre aspettare una risposta/risposta se viene utilizzata la funzione "PositionSelect(Symbol())" e il terminale ha aggiornato i dati della funzione, prima di poter riprendere l'esecuzione del codice.
L'EA deve sempre aspettare una risposta/risposta se viene usata la funzione "OrderSend(mrequest,mresult)" e il terminale ha aggiornato i dati della funzione, prima di poter riprendere l'esecuzione del codice.
Cito anche il terminale stesso perché i dati della funzione saranno copiati nel terminale e anche questo richiederà del tempo.
In questo modo la dimensione della posizione corrente sarà sempre calcolata correttamente, quindi il doppio ordine non avrà più luogo.
Cosa ne pensate?
Non sono sicuro di cosa intendi per "aspettare sempre una risposta...". ?
Comunque ho compilato una richiesta al ServiceDesk per chiedere un consiglio. Vedremo.
Non sono sicuro di cosa intendi per "aspettare sempre una risposta..." ?
Comunque ho compilato una richiesta al ServiceDesk per chiedere consiglio. Vedremo.
"Non sono sicuro di cosa intendi per "aspettare sempre una risposta...". ?"
L'EA dovrebbe aspettare/stop fino a quando la funzione PositionSelect(Symbol()) non ha completato la copia dei dati su una posizione nell'ambiente del programma.
Vedila come una funzione sleep() forzata.
"Non sono sicuro di cosa intendi per "aspettare sempre una risposta..." ?"
L'EA dovrebbe aspettare/stop fino a quando la funzione PositionSelect(Symbol()) non ha completato la copia dei dati su una posizione nell'ambiente del programma.
Vedila come una funzione sleep() forzata.