アイデアの作者 — George F.Peskov、MQL5コードの作者 — barabashkakvn。
このトレーディングシステムは、2つの移動平均(iMA)の交差を基にしており、ATRの値に基づいてストップロスが自動的に設定されます。ポジションが開かれたり閉じられたりするたびに、メール通知が送信されます。パラメーターはバックテストによって選択可能です。
インジケーターの値を取得する
最初と2番目のバーのインジケーター値を取得するためのコードは以下の通りです:
//--- 移動平均を取得
mas=iMAGet(handle_iMA1,1); // ロング移動平均 12
maf=iMAGet(handle_iMA2,1); // ショート移動平均 4
mas_p=iMAGet(handle_iMA1,2); // ロング移動平均 12
maf_p=iMAGet(handle_iMA2,2); // ショート移動平均 4
Atr=iATRGet(0);
mas=iMAGet(handle_iMA1,1); // ロング移動平均 12
maf=iMAGet(handle_iMA2,1); // ショート移動平均 4
mas_p=iMAGet(handle_iMA1,2); // ロング移動平均 12
maf_p=iMAGet(handle_iMA2,2); // ショート移動平均 4
Atr=iATRGet(0);
売りの条件を確認する
//--- 売りの条件
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="Operation SELL by"+Symbol()+"";
sBodyLetter="Deal Sell by"+Symbol()+" at "+DoubleToString(m_symbol.Bid(),Digits())+
", and set stop/loss at "+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="Operation SELL by"+Symbol()+"";
sBodyLetter="Deal Sell by"+Symbol()+" at "+DoubleToString(m_symbol.Bid(),Digits())+
", and set stop/loss at "+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="Operation BUY at"+Symbol()+"";
sBodyLetter="Deal Buy at"+Symbol()+" for "+DoubleToString(m_symbol.Ask(),Digits())+
", and set stop/loss at "+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="Operation BUY at"+Symbol()+"";
sBodyLetter="Deal Buy at"+Symbol()+" for "+DoubleToString(m_symbol.Ask(),Digits())+
", and set stop/loss at "+DoubleToString(stop_loss,Digits())+"";
sndMessage(sHeaderLetter,sBodyLetter);
}
return;
}
コメント 0