売買戦略
SMA_EA011.mq5の自動売買シグナルは単純移動平均線SMAを元にしています。
前回と同じようにシグナルは、指定した時間足の終値(C1)がその時間足のSMAを越えたときに発生します。
しかし、今回はポジションのSAR(STOP AND REVERS)を行わず、ポジションがStopで損切りで手仕舞いするか、
利益が出てTakeが実行されるまで待つ戦略です。
1、(C1>SMA1)-->BUYシグナル
2、(C1<SMA1)-->SELLシグナル
3、ポジションがすでにあるときはそれ以上売買しない。
4、ポジションがあるときStopあるいはTakeでポジションが手仕舞いされるまで待つ。
5、ポジションがなくなったら上記の1あるいは2のシグナルで、再びポジションにエントリーします。
*(前回のSMA_EA01.mq5で、(C1>SMA1)-->BUYシグナルとすべき所を、
(C1<SMA1)となっていましたのでお詫びいたします。
SMA_EA01.mq5 のプログラムは下のダウンロードから行ってください。
ソースファイルですので、ダウンロードした後コンパイルが必要です。
Expertsフォルダーの開き方は、メタエディタのナビゲータでExpertsを選択し、
マウスの右ボタンをクリックします。
そして「フォルダーを開く」を選択します。
Expertsフォルダーを開いた後、ファイルをコピー&ペーストします。
コンパイルすると以下の警告がでますが、動作には問題ありません。
return value of 'OrderSend' should be checked SMA_EA011.mq5 126 7
return value of 'OrderSend' should be checked SMA_EA011.mq5 147 7
0 error(s), 2 warning(s), compile time: 13014 msec 1 3
プログラムの変更箇所
プログラムの変更箇所は2箇所です。
売買のオーダーを指示する所で、下のように赤字のコードを追加しています。
if(Buy_S1 )
{
if(Buy_sig) return;
if(Sell_sig) return;
...
if(Sell_S1)
{
if(Sell_sig) return;
if(Buy_sig) return;
...
SMA_EA01.mq5 のプログラムと内容は同じですので
詳しい説明はSMA_EA01.mq5 を参考にしてください。
どちらが良いか、ポジションをどう保持するかの選択は、
やはりマーケットがどう動くかの問題という事になるでしょう。
頻繁に、あるいは漫然とEAを稼動し続ける事が良いとは思いません。
システムの限界を見極めることも大事です。
この2つのうち1つを選ぶと言うならば、FXは方向の変化が頻繁なので、
筆者としてはSARを使ったSMA_EA01.mq5 の方を選びますが、
読者の方々はどちらを選びますか。
それとも他の逆張りシステムを考えますか。?
プログラムコード
さてSMA_EA011.mq5 のプログラムコードは以下のようになります。
#property copyright "T.S"
#property link "http://mt5myprogrammingts.blogspot.com"
#property version "1.00"
//---
input parameters
input int Stop=50;
input int Take=100;
input int Magic=1001;
input double Lots=0.01;
input int Slipage=10;
input int MA_Period=10;
int maH;
double maV[3];
double sclose;
int STP,TKP,SL;
//+---------------------------+
// Expert initialization function
//+---------------------------+
int OnInit()
{
//---
maH=iMA(_Symbol,_Period,MA_Period,0,MODE_SMA,PRICE_CLOSE);
//--- What if handle returns Invalid Handle
if(maH==INVALID_HANDLE)
{
Print("Indicators error ");
return(INIT_FAILED);
}
//---
STP = Stop;
TKP = Take;
SL = Slipage;
if(_Digits==5 || _Digits==3) //EURUSD=5
{
STP = STP*10;
TKP = TKP*10;
SL = Slipage*10;
}
//---
return(INIT_SUCCEEDED);
}
//+----------------------------+
// Expert deinitialization function
//+----------------------------+
void OnDeinit(const int reason)
{
//---
IndicatorRelease(maH);
}
//+-----------------------------+
// Expert tick function
//+-----------------------------+
void OnTick()
{
//------------------------------
MqlTradeRequest mreq;
MqlTradeResult mresu;
MqlTick l_pr;
MqlRates mrate[2];
//------------------------------
ZeroMemory(mreq);
ZeroMemory(mresu);
if(!SymbolInfoTick(_Symbol,l_pr))
{
Print("the latest price error");
return;
}
if(CopyRates(_Symbol,_Period,0,2,mrate)!=2)
{
Print("CopyRates of ",_Symbol," failed, no history");
return;
}
//-----
if(CopyBuffer(maH,0,0,3,maV)<0) return;
//-----
bool Buy_sig =false;
bool Sell_sig=false;
if(PositionSelect(_Symbol)==true)
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
Buy_sig=true;
}
else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
Sell_sig=true;
}
}
sclose=mrate[0].close;
bool Buy_S1= (sclose > maV[1]);
if(Buy_S1 )
{
if(Buy_sig) return;
if(Sell_sig) return;
mreq.action= TRADE_ACTION_DEAL;
mreq.price = NormalizeDouble(l_pr.ask,_Digits);
mreq.sl = NormalizeDouble(l_pr.bid - STP*_Point,_Digits);
mreq.tp = NormalizeDouble(l_pr.ask + TKP*_Point,_Digits);
mreq.symbol = _Symbol;
mreq.volume = Lots;
mreq.magic= Magic;
mreq.type = ORDER_TYPE_BUY;
mreq.type_filling=ORDER_FILLING_FOK;
mreq.deviation=SL;
OrderSend(mreq,mresu);
}
bool Sell_S1= (sclose <maV[1]);
if(Sell_S1)
{
if(Sell_sig) return;
if(Buy_sig) return;
mreq.action= TRADE_ACTION_DEAL;
mreq.price = NormalizeDouble(l_pr.bid,_Digits);
mreq.sl = NormalizeDouble(l_pr.ask + STP*_Point,_Digits);
mreq.tp = NormalizeDouble(l_pr.bid - TKP*_Point,_Digits);
mreq.symbol = _Symbol;
mreq.volume = Lots;
mreq.magic=Magic;
mreq.type=ORDER_TYPE_SELL;
mreq.type_filling=ORDER_FILLING_FOK;
mreq.deviation=SL;
OrderSend(mreq,mresu);
}
//---
}
//
//END
(注意事項:プログラムはあくまでFX個人投資家の学習のために、
デモ口座によるMQL5売買プログラミングの情報提供を目的としております。
プログラムによる運用結果につきましては、自己責任であることをご了承ください。
パラメータの設定、最適化は読者自ら行ってください。
リアルトレードではテストしておりません。)