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
Per favore, se la funzione OrderSend restituisce true e result.order ha un order ticket (result.order!=0), garantisce che l'ordine sia accettato dal broker e sia nella scheda di trading o in questa fase la richiesta è accettata solo dal server del broker ma non dalla borsa?
E la seconda domanda: può esserci una situazione in cui OrderSend restituisce true e result.order==0?
Potete dirmi per favore se la funzione OrderSend restituisce true e result.order ha un order ticket (result.order!=0), garantisce che l'ordine sia accettato dal broker e sia nella scheda di trading o in questa fase la richiesta è accettata solo dal server del broker ma non dalla borsa?
Garantito.
E la seconda domanda: può esserci una situazione in cui OrderSend restituisce true e result.order==0?
No, non è possibile.
Garanzie.
No.
Proprio l'altro giorno hanno aggiunto un chiarimento per la funzione OrderSend, vedi la guida in linea.
Proprio l'altro giorno hanno aggiunto un chiarimento per la funzione OrderSend, consultate la guida in linea.
Si applica agli ordini di mercato?
Ogni ordine accettato viene memorizzato sul server di negoziazione in attesa di essere elaborato finché non si verifica una delle condizioni per la sua esecuzione:
Forum sul trading, sui sistemi di trading automatizzati e sulla verifica delle strategie di trading
Errori tipici e modi per eliminarli quando si lavora con l'ambiente di trading
fxsaber, 2018.02.20 12:23 pm.
Schema condizionale di implementazione dell'OrderSend standard (senza timeout)Da questo schema si vede chiaramente che quando si inserisce un ordine di mercato tramite OrderSendAsync sullo stesso MetaQuotes-Demo, è impossibile garantire la cattura dell'evento di inserimento dell'ordine corrispondente fino all'esecuzione o al rifiuto dell'ordine. In altre parole, MT5 non dispone di meccanismi semplici per valutare i risultati intermedi del suo OrderSendAsync.
OrderSend viene eseguito finché Result.request_id non è uguale allo stesso valore di OrderSendAsync in OnTradeTransaction. Oppure viene terminato dal timeout. Pertanto, il risultato di OrderSend dipende solo dal tipo di messaggio in OnTradeTransaction con il request_id corrispondente.
Sarebbe utile conoscere la formazione del request_id stesso. Se ho capito bene, si tratta di un contatore di ordini inviati al server di trading dal momento dell'avvio/connessione del Terminale/Account. Il Terminale stesso analizza i messaggi in arrivo dal server di trading e assegna il request_id richiesto solo a uno di essi (il che è dubbio), oppure reimposta il request_id a un determinato messaggio (molto probabilmente). Questo comportamento ha permesso qualche tempo fa di far coincidere lo storico delle offerte con l'output di OrderSend. Ma poiché solo un messaggio in OnTradeTransaction è visibile con il giusto request_id, si verifica la situazione spiacevole in modalità asincrona nella citazione di cui sopra.
Buon pomeriggio, ho riscontrato delle incongruenze per MqlTradeResult.deal e MqlTradeResult.order
1) Descrizione (Manuale di riferimento MQL5)
2) Trading in tempo reale
Effettuo ordini di mercato (TRADE_ACTION_DEAL). Emetto i valori di MqlTradeResult utilizzando la funzione Print:
e l'operazione appare nel log:
Ho provato ad "addormentarmi" con la funzione Sleep per un paio di secondi e ad emettere di nuovo i dati (quando l'operazione è già stata eseguita esattamente e la posizione è aperta), il numero dell'operazione non è apparso.
3) Tester di strategia
Tutti i campi sono compilati:
Cosa causa queste differenze?
Buon pomeriggio, ho trovato delle incongruenze per MqlTradeResult.deal e MqlTradeResult.order
https://www.mql5.com/it/docs/trading/ordersend
Quando si invia un ordine di mercato (MqlTradeRequest.action=TRADE_ACTION_DEAL), il risultato positivo della funzione OrderSend() non significa che l'ordine è stato eseguito (le operazioni corrispondenti sono state eseguite): vero in questo caso significa solo che l'ordine è stato inserito con successo nel sistema di negoziazione per la successiva esecuzione. Il server di negoziazione può inserire i valori dei campi di negoziazione o dell'ordine nella struttura del risultato restituito , se questi dati gli sono noti al momento della formazione della risposta alla chiamata OrderSend(). In generale, l'evento o gli eventi di esecuzione delle operazioni corrispondenti all'ordine possono verificarsi dopo l'invio della risposta alla chiamata OrderSend(). Pertanto, per qualsiasi tipo di richiesta di negoziazione, quando si riceve il risultato dell'esecuzione di OrderSend(), è necessario controllare innanzitutto il codice di ritorno del server di negoziazione retcode e il codice di risposta del sistema di negoziazione esterno retcode_external (se necessario), che sono disponibili nella struttura del risultato restituito.
Grazie per questo articolo così informativo. @MetaQuotes
Domanda: Come posso eseguire collettivamente il loop di entrambi: ordini aperti e posizioni aperte in un singolo ciclo for() (in modo simile a come eseguiamo il loop di tutti gli ordini in MQL4 e poi controllare se un ordine è già eseguito o un ordine in sospeso)?
Grazie per questo articolo così informativo. @MetaQuotes
Domanda: Come posso eseguire collettivamente il loop di entrambi: ordini aperti e posizioni aperte in un singolo ciclo for() (in modo simile a come eseguiamo il loop di tutti gli ordini in MQL4 e poi controllare se un ordine è già eseguito o un ordine in sospeso)?
Per calcolare le POSIZIONI e gli ORDINI IN ATTESA è necessario utilizzare due cicli indipendenti. Un ciclo enumera le POSIZIONI e il secondo ciclo enumera gli ORDINI IN ATTESA. Esempio: calcolo delle posizioni e degli ordini pendenti
So che non sei uno che si preoccupa di coloro che iniziano a usare il linguaggio mql5, data la forte comunità che hai, nonostante le molte critiche, eccone un'altra:
La traduzione e la formulazione stessa del testo ostacolano la comprensione... Ho sudato, ho dovuto andare lontano per trovare chi dovesse venire prima, dato che la documentazione stessa si contraddice, nel testo:
Per ottenere informazioni su un ordine dalla cronologia, occorre innanzitutto creare la cache della cronologia degli ordini utilizzando una delle tre funzioni: HistorySelect(start, end), HistorySelectByPosition() o HistoryOrderSelect(ticket). Se l'esecuzione ha successo, la cache memorizzerà il numero di ordini, restituito dalla funzioneHistoryOrdersTotal(). L'accesso alle proprietà di questi ordini viene effettuato da ciascuno degli elementi del ticket, utilizzando la funzione appropriata:
In contrasto con: https: //www.mql5.com/pt/docs/trading/historyorderstotal trascritto di seguito.
StoriaOrdiniTotaleRestituisce il numero di ordini presenti nella cronologia. Prima di chiamare HistoryOrdersTotal(), è necessario ricevere la cronologia delle operazioni e degli ordini utilizzando la funzioneHistorySelect() o la funzioneHistorySelectByPosition().
int StoricoOrdiniTotale();
Valore di ritorno
Valore di tipodouble.
Nota
Non confondere gli ordini della cronologia degli scambi con gliordini pendenti che appaiono nella scheda "Trade" della barra degli strumenti. L'elenco degliordini che sono stati annullati o che hanno portato a una transazione è visibile nella scheda "Cronologia" della barra degli strumenti del terminale client.
Vedere anche
Il primo passaggio si contraddice da solo, non ha bisogno di aiuto, ma il secondo arriva a complicare le cose....: dopo tutto, chi viene prima, HistoryOrdersTotal o una delle tre funzioni HistorySelect (start, end) HistorySelectByPosition() o HistoryOrderSelect(ticket), o ancora HistorySelectByPosition(), menzionate nel secondo testo.
È stato difficile, poteva essere più facile... ma credo che la prima cosa che mi viene in mente sia una delle tre funzioni HistorySelect(start, end) HistorySelectByPosition () o HistoryOrderSelect(ticket), o anche HistorySelectByPosition(), menzionate nel secondo testo...
Buon pomeriggio,
domanda agli sviluppatori: potete darmi un'informazione approssimativa, quanta memoria occupa la cache della cronologia? Circa kbyte per un affare e un ordine.
Ho eseguito lo script in un terminale con una piccola cronologia e ho ottenuto questo risultato:
Questo significa che con una storia di un paio di milioni di operazioni e un milione di ordini, la cache richiederà circa un gigabyte?
E così per ogni programma mql?