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;
}
//+------------------------------------------------------------------+
- www.mql5.com
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!
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
Por la misma regla tarda menos en buscarlo en Google, que yo en escribirlo. XD
https://www.mql5.com/es/forum/307814- 2019.03.22
- www.mql5.com
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
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.