第6号错误 - 页 5

 
现在我通过终端查看 - 我昨天遇到了一些问题。<br / translate="no">。
2005.08.11 11:15:00 ****l EURUSD,H1: OrderSend failed with error #139
2005.08.11 11:07:12 TradeDispatcher: 所有的交易环境都在忙。

我已经拔掉了这个EA的电源,将看看接下来会发生什么。


在这里,它是。这就是它。在这里,我们走了。139已被锁定。由谁,为什么--不清楚。然后会有2,6,等等。

最令人失望的是,这个EA中没有任何东西能让它与其他产品区分开来。因此,要么我看不到这个 "东西",要么任何专家顾问都可能有故障,只是可能不是每小时都触发,因此,不是每个人都注意到了。

因此,我向大家提出一个问题--你们的日志中是否有这样的条目?

Rosh,你用Alpari吗?如果是这样,请问Alpari - 你的服务器是否正常工作?

我今晚发现了什么 :(

1.专家顾问自己工作,一个,要么不出错,要么很少出错,以至于一夜之间不够用。

2.结合其他几个专家顾问(更准确地说,是一个,六种货币),错误重现,虽然不是在一个小时内,而是在4小时内。

由此可见什么?
1.MT(或我的专家顾问,但它是如此简单,不太可能)有一些错误,有时不允许我打开交易。顺便说一句,也要关闭它们。
当然,你可以绕过它。

while(nResult == -1) { nResult = OrderSend(...); }



我不必告诉你这是一种非常糟糕的编程风格,它可能会冒犯经纪人......

2.我现在重写了专家顾问,使其更加简单,同时也造成了一个错误。我将在接下来的几个小时内公布。如果出现错误将需要两个专家顾问,我能做什么,我将发布两个 :)






 
2.我目前正在重写专家顾问,以使其更加简单,同时也是为了引起错误。我将在接下来的几个小时内公布。如果结果是错误需要两个专家顾问,你能做什么,我将发布两个:)<br / translate="no">。

并且我们将检查
 
夸克,我已经做出了诊断,这是你的EA的错。一旦你的EA发出警报(我根本不使用它们)--我立即得到
2005.08.11 13:01:19 TradeDispatcher:所有交易背景都很忙


警报和阻断时间是一样的。我根本没有看过EA的代码。

 
好吧。这里是新的超级专家,他正在单枪匹马地制造错误。到目前为止,我的进展还没有超过错误139,所以我将继续测试。

如何使用:为每种货币(EURUSD, EURJPY, USDCHF, GBPUSD, GBPJPY,
GBPCHF, USDJPY, AUDUSD, EURGBP, USDCAD, EURCHF, EURAUD)打开一个小时图。
每个图表都有一个专家顾问。他们没有互动,因为他们都有不同的图表。

仓位 将被立即打开,每张图表一个。在下一个小时开始的时候,这些位置将不得不颠倒过来,以此类推。

我有过一次弹出2个错误的经历,所以原则上有可能要等待2小时。

如果你与交易服务器有特殊关系,可能最好使用一个普通账户进行测试。我使用Alpari。

还要注意(我想这是一个独立的bug),位置开放箭头的位置。从理论上讲,由于该仓位是在一个新条形上打开的,所以箭头应该是在同一个条形上。

最后,如果你不想等一个小时,就打开分钟图。这个错误是可以重复的。

我们再一次谈到了错误139。同时,我还没有设法用这种方法得到错误2和6。而且他们以前大多都是这样。所以我想,会有更多的帖子。

double dStopLoss;
int nHoursToHold;

datetime timePrev = 0;

int nSlip = 5;

double dLotSize = 0.1;

int nMagic = 0;

//////////////////
int init ()
{
	timePrev = 0;

	dStopLoss = 110 * Point;
	nHoursToHold = 1;
	
	if(Symbol() == "EURUSD")
		nMagic = 1;
	else if(Symbol() == "EURJPY")
		nMagic = 2;
	else if(Symbol() == "USDCHF")
		nMagic = 3;
	else if(Symbol() == "GBPUSD")
		nMagic = 4;
	else if(Symbol() == "GBPJPY")
		nMagic = 5;
	else if(Symbol() == "GBPCHF")
		nMagic = 6;
	else if(Symbol() == "USDJPY")
		nMagic = 7;
	else if(Symbol() == "AUDUSD")
		nMagic = 8;
	else if(Symbol() == "EURGBP")
		nMagic = 9;
	else if(Symbol() == "USDCAD")
		nMagic = 10;
	else if(Symbol() == "EURCHF")
		nMagic = 11;
	else if(Symbol() == "EURAUD")
		nMagic = 12;

	return(0);	
}

// ------

int deinit()
{
	return(0);
}
// ------
int start()
{
	if(Bars < 5)
		return(0);
	
	// The previous bar just closed
	bool bIsBarEnd = false;
	if(timePrev != Time[0]) 
		bIsBarEnd = true;
	timePrev = Time[0];
	
	if(!bIsBarEnd)
		return(0);

	// ------
	
	int nSignal = GetSignal();

	if(nSignal == OP_BUY) 
		Buy();
	else if(nSignal == OP_SELL) 
		Sell();

	for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)
	{
		OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES);

		if(OrderMagicNumber() == nMagic)
		{
			if(CurTime() - OrderOpenTime() > (nHoursToHold - 1) * 60 * 60)
			{
				if(OrderType() == OP_BUY)
					OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua);
				else if(OrderType() == OP_SELL)
					OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed);
			}
		}
	}

	return(0);
}
// ------

void Sell()
{
	if(AccountFreeMargin() < 500)
		return;

	dLotSize = GetLotSize();

	int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, Bid, nSlip, Bid + dStopLoss, 
		0, "Friday", nMagic, 0, OrangeRed);

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(nError);
	}
}
// ------
void Buy()
{
	if(AccountFreeMargin() < 500)
		return;

	dLotSize = GetLotSize();

	int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, Ask, nSlip, Ask - dStopLoss, 
		0, "Friday", nMagic, 0, Aqua);

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(nError);
	}
}
// ------

double GetLotSize()
{
	double dLot = 0.1;
	
	return(dLot);
}

// ------

int GetSignal()
{
	int nSignal;
	if(MathMod(Hour(), 2) == 0)
		nSignal = OP_BUY;
	else
		nSignal = OP_SELL;
		
	return(nSignal);
}

// ------
 
夸克,我已经做出了诊断,这是你的EA的错。当Alert从你的EA中出来时(我根本不使用它们)--我得到了<br/ translate="no">
2005.08.11 13:01:19 TradeDispatcher:所有的交易环境都很繁忙


警报和阻断时间是一样的。我根本没有看过EA的代码。



这很好,但我在注意到交易没有被执行后引入了警报。另外,警报是在OrderSend 之后的代码中。现在我打算尝试转为打印,但我怀疑......。
 
顺便说一句,这很有趣。当重新编译EA时,我用来计算bIsBarEnd的变量被重置。相应地,如果我在编辑器中按下F5,所有的EA都应该关闭旧的头寸并打开新的头寸。我按下了F5。有12种货币(和专家顾问)。有3项更新。嗯?

用Print代替Alert来检查Rosh的假设。唉,整个区别在于,现在错误信息 139出现在日志中,而不是屏幕上。
 
我不知道,我看了一下代码;没有什么可以找茬的。我会用Bars来决定这个地方,而不是开业的时间。
	bool bIsBarEnd = false; if(timePrev != Time[0]) bIsBarEnd = true; timePrev = Time[0];



而这件事是不清楚的。
2005.08.11 13:08:12 '18708' : 平仓单#680413 在1.2385买入0.10 EURUSD sl: 0.0000 tp: 0.0000 at price 1.2408
然后

2005.08.11 13:08:13 '18708': 订单#680413在1.2385买入0.10 EURUSD sl: 1.2275 tp: 0.0000 在价格1.2408关闭

换句话说,起初订单没有任何止损和止盈,然后突然在订单中出现了一个止损。

 
我不知道,我看了一下代码;没有什么可以找茬的。我将通过Bars决定这个地方,而不是通过开盘时间<br / translate="no">
bool bIsBarEnd = false; if(timePrev != Time[0]) bIsBarEnd = true; timePrev = Time[0];



而这件事是不清楚的。
2005.08.11 13:08:12 '18708' : 平仓单#680413 在1.2385买入0.10 EURUSD sl: 0.0000 tp: 0.0000 at price 1.2408
然后

2005.08.11 13:08:13 '18708': 订单#680413在1.2385买入0.10 EURUSD sl: 1.2275 tp: 0.0000 在价格1.2408关闭

换句话说,起初订单没有任何止损和止盈,然后突然在订单中出现了一个止损。



如果你有经过测试的代码,我很想看看 "via Bars" :)

至于零点止损--我已经在init中指定了它,而且我在其他地方也没有改变它。虫子,我猜。伙计,自从我放弃了C++后,我以为我不会再做昆虫学了。

事实上,好一个专家,好吧。但它是如此简单,以至于出现了一个问题:难道不存在其他EA以同样方式行事的危险?考虑到这个错误只在有很多专家顾问的时候出现,此外,它还会产生不同的错误。

例如,我有一个使用MACD + ADX + Stochastic的专家顾问。在用测试器测试后(根据定义没有服务器错误),程序员会不会只是坐在那里检查 "这里所有条件都满足,但交易没有关闭 "的问题?可能不会...危险的错误。
 
<br / translate="no">
如果你有经过测试的代码,我很想看看 "via Bars" :)



例如,像这样。
int start() { int total,ticket,totalExpert; //---- SetTrace(); if (Bars>b) { b=Bars;
 
不错,但本质上是一样的 :)
什么是SetTrace?