Entradas Populares

La Elección Del Editor - 2020

MQL4: Escribimos un asesor a la vez para MT4 y MT5

Saludos amigos!

Muchos de ustedes probablemente ya se enfrentaron a este inconveniente más de una vez: escribieron un asesor en mql4, y luego quise intentar jugar con MetaTrader 5. Reescribir todo el código nuevamente es una tarea bastante laboriosa y larga, y también primero tienen que lidiar con el trabajo del existente. . Escribir dos Asesores Expertos diferentes por separado para MT4 y MT5 también lleva mucho tiempo. Resolveremos este problema hoy en un nuevo video tutorial.

Entonces que hacer? La respuesta es simple: escriba un asesor para dos terminales a la vez. Después de todo, en su mayor parte, los lenguajes mql4 y mql5 no difieren tanto, muchos métodos y la estructura básica de los scripts en estos lenguajes son similares. Si fuera posible escribir código común en una secuencia de comandos, y las diferentes secciones pudieran reescribirse de alguna manera en ambos idiomas y obligar al compilador a elegir las piezas de código necesarias, ahorraría mucho tiempo y nervios.

Afortunadamente, MetaEditor admite directivas de compilación condicional de preprocesador. Y hoy veremos cómo se hace esto usando un ejemplo muy simple.

#ifdef identifier // El código aquí se compila si el identificador ya se ha definido para el preprocesador en el comando #define. #endif

En el código para MT5, reemplazaremos las variables de MQL4 usando la directiva #define:

#ifdef __MQL5__ #define OrdersTotal PositionsTotal #endif

En el encabezado del asesor colocamos las variables de entrada:

input int Stop = 300; input int Take = 400; input int Slip = 100; entrada int MN = 123; entrada doble LT = 0.1;

Ahora puede escribir métodos para comprar y vender:

bool Buy (precio doble, doble sl, doble tp) {#ifdef __MQL4__ int ticket = OrderSend (Symbol (), 0, LT, price, Slip, sl, tp, "", MN); if (ticket <0) {PrintFormat ("Error de envío de pedido% d", GetLastError ()); } #endif #ifdef __MQL5__ // --- declaración e inicialización de la consulta y resultado MqlTradeRequest request = {0}; MqlTradeResult result = {0}; // --- parámetros de solicitud request.action = TRADE_ACTION_DEAL; // tipo de operación comercial request.symbol = Symbol (); // request request.volume = LT; // volumen request.type = 0; // tipo de pedido request.price = price; // precio para abrir request.sl = sl; // precio StopLoss request.tp = tp; // precio TakeProfit request.deviation = Slip; // desviación permisible del precio request.magic = MN; // Pedidos MagicNumber // --- enviando una solicitud if (! OrderSend (solicitud, resultado)) {// si no se pudo enviar la solicitud, imprima un código de error PrintFormat ("Error de envío de pedido% d", GetLastError ()); } // --- información sobre la operación PrintFormat ("retcode =% u deal =% I64u order =% I64u", result.retcode, result.deal, result.order); #endif // --- return (falso); }

El método de venta es similar al método buy (). No pensaremos particularmente en la estrategia en este ejemplo, recibiremos una condición para abrir al azar y pondremos este código en OnTick ():

int oper = (int) (GetTickCount ()% 2); // el resto de la división entre dos siempre es 0 o 1 if (oper == 0) {double price = Ask; doble SL = NormalizeDouble (Oferta - Stop * _Point, _Digits); double TP = NormalizeDouble (Bid + Take * _Point, _Digits); Compra (Ask, SL, TP); } if (oper == 1) {double price = Bid; doble SL = NormalizeDouble (Ask + Stop * _Point, _Digits); double TP = NormalizeDouble (Ask - Take * _Point, _Digits); Venta (Ask, SL, TP); }

Conclusión

Eso es todo Ahora puede compilar el código en MetaEditor 4 y en el terminal MetaTrader 4 funcionará. Puede compilar el Asesor Experto en MetaEditor 5 y funcionará normalmente en el terminal MetaTrader 5. Además, para cambiar el terminal no necesita reescribir una sola línea de código; todo compilará y funcionará bien.

Mira el video: ROBOT GRATIS Expert Advisor para MetaTrader 4 - WTFX-Pro (Enero 2020).

Deja Tu Comentario