FX-EA System Projectはこちら公式ラインに登録して
プレゼントをもらう

【MQL】複利でトレードするEA【中級編】

MQL MT4 複利 EAMT4EA作成

複利でトレードするEA

複利とは、トレードによって証拠金が増えるほど、それに応じてEAの稼働ロットも増やしていくスタイルです。

  • 単利:証拠金に応じたロット数
  • 複利:証拠金+利益に応じたロット数

コンパイル

コンパイルして稼働して複利でロットが増えていたら完了です。

MQL MT4 複利 EA

ソースコード全体

//+------------------------------------------------------------------+
//|                                                    fukuri-EA.mq4 |
//|                     Copyright 2020, FX-EA System Project Creator |
//|                        https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.00"
#property strict

input bool MM = TRUE;
input int risk = 1;
input double Lot = 0.01;
input double MaxLots = 10;
input double MinLots =1;
input int TakeProfit = 5;//利確
input int MagicNumber = 12345; //マジックナンバー
input int MA_Short_period = 50;//MA期間
input int MA_Long_period = 100;//MA期間
static int TicketNumber;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
    double Lots = fukuri();//複利関数呼び出し
    double kako_Short_MA,kako_Long_MA;
    double gen_Short_MA,gen_Long_MA;
     
     //1つ前の短期移動平均線
     kako_Short_MA = iMA(NULL,0,MA_Short_period,0,MODE_SMA,PRICE_CLOSE,1);
     //一つ前の長期移動平均線
     kako_Long_MA = iMA(NULL,0,MA_Long_period,0,MODE_SMA,PRICE_CLOSE,1);
     //現在の短期移動平均線
     gen_Short_MA = iMA(NULL,0,MA_Short_period,0,MODE_SMA,PRICE_CLOSE,0);
     //現在の長期移動平均線
     gen_Long_MA = iMA(NULL,0,MA_Long_period,0,MODE_SMA,PRICE_CLOSE,0);
     //もし50日移動平均線が50日線を下から上にクロスしたら(ゴールデンクロス)
     if(kako_Short_MA <= kako_Long_MA && gen_Short_MA > gen_Long_MA)
     {
     //買いポジションを取る
       OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point*10,"Order Long",MagicNumber,0,Red);
     }
     //もし50日移動平均線が50日線を下から上にクロスしたら(デッドクロス)
    if( kako_Short_MA >= kakoMA100 && gen_Short_MA < gen_Long_MA) 
  { 
   //買いポジションを取る OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point*10,"Order Short",MagicNumber,0,Blue); 
  } 
} //+------------------------------------------------------------------+
double fukuri() 
{
  double Lots;
 double alots,blots,clots;
  if(MM == TRUE)//MMがTRUEの場合
  {
    alots = AccountBalance()
    blots = alots * 10 + 0.01;
    clots = blots * 0.1;
    if(risk > 0)//もしもriskが0より大きい場合
    {
      Lots = clots * risk;
    }
    Lots = clots;
    }
  else Lots == Lot;//Lotsに単利のロットを入れる
  
  if(Lots > MaxLots)//LotsがMaxLotsよりも大きい場合
  {
    Lots = MaxLots;//LotsをMaxロットにする
  }
  if(Lots < MinLots)//LotsがMinLotsよりも小さい場合
  {
    Lots = MinLots;//LotsをMinLotsにする
  }
  return(Lots);
}
Copy

まとめ

コメント

タイトルとURLをコピーしました