错误、漏洞、问题 - 页 2458

 

从MQL4切换到MQL5 时,我遇到了一个故障。

代码。

ResetLastError()。

int ObjTotal = ObjectsTotal(0);

int Error = GetLastError()。

返回。

ObjTotal = 0.

错误=4022

这个错误是什么,为什么文件中没有提到?

我尝试了不同的变体:ObjectsTotal(0, -1, -1), ObjectsTotal(ChartID(), 0, OBJ_TREND), 等等。

其结果是一样的。

如何使其发挥作用?

终端:MetaTrader 5,版本5.00 build 2025。
 
Игорь Евдокимов:

建议:如果你想问什么,请插入完整的代码,而不是其中的一部分。

这有什么意义:任何人拿着你的代码,在他们自己的身上运行。而且几乎没有人看大块的代码--大块的代码是不尊重人的。

你的代码的例子。

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError();
   int ObjTotal=ObjectsTotal(0);
   int Error=GetLastError();
   Print("ObjectsTotal: ",ObjTotal,", GetLastError: ",Error);
//---
  }
//+------------------------------------------------------------------+

在一个没有任何图形对象的图形上运行它。结果。

2019.05.10 13:26:59.169 1 (EURUSD,H1)   ObjectsTotal: 0, GetLastError: 0

就是说,没有错误。


使用终端。

2019.05.10 13:25:35.665 MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
2019.05.10 13:25:35.668 Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3712 / 8077 Mb, Disk: 77 / 415 Gb, GMT+2
2019.05.10 13:25:35.668 C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
附加的文件:
1.mq5  2 kb
 
Vladimir Karputov:

一个忠告:如果你想问什么,请插入完整的代码,而不是一个片段。

谢谢你的建议,我也会这么做的。

然而,这个问题仍未解决。

澄清:如果上一篇文章中的那段代码是在指标的OnDeinit()函数中,结果是这样。

2019.05.10 14:08:20.105 PtS (EURUSD,H1)ObjectsTotal: 0, GetLastError: 4022

如果你在从图表中删除指标后运行同样的代码,就像上一个帖子中的脚本(1.mq5)一样,我们会得到

2019.05.10 14:08:33.609 1 (EURUSD,H1) ObjectsTotal: 8575, GetLastError: 0

请帮助我理解其中的原因。

先生们 开发者们!文档中没有的这个错误是什么?

 
Vladislav Andruschenko :

在优化过程中,策略测试器 的错误。

"任务被 测试员 拒绝 "

例如,如果你的账户货币是欧元。

  • EURJPY 没问题
  • 误差在GBPJPY


如果你的账户货币是美元

  • 美元兑加元没有问题
  • USDJPY 没问题
  • 误差在EURAUD


当代码中使用其他货币对时,就会出现这种情况。

在我的例子中,它使用的是动态地段的计算方法



也就是说,当EA要求提供另一种货币的价格时。

@Vladislav Andruschenko

你好,你有没有得到这个问题的答案或解决方案?

 
Vladimir Pastushak:

当计划/周期被改变时,无论你在输入字段中指定了什么值,PBB都会收到一个10的值。

在重新初始化的时刻,就好像是第一次运行一样。

有两种方法可以解决你的问题

1 - 将PBB值存储在全局变量中,并从那里获得周期。

2 - 当OnChartEvent触发时,重新初始化MA指标并获得一个新的句柄...

检查了所有选项。它不起作用。

MQL5中的故障。

它并不初始化新的数值。只有在参数输入int PBB_=的情况下。没有其他选择。这一点也不好。

 
Uladzimir Izerski:

检查了所有的选项。不起作用。

MQL5程序中的缺陷。

新值不被初始化。只有在输入int PBB_=参数的情况下。没有其他选择。这一点也不好。

在MQL中一切都很好,你只是不明白你在代码中做了什么,一切是如何运作的......

再次,当你调用ChartSetSymbolPeriod(0,_Symbol,_Period)时。

你把一切都重置为默认状态...

或者,尝试用inite来请求你的文本字段中的一个值。

当你第一次启动指标时,一切都被创建,当你改变字段中的数据时,新的调用inite并从你的文本字段中设置值...

 
Vladimir Pastushak:

在MQL中一切都很好,你只是不明白你在代码中做什么,以及一切是如何运作的......

再次,当你调用ChartSetSymbolPeriod(0,_Symbol,_Period)时。

你把一切都重置为默认状态...

或者,尝试用inite来请求你的文本字段中的一个值。

在逻辑上,第一次启动指标后,一切都被创建了,但当你改变字段中的数据时,在统一和值设置中会有一个新的调用,来自你的文本字段...

我试过用文本字段和通过GlobalVariable,但我从未试过任何东西。它就像在坦克里一样安静。

在其他变量中,OnCalculate 的工作没有问题。

 
Uladzimir Izerski:

我试着从一个文本字段和通过GlobalVariable以及其他任何我试过的东西。它像坦克一样安静。

另一个版本的OnCalculate工作起来没有问题。

这意味着你做错了什么

 
当我访问我的账户时,一个窗口打开,说我不应该阅读未准备的 "行",尽管它说授权允许连接到账户......我应该怎么做?
 
Vladimir Pastushak:

那么你就做错了事。

你已经发布了代码。

如果我无能,一定有人是高手。我还没有看到它。

我接受你为寻找答案所做的努力。还有更多的事情要做。也就是说,在开发商的层面上。