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






コメント