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
Usalo.
Questo è un buon esempio. Ma ho una domanda. Cosa succede se OnTradeTransaction() non restituisce i dati sull'elaborazione dell'ordine? Beh, potrebbero essersi persi in qualche modo. Il server l'ha inviato ma il terminale non l'ha ricevuto. Quanto è garantito che otterrò il numero richiesto di chiamate alla funzione OnTradeTransaction() per il 100% degli ordini inviati e tutti i rapporti di transazione raggiungeranno il terminale (sono interessato a transaction.type = TRADE_TRANSACTION_REQUEST principalmente).
Perché se non ricevo questa risposta (a causa di un'interruzione di connessione, per esempio) non cancellerò la bandiera e tutto resterà in piedi.
Non ho controllato, ma forse dopo OrderSend TUTTI gli EA ricevono l'evento corrispondente per OnTradeTransaction.
Allora tutto è risolto senza stampelle e per più EAs sullo stesso simbolo.
Questo è un buon esempio. Ma ecco una domanda che mi assilla. Cosa succede se OnTradeTransaction() non restituisce i dati dell'elaborazione dell'ordine? Beh, potrebbero essersi persi in qualche modo. Il server l'ha inviato ma il terminale non l'ha ricevuto. Quanto è garantito che otterrò il numero richiesto di chiamate alla funzione OnTradeTransaction() per il 100% degli ordini inviati e tutti i rapporti di transazione raggiungeranno il terminale (sono interessato a transaction.type = TRADE_TRANSACTION_REQUEST principalmente).
Perché se non ricevo questa risposta (a causa di un'interruzione della connessione, per esempio) non rimuoverò la bandiera e tutto resterà in piedi.
Ho avuto diverse volte che l'evento OnTradeTransaction non si è verificato,
Quindi ho scritto una funzione che controlla lo stato degli ordini usando un timer con un periodo di 0,5 secondi.
L'implementazione complica il codice generale dell'Expert Advisor, ma non c'è garanzia al 100% quando si lavora su Internet,
che tutto funzionerà come un orologio.
Aggiunto da
Ho avuto l'idea di controllare qui
https://www.mql5.com/ru/blogs/post/557544
Ho avuto diverse volte che l'evento OnTradeTransaction non si è verificato,
Pertanto, ho scritto una funzione che controlla lo stato degli ordini utilizzando un timer con un periodo di 0,5 secondi.
L'implementazione complica il codice generale dell'Expert Advisor, ma non c'è garanzia al 100% quando si lavora su Internet,
che tutto funzionerà come un orologio.
Aggiunto da
Ho avuto l'idea di controllare qui
https://www.mql5.com/ru/blogs/post/557544
Mi sembra che il tizio stia cercando di sfondare una porta aperta creando dei codici magici speciali per ogni transazione. C'è un order_id con cui un ordine può essere identificato in modo univoco.
O mi sfugge il punto?
Mi sembra che il tipo stia sfondando una porta aperta creando codici magici speciali per ogni commercio. C'è un order_id che può essere usato per identificare univocamente l'ordine.
O mi sfugge il punto?
Sì, c'è un order_id, ma purtroppo a volte gli eventi non arrivano a OnTradeTransaction
(L'ho avuto diverse volte personalmente).
E poi dove "mettere" l'order_id?
Aggiunto da
Qui, c'è stato un ritardo nella risposta del server oggi
2016.12.28 14:04:56.443 (GOLD-3.17,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...
Sì, c'è un order_id, ma purtroppo a volte gli eventi non arrivano in OnTradeTransaction
(L'ho avuto alcune volte personalmente).
Dove "infilare" l'order_id allora?
Aggiunto da
Qui, c'è stato un ritardo nella risposta del server oggi
2016.12.28 14:04:56.443 (GOLD-3.17,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...
L'altro giorno ho avuto un altro "deflettore".
2016.12.23 15:04:02.924 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURUSD Retcode = 10009. Slippage = 1631.
2016.12.23 15:04:02.924 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURUSD Position is closed in 59699 mksec.
2016.12.23 15:04:02.924 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURUSD Retcode = 10009. Slippage = 1631.
2016.12.23 15:04:02.924 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURUSD Position is closed in 59712 mksec.
2016.12.23 15:04:02.992 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction GBPUSD Retcode = 10009. Slippage = 1379.
2016.12.23 15:04:02.992 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction GBPUSD Position is closed in 127691 mksec.
2016.12.23 15:04:02.992 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction All reposts are checked. Direction = 0
2016.12.23 15:04:02.993 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction Unexpected transaction request.
2016.12.23 15:04:02.993 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURGBP Retcode = 10009. Slippage = -40993.
2016.12.23 15:04:02.993 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURGBP Position is closed in 1339448077 mksec.
2016.12.23 15:04:02.993 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction All reposts are checked. Direction = -1
Sono stati inviati tre ordini, e c'è una chiara registrazione nel registro. Dopo di che, la funzione OnTradeTransactions() TRADE_TRANSACTION_TYPE è stata chiamata quattro volte.
Il codice della funzione inizia con dei controlli:
const MqlTradeRequest& request,
const MqlTradeResult& results)
{
if(transaction.type == TRADE_TRANSACTION_REQUEST && request.action == TRADE_ACTION_DEAL)
{
if(request.magic == ExpertMagic)
{
Cioè, solo TRADE_TRANSACTION_REQUIEST con il suo timbro di esperto può entrare, dove stanno le stampanti...
L'helpdesk ha iniziato a convincermi che ho due EA identici in piedi (ovviamente sullo stesso grafico, a giudicare dal log). E poi hanno detto: "sei un pazzo, correggi gli errori nel codice".
In breve, secondo loro non può essere. Ma il registro mostra chiaramente che l'evento è arrivato quattro volte.
Sì, c'è un order_id, ma purtroppo a volte gli eventi non arrivano in OnTradeTransaction
(L'ho avuto alcune volte personalmente).
Dove "infilare" l'order_id allora?
Aggiunto da
Ecco, oggi ho avuto un ritardo di risposta del server.
2016.12.28 14:04:56.443 (GOLD-3.17,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...
Ma comunque, ancora non capisco perché non possiamo cercare un ordine per ticker? È molto facile controllare quali degli ordini che abbiamo inviato non sono arrivati a TradeTransaction. E poi basta guardare lo stato dell'ordine con questo biglietto nella storia.
Anche se la cronologia degli ordini mostra solo gli ordini con lo stato FILLED.
E ancora non è chiaro perché l'ordine non può essere cercato per ticker? Dopo tutto, è facile controllare quale ordine non è arrivato a TradeTransaction. E poi basta guardare lo stato dell'ordine con questo ticker nella storia.
Anche se, quando l'ho provato personalmente, nella cronologia degli ordini, c'erano solo ordini con lo stato FILLED.
Sì, perché l'ordine potrebbe non essere nella storia(ordine pendente, ecc.)
Aggiunto
E tu hai il codice sbagliato
Sì, perché l'ordine potrebbe non essere nella storia(ordine pendente, ecc.)
Aggiunto da
E tu hai il codice sbagliato
Cosa c'è che non va? Quanti errori si possono fare in due righe di codice.
Cosa c'è che non va? Quanti errori si possono fare in due righe di codice.
Non due, uno :)
TRADE_TRANSACTION_REQUEST è necessario quando si usa OrderSendAsymc per ottenere il biglietto d'ordine.