ナンピンでトレードする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






コメント