ナンピンでトレードするEA
ナンピンでトレードするEAを作成していきたいと思います。
- RSIが70以上と30以下の場合に逆張りトレード
- チャートが逆行した場合にナンピンする
メタエディタ(MetaEditor)を立ち上げる
メタエディタ(MetaEditor)を立ち上げましょう。今回は名前を「Nampin-EA」で作成します。
パラメータを記述する
パラメータを記述しましょう。
input int magic = 5;//マジックナンバー input double lots = 0.1;//ロット input double slippage = 3;//スリッページ input int RSI_period = 14;//RSIの期間 input double nampin = 1000;//ナンピン input int maxnampin = 5;//最大ナンピン数
Copy
グローバル変数を記述する
グローバル変数を記述しましょう。
Static int Ticket_Number;//チケットナンバー
Copy
OnTick()関数を記述
OnTick()関数を記述しましょう。
ソースコード全体
Nampin-EAのソースコード全体は以下に記載しています。
//+------------------------------------------------------------------+ //| Nampin--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 double lots = 0.01;//ロット input double slippage = 3;//スリッページ input int RSI_period = 14;//RSIの期間 input double nampin = 5;//ナンピン幅 input int maxnampin = 5;//最大ナンピン数 input int MagicNumber = 12345; //マジックナンバー input double StopLoss = 100;//ストップロス input int TakeProfit = 5;//TP static int TicketNumber;//チケットナンバー //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- int cnt; int CurrentPosition;//ポジション数 double profit;//損益 CurrentPosition=-1;//ポジション数ゼロ for(cnt=0;cnt<OrdersTotal();cnt++) { if(OrderSelect(cnt,SELECT_BY_POS)==false)continue; if(OrderMagicNumber()!=MagicNumber)continue; profit=profit+OrderProfit();//損益 if(OrderMagicNumber()==MagicNumber)CurrentPosition=cnt; } if(CurrentPosition==-1)//ポジションを持っていない場合 { double RSI; RSI=iRSI(Symbol(),0,RSI_period,PRICE_CLOSE,0);//RSI //ゴールデンクロス時 if(RSI < 30) { TicketNumber=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,Ask-StopLoss*Point*10,Ask+TakeProfit*Point*10,"buy",MagicNumber,0,Red); } //デッドクロス時 if(RSI > 70) { TicketNumber=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,Bid+StopLoss*Point*10,Bid-TakeProfit*Point*10,"sell",MagicNumber,0,Blue); } } else//複数ポジションを持っている場合 { OrderSelect(CurrentPosition,SELECT_BY_POS); if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(OrdersTotal()<(maxnampin+1)&&Close[0]<(OrderOpenPrice()-nampin*Point)) { TicketNumber=OrderSend(Symbol(),OP_BUY,OrderLots(),Ask,slippage,Ask-StopLoss*Point*10,Ask+TakeProfit*Point*10,"buy2",MagicNumber,0,Blue); } } if(OrderType()==OP_SELL) { if(OrdersTotal()<(maxnampin+1)&&Close[0]>(OrderOpenPrice()+nampin*Point)) { TicketNumber=OrderSend(Symbol(),OP_SELL,OrderLots(),Bid,slippage,Bid+StopLoss*Point*10,Bid-TakeProfit*Point*10,"sell2",MagicNumber,0,Red); } } } } } //+------------------------------------------------------------------+
Copy
コメント