Autor de la idea — George F.Peskov, autor del código MQL5 — barabashkakvn.
Presentación del Sistema de Trading
CrossMA es un sistema que se basa en la intersección de dos medias móviles (iMA) y establece automáticamente el stop loss basado en el valor del ATR. Además, envía un correo electrónico cada vez que se abre o se cierra una posición. Puedes ajustar los parámetros a través de pruebas retrospectivas.
Obteniendo los valores de los indicadores
A continuación, te muestro cómo obtener los valores de las medias móviles en las primeras dos barras:
//--- Obtener la Media Móvil
mas=iMAGet(handle_iMA1,1); // media móvil larga 12
maf=iMAGet(handle_iMA2,1); // media móvil corta 4
mas_p=iMAGet(handle_iMA1,2); // media móvil larga 12
maf_p=iMAGet(handle_iMA2,2); // media móvil corta 4
Atr=iATRGet(0);
mas=iMAGet(handle_iMA1,1); // media móvil larga 12
maf=iMAGet(handle_iMA2,1); // media móvil corta 4
mas_p=iMAGet(handle_iMA1,2); // media móvil larga 12
maf_p=iMAGet(handle_iMA2,2); // media móvil corta 4
Atr=iATRGet(0);
Condiciones para vender
Ahora, veamos cómo verificar las condiciones para realizar una venta:
//--- Condición para vender
if(maf<mas && maf_p>=mas_p)
{
double lots=LotsOptimized();
double stop_loss=NormalizeDouble(m_symbol.Ask()+Atr,Digits());
res=m_trade.Sell(lots,Symbol(),m_symbol.Bid(),stop_loss,0);
if(SndMl==true && res)
{
sHeaderLetter="Operación VENDER por"+Symbol()+"";
sBodyLetter="Operación de Venta por"+Symbol()+" a "+DoubleToString(m_symbol.Bid(),Digits())+
", y establecer stop/loss en "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
if(maf<mas && maf_p>=mas_p)
{
double lots=LotsOptimized();
double stop_loss=NormalizeDouble(m_symbol.Ask()+Atr,Digits());
res=m_trade.Sell(lots,Symbol(),m_symbol.Bid(),stop_loss,0);
if(SndMl==true && res)
{
sHeaderLetter="Operación VENDER por"+Symbol()+"";
sBodyLetter="Operación de Venta por"+Symbol()+" a "+DoubleToString(m_symbol.Bid(),Digits())+
", y establecer stop/loss en "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
Condiciones para comprar
A continuación, revisemos las condiciones para realizar una compra:
//--- Condición para comprar
if(maf>mas && maf_p<=mas_p)
{
double lots=LotsOptimized();
double stop_loss=NormalizeDouble(m_symbol.Bid()-Atr,Digits());
res=m_trade.Buy(lots,Symbol(),m_symbol.Ask(),stop_loss,0);
if(SndMl==true && res)
{
sHeaderLetter="Operación COMPRAR en"+Symbol()+"";
sBodyLetter="Operación de Compra en"+Symbol()+" por "+DoubleToString(m_symbol.Ask(),Digits())+
", y establecer stop/loss en "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
if(maf>mas && maf_p<=mas_p)
{
double lots=LotsOptimized();
double stop_loss=NormalizeDouble(m_symbol.Bid()-Atr,Digits());
res=m_trade.Buy(lots,Symbol(),m_symbol.Ask(),stop_loss,0);
if(SndMl==true && res)
{
sHeaderLetter="Operación COMPRAR en"+Symbol()+"";
sBodyLetter="Operación de Compra en"+Symbol()+" por "+DoubleToString(m_symbol.Ask(),Digits())+
", y establecer stop/loss en "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
Comentarios 0