下载MetaTrader 5

跪求!跪求!一段补仓后全部平仓的代码!

要添加评论,请登录注册
tomyaani
158
tomyaani  
求一段在某条件下开仓后出现亏损,价格亏损至X时补仓,再跌再补,补10次,当价格比平均值盈利N时,将所有持仓平掉的代码。千恩万谢。跪求啊!!!哪位神仙帮帮忙?
tomyaani
158
tomyaani  
这个论坛里就没有见在的高手了吗?!
connect y2k
178
connect y2k  

可以使用OrderSend()magiccomment参数解决问题。

在开仓时,magic设置特定值(例如:当天的日期20090928),comment设置特定值(例如:20090928_i_j,T日的第i次开单的第j次补仓)。


平仓时,首先检查magic值,然后检查comment值。符合T日第i次开单要求的,全部平仓。

tomyaani
158
tomyaani  
y2k_connect 写道 >>

可以使用OrderSend()magiccomment参数解决问题。

在开仓时,magic设置特定值(例如:当天的日期20090928),comment设置特定值(例如:20090928_i_j,T日的第i次开单的第j次补仓)。

平仓时,首先检查magic值,然后检查comment值。符合T日第i次开单要求的,全部平仓。

仙人啊,叩拜你,但是我是初学者,能否赐较为完整代码给我呢。感谢恩人啊。

connect y2k
178
connect y2k  

开仓部分:

#include <stdlib.mqh>
#include <stderror.mqh>



int OpenOrder(int flag) {
	int ticket, magic, i, j, count, err;
	double op, sl, tp, lots;
	string comment, str;
	datetime curr;

	str = TimeToStr(TimeCurrent(), TIME_DATE);
	magic = StrToInteger(StringSubstr(str, 0, 4) + StringSubstr(str, 5, 2) + StringSubstr(str, 8, 2));
	for (i=0, count=0; i<OrdersTotal(); i++)
		if (OrderSelect(i, SELECT_BY_POS) == true)
			if (OrderMagicNumber() == magic) {
				str = OrderComment();
				j = StringFind(str, "_", 0);
				if (j < 0)
					continue;
				str = StringSubstr(str, 0, j-1);
				j = StrToInteger(str);
				if (j > count)
					count = j;
			}
	count++;
	comment = count + "_0";

	if (flag == OP_BUY)
		op = Ask;
	else if (flag == OP_SELL)
		op = Bid;
	sl = 0.0;
	tp = 0.0;
	lots = 0.1;
	curr = TimeCurrent();
	ticket = OrderSend(Symbol(), flag, lots, op, sl, tp, comment, magic, 0, CLR_NONE);
	err = GetLastError();
	if (ticket < 0) {
		str = TimeToStr(curr) + "OrderSend fail! #" + err + " " + ErrorDescription(err);
		Debug(-1, str);
	} else if (OrderSelect(ticket, SELECT_BY_TICKET) == true)
		OrderPrint();
	else {
		str = TimeToStr(curr) + "OrderSelect fail! #" + err + " " + ErrorDescription(err);
		Debug(-1, str);
	}
	str = "OpenOrder(): ";
	if (flag == OP_BUY)
		str = str + "buy ";
	else if (flag == OP_SELL)
		str = "sell ";
	str = str + Symbol() + " OK!";
	Debug(0, str);
}

void Debug(int flag, string str) {
	if (flag != 0)
		Print(str);
}

connect y2k
178
connect y2k  

在你的ea中,需要记录当天的日期magic、当天的i值(条件指标发出的第i次信号)、当天的j值(第i次信号的第j次补仓)。

这样就不会发生记录冲突。
tomyaani
158
tomyaani  
非常感谢,我发了信息给你。请查阅。不胜感激。
connect y2k
178
connect y2k  
消息看到了,过2天做好后发到你的e_mail。
tomyaani
158
tomyaani  
我看到了你给我的MESSAGE,但我并没有受到你的email,我也给你回复了你给我的MESSAGE。假期事情多,没有及时回复你,还望海涵!
tomyaani
158
tomyaani  

邮件已经给你回复了。谢谢你!我真的没有想到,想实现补仓和获利同时平仓的功能竟然如此之难。真的麻烦你了。

connect y2k
178
connect y2k  
tomyaani 写道 >>

邮件已经给你回复了。谢谢你!我真的没有想到,想实现补仓和获利同时平仓的功能竟然如此之难。真的麻烦你了。

是很麻烦。修改了数次,最终才定型。但还是不完美。如果使用AVL(平衡二叉树结构),就更好了。但是那样一来,程序复杂度就高太多了。而且我对AVL也不熟悉。需要大量的时间进行学习、实践。故此,选择了现在这样的单链表模型。剩下的部分,估计在12号前可以完成。


另外,已经将开仓条件模块发给你了。你可以将自己的开仓条件写进去。等收到完整ea后,替换即可。

12
要添加评论,请登录注册