【FX完全自動売買シリーズ】MT4 EA無料ダウンロード&ロジック完全公開 ポンドドル4時間足 131501_GBPUSD_H4_BM



EA無料ダウンロード

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

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

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

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

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


投資は自己責任で

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

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

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

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

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



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



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

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

  • 環境認識
      曜日によるアノマリーを利用
  • トリガー
      指定した曜日にその日の高値(安値)を更新したら
  • 通貨ペア:ポンド/米ドル
  • 時間足:4時間足
  • 売買方向:ロング・ショート
#define EA_MAGIC_NO		131501
#define file_buy	"MG131501_buy.dat"
#define file_sell	"MG131501_sell.dat"
#define D_NONE	0
#define D_BUY	1
#define D_SELL	2
#define D_OFF	0
#define D_ON	1
/*****************************************
 * グロバル変数
 *****************************************/
/* long */
int EA_least_bar_buy = 3;
int EA_start_day_buy = 2;
int EA_start_hour_buy = 16;
int EA_close_day_buy = 2;
int EA_close_hour_buy = 22;
double EA_prof_max_buy = 265;
double EA_stop_loss_rate_buy = 2.61;

/* short */
double EA_stop_loss_rate_sell = 2.0;
int EA_start_day_sell = 5;
int EA_start_hour_sell = 16;
int EA_least_bar_sell = 6;
double EA_prof_max_sell = 120;
int EA_close_day_sell = 1;
int EA_close_hour_sell = 17;

/* common */
int EA_stop_min = 15;
int	EA_posi_size = 0;

double g_take_prof=0;
double g_stop_loss=0;
int	slippage=3;
int week_buy=0;
int week_sell=0;
double	EA_Lots = 1;
double	G_Point=0;

int init()
{
	int		handle=0;
	handle=FileOpen(file_buy,FILE_BIN | FILE_READ);
	if(handle<1) Print(file_buy," not found");
	else
	{
		week_buy=FileReadInteger(handle,CHAR_VALUE);
		FileClose(handle);
	}

	handle=FileOpen(file_sell,FILE_BIN | FILE_READ);
	if(handle<1) Print(file_sell," not found");
	else
	{
		week_sell=FileReadInteger(handle,CHAR_VALUE);
		FileClose(handle);
	}

	if(Point==0.00001) G_Point=10*Point;
	else
	if(Point==0.0001)  G_Point=1*Point;
	else return;

	slippage=slippage*G_Point;
}
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
int CheckForOpen(int option)
{
	int		lots=1,ii=0,cmd=0,handle=0;
	int		ticket=0;
	double	high_val=0,low_val=0,open_val=0,ma_s_1=0;
	color 	arrow_color=CLR_NONE;

	if((Ask-Bid)>6*G_Point) return (0);

	high_val = iHigh(NULL,PERIOD_D1,0);
	low_val = iLow(NULL,PERIOD_D1,0);
	for(ii=(DayOfWeek()-1);ii>=1;ii--)
	{
		if(iHigh(NULL,PERIOD_D1,ii)>high_val) high_val = iHigh(NULL,PERIOD_D1,ii);
		if(iLow(NULL,PERIOD_D1,ii)<low_val) low_val = iLow(NULL,PERIOD_D1,ii);
	}

	if(DayOfWeek()>=EA_start_day_buy && Bid>=high_val && option==D_BUY && (Hour()>=EA_start_hour_buy || DayOfWeek()>=(EA_start_day_buy+1)))
	{
		cmd = OP_BUY;
		open_val = Ask;
		arrow_color = Blue;
		g_stop_loss = Bid-(Ask-low_val)*EA_stop_loss_rate_buy;
		if((Bid-g_stop_loss)<EA_stop_min*G_Point) g_stop_loss = Bid-EA_stop_min*G_Point;
		g_take_prof = 0;
		lots=1+(EA_posi_size*G_Point)/(Bid-g_stop_loss);
	}
	else
	if(DayOfWeek()>=EA_start_day_sell && Bid<=low_val && option==D_SELL && (Hour()>=EA_start_hour_sell || DayOfWeek()>=(EA_start_day_sell+1)))
	{
		cmd = OP_SELL;
		open_val = Bid;
		arrow_color = Red;
		g_stop_loss = Ask+(high_val-Bid)*EA_stop_loss_rate_sell;
		if((g_stop_loss-Ask)<EA_stop_min*G_Point) g_stop_loss = Ask+EA_stop_min*G_Point;
		g_take_prof = 0;
		lots=1+(EA_posi_size*G_Point)/(g_stop_loss-Ask);
	}
	else return (0);

	ticket=OrderSend(
		Symbol(),cmd,
		EA_Lots*lots,
		open_val,slippage,0,0,"131501",EA_MAGIC_NO,0,arrow_color);

	if(ticket<0)
	{
		g_stop_loss=0;
		Print("OrderSendError ",GetLastError());
	}
	//オーダーに成功
	else
	{
		if(cmd==OP_BUY)
		{
			week_buy=D_ON;
			handle=FileOpen(file_buy,FILE_BIN | FILE_WRITE);
			if(handle<1) Print(file_buy," not found");
			else
			{
				FileWriteInteger(handle,week_buy,CHAR_VALUE);
				FileClose(handle);
			}
		}
		else
		{
			week_sell=D_ON;
			handle=FileOpen(file_sell,FILE_BIN | FILE_WRITE);
			if(handle<1) Print(file_sell," not found");
			else
			{
				FileWriteInteger(handle,week_sell,CHAR_VALUE);
				FileClose(handle);
			}
		}
		return (1);
	}
}

void CheckForClose()
{
	int		ii=0,jj=0;
	int		total=0;			//オーダートータル
	int		order_flag=D_NONE;
	int		bar_count=0;
	double	order_val=0;
	color 	arrow_color=CLR_NONE;

	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,g_take_prof,0,White)!=TRUE)
			{
				Print("OrderModify ERROR stop ",GetLastError( ));
			}
		}

		if(!(bar_count>1)) continue;

		if(order_flag==D_NONE && OrderProfit()>0)
		{
			if(DayOfWeek()==EA_close_day_buy && OrderType()==OP_BUY && Hour()>=EA_close_hour_buy && bar_count>EA_least_bar_buy)
			{
				order_flag = D_BUY;
			}
			else
			if(DayOfWeek()==EA_close_day_sell && OrderType()==OP_SELL && Hour()>=EA_close_hour_sell && bar_count>EA_least_bar_sell)
			{
				order_flag = D_SELL;
			}
		}

		if(order_flag==D_NONE)
		{
			if(OrderType()==OP_BUY)
			{
				if((Bid-OrderOpenPrice())>Bid*EA_prof_max_buy*G_Point)
				{
					order_flag = D_BUY;
				}
			}
			else
			if(OrderType()==OP_SELL)
			{
				if((OrderOpenPrice()-Ask)>Bid*EA_prof_max_sell*G_Point)
				{
					order_flag = D_SELL;
				}
			}
		}

		if(order_flag!=D_NONE)
		{
			if(order_flag==D_BUY)
			{
				arrow_color = Blue;
				order_val = Bid;
			}
			else
			{
				arrow_color = Red;
				order_val = Ask;
			}
			if(OrderClose(OrderTicket(),OrderLots(),order_val,10,arrow_color)!=TRUE)
			{
				Print("OrderClose ERROR",GetLastError( ));
			}
		}
	}
}

int start()
{
	int		handle=0;
	int		total=0,ii=0;
	bool	posi_flag_buy=D_OFF,posi_flag_sell=D_OFF;

	if(Bars<6) return;

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

		if(OrderType()==OP_BUY)
		{
			posi_flag_buy=D_ON;
		}
		else
		{
			posi_flag_sell=D_ON;
		}
	}

	//start と closeの時間的な位置関係によって変更される
	if(DayOfWeek()==EA_start_day_buy && Hour()==EA_start_hour_buy && week_buy==D_ON)
	{
		if(posi_flag_buy==D_OFF)
		{
			week_buy=D_OFF;
			handle=FileOpen(file_buy,FILE_BIN | FILE_WRITE);
			if(handle<1) Print(file_buy," not found");
			else
			{
				FileWriteInteger(handle,week_buy,CHAR_VALUE);
				FileClose(handle);
			}
		}
	}
	if(DayOfWeek()==EA_close_day_sell && Hour()==EA_close_hour_sell && week_sell==D_ON)
	{
		if(posi_flag_sell==D_OFF)
		{
			week_sell=D_OFF;
			handle=FileOpen(file_sell,FILE_BIN | FILE_WRITE);
			if(handle<1) Print(file_sell," not found");
			else
			{
				FileWriteInteger(handle,week_sell,CHAR_VALUE);
				FileClose(handle);
			}
		}
	}

	if(posi_flag_buy==D_ON || posi_flag_sell==D_ON)
	{
		CheckForClose();
	}

	if(posi_flag_buy==D_OFF && week_buy==D_OFF)
	{
		if(CheckForOpen(D_BUY)==1)
			CheckForClose();
	}

	if(posi_flag_sell==D_OFF && week_sell==D_OFF)
	{
		if(CheckForOpen(D_SELL)==1)
			CheckForClose();
	}
}
//+------------------------------------------------------------------+