【FX完全自動売買シリーズ】MT4 EA無料ダウンロード&ロジック完全公開 豪ドル円15分足 191901_AUDJPY_M15_ONB_B



EA無料ダウンロード

永遠に放置できるわけではありません

裁量トレードほどには儲かりませんが、使い方によっては完全放置で利益が出ます

ですが、定期的なメンテナンス(パラメータ調整)はどうしても必要です。

「完全放置じゃないじゃん(゚Д゚)!」と言うツッコミありがとうございます。

【期間限定で完全放置】と言うことで勘弁してください。


投資は自己責任で

ご利用前に必ずご自身でデバッグ&バックテストしてください

公開しておいてなんですが、ロジックを参考にする程度に留めておくと幸せになれます。
免責や著作権について 免責:著作権は放棄していませんので商用利用不可。改造しての販売・再配布も不可。個人口座でのみ利用可。

また、ご利用されたことによるいかなる事態・結果についても責任は負いかねます。全て自己責任でお願いします。
ご注意:EAや自動売買に過度な期待をされている方、FXの世界に聖杯があると信じている方はこちらの記事も併せてご覧ください。

FXで完全機械化は可能か?

結論から言うと可能です。そんなことは20世紀からやっていることで、いまさら議論することでもないのですが・・・



期間限定のキャンペーンもやってます



コピペしてお持ち帰りください

※スパゲティなのは仕様です。ローカルにコピペでもしてご覧ください。


#define EA_MAGIC_NO		191901
#define D_NONE	0
#define D_BUY	1
#define D_SELL	2
#define D_OFF	0
#define D_ON	1
/*****************************************
 * グロバル変数
 *****************************************/
//extern int	EA_temp = 1;
int	EA_range_period = 72;
int	EA_OverNightEnd = 10;
int	EA_stop_cnt = 82;
int	EA_highest_cnt = 4;
int	EA_close_hour = 16;
int	EA_lowest_cnt = 17;
int	EA_volatility = 82;
int	EA_vola_cnt = 87;
int	EA_stop_min = 35;
int	EA_stop_max = 150;

int	EA_posi_size = 0;
int g_TDM=0;
bool OpenRangeInit=D_OFF;
double openRangeHigh;
double openRangeLow;
int	slippage=3;
double g_stop_loss=0;

double	EA_Lots			= 0.01;
double	G_Point;//業者によって異なるため、注意!!!!!!!!!!!!

int init()
{
	if(Point==0.001) G_Point=10*Point;//業者によって異なるため、注意
	else
	if(Point==0.01)  G_Point=1*Point;//業者によって異なるため、注意
	else return;

	slippage=slippage*G_Point;
}
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
{
	int		lots=0;
	int		ticket=0;
	int		lowest_cnt=0;
	double	volatility=0;
	double	highest_val=0,lowest_val=0;

	if((Ask-Bid)>6*G_Point) return;//スプレッドが極端に広いときはやらない

	highest_val=High[iHighest(NULL,0,MODE_HIGH,EA_highest_cnt,1)];
	lowest_val=Low[iLowest(NULL,0,MODE_LOW,EA_lowest_cnt,0)];
	volatility = High[iHighest(NULL,0,MODE_HIGH,EA_vola_cnt)] - Low[iLowest(NULL,0,MODE_LOW,EA_vola_cnt)];

	if((volatility>EA_volatility*G_Point) && lowest_val<openRangeHigh && Bid>openRangeHigh && Bid>highest_val)
	{
		lowest_cnt=iLowest(NULL,0,MODE_LOW,EA_stop_cnt,0);
		g_stop_loss = Low[lowest_cnt]-6*G_Point;

		if((Bid-g_stop_loss)>EA_stop_max*G_Point)
		{
			g_stop_loss=Bid-EA_stop_max*G_Point;
		}
		else
		if((Ask-g_stop_loss)<EA_stop_min*G_Point)
		{
			g_stop_loss=Bid-EA_stop_min*G_Point;
		}

		lots=1+(EA_posi_size*G_Point)/(Bid-g_stop_loss);

		ticket=OrderSend(
			Symbol(),OP_BUY,
			EA_Lots*lots,
			Ask,slippage,0,0,"191901",EA_MAGIC_NO,0,Blue);

		if(ticket<0)
		{
			g_stop_loss=0;
			Print("OrderSendError ",GetLastError());
		}
		else
		{
		}
	}
}

void CheckForClose()
{
	int		ii=0,jj=0;				//カウンタ
	int		total=0;			//オーダートータル
	int		order_flag=D_NONE;
	int		bar_count=0;

	total=OrdersTotal();
	if(total<=0) return;

	total=OrdersTotal();
	for(ii=(total-1);ii>=0;ii--)	//注文がある
	{
		order_flag=D_NONE;

		if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES)!=TRUE)
		{
			Print("OrderSelect ERROR",GetLastError( ));
			return;
		}

		if(OrderSymbol()!=Symbol()) continue;
		if(OrderMagicNumber()!=EA_MAGIC_NO) continue;

		bar_count=iBarShift(NULL,0,OrderOpenTime(),false);

		//stopが設定されていなければ設定する
		if(OrderStopLoss()==0 && g_stop_loss!=0)
		{
			if(OrderModify(OrderTicket(),OrderOpenPrice(),g_stop_loss,0,0,White)!=TRUE)
			{
				Print("OrderModify ERROR ",GetLastError( ));
			}
		}

		if(!(bar_count>1)) continue;

		if(order_flag==D_NONE && OrderProfit()>0 && bar_count>24)
		{
			if(Hour()==EA_close_hour)
			{
				order_flag=D_BUY;
			}
		}

		if(order_flag==D_BUY)
		{
			if(OrderClose(OrderTicket(),OrderLots(),Bid,10,Blue)!=TRUE)
			{
				Print("OrderClose ERROR",GetLastError( ));
			}
		}
	}
	return;
}

int start()
{
	int		total=0,ii=0;			//オーダートータル
	bool	posi_flag=D_OFF,tradeFlg=D_OFF;

	//---- check for history and trading
	if(Bars<300 || IsTradeAllowed()==false) return;

	tradeFlg=D_OFF;

	total=OrdersTotal();
	for(ii=(total-1);ii>=0;ii--)	//注文がある
	{
		if(OrderSelect(ii,SELECT_BY_POS,MODE_TRADES)!=TRUE)
		{
			Print("OrderSelect ERROR A",GetLastError( ));
			return;
		}
		if(OrderSymbol()!=Symbol()) continue;
		if(OrderMagicNumber()!=EA_MAGIC_NO) continue;

		posi_flag=D_ON;

		if(iBarShift(NULL,0,OrderOpenTime(),false)<=10)
		{
			tradeFlg=D_ON;
		}
	}

	if(OpenRangeInit==D_ON)
	{
//		if(Hour()==EA_temp)
		if(Hour()>=11 && Hour()<=22)
		{
			if(tradeFlg==D_OFF)
			{
//				if(Month()==EA_temp)
				if(Month()!=5 && Month()!=8)
				{
//					if(DayOfWeek()==EA_temp)
					if(DayOfWeek()==2 || DayOfWeek()==3 || DayOfWeek()==4)
					{
//						if(g_TDM==EA_temp)
						if(g_TDM!=19 && g_TDM!=15 && g_TDM!=5 && g_TDM!=16)
						{
							CheckForOpen();
						}
					}
				}
			}
		}
		else
		if(Hour()>=23)
		{
			OpenRangeInit=D_OFF;
		}
	}
	else
	//オーバーナイト終了時、オーバーナイトのある一定期間の値幅を記録&各種変数初期化
	if(Hour()==EA_OverNightEnd && OpenRangeInit==D_OFF)
	{
		openRangeHigh = High[iHighest(NULL, 0, MODE_HIGH,EA_range_period+1,1)];
		openRangeLow = Low[iLowest(NULL, 0, MODE_LOW,EA_range_period+1,1)];
		OpenRangeInit=D_ON;

		for(ii=0;ii<=Day();ii++)
		{
			//iTimeはbarの開始時刻を返すので、先月のbarになった時点でループから抜ける
			if(TimeMonth(iTime(NULL,PERIOD_D1,ii))==Month())
			{
			}
			else
			{
				break;
			}
		}
		g_TDM = ii;
	}

	if(posi_flag==D_ON)
	{
		CheckForClose();
	}
}
//+------------------------------------------------------------------+