MT5エキスパートアドバイザー SMA_EA01.mq5


 今回はエキスパートアドバイザー、SMA_EA.mq5 を紹介します。ストラテジーテスターがMT4よりMT5の方が良い見たいなので、MT5で作成しています。エキスパートアドバイザーを作ると検証出来るのが便利です。

SMA_EA.mq5 はエキスパートアドバイザー新規作成のテンプレートを使用し、作成したものです。
自動売買のシグナルは単純移動平均線SMAを使っています。

シグナルは、指定した時間足の終値(C1)がその時間足のSMAを越えたとき発生します。
1、(C1>SMA1-->BUYシグナル
2、(C1<SMA1-->SELLシグナル
3、ポジションがすでにあるときはそれ以上売買しない。
4、BUYポジションがあるときSELLシグナルでは、SELLポジションにSARSTOP AND REVERS)します。
5、SELLポジションがあるときBUYシグナルでは、BUYポジションにSARします。




デモトテードでは、プロパティ設定の共有画面で、「自動トレーデイングを許可する」をチェックしてください。「シグナル設定の修正を許可する」は今回チェックする必要はありません。
注意:SMA_EA.mq5 プログラムあくまでFX個人投資家の学習のために
デモ口座によるMQL5売買プログラミングの情報提供目的としております
このプログラムによる運用結果につきましては、自己責任であることをご了承ください。
パラメータの設定、最適化は読者自らで行ってください。リアルトレードではテストしておりません。


SMA_EA01.mq5  (テンプレート使用) プログラムは下のダウンロードから行ってください。
ソースファイルですので、前回のようにダウンロードしコンパイルが必要です。

ダウンロード





コンパイルすると以下の警告がでますが、問題ありません。
return value of 'OrderSend' should be checked SMA_EA01.mq5
return value of 'OrderSend' should be checked SMA_EA01.mq5
0 error(s), 2 warning(s), compile time: 17731 msec



SMA_EA01.mq5  プログラムは次の通りです。

プログラムの説明は次回に予定しております。

//+--------------------------+
//             SMA_EA01.mq5  
//     Copyright 2015T.S 
//+--------------------------+
#property copyright "Copyright 2015, by T.S"
#property link      ""
#property version   "1.00"
//--- input parameters
input int      Stop=50;
input int      Take=100;
input int      Magic=1000;
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;
                 
         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;
           
          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

本ブログの内容につきましては、
著作権および著作者人格権、プライバシー権、名誉権、パブリシティ権を主張しております。
個人使用、学習目的以外の使用はご遠慮ください 

ストラテジーテストの結果については下の画像を参考にしてください。


 
テスト結果のチャート
テスト結果のチャート

            



テスト結果のグラフ


テスト結果のグラフ



テスト結果1
テスト結果1


テスト結果2
テスト結果2


テストの設定
テストの設定


テストのパラメータ
テストのパラメータ


デモトレードEURUSD H1
デモトレードEURUSD H1