错误、漏洞、问题 - 页 74

 

在测试专家顾问时,我无意中发现测试器中的Sleep()函数,我认为它不能正确工作。重点如下。

如果总利润高于指定的利润(CloseAll()函数),专家顾问会在23:00关闭所有头寸。在下一个位置关闭后,通过Sleep(10000)引入10秒的延迟。

以下是我们在日志中的内容。

FP 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 CloseAll Profit: 3030.66
JD 0 交易 04:31:04 即时在1.56474卖出0.80欧元澳元 (1.56474 / 1.56558 / 1.56474)
JH 0 交易 04:31:04 交易 #85 在1.56474卖出0.80欧元澳元 完成(基于订单#85)。
HL 0 交易 04:31:04 执行交易 [#85 在1.56474卖出0.80欧元澳元]
HI 0 交易 04:31:04 订单执行 在1.56474卖出0.80 [#85 在1.56474卖出0.80 EURAUD]
QE 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 EURAUD的头寸将被关闭
PN 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:0423:0:0
FG 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 Sleep 10 cek.
RO 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:0423:0:0
QD 0 交易 04:31:04 在90.444买入1.00 USDJPY (90.417 / 90.444 / 90.417)
NS 0 交易 04:31:04 交易 #86 在90.444买入1.00 USDJPY 完成(基于订单#86)。
MJ 0 交易 04:31:04 执行交易 [#86 买入 1.00 USDJPY at 90.444]
JS 0 交易 04:31:04 执行的订单在90.444买入1.00 [#86 在90.444买入1.00 USDJPY]
JL 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 USDJPY的头寸将被关闭。
JI 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:0423:0:0
PN 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 Sleep 10 cek.
DF 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:0423:0:0
QN 0 交易 04:31:04 在0.90001买入0.80 AUDUSD (0.89967 / 0.90001 / 0.89967)
IH 0 交易 04:31:04 交易 #87 在0.90001买入0.80 AUDUSD 完成(基于订单#87)。
KQ 0 交易 04:31:04 执行交易 [#87 在0.90001买入0.80 AUDUSD]
RL 0 交易 04:31:04 执行订单,在0.90001买入0.80 [#87 在0.90001买入0.80 AUDUSD]
EG 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 AUDUSD的头寸将被关闭
LP 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:0423:0:0
JI 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:04 Sleep 10 cek.

NQ 0 PriceChannel_multi (2) (EURUSD,H1) 04:31:0423:0:0

我们可以看到,滞后之前和滞后之后的时间是一样的。但只有在TimeCurrent() == 0时才会发生。

如果没有,滑移的工作就很好。比如说。

MD 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 CloseAll Profit: 3382.28
KQ 0 交易 04:30:39 美东时间 0.70 欧元兑美元在 1.44090 (1.44090 / 1.44108 / 1.44090)
IE 0 交易 04:30:39 交易 #27 在1.44090卖出0.70 EURUSD 完成(根据订单#27)。
CI 0 交易 04:30:39 执行 [#27 在 1.44090 卖出 0.70 欧元/美元]
EL 0 交易 04:30:39 执行的订单在1.44090卖出0.70 [#27 在1.44090卖出0.70 EURUSD]
DH 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39
JR 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:7
MK 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 Sleep 10 cek.
EP 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:15
DE 0 交易 04:30:39 ET 0.80 AUDUSD at 0.91951 (0.91951 / 0.91993 / 0.91951)
CJ 0 交易 04:30:39 交易 #28 在0.91951卖出0.80 AUDUSD 完成(基于订单#28)。
HR 0 交易 04:30:39 执行交易 [#28 在0.91951卖出0.80 AUDUSD]
HH 0 交易 04:30:39 执行的订单在0.91951卖出0.80 AUDUSD [#28卖出0.80 AUDUSD在0.91951] 。
LS 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 AUDUSD 将被关闭
QL 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:15
ED 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 10 cek Sleep.
LO 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:25
DD 0交易 04:30:39 在1.56727买入0.60欧元澳元 (1.56632 / 1.56727 / 1.56632)
LN 0 交易 04:30:39 交易 #29 在1.56727买入0.60欧元澳元 完成(基于订单#29)。
FK 0 交易 04:30:39 执行交易 [#29 在1.56727买入0.60欧元澳元]
IR 0 交易 04:30:39 订单执行 在1.56727买入0.60 [#29 在1.56727买入0.60 EURAUD]
RM 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 EURAUD的头寸将被关闭
FE 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:25
GN 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:39 Sleep 10 cek.

QE 0 PriceChannel_multi (2) (EURUSD,H1) 04:30:3923:0:35

关闭头寸的代码。

if(m_trade[j].PositionClose(m_symbol[j].Name()))
           {
            PosCloseCount--;
            printf("Position by %s to be closed",m_symbol[j].Name());
            MqlDateTime  dt_struct;
            TimeCurrent(dt_struct);
            printf("%u:%u:%u",dt_struct.hour,dt_struct.min,dt_struct.sec);
            Sleep(10000);
            Print("Sleep 10 cek.");
            TimeCurrent(dt_struct);
            printf("%u:%u:%u",dt_struct.hour,dt_struct.min,dt_struct.sec);
           }

CloseAll函数调用。

   MqlDateTime  dt_struct;
   TimeCurrent(dt_struct);
   if(dt_struct.hour==2 3 && m_account.Profit()>InpProfitToClose)
     {
      Trade=false;Print("CloseAll Profit: ",m_account.Profit());
      while(PositionsTotal()>0)
         CloseAll();

如果我们把条件改为

if(dt_struct.hour==23 && dt_struct.min>0 && m_account.Profit()>InpProfitToClose)
没有错误。
Документация по MQL5: Общие функции / Sleep
Документация по MQL5: Общие функции / Sleep
  • www.mql5.com
Общие функции / Sleep - Документация по MQL5
 
joo:
那么,我的信息没有白费,正如我已经想到的那样?

是的,我们已经修复了StringToTime 的行为。 谢谢你。

 
Valmars:

在测试专家顾问时,我无意中发现测试器中的Sleep()函数,我认为它不能正确工作。重点如下。

非常有趣。让我们来看看。
 
我打开 "新闻 "标签,有...- 这是个错误的消息。我错过了什么吗?
 
x100intraday:
我打开 "新闻 "标签,那里...- 这是个错误的消息。我错过了什么吗?

设置你想接收新闻的语言。


 
Rosh:

设置你想接收新闻的语言。


不是的。它有点像洒在mt5论坛上的 "新闻",它与外汇新闻无关。最近不光是亲自动手更新,我还重新下载了mt5发行版并安装,现在已经快一个星期了。我不知道它在这一周是怎样的,因为我没有进入 "新闻 "标签,但我现在发现了它。

奇怪的金融新闻

 
x100intraday:

不是的。这有点像洒在mt5论坛上的 "新闻",它与外汇新闻无关。我最近不是刚亲自动手,我又下载了mt5的发行版并安装了它,现在已经快一个星期了。我不知道它在一周内是怎样的,因为我没有进入 "新闻 "标签,但我现在发现了它。

这是我们的演示服务器在播放MQL5.com的新闻,而不是缺失的外汇新闻(我们无权传播他人的免费新闻)。

如果你不想看到它们,只需在右键菜单的新闻类别部分取消勾选相应的框。

 

在自动更新后,之前工作的EA开始给出无法复制时间序列的信息。通过卸载EA 并再次加载,问题得到了解决。问题:自动更新的这一结果应该总是被期待,还是说这是一个终端错误,将被消除?

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
Yedelkin:

在自动更新后,之前工作的EA开始给出无法复制时间序列的信息。通过卸载EA 并再次加载,问题得到了解决。问题:自动更新的这一结果应该总是被期待,还是说这是一个终端错误,将被消除?

请提供更多细节(日志、截图等)。

没有这一点,就不可能给出一个知情的答案。

 
Renat:

请提供更多细节(日志、屏幕截图等)。

没有这一点,就不可能给出一个合理的答案。

好的。MQ服务器上的模拟账户,附上日志文件(2010729.log),开始自动更新的时间是20:54,在22:36我自己删除了Expert Advisor,一分钟后上传。

在EA中有一个简单的类型检查。

if(CopyHigh(Symbol(),0,0,bars,high)<bars || CopyClose(Symbol(),0,0,bars,close)<bars || CopyLow(Symbol(),0,0,bars,low)<bars || CopyTime(Symbol(),0,0,bars,time)<bars)
  {
   Print("Can't copy timeseries!");
   return;
  }

相应地,自动更新后的信息就消失了(文件20100729copy.log)。 一般来说,这种情况以前也发生过,但不知为何没有注意到。

重新加载专家顾问后,图表中的开仓 和止损价格 线也消失了。

我是否可以对已经说过的内容再做一些补充?