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

【MQL】ナンピンマーチンEA【上級編】

MQL MT4 ナンピン マーチンゲール EAMT4EA作成

ナンピンマーチンEA

ナンピンマーチンEAというのは、ナンピンとはポジションを増やしていく方法です。

漢字で書くと「難平」です。これは、難を平らにならすという意味で、転じて愚か者との意味合いもあります。

マーチンゲールというのはカジノでよく使われる手法で、負けたら倍々に掛け金を増やしていく手法です。

ナンピンとマーチンゲールを組み合わせたナンピンマーチンというEAの種類があります。

今回はEAを作成したいと思います。

  • 移動平均線のゴールデンクロスとデッドクロス
  • ナンピンマーチンでポジションを取る

「Nampin-Martingale-EA」という名前です。

ソースコード全体

//+------------------------------------------------------------------+
//|                                         Nampin-Martingale-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 int magic = 5;
input double lots = 0.1;
input double slippage = 3;
input int Fast_MA = 5;
input int Slow_MA = 15;
input double nampin = 1000;
input int maxnampin = 5;
//+------------------------------------------------------------------+
//| 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;
	int Ticket;
	double profit;
	
	CurrentPosition=-1;
	for(cnt=0;cnt<OrdersTotal();cnt++)
	{
		if(OrderSelect(cnt,SELECT_BY_POS)==false)continue;
		if(OrderMagicNumber()!=magic)continue;
		profit=profit+OrderProfit();
		if(OrderMagicNumber()==magic)CurrentPosition=cnt;
	}
	if(CurrentPosition==-1)
	{
		if(MAcross(Fast_MA,Slow_MA)==1)
		{
			Ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,0,0,"buy",magic,0,Blue);
		}
		if(MAcross(Fast_MA,Slow_MA)==2)
		{
			Ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,0,0,"sell",magic,0,Red);
		}
	}
	else
	{
		OrderSelect(CurrentPosition,SELECT_BY_POS);
		if(OrderSymbol()==Symbol())
		{
			if(OrderType()==OP_BUY)
			{
				if(OrdersTotal()<(maxnampin+1)&&Close[0]<(OrderOpenPrice()-nampin*Point)) { Ticket=OrderSend(Symbol(),OP_BUY,OrderLots()*2,Ask,slippage,0,0,"buy2",magic,0,Blue); } if(profit>10)
				{
					allClose(Green);
				}
			}
			
			if(OrderType()==OP_SELL)
			{
				if(OrdersTotal()<(maxnampin+1)&&Close[0]>(OrderOpenPrice()+nampin*Point))
				{
					Ticket=OrderSend(Symbol(),OP_SELL,OrderLots()*2,Bid,slippage,0,0,"sell2",magic,0,Red);
				}
				if(profit>10)
				{
					allClose(Yellow);
				}
			}
		}
		
	}
  }
//+------------------------------------------------------------------+

int MAcross(int Fast,int Slow)
{
	double kako_Fast,kako_Slow;
	double gen_Fast,gen_Slow;
	
	kako_Fast=iMA(NULL,0,Fast,0,MODE_SMA,PRICE_CLOSE,1);
	kako_Slow=iMA(NULL,0,Slow,0,MODE_SMA,PRICE_CLOSE,1);
	
	gen_Fast=iMA(NULL,0,Fast,0,MODE_SMA,PRICE_CLOSE,0);
	gen_Slow=iMA(NULL,0,Slow,0,MODE_SMA,PRICE_CLOSE,0);
	
	if(kako_Fast < kako_Slow && gen_Fast >= gen_Slow)
	{
		return(1);
	}
	if(kako_Fast > kako_Slow && gen_Fast <= gen_Slow) { return(2); } return(0); } void allClose(color clr) { int i; for(i=OrdersTotal()-1;i>=0;i--)
	{
		if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
			continue;
		if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=magic)
			continue;
		if(OrderType()==OP_BUY)
			OrderClose(OrderTicket(),OrderLots(),Bid,NormalizeDouble(slippage,0),clr);
		if(OrderType()==OP_SELL)
			OrderClose(OrderTicket(),OrderLots(),Ask,NormalizeDouble(slippage,0),clr);
	}
}
Copy

まとめ

コメント

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