MT5和速度在行动 - 页 32

 
Renat Fatkhullin:

请对这一栏目的情况作出回应。

关于交易、自动交易系统和交易策略测试的论坛

新版MetaTrader 5 build 2560:嵌入式学习系统的改进

fxsaber, 2020.08.16 23:02

交易历史->头寸->评论栏对所有交易来说都是空的。这一定是个错误。

它不仅是空的,而且还吞噬了一大块可用空间。

 
fxsaber:

https://www.mql5.com/ru/docs/constants/tradingconstants/orderproperties#enum_order_state

在成功的OrderSendAsync之后,难道没有发生 Started-state吗?

状态可能发生,但票据不会。

该订单只是通过了形式上的正确性 检查,甚至没有进行市场匹配。异步订单只是在流水线上传递,其命运将在其他地方决定。

 
fxsaber:

请对这一栏目的情况作出回应。

它不仅是空的,而且吞噬了一大块可用空间。

是的,这是正确的。

在从历史上的交易中收集虚拟头寸时,他们忘记了正确移动评论。让我们来解决这个问题。

 
Renat Fatkhullin:

状态可以发生,但票据不能。

这个状态不能被看到,因为OrdersTotal() 并没有变化。

 
fxsaber:

这个状态不能被看到,因为OrdersTotal()并没有变化。

不要敲失踪的门。

我已经详细解释过了--"该订单已经检查过形式上的正确性,并送往某地"。这个订单没有编号,它只是被传递到传送带的下一个步骤。它只有在通过执行队列时才会被赋予一个编号。

你无法获得更多关于异步包裹的信息。你的市场/交易状态不会改变,直到你在一段时间后收到关于你的异步请求的一步步细节,你可以在OnTradeTransaction 中捕捉到这一点。

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Renat Fatkhullin:

不要去敲一个不存在的门。

我已经详细解释过了--"该订单已经检查过形式上的正确性,并送往某地"。这个订单没有编号,它只是被传递到传送带的下一个步骤。它只有在通过执行队列时才会被赋予一个数字。

你无法获得更多关于异步包裹的信息。你的市场/交易状态不会改变,直到你在一段时间后得到一个关于你的异步请求的步骤细节,你可以在OnTradeTransaction 中抓住这个细节。

谢谢你的澄清,将进行调查。

 

这个故事可能已经成长。

但在b2617,这个EA又回到了警报状态。

关于交易、自动交易系统和交易策略测试的论坛

MT5和速度在行动

fxsaber, 2020.09.08 19:46

// Демонстрация полного (не частичного) пересбора HistorySelect-кеша.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inAlertTime = 1; // Нижний порог в миллисекундах

#define _B2(A) _B(A, inAlertTime)

const bool Init = EventSetTimer(1);

void OnTimer()
{
  static MqlTradeRequest Request = {0};
  static MqlTradeResult Result = {0};

  if (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    Request.position = Result.order;
  }
  else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL;
    Request.type = ORDER_TYPE_BUY;
    Request.symbol = _Symbol;
    Request.volume = 0.1;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    Request.position = 0;
  }

  if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX));
}
 

请查看第2619号测试版。

我们做了一些优化,以加快历史采样的速度。有一个强制缓存失效的案例。

 
Renat Fatkhullin:

请查看第2619号测试版。

我们做了一些优化,以加快历史采样的速度。有一个强制缓存失效的案例。

加速发生了,但不幸的是,由于某些原因,缓存的更新不是在一毫秒内完成的,所以它在历史更新的每一步都会发出警报。

2020.09.24 05:17:49.541 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:49.543 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:50.526 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:50.527 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:51.569 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:51.571 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:52.530 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:52.532 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.


请在大的历史上试一试。


我认为这一毫秒是由于缓存刷新的内存分配造成的。其他方面似乎都没有减缓它的速度。

 
fxsaber:

谢谢你的澄清,我将研究一下。

把你的旗子竖起来,这是个老话题。