Turnstile Order Gateway
- Bibliotecas
-
Syarief Azman Bin Rosli
¡Hola y bienvenido a mi perfil oficial en MQL5!
Soy Syarief Azman Bin Rosli, desarrollador de sistemas de trading algorítmico e ingeniero de software cuantitativo con más de una década de experiencia especializada en la creación de soluciones automatizadas para MetaTrader 5 y MetaTrader 4. - Versión: 1.0
- Activaciones: 5
Biblioteca MQL5 situada entre su Asesor Experto y OrderSend. Cada solicitud pasa 9 controles (conexión, Algo Trading, modo del símbolo, sesión, tipos de orden, volumen, stops, margen, OrderCheck) antes de enviarse. Los cierres y modificaciones bloqueados por el nivel de congelación, una sesión cerrada o una conexión perdida se ponen en cola y se envían después. Nunca opera por sí sola. Recibe el archivo compilado Turnstile_Order_Gateway.ex5; esta página es la referencia completa de la API.
Inicio rápido
- Copie Turnstile_Order_Gateway.ex5 en MQL5/Libraries (Archivo > Abrir carpeta de datos).
- Pegue el bloque #import de abajo en su EA o script.
- Opcional: TOG_Configure en OnInit (por defecto 20, 3, 300, true, false).
- Llame a TOG_ProcessQueue en OnTick u OnTimer.
- Opere con TOG_Open, TOG_Modify, TOG_Close. Si devuelven 0 o false, imprima TOG_ReasonText(TOG_LastReason()).
- Verificación: ejecute el ejemplo de abajo en el Probador de Estrategias; el registro muestra el ticket y el motivo. En real, active Algo Trading o los controles devuelven -3.
Declaración de importación (lista para copiar)
#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
Códigos de motivo
TOG_LastReason da el código y TOG_ReasonText el texto en mayúsculas.
- 0 OK; 1 NO CHANGE (mismos valores, nada enviado); 2 DEFERRED (en cola).
- -1 BAD PARAMETERS: símbolo o tipo desconocido, precio pendiente 0, volumen 0.
- -2 NO CONNECTION: sin conexión o sin cotizaciones.
- -3 TRADING DISABLED: Algo Trading o el trading de la cuenta desactivado.
- -4 SYMBOL MODE: desactivado, solo cierre, solo compras o solo ventas.
- -5 MARKET CLOSED: fuera de las sesiones de trading.
- -6 INVALID VOLUME: fuera de min/max, fuera del paso o sobre el límite de volumen.
- -7 INVALID STOPS: SL, TP o precio pendiente en el lado incorrecto o dentro del nivel de stops.
- -8 FREEZE ZONE: precio dentro del nivel de congelación.
- -9 NO MARGIN: margen de la orden de mercado mayor que el margen libre.
- -10 ORDER TYPE BLOCKED: tipo o SL/TP no permitidos, o límite de órdenes pendientes alcanzado.
- -11 ORDERCHECK FAILED y -12 SERVER REJECTED: vea TOG_LastRetcode.
- -13 TICKET NOT FOUND; -14 QUEUE FULL (256 en espera).
Referencia de la API
type: ORDER_TYPE_BUY, ORDER_TYPE_SELL, ORDER_TYPE_BUY_LIMIT, ORDER_TYPE_SELL_LIMIT, ORDER_TYPE_BUY_STOP u ORDER_TYPE_SELL_STOP (stop-limit devuelve -1). Precios absolutos; sl o tp 0 significa ninguno.
TOG_Configure
deviation: deslizamiento en puntos, 0 o más (inválido: 20). retries: 0-10 (inválido: 3). delay_ms: 0-5000 entre reintentos (inválido: 300). adjust_stops: true mueve un SL/TP del lado correcto pero dentro del nivel de stops al precio legal más cercano más un tick (más el spread si el servidor vuelve a rechazar); false devuelve -7. verbose: registra bloqueos, reintentos y aplazamientos con el prefijo [TOG].
TOG_NormalizeVolume
Redondea hacia abajo al paso de volumen y limita al máximo. 0.0 bajo el mínimo, con volumen 0 o símbolo desconocido.
TOG_NormalizePrice
Redondea al tamaño del tick y a los dígitos. 0.0 para precio 0, así un SL vacío sigue en 0.
TOG_RiskVolume
Volumen que pierde risk_money (divisa de la cuenta) en sl, con OrderCalcProfit (válido para cruces, metales, índices, acciones), redondeado hacia abajo. entry 0 = Ask para compras, Bid para ventas. 0.0 con -6 si el volumen mínimo ya arriesga más, -7 si sl está del lado incorrecto, -1 con datos inválidos.
double lots = TOG_RiskVolume(_Symbol, ORDER_TYPE_BUY, 0, sl, AccountInfoDouble(ACCOUNT_BALANCE) * 0.01);
TOG_MaxVolume
Mayor volumen válido cuyo margen cabe en margen libre x share (0-1, si no 1), dentro del máximo y del límite de volumen restante. 0.0 con -9 si no cabe ni el mínimo.
TOG_FillingMode
Ejecución de mercado: FOK si se permite, si no IOC, si no RETURN. TOG_Open cambia de modo si el servidor lo rechaza.
TOG_CheckMarket
Controles 1-4 para abrir: conexión y cotizaciones, Algo Trading, modo del símbolo para esa dirección, sesión (hora del servidor frente a la tabla de sesiones; sin tabla cuenta como abierto). Devuelve 0 o de -1 a -5.
TOG_CheckStops
Mercado: sl y tp del lado correcto de Bid (compra) o Ask (venta), al menos SYMBOL_TRADE_STOPS_LEVEL de distancia. Pendientes: igual el precio respecto al mercado, sl y tp desde el precio. Devuelve 0, -7, -1 o -2.
TOG_CheckFreeze
-8 cuando Bid (compra) o Ask (venta) está dentro de SYMBOL_TRADE_FREEZE_LEVEL del SL o TP de la posición, o el mercado está así de cerca del precio de una orden pendiente. 0 si el nivel es 0, -13 con un ticket desconocido.
TOG_Preflight
Los 9 controles en orden, sin enviar nada: controles de mercado, tipos de orden y límite de pendientes, volumen, stops, margen (mercado), OrderCheck. Devuelve el primer fallo o 0.
if(TOG_Preflight(_Symbol, ORDER_TYPE_SELL, 0.10, 0, sl, tp) != 0) Print(TOG_ReasonText(TOG_LastReason()));
TOG_Open
Normaliza volumen y precios, ajusta stops si está activado, ejecuta TOG_Preflight y envía. Las órdenes de mercado (price 0) reintentan recotizaciones, cambios de precio, tiempos agotados y errores de conexión con precios nuevos. Las pendientes usan GTC, o DAY si GTC no se permite. Devuelve el ticket de la posición (mercado), de la orden (pendiente) o 0. Nunca se pone en cola.
TOG_Modify
SL/TP de una posición, o precio/SL/TP de una orden pendiente (price 0 lo conserva). Mismos valores: true, motivo 1. Bloqueado por la zona de congelación, sesión cerrada o sin conexión: false, motivo 2, en cola; una llamada más nueva para el ticket la sustituye.
TOG_Close
Cierra una posición o elimina una orden pendiente. volume 0 o el volumen completo cierra todo; menos cierra una parte (hacia abajo); un resto bajo el mínimo cierra todo. Bloqueo como arriba: false, motivo 2, en cola (sustituye una modificación en cola).
TOG_CloseAll
TOG_Close para cada posición (y orden pendiente si pending) que coincida con symbol ("" = todos) y magic (-1 = cualquiera). Devuelve cuántas se cerraron ahora.
TOG_ProcessQueue
Envía las acciones en cola cuando se desbloquean; llámela en OnTick u OnTimer. Una acción sale de la cola al tener éxito, si su ticket ya no existe o ante otro fallo; tras un rechazo del servidor espera un segundo. Devuelve el número completado.
TOG_QueueCount y TOG_ClearQueue
Acciones en espera (máximo 256); descartarlas todas sin enviar.
TOG_LastReason, TOG_LastRetcode y TOG_ReasonText
Motivo de la última llamada; último retcode del servidor (0 si no se envió nada); texto de un código de motivo ("UNKNOWN" en otro caso).
TOG_RetcodeClass
0 DONE (colocada, ejecutada, parcial, sin cambios, posición cerrada), 1 RETRY (recotización, rechazo, error, tiempo agotado, precio cambiado o inválido, sin cotizaciones, demasiadas solicitudes, bloqueo, conexión), 2 FIX (solicitud, volumen, stops, expiración, ejecución u orden inválidos), 3 WAIT (mercado cerrado, congelado), 4 FATAL (resto, p. ej. sin dinero).
TOG_GetStats
Llena stats[] con 10 contadores y devuelve 10: 0 solicitudes, 1 enviadas, 2 hechas, 3 bloqueadas, 4 reintentos, 5 aplazadas, 6 hechas desde la cola, 7 rechazadas, 8 stops ajustados, 9 descartadas.
Ejemplo de integración funcional
#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()));
} Arquitectura y notas
- Cada programa que importa la biblioteca tiene sus propios ajustes, estadísticas y cola en memoria (se pierde al quitar el EA o reiniciar el terminal).
- Los controles solo leen datos del terminal; solo TOG_Open, TOG_Modify, TOG_Close, TOG_CloseAll y TOG_ProcessQueue envían, de forma síncrona.
- Configuraciones: seguridad ante el validador = valores por defecto y TOG_ProcessQueue en OnTick; stops estrictos = adjust_stops false; desarrollo = verbose true y TOG_GetStats en su panel.
- MetaTrader 5, netting y hedging, cualquier símbolo; solo EAs y scripts. Segura en el Probador de Estrategias, la optimización y MQL5 Cloud Network (sin DLL, archivos ni peticiones web; sin pausa entre reintentos en el probador).
- Sin objetos gráficos, temporizadores, archivos ni variables globales; puede añadir un símbolo a Observación del Mercado para leer cotizaciones.
- Un festivo ausente de la tabla de sesiones se detecta por la respuesta del servidor como -5.
- No compatible: órdenes stop-limit, close-by, OrderSendAsync.
Aviso de riesgo
La biblioteca comprueba y envía las solicitudes de su código. No elige entradas ni garantiza ejecuciones, precios o beneficios. Pruébela primero en una cuenta demo.
