新的MetaTrader 4客户终端构建 402 - 页 6

 
dmmikl86:
这是因为不同货币对的点值是不同的...

我认为在 "以点为单位的利润 "显示模式中,点值是多余的。

 
olyakish:

我认为在 "以点为单位的利润 "显示模式中,点值是多余的。

这是另一个永恒的MT故障 )
 

Glitches....

1)如果你从市场观察中删除不必要的工具,然后再次添加一些,你会得到一个有趣的东西。

在一个仪器上点击右键,选择 "图表窗口 "来打开一个图表。

这将打开一个与你所选择的乐器不同的图表!!。

要发生这个错误,你必须从你刚刚添加的工具中选择一个工具。(见截图 pic1, pic2, pic3)

2)在我的截图中,你可以看到USDCHF工具在 "符号 "窗口中被标记为选中,尽管它实际上不在 "市场观察 "中。(pic4)

也许第一个故障是第二个故障的后果,因为市场观察中的工具编号是错误的。

我的网络很差,这就是为什么所有的截图都在档案中。

以下是链接http://www.sendspace.com/file/tbav73

 
dimonsky:

Glitches....

1)如果你从市场观察中删除不必要的工具,然后再次添加一些,你会得到一个有趣的东西。

在一个仪器上点击右键,选择 "图表窗口 "来打开一个图表。

这将打开一个非你所选的工具的图表!!。

早在401年的建设中也注意到这一点。
 

今天(或者说昨天)早上,我在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的日志中注册了 "删除订单... "和 "发送订单... "等事件。
我删除了价格计算,以使代码更简单、更清晰。

if (OrderSelect(t1, SELECT_BY_TICKET)) {
  if (OrderType() == OP_BUY) {
    Print("--------------------------------------------------");
    if (t2 > 0) OrderDeleteX(t2);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_SELLSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendSell);
  }   
} else {
  Print("ERROR: Unknown order t1 in step 1");
  restart(3);
}
 

if (OrderSelect(t2, SELECT_BY_TICKET)) {     
  if (OrderType() == OP_SELL) {
    Print("--------------------------------------------------");
    if (t1 > 0) OrderDeleteX(t1);
    // Расчёты цены, стоплосса и тейкпрофита
    // .....
    t3 = OrderSendX(Symbol(), OP_BUYSTOP, 0.02, Price1, slip, StopLoss, TakeProfit, "step 2", Magic, 0, ColorOrderSendBuy);
  }
} else {
  Print("ERROR: Unknown order t2 in step 1");
  restart(4);
}


变量中的顺序号。
t2 = 119732180
t3 = 119733656

Лог эксперта:
06:30:43 CheMurom v3.4.real EURUSD,H1: --------------------------------------------------
06:30:43 CheMurom v3.4.real EURUSD,H1: Deleting order #119732180; attempt number: 1
06:30:43 CheMurom v3.4.real EURUSD,H1: delete #119732180 sell stop 0.01 EURUSD at 1.46432 sl: 1.47032 tp: 1.43432 ok
06:30:43 CheMurom v3.4.real EURUSD,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.46032, slip=3, sl=1.46932, tp=1.44082; attempt number: 1
06:30:44 CheMurom v3.4.real EURUSD,H1: open #119733656 sell stop 0.02 EURUSD at 1.46032 sl: 1.46932 tp: 1.44082 ok
06:30:44 CheMurom v3.4.real EURUSD,H1: ERROR: Unknown t2 in step 1

Лог терминала:
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
 

我找不到任何秩序。我们可以从DC报告中看到,67930924号订单是开放的...

这些是账户历史中自08.06.11以来的关闭交易,我们可以看到这个订单不在这里。

所以它必须是在公开交易中。下面的图片,公开交易。

但它也不在这里。我不知道明天DC会发什么报告,但我想听听软件开发者的版本,如何能做到。

还有一件事,也许这并不重要,但我的日期没有被保存,我没有任何相关信息。


 
voinG:

我找不到任何秩序。我们可以从DC报告中看到,67930924号订单是开放的...

这些是账户历史中自08.06.11以来的关闭交易,我们可以看到这个订单不在这里。

所以它必须是在公开交易中。下面的图片,公开交易。

但它也不在这里。我不知道明天DC会发什么报告,但我想听听软件开发者的版本,如何能做到。

还有一件事,也许这并不重要,但我的日期没有被保存,我没有任何相关信息。



我打开 "整个故事",它在这个版本中是可见的。
 

作为主题的延续,"OrderSelect没有找到票号的订单"。

今天早上,在另一个货币对的同一专家顾问中发生了同样的错误。挂单t2=#119899844被成功下单,然后也被成功删除,之后挂单t3=#119903758被下单,之后OrderSelect函数 没有找到t2。

在昨天的错误和今天的错误之间,我之前在专家顾问中给出的代码成功运行了几次,没有出现任何错误,被删除的订单也被顺利找到。

在此之前的几个月,该专家顾问一直在MT4 229版本中工作。以前没有观察到这样的情况。在4天前的周末,我已经换成了402版本。我不知道这些错误是否与新版本有关。我不能回到旧版本,因为这个专家顾问的交易地点Alpari已经改变了报价的时区,只有402版本能正确反映这些变化(Alpari声称)。

问题仍未解决。
为什么会出现这种情况,为什么OrderSelect没有在历史记录中找到该订单,而历史记录是完整显示的,丢失的订单在其中是可见的?这是MT的故障还是我在代码中漏掉了什么?

Лог эксперта:
10:15:33 CheMurom v3.4.real EURCHF,H1: --------------------------------------------------
10:15:33 CheMurom v3.4.real EURCHF,H1: Deleting order #119899844; attempt number: 1
10:15:34 CheMurom v3.4.real EURCHF,H1: delete #119899844 sell stop 0.01 EURCHF at 1.22245 sl: 1.22945 tp: 1.19735 ok
10:15:34 CheMurom v3.4.real EURCHF,H1: Sending order cmd=SELL_STOP, lot=0.02, price=1.21745, slip=3, sl=1.22845, tp=1.20015; attempt number: 1
10:15:36 CheMurom v3.4.real EURCHF,H1: open #119903758 sell stop 0.02 EURCHF at 1.21745 sl: 1.22845 tp: 1.20015 ok
10:15:36 CheMurom v3.4.real EURCHF,H1: ERROR: Unknown t2 in step 1

Лог терминала:
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
 
我向Renate描述了这个问题,并附上一张截图,在399版本中,他们删除了这个问题,但在401和402版本中,这个故障又出现了,我不得不回到399版本。
 

有一个用Delphi7编写的DLL。它只有一个功能--检查指定路径中是否有文件。

以下是其代码。

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

下面是头文件的代码

#import "FileGDV.dll"


bool FileExists(string s);

 
#import


下面是头文件的代码。如果终端中只有一个专家顾问,一切都会像时钟一样运行。

如果我在不同窗口的终端中有两个,并且它们调用这个函数,那么每隔几个小时,两个EA都会停止工作,并在日志中出现信息

2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: expert stopped
2011.06.09 14:33:57     gdv_e_MultiMACD_a_KSP_GBP_v082 GBPCHF,M5: function 'FileExists' call from dll 'FileGDV.dll' critical error