
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
L'ho implementato allo stesso modo, solo attraverso funzioni.
Capisco. Il tuo codice è simile a quello di MK - tra OrderCheck e OrderSend c'è un livello di gestione degli errori da parte dell'utente.
L'ho implementato in questo modo, solo attraverso le funzioni.
OrderCheck è implicito e necessariamente controllato all'interno di OrderSend.
Quindi, se l'ordine non è compilato correttamente, la risposta sarà restituita immediatamente senza rimandarla al server.
Vedi cosa dice il manuale a questo proposito:
Prima selezione: vediamo che la funzione è per le transazioni commerciali e nessun accenno ai controlli.
Beh, se dico che ci sono controlli, allora è vero.
Nessun ordine lascia il terminale senza controlli rigorosi.
Seconda evidenziazione: vediamo che i controlli vengono eseguiti sul server e gli sviluppatori raccomandano di usare OrderCheck() per controllare la richiesta prima di inviarla al server. Di nuovo, non si dice che OrderSend() esegue alcuna convalida.
Raccomandiamo specificamente che i trader abbiano l'opportunità di scoprire in anticipo se l'ordine viene riempito correttamente, e di intraprendere le azioni appropriate.
Chi vuole - può precontrollare. Chi non vuole, controlleremo e restituiremo comunque risposte simili per loro.
L'unico posto dove è menzionato che il controllo prima di inviare la richiesta è "In caso di successo del controllo di base delle strutture (controllo del puntatore) ....". Ma il controllo dei puntatori e il controllo dei valori dei campi della struttura di richiesta per gli errori non è la stessa cosa. E la raccomandazione degli sviluppatori di usare la funzione OrderCheck() è una prova indiretta che OrderSend() non esegue un vero controllo degli errori prima di inviare una richiesta al server. Altrimenti perché dovremmo fare "oliato": OrderSend() controlla prima, e poi lo stesso controllo deve essere eseguito di nuovo da OrderCheck()?
Quindi dal riferimento segue inequivocabilmente che il controllo viene eseguito solo sul server!
Nessuno perderà un flusso errato o eccessivo di richieste al server.
La logica di base è sufficiente per capire questo. E amplieremo la documentazione.
Non ce l'hai, tutti gli errori sono gestiti dalla logica di business.
Ne ho uno. La logica di business gestisce gli eventi relativi alla logica di business (ad esempio, il fallimento dell'ordine), ma tutto il resto (ad esempio, il ritardo della risposta del server) - un modello universale, basato su cui assolutamente qualsiasi esperto può essere implementato.
Ma MT5 è molto più complicato in termini di gestione dei codici di ritorno + asincronia.
È di questo che stiamo parlando, come ho similmente scritto prima, e non c'è nessuna informazione su questo argomento. E da anni gli MK stanno cercando in tutti i modi di dissociarsi dalla sua fornitura. Questo è quello che ho scritto - i concessionari beneficiano di un prodotto in cui ci sono punti che portano alla perdita, cioè per MQ è un fattore di aumento delle vendite. Ahimè, siamo in un mercato dove i concorrenti (noi e MQ), non i compagni.
Stai chiedendo l'impossibile a un involucro. La libreria standard non è la logica di business. È un wrapper "sopra" le funzioni del terminale. Un involucro sopra il ripieno della caramella.
Allora ha poco senso una tale strutturazione.
Proprio come la funzione di stampa non può garantire lo spazio libero sul disco e gli errori di registrazione. Dovete usare altre funzioni per la gestione degli errori e sono specifiche del caso.
Nemmeno il giusto wrapper può garantire tutto, ma può molte cose relative a funzioni correlate.
È già stato scritto più di una volta sullo specifico. Se MQ non è in grado di fornire una soluzione pronta, che almeno facciano un manuale sulla gestione degli errori e sui codici di ritorno. Sbloccato in ogni modo possibile. Nella documentazione per 4 questo era in parte presente (ad esempio aspettare 30 secondi in un caso simile), in parte gli utenti hanno individuato per esperienza la gestione di situazioni non documentate. Per 5 non c'è proprio nulla. E siccome c'è, nessuno lo userà.
Beh, se MQ risponde così perché l'infrastruttura di trading appena creata non lo permette in linea di principio, allora che dire - questo è un completo fallimento dell'intero progetto MT5, dato che ci sono anche una massa incredibile di altre secche.
Se volete, potete passare attraverso ogni codice di ritorno e guardare le principali situazioni possibili.
Lo farei volentieri con un esperto MQL5 Expert Advisor come te. Aspetteremo il tempo e la necessità. Grazie a Dio ho ancora il 4 che è molto più comodo in molti aspetti.
-Alexey-:
una soluzione pronta, almeno una guida alla gestione degli errori e ai codici di ritorno
quale codice causa problemi di elaborazione?
Codice
Identificatore
Descrizione
10004
CODICE COMMERCIALE_REQUOTE
Richiedere
10006
CODICE COMMERCIALE RIFIUTATO
Richiesta respinta
10007
TRADE_RETCODE_CANCEL
Richiesta cancellata dal commerciante
10008
CODICE COMMERCIALE PIAZZATO
Ordine effettuato
10009
COMMERCIO_RETCODICE_FATTO
Ordine eseguito
10010
TRADE_RETCODE_DONE_PARTIAL
Richiesta parzialmente eseguita
10011
ERRORE DI CODICE COMMERCIALE
Errore di elaborazione della richiesta
10012
TRADE_RETCODE_TIMEOUT
Richiesta cancellata per scadenza del tempo
10013
TRADE_RETCODE_INVALID
Richiesta errata
10014
TRADE_RETCODE_INVALID_VOLUME
Volume errato nella richiesta
10015
TRADE_RETCODE_INVALID_PRICE
Prezzo errato nella richiesta
10016
TRADE_RETCODE_INVALID_STOPS
Fermate errate nella richiesta
10017
TRADE_RETCODE_TRADE_DISABLED
Commercio proibito
10018
TRADE_RETCODE_MARKET_CLOSED
Il mercato è chiuso
10019
TRADE_RETCODE_NO_MONEY
Fondi insufficienti per l'esecuzione della richiesta
10020
PREZZO_COMMERCIALE_RETCODICE_CAMBIATO
I prezzi sono cambiati
10021
SCONTO_DI_RETROCODICE_COMMERCIALE
Nessun preventivo per elaborare la richiesta
10022
TRADE_RETCODE_INVALID_EXPIRATION
Data di scadenza non valida nella richiesta
10023
ORDINE_COMMERCIALE_RETCODE_CAMBIATO
Stato dell'ordine cambiato
10024
TRADE_RETCODE_TOO_MANY_REQUESTS
Richieste troppo frequenti
10025
TRADE_RETCODE_NO_CHANGES
Nessun cambiamento nella richiesta
10026
TRADE_RETCODE_SERVER_DISABLES_AT
Auto-trading negato dal server
10027
TRADE_RETCODE_CLIENT_DISABLES_AT
Autotrading vietato dal terminale del cliente
10028
TRADE_RETCODE_LOCKED
Richiesta bloccata per l'elaborazione
10029
TRADE_RETCODE_FROZEN
Ordine o posizione congelati
10030
TRADE_RETCODE_INVALID_FILL
Viene indicato un tipo di ordine di saldo non supportato
10031
CONNESSIONE_TRADE_RETCODE
Nessuna connessione al server commerciale
10032
TRADE_RETCODE_ONLY_REAL
L'operazione è consentita solo per i conti reali
10033
ORDINI CON LIMITE AL CODICE COMMERCIALE
Limite sul numero di ordini pendenti raggiunto
10034
TRADE_RETCODE_LIMIT_VOLUME RAGGIUNTO
Raggiunto il limite sul volume di ordini e posizioni per questo simbolo
Per esempio 10004. Dove sta scritto cosa fare? E c'era almeno qualcosa nella documentazione quadrupla:
Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.
quale codice solleva problemi di elaborazione?
10006 (quale motivo viene rifiutato, quali altri motivi potrebbero esserci che non sono elencati negli altri codici?)
10011, 10013, 10028
10006 (quale motivo viene rifiutato, quali altri motivi potrebbero esserci che non sono indicati negli altri codici?)
10011, 10013, 10028
Colleghi, già stanchi di cercare la verità. L'argomento è simile a quello di cui ho bisogno, quindi sto scrivendo qui, per favore aiutatemi!
Piazzo l'ordine con esecuzione immediata, mentre è appeso controllo il prezzo ogni tick e se è possibile lo seguo, ma per qualche motivo ottengo sempre l'errore 10013. Ho cercato in tutti i forum possibili e ho aggiunto quasi tutte le linee dell'ordine iniziale (anche se la descrizione dice che solo il simbolo, azione e sl e tp sono sufficienti per questo tipo di azione. Non funziona niente! Ecco il codice.