等間隔でエントリーするMT4のEAを無料配布♪ソースコード、ロジックも公開!

こんにちは!オレンジティーです(*’▽’)

以前、4年間してきたFXをお休みして今後はブログを書くので、今まで行ってきたトレード方法を記事にしました。その時、EAのプレゼント企画していたんですが、なかなか応募者が出てこなかったんで、EAを公開します。

このEAは簡単に言うと等間隔にエントリーするEAです。エグジットはしません。私がしていたのは、エントリーはEA、エグジットは裁量というハイブリッドな方法です。

私のやり方にはこのEAが必要だったんですが、等間隔にエントリーするEAなんで他にもいろいろ使い道があるかと思います。同じではないですが、トラップリピートに似たような取引も設定次第ではできるかと思います。

トレード方法の記事はこっちを参照してください。

・MT4のEAを自作しました!4年でたどり着いたFX自動売買プログラム♪

あわせて読みたい

こんにちは!オレンジティーです(*'▽')私は半年くらい前にブログを書き始めたんですが、その前からずっとFXをしてました。最近はブログを書くほうが楽しいので、FXは一旦お休みにしようと思います。もしかしたら一生復帰しないか[…]

それでは私が使っていたEAの説明をしていきたいと思います。

EAのパラメーターの説明

EAのパラメーターの説明だけさせていただきます。

例をあげるときは、私が使っていたOANDA JAPAN プロコース USDJPYでMT4を使っていた場合の例となります。

①Lots

②mnumber

③kizyunn

④wide

⑤StopLoss

⑥TakeProfit

⑦maxpos

⑧maxspred

⑨maxorder

⑩PeriodDay

⑪PeriodHour

⑫WeekEndHour

⑬allexit

の入力項目があります。

業者によって最小取引単位が異なる場合があるので、テストモードなどで十分確認してから使用してください。

①は取引数量です。OANDAの場合、0.01が1000通貨単位です。

②はそれぞれのエントリーに振るマジックナンバーです。1~99を入力してください。

実際(プログラム上)には入力した数値に100000をかけた数値でそれぞれのエントリーを管理しています。1を入れれば、100001、100002、100003・・・・、20を入れれば2000001、2000002、2000003・・・・といった感じです。

EAを複数運用する場合は、それぞれ別の数値に変えてください。ここの数字を変えることによって、別のものと認識させます。同条件で買い専用EA,売り専用EAを運用する時なども、ここの数値を変えてください。

③基準(中心)となる値です。(例えば100.111)

④等間隔でエントリーしていくEAですが、その幅を入力します。(例えば200)

③と④の例でいくと、

99.711、99.911、100.111、100.311、100.511

といった感じでエントリーしていきます。

⑤エントリーと同時にストップロスを設定します。(例えば2000)

100円で買いエントリーした場合、98円がストップロスの値となります。

⑥⑤と同様にテイクプロフィットを設定します。

⑦基準となる値から上下どれだけの幅でエントリーするか決定します。

④のwide×maxposがエントリーする幅となります。wideが200でmaxposが30の場合、基準点を中心に上下6000の範囲の中でエントリーします。100円が基準の場合、94円~106円の間を0.200円間隔でエントリーしていきます。その間以外の場合はエントリーしません。

⑧この値を超えるスプレッドの時はエントリーしません。スプレッドが開いている早朝とかのエントリーは損ですし、スプレッドが大幅に開いている異常事態などにエントリーしないようにできます。(例えば20程度で設定)

⑨何個までポジションを持つか。エントリーする値幅の間であっても、ここに入力した数値を超えるポジション数の場合はエントリーしません。

⑦と⑨は言葉が逆の意味のようにも取れてややこしいので注意してください。

⑩ポジションをすべてエグジットする日付を設定します。20190730のように入力します。⑪の時間と一緒に設定します。⑪を15と設定すると2019年7月30日15時にすべてのポジションがエグジットされます。米国の雇用統計時にポジションを保有したくない場合などに利用します。このPerioddayを発動した後は自動エントリーしません。再度エントリーするときは、チャートからEAを削除してから再度EAを貼り付けて動かします。

※時間は日本時間ではなく、サーバーが設置してある場所の時間です。

⑫週末はFX取引ができないため、月曜朝一で大きく値が飛んでしまうことがあり、予想しない損害を被る場合があります。時間を入れておくと金曜日のその時間に一度すべてエグジットします。(例えば23等)週末もポジションを保有し続けたい場合は25などの数字を入れます。(25時というのは存在しないので、エグジットする信号がはいりません。)

⑬ここに99という数字を入れたあと、チャートが少しでも動くとすべてエグジットする信号が入ります。一つ一つエグジットをするのがめんどくさい時は使用してください。99を入れている間は新たなエントリーもしないので注意してください。

注意点

このEAでの信号は少しでも値動きがあった場合に入ります。20時にすべてエグジットする信号の場合、20時ちょうどにエグジットするのではなく、20時で初めてチャートが動いた場合にエグジットします。それは20時ちょうどかもしれませんし、20時1秒、20時2秒かもしれません。(何秒も動かないことはまれですが)

安全のため同じ足では何度もエントリーしないようにしています。

そのため、このEAを1時間足等で利用すると多くのエントリーポイントでエントリーしない恐れがあります。1分足など、短い足で利用してください。

最後に、これは私が使用していたEAの内容を記載しただけのものです。私が説明している方法や提供するEAは利益を保証するものではありません。損害などは一切責任を負えませんので使用する場合は自己責任でお願いします。では、下にEAの内容を書きますねー。

EA

extern double Lots=0.01;
extern int mnumber=11;
extern double kizyunn=110.001;
extern int wide=200;
extern int StopLoss=2000;
extern int TakeProfit=2000;
extern int maxpos=30;

int Slippage=0;
int StartHour=1;
int EndHour=24;

extern int maxspred=20;
extern int maxorder=20;
extern int PeriodDay=20190731;
extern int PeriodHour=13;
extern int WeekEndHour=25;
extern int allexit=0;

int buybar;
int sellbar;

int shift=0;
int lastentry=0;

int start()
{

int buysign;
int sellsign;
int buysignCL;
int sellsignCL;
int buysignCLall;
int sellsignCLall;

//指数の計算///////////////////////////////////////////////////////////////////////////////////////////////////////////
double close_F_1=iClose(NULL,0,1);
double close_F_0=iClose(NULL,0,0);

//エントリーのサインを探す/////////////////////////////////////////////////////////////////////////////////////////////////////
int uppos=maxpos;
int downpos=-maxpos;
double widepoint=wide*Point;
int buymagic=0;
int sellmagic=0;

for(int e=downpos;e<=uppos;e++){ if((kizyunn+(widepointe)>close_F_1&&kizyunn+(widepointe)e)e)>close_F_0))
{
buymagic=100000mnumber+10000+e;sellmagic=100000(mnumber+1)+10000+e;
buysign=1;
sellsign=-1;
break;
}
}

//エントリーサインがあった場合のみ同じ価格でのポジションがあるか確認し、あればサインを0に戻し発注しない//

if(buymagic>0)
{
// int pos=-1;
for(int buyi=OrdersTotal()-1;buyi>=0;buyi–)
{
OrderSelect(buyi,SELECT_BY_POS);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==buymagic)
{
// pos=i;
buysign=0;
break;
}
}
}

if(sellmagic>0)
{
// int pos=-1;
for(int selli=OrdersTotal()-1;selli>=0;selli–)
{
OrderSelect(selli,SELECT_BY_POS);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==sellmagic)
{
// pos=i;
sellsign=0;
break;
}
}
}

//エントリできる状態を指定————————————————————————————————————–

//時間外はbuysign1で返ってきたものをbuysign0に戻す
int nowhour=Hour();

if(StartHourEndHour)
{
if(EndHour<=nowhour&&nowhour<StartHour)
{
buysign=0;
sellsign=0;
}
}

//特定の日までのエントリーに限定(特定日以後はエントリーしない)
int nowday=Year()10000+Month()100+Day();
if(nowday>=PeriodDay)
{
if(nowhour==PeriodHour)
{
buysign=0;
sellsign=0;
buysignCLall=1;
sellsignCLall=-1;
lastentry=1;
}
}

//週末の決済
int now_week=DayOfWeek();
if(nowhour==WeekEndHour)
{
if(now_week==5)
{
buysignCLall=1;
sellsignCLall=-1;
buysign=0;
sellsign=0;
}
}

//手動で全決済し99の間はエントリーもしない
if(allexit==99)
{
buysignCLall=1;
sellsignCLall=-1;
buysign=0;
sellsign=0;
}

//一度オールエグジットした場合は2度とエントリーしない。
if(lastentry>0)
{
buysign=0;
sellsign=0;
}

//スプレッドに異常が発生している場合はエントリーしない。
double spwide=maxspred*Point;
if(Ask-Bid>spwide)
{
buysign=0;
sellsign=0;
}

//一定数の保有ポジション数を超えると新たなエントリーをしない
if(maxorder<=OrdersTotal()){buysign=0;sellsign=0;}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////エントリーサインで発注(同じ足ではエントリーしない。)/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////double maxsl,maxtp;int ticket=0;if(buybar!=Bars){ if(buysign==1) { maxsl=Ask-StopLossPoint; maxtp=Ask+TakeProfitPoint; ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,maxsl,maxtp,NULL,buymagic,0,Blue); } if(ticket>0)
{
buybar=Bars;
}
}

if(sellbar!=Bars)
{
if(sellsign==-1)
{
maxsl=Bid+StopLossPoint; maxtp=Bid-TakeProfitPoint;

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,maxsl,maxtp,NULL,sellmagic,0,Red);
}
if(ticket>0)
{
sellbar=Bars;
}
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//決済注文——————————————————————————————————————-
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//RESETの条件//////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(OrderType()==OP_BUY)
{
if(sellsignCLall==-1)
{
for(int buyac=OrdersTotal()-1;buyac>=0;buyac–)
{
OrderSelect(buyac,SELECT_BY_POS);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()>=mnumber100000&&OrderMagicNumber()<(mnumber+2)100000)
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Yellow);
}
}
}
}
if(OrderType()==OP_SELL)
{
if(buysignCLall==1)
{
for(int sellac=OrdersTotal()-1;sellac>=0;sellac–)
{
OrderSelect(sellac,SELECT_BY_POS);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()>=mnumber100000&&OrderMagicNumber()<(mnumber+2)100000)
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Yellow);
}
}
}
}

return(0);
}
// the end.

最後に

上のEAは私が使っているものをそのままコピペしただけです。先ほどもいいましたが、利益を保証するものではありません。損害を追っても責任とれませんので自己責任でお願いします。あと、EAは提供するだけですので、このEAを運用するための方法や、PCやサーバーの設定方法などはお答えしかねますのでよろしくお願いします(*’▽’)

そんだけ!ほなまたね(^^)/