Turnstile Order Gateway
- librerie
-
Syarief Azman Bin Rosli
Ciao e benvenuto sul mio profilo ufficiale MQL5!
Sono Syarief Azman Bin Rosli, sviluppatore di sistemi di trading algoritmico e ingegnere software quantitativo con oltre dieci anni di esperienza nello sviluppo di soluzioni automatizzate per MetaTrader 5 e MetaTrader 4. - Versione: 1.0
- Attivazioni: 5
Libreria MQL5 che si inserisce tra il vostro Expert Advisor e OrderSend. Ogni richiesta supera 9 controlli (connessione, Algo Trading, modalità del simbolo, sessione, tipi di ordine, volume, stop, margine, OrderCheck) prima dell'invio. Chiusure e modifiche bloccate dal livello di congelamento, da una sessione chiusa o da una connessione persa entrano in coda e vengono inviate più tardi. Non opera mai da sola. Ricevete il file compilato Turnstile_Order_Gateway.ex5; questa pagina è il riferimento completo dell'API.
Avvio rapido
- Copiate Turnstile_Order_Gateway.ex5 in MQL5/Libraries (File > Apri cartella dati).
- Incollate il blocco #import qui sotto nel vostro EA o script.
- Facoltativo: TOG_Configure in OnInit (predefiniti 20, 3, 300, true, false).
- Chiamate TOG_ProcessQueue in OnTick o OnTimer.
- Operate con TOG_Open, TOG_Modify, TOG_Close. Con 0 o false stampate TOG_ReasonText(TOG_LastReason()).
- Verifica: eseguite l'esempio qui sotto nello Strategy Tester; il log mostra ticket e motivo. In reale attivate Algo Trading, altrimenti i controlli restituiscono -3.
Dichiarazione di import (pronta da copiare)
#import "Turnstile_Order_Gateway.ex5" void TOG_Configure(int deviation, int retries, int delay_ms, bool adjust_stops, bool verbose); double TOG_NormalizeVolume(string symbol, double volume); double TOG_NormalizePrice(string symbol, double price); double TOG_RiskVolume(string symbol, ENUM_ORDER_TYPE type, double entry, double sl, double risk_money); double TOG_MaxVolume(string symbol, ENUM_ORDER_TYPE type, double share); ENUM_ORDER_TYPE_FILLING TOG_FillingMode(string symbol); int TOG_CheckMarket(string symbol, ENUM_ORDER_TYPE type); int TOG_CheckStops(string symbol, ENUM_ORDER_TYPE type, double price, double sl, double tp); int TOG_CheckFreeze(ulong ticket); int TOG_Preflight(string symbol, ENUM_ORDER_TYPE type, double volume, double price, double sl, double tp); ulong TOG_Open(string symbol, ENUM_ORDER_TYPE type, double volume, double price, double sl, double tp, ulong magic, string comment); bool TOG_Modify(ulong ticket, double price, double sl, double tp); bool TOG_Close(ulong ticket, double volume); int TOG_CloseAll(string symbol, long magic, bool pending); int TOG_ProcessQueue(); int TOG_QueueCount(); void TOG_ClearQueue(); int TOG_LastReason(); uint TOG_LastRetcode(); string TOG_ReasonText(int reason); int TOG_RetcodeClass(uint retcode); int TOG_GetStats(long &stats[]); #import
Codici di motivo
TOG_LastReason fornisce il codice, TOG_ReasonText il testo in maiuscolo.
- 0 OK; 1 NO CHANGE (stessi valori, nulla inviato); 2 DEFERRED (in coda).
- -1 BAD PARAMETERS: simbolo o tipo sconosciuto, prezzo pendente 0, volume 0.
- -2 NO CONNECTION: disconnesso o senza quotazioni.
- -3 TRADING DISABLED: Algo Trading o trading del conto disattivato.
- -4 SYMBOL MODE: disattivato, solo chiusura, solo acquisti o solo vendite.
- -5 MARKET CLOSED: fuori dalle sessioni di trading.
- -6 INVALID VOLUME: fuori min/max, fuori passo o oltre il limite di volume.
- -7 INVALID STOPS: SL, TP o prezzo pendente dal lato sbagliato o dentro il livello degli stop.
- -8 FREEZE ZONE: prezzo dentro il livello di congelamento.
- -9 NO MARGIN: margine dell'ordine a mercato oltre il margine libero.
- -10 ORDER TYPE BLOCKED: tipo o SL/TP non ammessi, o limite di ordini pendenti raggiunto.
- -11 ORDERCHECK FAILED e -12 SERVER REJECTED: vedere TOG_LastRetcode.
- -13 TICKET NOT FOUND; -14 QUEUE FULL (256 in attesa).
Riferimento API
type: ORDER_TYPE_BUY, ORDER_TYPE_SELL, ORDER_TYPE_BUY_LIMIT, ORDER_TYPE_SELL_LIMIT, ORDER_TYPE_BUY_STOP o ORDER_TYPE_SELL_STOP (stop-limit restituisce -1). Prezzi assoluti; sl o tp 0 significa nessuno.
TOG_Configure
deviation: slippage in punti, da 0 (non valido: 20). retries: 0-10 (non valido: 3). delay_ms: 0-5000 tra i tentativi (non valido: 300). adjust_stops: true sposta uno SL/TP dal lato giusto ma dentro il livello degli stop al prezzo legale più vicino più un tick (più lo spread se il server rifiuta ancora); false restituisce -7. verbose: registra blocchi, tentativi e rinvii con il prefisso [TOG].
TOG_NormalizeVolume
Arrotonda per difetto al passo di volume e limita al massimo. 0.0 sotto il minimo, con volume 0 o simbolo sconosciuto.
TOG_NormalizePrice
Arrotonda alla dimensione del tick e alle cifre. 0.0 per prezzo 0, quindi uno SL vuoto resta 0.
TOG_RiskVolume
Volume che perde risk_money (valuta del conto) allo sl, tramite OrderCalcProfit (corretto per cross, metalli, indici, azioni), arrotondato per difetto. entry 0 = Ask per gli acquisti, Bid per le vendite. 0.0 con -6 se il volume minimo rischia già di più, -7 se sl è dal lato sbagliato, -1 per dati non validi.
double lots = TOG_RiskVolume(_Symbol, ORDER_TYPE_BUY, 0, sl, AccountInfoDouble(ACCOUNT_BALANCE) * 0.01);
TOG_MaxVolume
Massimo volume valido il cui margine sta in margine libero x share (0-1, altrimenti 1), entro il massimo e il limite di volume residuo. 0.0 con -9 se non ci sta nemmeno il minimo.
TOG_FillingMode
Esecuzione a mercato: FOK se ammesso, altrimenti IOC, altrimenti RETURN. TOG_Open cambia modalità se il server la rifiuta.
TOG_CheckMarket
Controlli 1-4 per l'apertura: connessione e quotazioni, Algo Trading, modalità del simbolo per quella direzione, sessione (ora del server contro la tabella delle sessioni; senza tabella conta come aperto). Restituisce 0 o da -1 a -5.
TOG_CheckStops
Mercato: sl e tp dal lato giusto di Bid (acquisto) o Ask (vendita), ad almeno SYMBOL_TRADE_STOPS_LEVEL. Pendenti: il prezzo allo stesso modo rispetto al mercato, sl e tp dal prezzo. Restituisce 0, -7, -1 o -2.
TOG_CheckFreeze
-8 quando Bid (acquisto) o Ask (vendita) è entro SYMBOL_TRADE_FREEZE_LEVEL dallo SL o TP della posizione, o il mercato è altrettanto vicino al prezzo di un ordine pendente. 0 se il livello è 0, -13 per un ticket sconosciuto.
TOG_Preflight
Tutti i 9 controlli in ordine, senza inviare nulla: controlli di mercato, tipi di ordine e limite dei pendenti, volume, stop, margine (mercato), OrderCheck. Restituisce il primo errore o 0.
if(TOG_Preflight(_Symbol, ORDER_TYPE_SELL, 0.10, 0, sl, tp) != 0) Print(TOG_ReasonText(TOG_LastReason()));
TOG_Open
Normalizza volume e prezzi, regola gli stop se attivo, esegue TOG_Preflight e invia. Gli ordini a mercato (price 0) ritentano su requote, variazioni di prezzo, timeout ed errori di connessione con prezzi nuovi. I pendenti usano GTC, o DAY se GTC non è ammesso. Restituisce il ticket della posizione (mercato), dell'ordine (pendente) o 0. Mai messo in coda.
TOG_Modify
SL/TP di una posizione, o prezzo/SL/TP di un ordine pendente (price 0 mantiene il prezzo). Stessi valori: true, motivo 1. Bloccato dalla zona di congelamento, da una sessione chiusa o senza connessione: false, motivo 2, in coda; una chiamata più recente per il ticket la sostituisce.
TOG_Close
Chiude una posizione o elimina un ordine pendente. volume 0 o il volume intero chiude tutto; meno chiude una parte (per difetto); un resto sotto il minimo chiude tutto. Blocco come sopra: false, motivo 2, in coda (sostituisce una modifica in coda).
TOG_CloseAll
TOG_Close per ogni posizione (e ordine pendente se pending) che corrisponde a symbol ("" = tutti) e magic (-1 = qualsiasi). Restituisce quante sono state chiuse ora.
TOG_ProcessQueue
Invia le azioni in coda appena sbloccate; chiamatela in OnTick o OnTimer. Un'azione esce dalla coda in caso di successo, se il ticket non esiste più o per un altro errore; dopo un rifiuto del server attende un secondo. Restituisce il numero completato.
TOG_QueueCount e TOG_ClearQueue
Azioni in attesa (massimo 256); scartarle tutte senza inviare.
TOG_LastReason, TOG_LastRetcode e TOG_ReasonText
Motivo dell'ultima chiamata; ultimo retcode del server (0 se nulla è stato inviato); testo di un codice di motivo ("UNKNOWN" altrimenti).
TOG_RetcodeClass
0 DONE (piazzato, eseguito, parziale, nessuna modifica, posizione chiusa), 1 RETRY (requote, rifiuto, errore, timeout, prezzo cambiato o non valido, senza quotazioni, troppe richieste, bloccato, connessione), 2 FIX (richiesta, volume, stop, scadenza, esecuzione o ordine non validi), 3 WAIT (mercato chiuso, congelato), 4 FATAL (altri, es. fondi insufficienti).
TOG_GetStats
Riempie stats[] con 10 contatori e restituisce 10: 0 richieste, 1 inviate, 2 completate, 3 bloccate, 4 tentativi, 5 rinviate, 6 completate dalla coda, 7 rifiutate, 8 stop regolati, 9 scartate.
Esempio di integrazione funzionante
#import "Turnstile_Order_Gateway.ex5"
double TOG_RiskVolume(string symbol, ENUM_ORDER_TYPE type, double entry, double sl, double risk_money);
ulong TOG_Open(string symbol, ENUM_ORDER_TYPE type, double volume, double price, double sl, double tp, ulong magic, string comment);
bool TOG_Close(ulong ticket, double volume);
int TOG_ProcessQueue();
int TOG_LastReason();
string TOG_ReasonText(int reason);
#import
ulong ticket = 0;
bool tried = false;
void OnTick()
{
TOG_ProcessQueue();
if(!tried)
{
tried = true;
double sl = SymbolInfoDouble(_Symbol, SYMBOL_BID) - 300 * _Point;
double lots = TOG_RiskVolume(_Symbol, ORDER_TYPE_BUY, 0, sl, 10.0);
ticket = TOG_Open(_Symbol, ORDER_TYPE_BUY, lots, 0, sl, 0, 7001, "turnstile");
Print("open ", ticket, ": ", TOG_ReasonText(TOG_LastReason()));
}
if(ticket > 0 && PositionSelectByTicket(ticket) && PositionGetDouble(POSITION_PROFIT) > 5.0)
Print("close: ", TOG_Close(ticket, 0), " ", TOG_ReasonText(TOG_LastReason()));
} Architettura e note
- Ogni programma che importa la libreria ha impostazioni, statistiche e coda in memoria propri (persa se l'EA viene rimosso o il terminale riavviato).
- I controlli leggono solo dati del terminale; inviano solo TOG_Open, TOG_Modify, TOG_Close, TOG_CloseAll e TOG_ProcessQueue, in modo sincrono.
- Configurazioni: sicurezza per il validatore = predefiniti più TOG_ProcessQueue in OnTick; stop rigidi = adjust_stops false; sviluppo = verbose true e TOG_GetStats sul vostro pannello.
- MetaTrader 5, netting e hedging, qualsiasi simbolo; solo EA e script. Sicura nello Strategy Tester, nell'ottimizzazione e nella MQL5 Cloud Network (niente DLL, file o richieste web; nessuna pausa tra i tentativi nel tester).
- Nessun oggetto grafico, timer, file o variabile globale; può aggiungere un simbolo a Market Watch per leggere le quotazioni.
- Una festività assente dalla tabella delle sessioni viene rilevata dalla risposta del server come -5.
- Non supportati: ordini stop-limit, close-by, OrderSendAsync.
Avviso sui rischi
La libreria controlla e invia le richieste del vostro codice. Non sceglie gli ingressi e non garantisce esecuzioni, prezzi o profitti. Provatela prima su un conto demo.
