ナンピン系EAのプログラムを公開!

FX

おひさしぶりです。

ブログを始めて2年くらい経ちましたかー…。ブログもFXもそろそろ飽きてきましたので、辞めようと思っていますw。

なので!せっかくなので、これまで頑張って作ってきたEAのコードでも公開したいと思います。数ヶ月後には閉鎖すると思いますので、興味のある人は、コードをそのままコピペしてくださいね!

EAの仕様

EAの仕様はこちらに書いてますので参考にしてください。

【FX】ナンピン系EA(自動売買)を作ってみた。
禁断のナンピンマーチンゲール的なEAを作ってみました。意外に自力で作れてうれしいです!

EAのコード

こちらをコピペすればそのまま使えますが、おそらく初心者感はんぱないコードになってると思いますw。それと、このまま使うとおそらく今のドル相場では飛びますので、パラメータを変更すればいけるかもしれません。

参考にしてください。

//+——————————————————————+

//|                            nanpin.mq4 |

//|            Copyright 2021, MetaQuotes Software Corp. |

//|                       https://www.mql5.com |

//+——————————————————————+

#property copyright “Copyright 2021, MetaQuotes Software Corp.”

#property link   “https://www.mql5.com”

#property version  “1.00”

#property strict

int TicketB;

int TicketCloseB;

int EntryOKB;

int TicketS;

int TicketCloseS;

int EntryOKS;

int totalpos;

int rikaku;

int nm;

double lm;

int rikaku2;

int nm2;

double lm2;

int buy;

int sell;

input int maxp=13;

int Ticket;

input int magicnum=12345;

//+——————————————————————+

//| Expert initialization function                  |

//+——————————————————————+

int OnInit()

 {

//—

  

//—

  return(INIT_SUCCEEDED);

 }

//+——————————————————————+

//| Expert deinitialization function                 |

//+——————————————————————+

void OnDeinit(const int reason)

 {

//—

  

 }

//+——————————————————————+

//| Expert tick function                       |

//+——————————————————————+

void OnTick()

 {

 

//今保有しているポジションの数———————————————————————–

totalpos=OrdersTotal();//総ポジション数

buy=0;

sell=0;

//買いと売りのポジション数を取得(i初期値、iは0より大きいか(Trueで実行、falseで停止)、繰り返し後iをー1する)—————–

for(int i = totalpos-1; i >= 0; i–){ //i=総ポジ数ー1、iが0より大きいとループ/0だと終了)

 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){ //ポジを選択。複数ポジの一番上のインデックス番号を選択する。

  if(OrderType()==OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == magicnum){//買い&通貨ペア&マジックナンバーが一致したら

  buy++;}

  if(OrderType()==OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == magicnum){

  sell++;} 

  }

  }

//買いの利確設定——————————————————————————

if(buy >= 0 && buy <= 1){rikaku = 10;}

if(buy >= 2 && buy <= 3){rikaku = 20;}

if(buy >= 4 && buy <= 4){rikaku = 25;}

if(buy >= 5 && buy <= 5){rikaku = 30;}

if(buy >= 6 && buy <= 6){rikaku = 35;}

if(buy >= 7 && buy <= 8){rikaku = 40;}

if(buy >= 9 && buy <= 13){rikaku = 45;}

//ナンピン幅

if(buy >= 0 && buy <= 13){nm = 20;} 

//ロットの大きさ

if(buy==0){lm=0.01;}

if(buy==1){lm=0.01;}

if(buy==2){lm=0.02;}

if(buy==3){lm=0.03;}

if(buy==4){lm=0.04;}

if(buy==5){lm=0.06;}

if(buy==6){lm=0.08;}

if(buy==7){lm=0.12;}

if(buy==8){lm=0.18;}

if(buy==9){lm=0.27;}

if(buy==10){lm=0.41;}

if(buy==11){lm=0.62;}

if(buy==12){lm=0.93;}

//売りの利確設定——————————————————————————

if(sell >= 0 && sell <= 1){rikaku2 = 10;}

if(sell >= 2 && sell <= 3){rikaku2 = 20;}

if(sell >= 4 && sell <= 4){rikaku2 = 25;}

if(sell >= 5 && sell <= 5){rikaku2 = 30;}

if(sell >= 6 && sell <= 6){rikaku2 = 35;}

if(sell >= 7 && sell <= 8){rikaku2 = 40;}

if(sell >= 9 && sell <= 13){rikaku2 = 45;}

//ナンピン幅

if(sell >= 0 && sell <= 13){nm2 = 20;}

//ロットの大きさ

if(sell==0){lm2=0.01;}

if(sell==1){lm2=0.01;}

if(sell==2){lm2=0.02;}

if(sell==3){lm2=0.03;}

if(sell==4){lm2=0.04;}

if(sell==5){lm2=0.06;}

if(sell==6){lm2=0.08;}

if(sell==7){lm2=0.12;}

if(sell==8){lm2=0.18;}

if(sell==9){lm2=0.27;}

if(sell==10){lm2=0.41;}

if(sell==11){lm2=0.62;}

if(sell==12){lm2=0.93;}

//エントリー条件———————————————————————–

//買い

//ポジションがなくて、ゴールデンクロス(1つ前の短期が長期より小さい&今の短期が長期より大きくなった)

if(buy==0&&iMA(NULL,PERIOD_M5,25,0,0,0,1)<iMA(NULL,PERIOD_M5,75,0,0,0,1)&&iMA(NULL,PERIOD_M5,25,0,0,0,0)>=iMA(NULL,PERIOD_M5,75,0,0,0,0))

{EntryOKB=1;} 

//注文番号がない&エントリーOKならロング!

if(TicketB<1&&EntryOKB==1)

{TicketB=OrderSend(NULL,OP_BUY,lm,Ask,10,0,0,NULL,magicnum,0,clrBlue);}

//注文番号があるなら、エントリー判断変数をリセット

if(TicketB>=1)

{EntryOKB=0;}

//売り

//ポジションがなくて、デッドクロス(1つ前の短期が長期より大きい&今の短期が長期より小さくなった)

if(sell==0&&iMA(NULL,PERIOD_M5,25,0,0,0,1)>=iMA(NULL,PERIOD_M5,75,0,0,0,1)&&iMA(NULL,PERIOD_M5,25,0,0,0,0)<iMA(NULL,PERIOD_M5,75,0,0,0,0))

{EntryOKS=1;} 

//注文番号がない&エントリーOKならショート!

if(TicketS<1&&EntryOKS==1)

{TicketS=OrderSend(NULL,OP_SELL,lm2,Bid,10,0,0,NULL,magicnum,0,clrRed);}

//注文番号があるなら、エントリー判断変数をリセット

if(TicketS>=1)

{EntryOKS=0;}

//ナンピン条件ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

if(buy <= maxp-1 && sell <= maxp-1){ //最大ポジより小さい時

for(int i = totalpos-1; i >=0 ; i–){ //i=総ポジ数ー1、iが0より大きいとループ/ー1だと終了)

 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){ 

  if(OrderType()==OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == magicnum){

  if(Ask <= OrderOpenPrice()-(nm*10*Point)){ //現在の価格が注文価格より20pips逆行したら

   Ticket=OrderSend(NULL,OP_BUY,lm,Ask,10,0,0,NULL,magicnum,0,clrBlue);}//通貨ペア、成行買い、ロット、値段、スリッページ、損切、利確、

   break; //for文を抜ける。

   }}}

 

for(int i = totalpos-1; i >=0 ; i–){

 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){ 

  if(OrderType()==OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == magicnum){

  if(Bid >= OrderOpenPrice()+(nm2*10*Point)){ //現在の価格が注文価格より20pips逆行したら

   Ticket=OrderSend(NULL,OP_SELL,lm2,Bid,10,0,0,NULL,magicnum,0,clrRed);}//通貨ペア、成行売り、ロット、値段、スリッページ、損切、利確、

   break;

   }}}}

//利確条件————————————————————————–

//一番上のポジションが利確に達したら、全てを決済する。

if(buy <= maxp && sell <= maxp){ //最大ポジより小さい時

for(int i = totalpos-1 ; i >=0 ; i–){

 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){ 

  if(OrderType()==OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == magicnum){ //買いのポジの一番上を選択する。

  if(Bid >= OrderOpenPrice()+(rikaku*10*Point)){ //現在の価格が利確条件に達したら

   for(int j = totalpos-1 ; j >=0 ; j–){

    if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)==true){ 

    if(OrderType()==OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == magicnum){ //買いのポジの一番上を選択する。

     Ticket=OrderClose(OrderTicket(),OrderLots(),Bid,10,clrBlue);//注文番号、ロット、価格、スリッページ、色

   }}}}}}}

    

for(int i = totalpos-1 ; i >=0 ; i–){

 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){ 

  if(OrderType()==OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == magicnum){ //買いのポジの一番上を選択する。

  if(Ask <= OrderOpenPrice()-(rikaku2*10*Point)){ //現在の価格が利確条件に達したら

   for(int j = totalpos-1 ; j >=0 ; j–){

    if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)==true){ 

    if(OrderType()==OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == magicnum){ //買いのポジの一番上を選択する。

     Ticket=OrderClose(OrderTicket(),OrderLots(),Ask,10,clrRed);//注文番号、ロット、価格、スリッページ、色

   }}}}}}}    

    

   }

    

//決済したら、注文番号をリセット

if(buy==0)

{TicketB=0;} 

//注文番号が0になったら、TicketCloseBもリセット

if(TicketB==0)

{Ticket=0;} 

//決済したら、注文番号をリセット

if(sell==0)

{TicketS=0;} 

//注文番号が0になったら、TicketCloseBもリセット

if(TicketS==0)

{Ticket=0;} 

//—

  

 }

//+——————————————————————+

それでは、さようなら・・・(^^)

コメント

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