Idee Auteur: George F.Peskov, ontwikkelaar van de MQL5 code: barabashkakvn.
De CrossMA is een trading systeem dat gebaseerd is op de kruising van twee iMA (Moving Averages). De stop loss wordt automatisch ingesteld op basis van de waarde van de ATR (Average True Range). Daarnaast ontvang je een e-mail elke keer wanneer een positie wordt geopend of gesloten. Je kunt de parameters selecteren door middel van backtesting.
Hieronder vind je hoe je de waarden van de indicatoren op de eerste en tweede bars kunt ophalen:
//--- verkrijg de Moving Average
mas=iMAGet(handle_iMA1,1); // lange moving average 12
maf=iMAGet(handle_iMA2,1); // korte moving average 4
mas_p=iMAGet(handle_iMA1,2); // lange moving average 12
maf_p=iMAGet(handle_iMA2,2); // korte moving average 4
Atr=iATRGet(0);
mas=iMAGet(handle_iMA1,1); // lange moving average 12
maf=iMAGet(handle_iMA2,1); // korte moving average 4
mas_p=iMAGet(handle_iMA1,2); // lange moving average 12
maf_p=iMAGet(handle_iMA2,2); // korte moving average 4
Atr=iATRGet(0);
Voor het controleren van de verkoopvoorwaarden:
//--- Voorwaarde voor verkoop
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="Verkoop Operatie door"+Symbol()+"";
sBodyLetter="Deal Verkoop door"+Symbol()+" op "+DoubleToString(m_symbol.Bid(),Digits())+
", en stop/loss ingesteld op "+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="Verkoop Operatie door"+Symbol()+"";
sBodyLetter="Deal Verkoop door"+Symbol()+" op "+DoubleToString(m_symbol.Bid(),Digits())+
", en stop/loss ingesteld op "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
Voor het controleren van de aankoopvoorwaarden:
//--- Voorwaarde voor aankoop
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="Aankoop Operatie op"+Symbol()+"";
sBodyLetter="Deal Aankoop op"+Symbol()+" voor "+DoubleToString(m_symbol.Ask(),Digits())+
", en stop/loss ingesteld op "+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="Aankoop Operatie op"+Symbol()+"";
sBodyLetter="Deal Aankoop op"+Symbol()+" voor "+DoubleToString(m_symbol.Ask(),Digits())+
", en stop/loss ingesteld op "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
Reactie 0