おひさしぶりです。
ブログを始めて2年くらい経ちましたかー…。ブログもFXもそろそろ飽きてきましたので、辞めようと思っていますw。
なので!せっかくなので、これまで頑張って作ってきたEAのコードでも公開したいと思います。数ヶ月後には閉鎖すると思いますので、興味のある人は、コードをそのままコピペしてくださいね!
EAの仕様
EAの仕様はこちらに書いてますので参考にしてください。
を自作してみた。-160x90.png)
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;}
//—
}
//+——————————————————————+
それでは、さようなら・・・(^^)
コメント