複利でトレードするEA
複利とは、トレードによって証拠金が増えるほど、それに応じて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
コメント