- Evento principal de Asesores Expertos: OnTick
- Principios y conceptos básicos: orden, transacción y posición
- Tipos de operaciones de trading
- Tipos de órdenes
- Modos de ejecución de órdenes por precio y volumen
- Fechas de vencimiento de órdenes pendientes
- Cálculo del margen para una orden futura: OrderCalcMargin
- Estimación del beneficio de una operación de trading: OrderCalcProfit
- Estructura MqlTradeRequest
- Estructura MqlTradeCheckResult
- Solicitar validación: OrderCheck
- Solicitar resultado del envío: estructura MqlTradeResult
- Enviar una solicitud de trading: OrderSend y OrderSendAsync
- Operaciones de compraventa
- Modificar los niveles de Stop Loss y/o Take Profit de una posición
- Trailing stop
- Cierre de una posición: total y parcial
- Cierre de posiciones opuestas: total y parcial
- Colocar una orden pendiente
- Modificar una orden pendiente
- Borrar una orden pendiente
- Obtener una lista de órdenes activas
- Propiedades de una orden (activas e históricas)
- Funciones para leer las propiedades de órdenes activas
- Seleccionar órdenes por propiedades
- Obtener la lista de posiciones
- Propiedades de posiciones
- Funciones de lectura de propiedades de posición
- Propiedades de transacción
- Seleccionar órdenes y transacciones del historial
- Funciones para leer propiedades de órdenes del historial
- Funciones para leer propiedades de transacciones del historial
- Tipos de transacciones de trading
- Evento OnTradeTransaction
- Peticiones síncronas y asíncronas
- Evento OnTrade
- Seguimiento de los cambios en el entorno de trading
- Crear Asesores Expertos multisímbolo
- Limitaciones y ventajas de los Asesores Expertos
- Crear Asesores Expertos en el Asistente MQL
Evento principal de Asesores Expertos: OnTick
El evento OnTick es generado por el terminal para los Asesores Expertos cuando aparece un nuevo tick que contiene el precio del símbolo de trabajo del gráfico actual en el que se está ejecutando el Asesor Experto. Para manejar este evento, la función OnTick debe definirse en el código del Asesor Experto. Tiene el siguiente prototipo:
void OnTick(void)
Como puede ver, la función no tiene parámetros. En caso necesario, el propio valor del nuevo precio y otras características del tick deben solicitarse llamando a SymbolInfoTick.
Desde el punto de vista de la reacción al nuevo evento de tick, este manejador es similar a OnCalculate en los indicadores. No obstante, OnCalculate sólo puede definirse en indicadores, y OnTick sólo en Asesores Expertos (para ser más precisos, la función OnTick en el código de un indicador, script o servicio será simplemente ignorada).
Al mismo tiempo, el Asesor Experto no tiene que contener el manejador OnTick. Además de este evento, los Asesores Expertos pueden procesar los eventos OnTimer, OnBookEvent y OnChartEvent y realizar a partir de ellos todas las operaciones de trading necesarias.
Todos los eventos en los Asesores Expertos se procesan uno tras otro en el orden en que llegan, ya que los Asesores Expertos, como todos los demás programas MQL, son de un solo hilo. Si ya hay un evento OnTick en la cola o se está procesando un evento de este tipo, entonces los nuevos eventos OnTick no se ponen en cola.
Se genera un evento OnTick independientemente de si la negociación automática está desactivada o activada (botón Algo trading en la interfaz del terminal). La desactivación del trading automático significa sólo la restricción en el envío de solicitudes de negociación de los Asesores Expertos, pero no impide que el Asesor Experto se ejecute.
Hay que recordar que los eventos de tick sólo se generan para un símbolo, que es el símbolo del gráfico actual. Si el Asesor Experto es multidivisa, la obtención de ticks de otros símbolos debe organizarse de alguna forma alternativa; por ejemplo, utilizando un indicador espía EventTickSpy.mq5 o una suscripción a eventos de libros de órdenes, como en MarketBookQuasiTicks.mq5.
Como ejemplo sencillo, considere el Asesor Experto ExpertEvents.mq5. Define manejadores para todos los eventos que suelen utilizarse para lanzar algoritmos de trading. Estudiaremos algunos otros eventos (OnTrade, OnTradeTransaction y eventos de probadores) más adelante.
Todos los manejadores llaman a la función de ayuda display que muestra la hora actual (etiqueta del contador de milisegundos del sistema) y el nombre del manejador en un comentario de varias líneas.
#define N_LINES 25
|
El evento OnTick será llamado automáticamente a la llegada de nuevos ticks. Para los eventos de temporizador y libro de órdenes, es necesario activar los manejadores correspondientes mediante llamadas a EventSetTimer y MarketBookAdd desde OnInit.
void OnInit()
|
El evento de cambio de gráfico también está disponible: se puede utilizar para operar sobre el marcado basado en objetos gráficos, pulsando botones o teclas de acceso rápido, así como a la llegada de eventos personalizados de otros programas; por ejemplo, indicadores como EventTickSpy.mq5.
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
|
En la siguiente captura de pantalla se muestra el resultado de la operación del Asesor Experto en el gráfico:
Comentarios con eventos de varios tipos en el Asesor Experto
Tenga en cuenta que el evento OnBookEvent (si se emite para un símbolo) llega más a menudo que OnTick.