第6号错误 - 页 6

 
不错,但本质上是一样的:)<br / translate="no"> 什么是SetTrace?


Oopsie :)我现在要做一个广告,请注意 -http://forexsystems.ru/phpBB/viewtopic.php?t=694&start=45
 
хэндлов не хватает.


我可以在系统设置(W'XP)中改变手柄的数量吗,如何改变?
 
还有一个问题要问开发商。

什么是正确的方法。

1.
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); } }



2.

for(int nCnt = OrdersTotal() - 1; nCnt >= 0; 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); } }



3. 无动于衷。
4.我们应该设置返回,并在下一个tick中处理下一个订单。
5.它应该以某种方式进行。

让我解释一下。假设我们有两个未结订单,它们都需要被关闭。循环

for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)



它将关闭零单,之后第一单将变成零。然后,它将尝试关闭第一个订单,并会出现一个错误。对吗?

我不认为这个话题中讨论的EA的所有错误都与这个问题有关,例如,普通错误与此无关。但如果我是对的,也许它可以解释:a)订单锁定和类似订单;b)我们需要一个以上的专家顾问才能出现错误。



 
хэндлов не хватает.


Можно ли изменить число хэндлов в системных установках (W'XP) и как?

如果一个程序缺少句柄,它就会被写成错误。 否则,有足够的句柄可以使用。
 
当然,第二个选项是正确的,但你应该把Sleep() 改为30秒,仅此而已。
 
我应该补充说,通过替代
for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)

for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--)
我从错误的139变成了138和4109
(requote, 阵列中未初始化的字符串)
最后一条根本没有评论...
 
当然,第二个变体是正确的,但你应该把Sleep()改为30秒,就这样了。


在10个专家顾问中,每分钟间隔30秒,每...错了,不可能以这种方式生活。
 
你认为是这样的吗?我有12个窗口,每个窗口有不同的货币和不同的专家顾问。我禁止(允许现场交易)在其中的11个交易。我所有的错误仍然来自于他们。还有一个错误。
 
Конечно, второй вариант правилен, только вместо return надо ставить Sleep() секунд на 30 и усе.


10位专家以一分钟为一个间隔,每个人有30秒的时间。错了,这不是生活的方式。



这就是生活的方式,你所做的是对铁的力量的考验。
 
一个新版本的EA用于测试。发生了什么变化。
1.循环固定。
2.马吉克号码被私有化到酒吧的开始时间。如果我没有弄错的话,这就造成了开放的延迟。也就是说,带有mn 7的EA将在条形图开始后的7秒内打开。它将避免服务器超载,计算机CPU和冲突与2.5秒最大,如果它仍然存在的地方...

但可惜的是,错误依然存在。

规则是一样的--打开几个窗口,在任何时间范围内(例如几分钟),然后等待。

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;
		
	timePrev += nMagic;	// Open nMagic seconds after the new bar

	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] + nMagic) 
		bIsBarEnd = true;
	timePrev = Time[0] + nMagic;
	
	if(!bIsBarEnd)
		return(0);

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

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

	for(int nCnt = OrdersTotal() - 1; nCnt >= 0; 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(Symbol() + ", " + 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(Symbol() + ", " + 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);
}

// ------