¿Como pasarse de mql4 a mql5?

 
Llevo tres años programando con mql4 pero al ver todas las ventajas que tiene mql5 quiero aprender este lenguaje ¿Hay algún manual que enseñe las principales diferencias entre los dos lenguajes? 
Me he descargado MT5 y no entiendo nada, no he conseguido ni realizar un backtests del expert ese que viene siempre de ejemplo que usa un MACD. Necesito ayuda de todo aquel que ya haya hecho la conversión, un saludo y gracias de antemano. 
 
palazon94:
Llevo tres años programando con mql4 pero al ver todas las ventajas que tiene mql5 quiero aprender este lenguaje ¿Hay algún manual que enseñe las principales diferencias entre los dos lenguajes? 
Me he descargado MT5 y no entiendo nada, no he conseguido ni realizar un backtests del expert ese que viene siempre de ejemplo que usa un MACD. Necesito ayuda de todo aquel que ya haya hecho la conversión, un saludo y gracias de antemano. 

Analiza este código  en mql5 esta programado de una manera muy parecida al mql4


//+------------------------------------------------------------------+

//|                                               burning_meteor.mq5 |

//|                        Copyright 2018, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Copyright 2018, MetaQuotes Software Corp."

#include<Trade\Trade.mqh>



input ulong MagicNumber=10001;

input double Lots=0.1;

input double StopLoss=0;

input double TakeProfit=0;

input int TrailingStop=40;


// Create a  Ctrade instance

CTrade trade;

int pm;

#define OP_BUY 0           //Buy 

#define OP_SELL 1          //Sell 

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int OnInit()

  {

   pm=1;

   if(_Digits==5 || _Digits==3)

      pm=10;

   trade.SetExpertMagicNumber(MagicNumber);


   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

void OnTick()

  {


   double SL,TP,lotB,lotS;


// Get the Ask price

   double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);


// Get the Bid price

   double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   

   Trailing(Bid,Ask);

   

   long Volume[];

   int count=1;   // number of elements to copy

   ArraySetAsSeries(Volume,true);

   CopyTickVolume(_Symbol,_Period,0,count,Volume);

   

   lotS=Lots;

   lotB=Lots;

   if(OrdersCount(OP_BUY)>OrdersCount(OP_SELL)){

   lotB=Lots;

   lotS=2*Lots;

   }

   if(OrdersCount(OP_BUY)<OrdersCount(OP_SELL)){

   lotB=2*Lots;

   lotS=Lots;

   }

      if(Volume[0]>1) return;

      

     {

      if(CheckEntry()=="buy")

      if(OrdersCount(OP_BUY)<2)

        {


         if(StopLoss>0)SL=NormalizeDouble(Bid-StopLoss*pm*_Point,_Digits);

         else SL=0;

         if(TakeProfit>0)TP=NormalizeDouble(Ask+TakeProfit*pm*_Point,_Digits);

         else TP=0;

         trade.Buy(lotB,NULL,Ask,SL,TP,NULL);

         return;


        }

      if(CheckEntry()=="sell")

      if(OrdersCount(OP_SELL)<2)

        {


         if(StopLoss>0)SL=NormalizeDouble(Ask+StopLoss*pm*_Point,_Digits);

         else SL=0;

         if(TakeProfit>0)TP=NormalizeDouble(Bid-TakeProfit*pm*_Point,_Digits);

         else TP=0;

         trade.Sell(lotS,NULL,Bid,SL,TP,NULL);

         return;


        }

     }


  }

//+------------------------------------------------------------------+

int OrdersCount(ENUM_POSITION_TYPE type)

  {

   int result=0;

   for(int i=PositionsTotal()-1; i>=0; --i)

     {

      string symbol=PositionGetSymbol(i);

      ulong magic=PositionGetInteger(POSITION_MAGIC);

      if(symbol==_Symbol && magic==MagicNumber)

      if(type==(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE))

        {

         result++;


        }

     }

   return (result);

  }

//+------------------------------------------------------------------+

void Trailing(double bid,double ask)

  {


   for(int i=PositionsTotal()-1; i>=0; --i)

     {

      string symbol=PositionGetSymbol(i);

      ulong magic=PositionGetInteger(POSITION_MAGIC);

      if(symbol==_Symbol && magic==MagicNumber)

        {


         ulong ticket=PositionGetInteger(POSITION_TICKET);

         double stoploss=PositionGetDouble(POSITION_SL);

         double takeprofit= PositionGetDouble(POSITION_TP);

         double openprice = PositionGetDouble(POSITION_PRICE_OPEN);

         ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);


         if(type==POSITION_TYPE_BUY)

           {


            if(TrailingStop>0)

              {

               if(bid-openprice>NormalizeDouble(pm*_Point*TrailingStop,_Digits))

                 {

                  if(stoploss<NormalizeDouble(bid-pm*_Point*TrailingStop,_Digits))

                    {


                     trade.PositionModify(ticket,NormalizeDouble(bid-TrailingStop*pm*_Point,_Digits),takeprofit);


                     return;


                    }

                 }

              }

           }


         else

           {

            if(TrailingStop>0)

              {

               if((openprice-ask)>NormalizeDouble(pm*_Point*TrailingStop,_Digits))

                 {

                  if(stoploss>NormalizeDouble(ask+pm*_Point*TrailingStop,_Digits) || stoploss==0)

                    {

                     trade.PositionModify(ticket,NormalizeDouble(ask+pm*_Point*TrailingStop,_Digits),takeprofit);

                     return;

                    }

                 }

              }


           }


        }

     }


  }

//+------------------------------------------------------------------+

string CheckEntry()

  {

   string signal="";

   bool A,B,C,D;

// create an Array for several prices

   double myMovingAverageArray5[],myMovingAverageArray21[];


   double myMovingAverageArray100[],myMovingAverageArray200[];


   double myMovingAverageArray10[];


// define the properties of the Moving Average1

   int movingAverageDefinition1=iMA(_Symbol,_Period,5,0,MODE_EMA,PRICE_CLOSE);


// define the properties of the Moving Average2

   int movingAverageDefinition2=iMA(_Symbol,_Period,21,0,MODE_SMA,PRICE_CLOSE);


// define the properties of the Moving Average3

   int movingAverageDefinition3=iMA(_Symbol,_Period,100,0,MODE_EMA,PRICE_CLOSE);


// define the properties of the Moving Average4

   int movingAverageDefinition4=iMA(_Symbol,_Period,200,0,MODE_EMA,PRICE_CLOSE);


// define the properties of the Moving Average5

   int movingAverageDefinition5=iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);


// sort the price array1 from the current candle downwards

   ArraySetAsSeries(myMovingAverageArray5,true);


// sort the price array2 from the current candle downwards

   ArraySetAsSeries(myMovingAverageArray21,true);


// sort the price array3 from the current candle downwards

   ArraySetAsSeries(myMovingAverageArray100,true);


// sort the price array4 from the current candle downwards

   ArraySetAsSeries(myMovingAverageArray200,true);


// sort the price array5 from the current candle downwards

   ArraySetAsSeries(myMovingAverageArray10,true);


// Defined MA1, one line,current candle,3 candles, store result 

   CopyBuffer(movingAverageDefinition1,0,0,3,myMovingAverageArray5);


// Defined MA2, one line,current candle,3 candles, store result 

   CopyBuffer(movingAverageDefinition2,0,0,3,myMovingAverageArray21);


// Defined MA3, one line,current candle,3 candles, store result 

   CopyBuffer(movingAverageDefinition3,0,0,3,myMovingAverageArray100);


// Defined MA4, one line,current candle,3 candles, store result 

   CopyBuffer(movingAverageDefinition4,0,0,3,myMovingAverageArray200);


// Defined MA4, one line,current candle,3 candles, store result 

   CopyBuffer(movingAverageDefinition5,0,0,3,myMovingAverageArray10);


   A=(myMovingAverageArray5[0]>myMovingAverageArray21[0])

     && (myMovingAverageArray5[1]<myMovingAverageArray21[1]);

   B=(myMovingAverageArray5[0]>myMovingAverageArray10[0])

     && (myMovingAverageArray5[1]<myMovingAverageArray10[1]);

   C =(myMovingAverageArray21[1]>myMovingAverageArray200[1]);

   D = (myMovingAverageArray100[1]>myMovingAverageArray200[1]);


   if((A || B) && C && D)signal="buy";


   A=(myMovingAverageArray5[0]<myMovingAverageArray21[0])

     && (myMovingAverageArray5[1]>myMovingAverageArray21[1]);

   B=(myMovingAverageArray5[0]<myMovingAverageArray10[0])

     && (myMovingAverageArray5[1]>myMovingAverageArray10[1]);

   C =(myMovingAverageArray21[1]<myMovingAverageArray200[1]);

   D = (myMovingAverageArray100[1]<myMovingAverageArray200[1]);


   if((A || B) && C && D)signal="sell";


   return signal;


  }

//+------------------------------------------------------------------+


Descubra las nuevas posibilidades de MetaTrader 5 con la comunidad y los servicios MQL5
Descubra las nuevas posibilidades de MetaTrader 5 con la comunidad y los servicios MQL5
  • www.mql5.com
Formule preguntas sobre análisis técnico, discuta sobre sistemas comerciales y mejore sus hablidades de programación de estrategias comerciales en el lenguaje MQL5. Contacte con tráders de todo el mundo en el foro e intercambie experiencias, también podrá ayudar a los principiantes con sus propias respuestas: nuestra comunidad se desarrolla...
Archivos adjuntos:
 
palazon94:
Llevo tres años programando con mql4 pero al ver todas las ventajas que tiene mql5 quiero aprender este lenguaje ¿Hay algún manual que enseñe las principales diferencias entre los dos lenguajes? 
Me he descargado MT5 y no entiendo nada, no he conseguido ni realizar un backtests del expert ese que viene siempre de ejemplo que usa un MACD. Necesito ayuda de todo aquel que ya haya hecho la conversión, un saludo y gracias de antemano. 

Me paso lo mismo que a ti. Te cuento como lo hice yo, tal vez te ayude. Yo había estudiado programación procedimental muchos años atrás en la universidad (no soy programador, solo estudie programación en una materia de una año) y me costo muchísimo adaptarme a mql5 ya que este se basa en proporcionara orientada a objetos (algo así como la diferencia entre c y c++). 

Intente cortar camino y entender mql5 a fuerza de ver como estaban hechos los EAs y bastante de prueba y error, pero lo único que conseguí fue perder el tiempo.

Decidí aparcar temporariamente  mis estudios de estrategias de trading y me centre en estudiar c++. Cuando volví a mis intentos por programar en mql5 todo fue muchísimo mas fácil y pude avanzar. Me costo mucho asumir que debía "perder el tiempo" estudiando c++, pero no me arrepiento, creo que fue el tiempo mejor invertido.

Esa fue mi experiencia, y creo que si de verdad quieres programar en mql5, vas a tener que recorrer el mismo camino. 

Saludos y Suerte!

 
karachiento:

Me paso lo mismo que a ti. Te cuento como lo hice yo, tal vez te ayude. Yo había estudiado programación procedimental muchos años atrás en la universidad (no soy programador, solo estudie programación en una materia de una año) y me costo muchísimo adaptarme a mql5 ya que este se basa en proporcionara orientada a objetos (algo así como la diferencia entre c y c++). 

Intente cortar camino y entender mql5 a fuerza de ver como estaban hechos los EAs y bastante de prueba y error, pero lo único que conseguí fue perder el tiempo.

Decidí aparcar temporariamente  mis estudios de estrategias de trading y me centre en estudiar c++. Cuando volví a mis intentos por programar en mql5 todo fue muchísimo mas fácil y pude avanzar. Me costo mucho asumir que debía "perder el tiempo" estudiando c++, pero no me arrepiento, creo que fue el tiempo mejor invertido.

Esa fue mi experiencia, y creo que si de verdad quieres programar en mql5, vas a tener que recorrer el mismo camino. 

Saludos y Suerte!

AMEN

 
Gracias a todos por sus respuestas, supongo que no me queda otra que hincar los codos, un saludo.
 
En menos de lo que tardas en reescribir todos tus programas para la versión 5 modificas los de la 4 para que hagan todo lo que quieras. ¿Qué hay en la 5 que sea imprescindible del todo y que no puedes hacer en la 4?
 
Pimpinela:

Por la misma regla tarda menos en buscarlo en Google, que yo en escribirlo. XD

https://www.mql5.com/es/forum/307814
MT4 vs MT5
MT4 vs MT5
  • 2019.03.22
  • www.mql5.com
Saludos Traders, Quisiera conocer las diferencias entre MT4 y MT5. ¿Cuáles són? ¿MT5 tiene un sistema de configuración diferente...
 
Pero si Palazon94 no ha intervenido en ese hilo, estamos en las mismas. Eso pasa por buscar en Google X-D
 
Pimpinela:

Me refería a su pregunta.

¿Qué hay en la 5 que sea imprescindible del todo y que no puedes hacer en la 4?

Hay mucho escrito sobre ello...de ahí lo de Google. :P

Razón de la queja: