第6号错误 - 页 29

 
发送的日志。<br / translate="no"> 我应该把这个代码放在哪里?
while(!IsStopped() && !IsTradeAllowed() )Sleep(1000); GlobalVariableSet(strTradeSemaphore, 0.0);


在启动函数的出口处
 
尝试过Sleep()
上升到100000,没有明显的改善

替换为
if(!IsTesting() ) { Sleep(1000); GlobalVariableSet(strTradeSemaphore, 0.0); }



while(!IsStopped() && !IsTradeAllowed() )Sleep(1000); GlobalVariableSet(strTradeSemaphore, 0.0);



同样的胡椒。
错误146。

 
经过一段时间的思考,发现有一个确切的方法。 我将尝试制定它<br/ translate="no">
while(!IsStopped() && !IsTradeAllowed()Sleep(1000); GlobalVariableSet(strTradeSemaphore, 0.0);


即我们自己在等待自己的交易环境被释放 ,一般来说,这是一个非常奇怪的情况。在进行交易操作后,环境会立即被释放。否则,就不可能在一个循环中平仓。



再一次。上面的代码将导致专家顾问挂起,如果交易标志已被清除。这将导致交易完全停止,因为没有人会向信号灯发出信号。这种情况至少在某种程度上是可控的,因为该标志只能被手动删除。更糟糕的是信号灯的情况。



GlobalVariableSet 可以落在另一个EA上,当后者关闭semaphore的时候。结果是,几个EA将试图在同一时间进行交易。 正如我们所看到的,开发人员并不了解终端中发生的异步过程。而这种误解被输出到了论坛。 难怪会出现致命的错误,如这里讨论的错误,而且这些错误无法修复。为什么要给出



破坏性的 建议?
 
为什么要给вредные 建议?

我们的假设是,如果顾问已经达到了这一点,那么交易旗帜就会成立!这就是我们的假设。
 
Зачем давать вредные советы?

我们认为,如果EA达到了这个点,那么交易旗帜就会升起

这一假设的依据是什么?当假设与现实不一致时,就会出现意想不到的错误。旗帜算不了什么。同步、互斥、共享资源--这个问题是真实存在的。建议你用用户级

全局变量 来解决这个问题是无稽之谈。特别是由于这个例子是不可行的。
 
从昨晚12点开始,专家们在MQ-demo和Alpari-demo上工作。在整个过程中,也没有出现错误128,在Alpari上有一个错误6(ping错误),而在这两个上--有几个旧的ticks。订单的工作没有错误。05.10的Build 1.8.3,也许是别的原因?例如,不同互联网供应商通过443端口连接的特殊性?MT3有错误,但没有这么多。


唉。"从晚上12点开始 "并不是一个统计数字。由于未知的原因,问题一波接一波,然后没有,然后一次有好几个......。
 
<br / translate="no"> 夸克,要有良心,不要在论坛上发表这样的日志 =)))))


我想--谁在乎呢(小提琴手的口气来自Kindzadz):)


关于关闭/打开的实际情况--我在所有的f-函数中都进行了检查,出现了错误,但它们是FALSE错误。我检查了日志和订单历史,所有头寸都被关闭。该命令只是没有时间在历史上移动。我在检查前做了1秒的延迟 - 但这还不够...当我询问时,他们没有给我任何答案。


说得好。但我遇到过这样的情况,即使一小时后,订单也没有任何进展,也就是说,有时他们并不虚假。
我也有一个10秒的延迟。
 
这是一个很好的观点。但我也有过这样的情况,即使一小时后,订单也没有任何进展,也就是说,有时他们并不虚假。<br / translate="no"> 我也有一个10秒的延迟,每一个。

事实证明,我所有的错误都在代码中=)即我在订单关闭后做了错误的检查。
在我纠正之后--没有了。确实没有多少时间了,我们必须等待......
 
<br / translate="no">我所有的错误似乎都是在代码中=)即我在订单关闭后做了错误的检查。
在我纠正之后--没有了。确实没有多少时间了,我们必须等待......


纠正后的代码是什么样子的?
 
更正后的代码是什么样子的?

为命令克劳斯。
//----,检查是否已经实际平仓,如果没有,输出信息并退出,返回-5 for ( int x = 0; x < 5; x ++ ) { Sleep(1000);
		if ( OrderSelect( Close_OrderTicket, SELECT_BY_TICKET ) { if ( OrderCloseTime() <= 0 ) { Processing_Error ( 0, "OrderClose"); _Return_ ( 3, "Error", 0, "Position was not closed", "OrderClose( 。..)", "该位置没有关闭"); return(-5); } else { break; } } Close_GetLastError = GetLastError(); _Print_ ( 3, "OrderSelect( " + Close_OrderTicket + " , SELECT_BY_TICKET )", "Error #" + Close_GetLastError + " ( " + ErrorDescription( Close_GetLastError ) + " ) "); } }


对于ordersand - 只是5次尝试选择一个订单,并有第二次停顿, 对于modifi - 比较旧值和当前值