Convertir EAs mql4 a mql5

Foro para cuestiones generales sobre la versión 5 de MetaTrader.

Convertir EAs mql4 a mql5

Notapor Urano » 04 Sep 2016, 06:45

Me interesa pasar un EA de mql4 a mql5, con el fin de acelerar la optimización.

Según lei permiten utilizar todos los nucleos y la nube con lo cual se aumenta la rapidez en cientos de veces.

Busque convertidores y encontré algún EA, algún script (incluido el que postearon en x-trader), y algún exe con virus.
ni uno pudo realizar la conversión, convierten solo extern a input, y algunas cosillas mas, no reconocen Digits, ni las ordenes de apertura, modificación, etc, además de alguno de ellos devolver en formato HTML completamente desalineado y con codigos externos que no son parte del programa, y después de la perdida de tiempo alineándolo para que solo me de errores, me canse y decidi escribirles, tal vez alguno tuvo suerte con un convertidor mas reciente.

Adjunto el EA base, si alguien me da una manito le estare muy agradecido.
Saludos
Adjuntos
ea uno.mq4
(7.93 KiB) 390 veces
Urano
 
Mensajes: 692
Registrado: 06 Dic 2011, 22:13
Karma: 4

Re: Convertir EAs mql4 a mql5

Notapor Xakalin » 04 Sep 2016, 07:17

yo como máximo te puedo ayudar a optimizarlo...
:(
Imagen
Avatar de Usuario
Xakalin
 
Mensajes: 291
Registrado: 05 Jul 2016, 17:57
Karma: 4

Re: Convertir EAs mql4 a mql5

Notapor Urano » 04 Sep 2016, 07:54

Gracias,

El EA es solo una parte de una estrategia, optimizarla tal como esta, no nos dara mucho, solo deje lo básico para facilitar su escritura en mql5.
Puede servirles para el inicio de un EA.

Se trata de una estrategia básica asiática que compra cuando toca la parte inferior de las BB y vende en la parte superior de las BB, solo cuando las BB tienen un ancho que depende del par y el precio toca a una distancia de ella. En la versión que les pase usa prácticamente cierra solo cuando toca su tp o sl, moviendo el stop cuando a asegurado un minimo de ganancia equivalente al sl.
adjunto imagen de bt para audusd pero solo considerando las horas desde 22 a 0 gmt. deben cambiar el código
if( !(Hour()== 22 || Hour()==23 || Hour()==0 ) ) return;
comprenderán que este ea no debe entrar a real, sin varios cambios, por ejem considerar el offset de los brokers, hacer parámetros las horas, agregarle algún filtro de entrada, mejorar la salida por condiciones, etc.

saludos
Adjuntos
ea uno 1.png
Urano
 
Mensajes: 692
Registrado: 06 Dic 2011, 22:13
Karma: 4

Re: Convertir EAs mql4 a mql5

Notapor Urano » 05 Sep 2016, 02:33

como no se ofrecieron a convertirlo, tuve que meter las manos, postergando otras cosas.

Use esto
https://www.mql5.com/es/articles/100

y esto
https://www.mql5.com/en/docs/trading/ordersend

y esto
https://www.mql5.com/es/articles/81

además de la documentación oficial.

Saludos y gracias

PD: aun me queda la duda como actualizar los históricos en mt5, no vi opción, solo veo que descarga del bróker que son incompletos y malísimos.
Urano
 
Mensajes: 692
Registrado: 06 Dic 2011, 22:13
Karma: 4

Re: Convertir EAs mql4 a mql5

Notapor Urano » 05 Sep 2016, 10:33

adjunto la versión mql5 sin errores, pero aun me salen advertencias, no funciona, sospecho que falla en OrdersTotal() y alguna otra cosa.
Agradeceria si alguien que conozca mql5 le heche un vistazo. El BT de la imagen anterior es de 1m, solo precios de apertura y desde el 2001.

La verdad es bastante pesado escribir código en mql5, supongo que se gana cuando los experts son mas complejos.

Saludos y gracias de antemano.
Adjuntos
ea uno para fxstreat.mq5
(13.48 KiB) 352 veces
Urano
 
Mensajes: 692
Registrado: 06 Dic 2011, 22:13
Karma: 4

Re: Convertir EAs mql4 a mql5

Notapor Urano » 05 Sep 2016, 22:48

Ya me abre trades, el problema era el spread que esta en points, pero no hace lo que quiero, creo que el problema es en el registro de posiciones... al mt5 las suma, a menos que uno las gestiones con PositionsTotal() y similares

https://www.mql5.com/es/articles/2299

yo abro solo una posición en una dirección a la vez... mmm que complicado lo ponen.
Ademas me genera un monton de dudas
1) donde descargo el historial, no esta en el menu, x el momento lo trae automaticamente del bróker de la demo, yo quiero un historial descargado de otro lado y mas fiable.
2) no hay script convertidor de periodos, ni abrir graficos sin conexión.
3) como puedo indicarle el spread que quiero usar? usa el de bróker con historial ya dije incompleto

la verdad tenemos que aprender de nuevo, que trabajito...
Adjuntos
m2.png
m1.png
Urano
 
Mensajes: 692
Registrado: 06 Dic 2011, 22:13
Karma: 4

Re: Convertir EAs mql4 a mql5

Notapor Urano » 06 Sep 2016, 09:20

¿alguien que me de una mano?
no me funciona el OrdersTotal() siempre arroja 0.
Sospecho que no abre ordenes sino las acumulan en una posicion. Yo quiero manejar ordenes y que existan al mismo tiempo buy y sell
Aca mi código de como abro la orden.
Espero me puedan ayudar.

void OpenOrderAtMarket(double argLotSize, ENUM_ORDER_TYPE argDirection, int argMagicNumber, string comentario, int argSLpips, int argPTpips)
{
double StopLoss, TakeProfit;
MqlTick latest_price;
if( !SymbolInfoTick(_Symbol,latest_price) )
{
Alert("Error getting the latest price quote - error:",GetLastError(),"!!");
return;
}

MqlTradeRequest request={0};
MqlTradeResult result={0};

double price;

if (argDirection == ORDER_TYPE_BUY) StopLoss = NormalizeDouble(latest_price.bid - argSLpips * _Point, _Digits);
if (argDirection == ORDER_TYPE_BUY) TakeProfit = NormalizeDouble(latest_price.bid + argPTpips * _Point, _Digits);

if (argDirection == ORDER_TYPE_SELL) StopLoss = NormalizeDouble(latest_price.ask + argSLpips * _Point, _Digits);
if (argDirection == ORDER_TYPE_SELL) TakeProfit = NormalizeDouble(latest_price.ask - argPTpips * _Point, _Digits);

if (argDirection == ORDER_TYPE_BUY ) price = NormalizeDouble(latest_price.bid, _Digits);
if (argDirection == ORDER_TYPE_SELL) price = NormalizeDouble(latest_price.ask, _Digits);

request.action = TRADE_ACTION_DEAL; // tipo de operación comercial
//request.order = order_ticket; // ticket de la orden
request.price =
request.volume = GetLotSize(Lots, RiskPct);
request.type = argDirection;
request.sl = StopLoss;
request.tp = TakeProfit;
request.symbol = Symbol(); // símbolo
request.deviation = SlippagePips; // desviación permisible del precio
request.magic = nMagic;
request.type_filling=ORDER_FILLING_FOK;

//--- envío de la solicitud
if(!OrderSend(request,result))
PrintFormat("*******************************OrderSend error %d",GetLastError()); // si no se ha logrado enviar la solicitud, mostrar el código de error
//--- información sobre la operación
// PrintFormat("------------------------------------- retcode=%u deal=%I64u order=%I64u", result.retcode, result.deal, result.order);
//--- reseteo de los valores de la solicitud y el resultado
ZeroMemory(request);
ZeroMemory(result);
}
Adjuntos
exch.png
Urano
 
Mensajes: 692
Registrado: 06 Dic 2011, 22:13
Karma: 4

Re: Convertir EAs mql4 a mql5

Notapor FXWizard » 08 Sep 2016, 23:25

A lo mejor me equivoco (no he trasteado mucho con MQL 5) pero lo que te marco en rojo, ¿no es incorrecto?

void OpenOrderAtMarket(double argLotSize, ENUM_ORDER_TYPE argDirection, int argMagicNumber, string comentario, int argSLpips, int argPTpips)


Saludos,
FXWizard
Avatar de Usuario
FXWizard
 
Mensajes: 8493
Registrado: 12 Feb 2008, 15:17
Karma: 35

Siguiente

Volver a MetaTrader 5

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados