Лог терминала:
06:30:43 '2871084': delete pending order #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432
06:30:44 '2871084': request was accepted by server
06:30:44 '2871084': request in process
06:30:44 '2871084': pending order #119732180 was deleted
06:30:44 '2871084': pending order sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
06:30:44 '2871084': request was accepted by server
06:30:45 '2871084': request in process
06:30:45 '2871084': order was opened : #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082
Лог терминала:
10:15:35 '2871084': delete pending order #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735
10:15:35 '2871084': request was accepted by server
10:15:35 '2871084': request in process
10:15:36 '2871084': pending order #119899844 was deleted
10:15:36 '2871084': pending order sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
10:15:36 '2871084': request was accepted by server
10:15:36 '2871084': request in process
10:15:37 '2871084': order was opened : #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015
library FileGDV;
uses
SysUtils,
Classes;
//{$R *.res}
function FileExists(s:pchar):boolean; StdCall;
begin
result:=sysutils.fileexists(s);
end;
exports FileExists;
begin
end.
没有什么复杂的,没有什么特别的,只有一个功能。
以下是使用该函数的专家顾问的代码。
if (FileExists(s))
{
handleM=FileOpen(fn,FILE_BIN|FILE_WRITE|FILE_READ);
}
else
{
Alert("File not found "+s);
handleM=FileOpen(fn,FILE_BIN|FILE_WRITE);
s="Time;;M1;M5;M15;M30;H1;H4;D1\n";
FileWriteString(handleM,s,StringLen(s));
}
这是因为不同货币对的点值是不同的...
我认为在 "以点为单位的利润 "显示模式中,点值是多余的。
我认为在 "以点为单位的利润 "显示模式中,点值是多余的。
Glitches....
1)如果你从市场观察中删除不必要的工具,然后再次添加一些,你会得到一个有趣的东西。
在一个仪器上点击右键,选择 "图表窗口 "来打开一个图表。
这将打开一个与你所选择的乐器不同的图表!!。
要发生这个错误,你必须从你刚刚添加的工具中选择一个工具。(见截图 pic1, pic2, pic3)
2)在我的截图中,你可以看到USDCHF工具在 "符号 "窗口中被标记为选中,尽管它实际上不在 "市场观察 "中。(pic4)
也许第一个故障是第二个故障的后果,因为市场观察中的工具编号是错误的。
我的网络很差,这就是为什么所有的截图都在档案中。
以下是链接http://www.sendspace.com/file/tbav73
Glitches....
1)如果你从市场观察中删除不必要的工具,然后再次添加一些,你会得到一个有趣的东西。
在一个仪器上点击右键,选择 "图表窗口 "来打开一个图表。
这将打开一个非你所选的工具的图表!!。
今天(或者说昨天)早上,我在MT4中遇到了一个奇怪的故障--OrderSelect没有 在一个专家顾问中找到票号的订单。
在EA中放置了两个挂单--BUY_STOP和SELL_STOP,位于当前价格的两边。这些订单的票号被储存在t1和t2中。发生错误的代码如下:当其中一个挂单被打开时,第二个挂单被删除,而下一个编号为t3的挂单被放置。如果在最初放置t1和t2时有错误,错误的票据不应该出现在订单列表中。这就是用if(OrderSelect ...)检查的内容,如果出现错误,我们会在日志中写一条信息,并使用restart()退出系列。
今天t1在6:30开盘。订单t2立即被专家顾问删除了(它从市场上被删除了,但它留在了历史上--"取消",我检查过)。之后,放置了T3。这些事件都在MT和EA的日志中。然后检查 "OrderSelect(t2, SELECT_BY_TICKET) "返回FALSE,系列终止,出现 "未知订单t2 "错误。这很奇怪,因为t2的设置和删除都没有错误,而且留在历史中。MT的历史模式是 "所有历史"。OrderSelect怎么会找不到它呢?
这台电脑是独立的,只用于交易,没有其他用途。除了我,没有人碰过它。CPU负载平均为10%。内存、磁盘空间等都足够大。
MT4的版本是402。几个月来,专家顾问一直在一个模拟账户上以不同的变化实时工作,在一个MT中平行于三个不同的货币对(在三个图表上)。直到今天早上,这部分代码都没有问题。此后,在下午和晚上,同一EA上的其他对子一切都很顺利。也就是说,这个错误不能随意复制。
问题:这怎么可能发生?这是MT的一个小故障还是我在代码中没有考虑到的问题?
这段代码使用函数OrderDeleteX和OrderSendX--标准OrderDelete和OrderSend的封装器,它增加了对交易线程是否繁忙的检查,并在EA的日志中注册了 "删除订单... "和 "发送订单... "等事件。
我删除了价格计算,以使代码更简单、更清晰。
变量中的顺序号。
t2 = 119732180
t3 = 119733656
我找不到任何秩序。我们可以从DC报告中看到,67930924号订单是开放的...
这些是账户历史中自08.06.11以来的关闭交易,我们可以看到这个订单不在这里。
所以它必须是在公开交易中。下面的图片,公开交易。
但它也不在这里。我不知道明天DC会发什么报告,但我想听听软件开发者的版本,如何能做到。
还有一件事,也许这并不重要,但我的日期没有被保存,我没有任何相关信息。
我找不到任何秩序。我们可以从DC报告中看到,67930924号订单是开放的...
这些是账户历史中自08.06.11以来的关闭交易,我们可以看到这个订单不在这里。
所以它必须是在公开交易中。下面的图片,公开交易。
但它也不在这里。我不知道明天DC会发什么报告,但我想听听软件开发者的版本,如何能做到。
还有一件事,也许这并不重要,但我的日期没有被保存,我没有任何相关信息。
作为主题的延续,"OrderSelect没有找到票号的订单"。
今天早上,在另一个货币对的同一专家顾问中发生了同样的错误。挂单t2=#119899844被成功下单,然后也被成功删除,之后挂单t3=#119903758被下单,之后OrderSelect函数 没有找到t2。
在昨天的错误和今天的错误之间,我之前在专家顾问中给出的代码成功运行了几次,没有出现任何错误,被删除的订单也被顺利找到。
在此之前的几个月,该专家顾问一直在MT4 229版本中工作。以前没有观察到这样的情况。在4天前的周末,我已经换成了402版本。我不知道这些错误是否与新版本有关。我不能回到旧版本,因为这个专家顾问的交易地点Alpari已经改变了报价的时区,只有402版本能正确反映这些变化(Alpari声称)。
问题仍未解决。
为什么会出现这种情况,为什么OrderSelect没有在历史记录中找到该订单,而历史记录是完整显示的,丢失的订单在其中是可见的?这是MT的故障还是我在代码中漏掉了什么?
有一个用Delphi7编写的DLL。它只有一个功能--检查指定路径中是否有文件。
以下是其代码。
没有什么复杂的,没有什么特别的,只有一个功能。
以下是使用该函数的专家顾问的代码。
下面是头文件的代码
下面是头文件的代码。如果终端中只有一个专家顾问,一切都会像时钟一样运行。
如果我在不同窗口的终端中有两个,并且它们调用这个函数,那么每隔几个小时,两个EA都会停止工作,并在日志中出现信息