错误、漏洞、问题 - 页 734

 
Vitya:
也许,我们需要PositionTotal()?

而如果我问OrdersTotal() 目前有多少个订单,这与位置有什么关系?

而我在OnTrade()中要求提供这些信息,不能错过订单存在的时刻。

但事实上,事实证明,无论如何都会错过这个时机,请求要么在订单尚未出现时,要么在订单已经出现时被处理。

但在OnTrade()中没有检测到它存在的时刻,否则,OrdersTotal()就会说谎。

 

为了避免抱怨代码的不完善,这里是MetaQuotes的代码和我对专家顾问中的脚本的改进。

增加了OnTrade()函数,并将脚本代码放到OnInit()中。

没有一个印刷品显示有一个订单的信息。

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
附加的文件:
 

我只能用一篇文章来回答这个问题MetaTrader 5中的贸易事件

Заключение

MetaTrader 5交易和分析平台中的所有操作都是异步的,交易账户中的所有变化都是独立报告的。 因此,你不应该试图按照 "一个请求-一个交易事件 "的规则来跟踪一个事件。如果我们想确定交易事件发生后到底发生了什么变化,我们需要分析每次调用处理程序OnTrade时的所有交易、头寸和订单,并将它们与事件出现前的状态进行比较。
这意味着你要抓的订单,可能已经需要用HistoryOrdersTotal 来搜索了。
 
Rosh:

我只能用MetaTrader 5中的交易事件 这篇文章来回答这个问题。

这意味着你要抓的订单可能已经被用HistoryOrdersTotal 搜索到了。

我以这篇文章为指导。我想找出问题的答案:交易事件怎么可能错过下单但尚未执行的时刻?

交易事件在以下情况下由服务器产生

  • 有效订单的变化。
  • 职位的变化。
  • 行业的变化。
  • 交易历史中的变化。

我怀疑OrderTotal()失败了。但我无法用这个功能来证明。

虽然作为一种选择,我不拒绝OrderTotal()所取的数据不在我认为的地方(即不在服务器上)。

 
Urain:

我正在关注这篇文章。我想找出问题的答案:交易事件怎么会错过订单已经下达但尚未执行的时刻?

简单地说,当交易事件到来时,订单已经被放置,并已经被执行。这就是为什么它不在历史上,而且已经生效了。
 
Rosh:
当贸易事件到达时,订单已经被下达和执行。因此,它不在活跃的订单中,并且已经被添加到历史中。

是的,是的,我的想法在这个答案上浮动。

我会这样回答,在下单的时候,服务器会产生一个 "交易 "事件,并将其发送到终端,当终端收到后,代码会对订单的数量 提出请求,但当这个请求传到服务器时,服务器已经执行了这个订单。

我没有任何其他解释。

 
Urain:

交易事件在以下情况下由服务器产生。

  • 有效订单的变化。
  • 职位的变化。
  • 行业的变化。
  • 交易历史的变化。

我怀疑 OrderTotal()失败了。但我无法用这个功能来证明。

我是否正确地理解了活跃订单列表包括活跃挂单 和开仓订单?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
papaklass:

这意味着什么呢?

类似于 "程序终止后没有释放已使用的部分内存"。特别是,当程序使用new操作符创建一个动态对象,但随后没有使用delete操作符 将其删除时,就会出现类似的信息。
 
papaklass:
...在 "专家 "选项卡中,出现了这个信息。这不是一个错误,是一个警告。关于什么的警告?

好吧,我没有说 "错误"。让它成为一个 "警告"。我已经用一个例子说了我的版本。再看一下这里的讨论(关于线路泄漏--读到最后):https://www.mql5.com/ru/forum/1111/page345#comment_54616

你可能要去找BOD,并说明你的情况细节。

 

发现了一个 "困惑"。

为什么编译器不喜欢第二个b 变量的定义?

而一般来说,我应该如何处理这种情况?

#property script_show_inputs

// m[a].Column[b]
input int A=11;
input int B=3;

#define a A
//#define b B // тут раскоментировать
#define b 3   // тут закоментировать

// размер одного элемента 4 байта
struct ArrWe
{
  float Column [b];
};

void OnStart()
{
  ArrWe m[11]; // тут вместо "11" хочу использовать "a"
  Print("Размер структуры ArrWe ",sizeof(ArrWe));
  Print("Количество элементов 1-го измерения ",sizeof(m)/sizeof(ArrWe));
  Print("Количество элементов 2-го измерения ",sizeof(ArrWe)/4);   
  Print("Размер массива из 11 ArrWe ",sizeof(m));
}