第6号错误 - 页 7

 
<br / translate="no"> 这就是生活方式,你所做的是测试铁的强度。


请看关于新版EA的帖子。现在每个专家都有一秒钟的时间。它没有得到任何改善。
然后,我们得到承诺,这些请求被排队。
 
当然,第二个变体是正确的,但应该使用Sleep()30秒,而不是返回,就这样。


这里是罗什提出的变体。错误依然存在。

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]) 
		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 = 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);
					
				Sleep(10);
			}
		}
	}

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

Sleep(10);
}
// ------
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);
	}

Sleep(10);
}
// ------

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

// ------



 
这一点
if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots() , Ask, nSlip, OrangeRed);


如果我们已经关闭了买入订单(第一个条件得到满足),那么OrderType()是什么? 试着放弃第二个条件中的检查,即我总是这样写: 。


如果(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); 如果(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed) 。
 
好吧,像往常一样,Rosh似乎是对的。我设置了Sleep(0),两位专家已经给出了错误。我把Sleep(100),四个专家工作,在添加第五个专家时出现错误(五个窗口,五种货币,每个专家一个)。

我设置了Sleep(200)--五个专家上了(差不多,有时还是会出错。我还没有设法用这种方法获得5个专家顾问而不出错)。

现在,我只谈138 和139号错误

仍在等待开发商的一些提示。

Rosh,特别感谢你,虽然我不喜欢你对滑的做法。
 
这样的时刻<br / translate="no">
if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed)


如果我们已经关闭了一个买入订单(第一个条件已经满足),什么是OrderType()
试着在第二个条件中放弃检查,也就是说,我总是这样写。

如果(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); 如果(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed) 。



是的,可能。虽然我在这个如果之后放了一个暂停,但谁知道他们,多任务者。

试过了。我感觉好多了,但我仍然有错误 :)
 
<br / translate="no">
Rosh,特别感谢你,虽然我不喜欢你的溜号方法。


嗯...生活也不是我见过的最好的。 有这样的事情,在某些时候会死亡。我也不喜欢它,但开发者并没有改变版本。:)
 


Rosh, тебе отдельное спасибо, хотя твой подход со слипом мне не нравится.


嗯...生活也不是我见过的最好的东西。有这样一件事,就是在某个时间点死亡。我也不喜欢它,但开发者并没有改变版本。:)


是的,而且API并没有放出:)但你总能找到一个变通的办法 :))例如,
使用Sleep(),:))但总的来说,这是一个深刻的说法。你应该更经常地向开发商申请。他们说他们有时会回答 :))))
 
我可以和你们聊一聊吗?=)))
因为你们这样的讨论有4页,而我却沉默不语(喝酒的日子=))。


关于错误:
错误#6 - 与贸易服务器没有连接 - 可能是由于连接不良。我有一条数据语音专线,当你拿起电话时,速度急剧下降。所以正是在这些时刻,这个错误才会发生。

错误#139--订单被锁定--我认为这只是一个小故障:就像终端对这个位置做了一些事情,而EA在那一刻无法对其进行操作。我不知道,我找不到任何其他解释(

Error #138 - requote - 它可能也是由连接引起的。在出错时看一下通道负载。

不过,这一切纯粹是猜测。我问了开发人员很长时间,要求他们提供正常的错误描述和如何应对的说明--他们说总有一天会来的;)



关于Sleep()- 使用它总是很愚蠢。但最好在交易之间进行暂停 - 使用LastTradeTime。我正在完成(重新制作)trade_lib&info_lib.mqh库。所有这些问题都在那里得到了解决(部分)。错误应该少得多。


这就是我到目前为止的所有想法,如果我想到其他东西--我会告诉你的;)
 
<br/ translate="no">我可以和你们聊一聊吗?=)))
你已经有了四页的讨论,而我却沉默不语(喝酒的日子=))......


是的,我已经发出了很多声音...:)


关于错误: 错误#6 - 与贸易服务器没有连接 - 可能是由于连接不良。我有一个数据语音服务,当你拿起电话时,速度急剧下降。因此,正是在这些时刻,这个错误才会发生。



我有一条租用的线路,质量很好。同样,连接不良并不能解释为什么每次几个EA同时做某事时都会出现错误。有一个兆位(理论上)的通道!


错误#139--订单被锁定--在我看来,这只是一个小故障:就像终端对这个位置做了什么,专家顾问在那一刻无法工作。我不知道,我找不到任何其他解释( )


同意。只剩下一点小事要弄清楚他是在什么地方做的。专家是如此简单,根本没有这样的地方。虽然,当然,也许是我看不出来。(你看到麋鹿了吗?没有。我也没有。但他现在在)


错误#138--重新投票很可能是由于连接问题。在出错时检查链接负载。


我不知道。如果你不能在莫斯科用专线同时交易两个EA,你就根本不能交易。我正在考虑

重新报价 的问题。例如,为使价格不至于跑掉,必须投入的最低单价是多少。5分?10?我把15 - 错误保持不变。


不过,这一切纯粹是猜测。我问了开发人员很长时间,要求他们提供正常的错误描述和如何应对的说明--他们说总有一天会来的;) 。


他们还说市场是完美的!哈!


关于Sleep() - 使用它总是很愚蠢。但最好在交易之间做一个停顿--使用LastTradeTime。我正在完成(重新制作)trade_lib&info_lib.mqh库--我将把它发布在wiki上,并给你链接。所有这些问题都在那里得到了解决(部分)。应该会有更少的错误。


我已经写过,这些错误可以 "直接 "绕过--通过在一个循环中发送OrderSend,直到它返回一个非负1的值。但问题是原则性的--会发生什么?我一次得到5-6种不同类型的错误。如果我今天画了一个变通方案,明天它们就会在不期望的地方冒出来。如果我用模拟交易,我最好解决这个问题。我以后会有损失。


这就是我目前所有的想法,如果我想到其他事情,我会告诉你;)


谢谢 :)尝试在你的EA上运行这个专家顾问。也许你会得到一些想法。或者--如果你在模拟交易中--在你的EA中放入类似的警报...谁知道呢...如果他们不开放所有交易呢?
 
我也经常遇到这样的错误。而且我也坐在Alpari。也许你应该尝试另一家经纪公司?也许这不是MT的错?