日志中的条目意味着什么 - 页 4

 
而且我还没有检查OrderModify :(
还有待定订单:(
 
所以已经有相当长的时间了,有几天了。在这段时间里,几位专家成功地开展了工作。这里是日志(生成这些日志的代码在上面)。仍在等待至少是来自开发商的一些回应。至少在 "我们承认这个问题,让我们来解决它 "的层面上。

日志1。
试图购买,0次尝试失败,错误6
试图购买,尝试1失败,错误129
试图购买,尝试2失败,错误129
试图购买,尝试3次失败,错误129
试图购买,尝试4次失败,错误129
之字形买入错误:4050
2.28000000, 0.02700000, 0.00000000
试图购买,0次尝试失败,错误6
试图购买,尝试1次成功

订单在第7次尝试时被打开。一路上收到了几个错误信息,与现实无关。

日志2。
7.9.2005 11:0:15, 信号:卖出7.9.2005 11:0:15 试图卖出,尝试0。
Ask: 1.24820000, StopLoss: 0.00600000, TakeProfit: 0.00000000
失败,错误6
7.9.2005 11:0:15 试图出售,尝试1。
Ask: 1.24820000, StopLoss: 0.00600000, TakeProfit: 0.00000000
成功的

在第二次尝试中。第六个错误是整个分支的主题,超过一百个帖子。根据开发者Rosh和Composter的建议,错误频率从 "偶尔一次 "降低到 "大约五次一次"。但它仍然存在。

日志3。
试图关闭多头头寸,票据:1784257
6.9.2005 12:0:13 这张票的订单仍然存在,再次尝试
6.9.2005 12:0:13 这张票的订单仍然存在,再次尝试
6.9.2005 12:0:13 这张票的订单仍然存在,再次尝试
6.9.2005 12:0:13 这张票的订单仍然存在,再次尝试
6.9.2005 12:0:13 这张票的订单仍然存在,再次尝试

五次失败,没有错误代码。节目组认为这个位置已经关闭。我是在循环中抓票,如果我不这样做,问题就不会被发现。

以此类推。
 
要像这样做
<br / translate="no"> void CloseBuy(string strExpertName)
{
int nTicket = OrderTicket()。
SaveComment("\r\n\tAttempting to close long position, ticket: " + nTicket);

int nResult = OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua);

睡眠(10000)。

如果(nResult == -1)
{
int nError = GetLastError()。
Alert(strExpertName + ", error: " + nError);
}

}


我不得不用引号来使文字变粗。
 
如果这样做,很可能会掩盖错误。而目标是帮助开发人员找到它,使一切工作完全没有循环。

睡眠的意义只是为了等待,直到导致故障的条件消失(你知道,ping开始通过)。因为--考虑到贸易操作"占据 "了控制权,在他们回来之前不会让它离开,那么如果有一个错误,它应该立即显示出来。如果不是 - 这是一个错误。

唯一可能的例外是我的循环检查一个刚刚平仓的票据。但即使在这里,我们也可以争论系统应该如何理想地表现。

同样,问题不仅在于错误RETURNED,还在于错误代码取自天花板,有时根本就没有代码--操作的成功代码被返回。

如果我有不明白的地方,请解释。
 
解释一下。根据一个专家顾问的条款,如果当前的 Ask价格超过了挂起的 卖出 订单 止损,就会进行一系列的操作。
1.将发送短信告知删除此类命令的意图。
2.试图取消订单,
3。对OrderDelete()函数的结果进行分析,如果它是负数(订单没有被删除),那么
4。它发送了一条确认失败的短信。

昨天我们收到两条短信,一切都符合规则,但根据日志,订单在同一秒被取消。
所以EA试图在得到结果之前提前几分之一秒得到订单取消操作的结果。这就像中国人种了土豆,第二天又把土豆挖出来的笑话。当被问及 "它是否成熟得那么快 "时,他们会说 "不,但它在咬人" :)
 
明白了,但是。
1.我对实际的订单大惊小怪了一番。如果他们有这样的行为,就需要加以解决。
2) 我们的想法是,MT EAs应该能够在没有延迟周期的情况下进行交易。应该是这样的。
我将把延迟,但是,正如他们所说,"没有快乐":)
 
我一直在想。如果我建议在修改订单操作和检查该操作结果之间使用暂停,这意味着我假设EA是异步工作的。这意味着我们向服务器发送一个试图修改订单的请求,然后,无需等待回复,专家顾问会根据算法继续工作。默认情况下,在得到服务器的回复之前,会给专家顾问一个否定的回复。 如果收到了回复,那么这个回复就是真实的,如果没有,那么这个回复就是虚拟的。

我自己也不相信,开发者能不能解释一下我错得有多离谱?
 
已经达成了共识。但我已经把暂停--只是为了确定。至少,在检查一个刚刚关闭的订单的票据的可用性之前,服务器上的数据库可能被访问,我们应该给它时间来刷新。虽然这是不对的 :)

有点尴尬的是,在这个主题的37个帖子中,只有一个来自开发商的帖子。
 
有点令人不安的是,在这个主题中,只有一个开发者的帖子在37中...

为什么要干涉已经有成效的讨论?
 
为什么要干扰已经很有成效的讨论

,这里是产品=)

做了一些测试。一个专家顾问开仓和平仓(交替买入和卖出)。所有交易 之间的最小停顿 - 10秒

测试时间(由Alpari):02:00 - 09:30(即7.5小时)
OrderSend attempts:996
Successful*:888
错误**。108

* - 我所说的 "成功 "尝试是指:orderSend返回票据号,GetLastError返回0,开仓成功选择orderselect。
** - 所有错误#148 "交易环境繁忙" - 这就是Slava在下一个主题中问到的 - "如果我们禁用isTradeAllowed检查呢?"。错误从07:16:46开始,现在还在堆积)

-----------------------------------------------------------------------------------------------------------------------

OrderClose attempts:890
Successful*:736
错误**。 154

* - 我所说的 "成功的 "关闭尝试是指:orderclose返回true,GetLastError返回0,关闭位置成功选择了mod_history中的orderselect。
** - 152个错误#1 "没有错误",一个#6和一个#138(重新报价)


被抓到的情况并没有发生。也就是说,所有关闭的头寸确实被关闭了。