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

Разве Started-состояние не возникает после успешного OrderSendAsync?

Состояние может возникнуть, а вот тикет - нет.

Приказ просто прошел контроль формальной корректности заполнения, даже не соответствия рынку. Асинхронный приказ просто передался дальше по конвееру и его судьба будет решена где-то потом и где-то в другом месте.

 
fxsaber:

Просьба отреагировать на состояние этого столбца.

Мало того, что он пустой, так еще и отъедает огромную часть полезного пространства.

Да, верно.

Забыли правильно переносить комментарий, когда собираем виртуальные позиции из сделок в истории. Исправим.

 
Renat Fatkhullin:

Состояние может возникнуть, а вот тикет - нет.

Это состояние не увидеть, т.к. OrdersTotal() не меняется.

 
fxsaber:

Это состояние не увидеть, т.к. OrdersTotal() не меняется.

Не стучитесь в отсутствующую дверь.

Я же детально объяснил - "приказ проверен на формальную корректность и отправлен куда-то". Это приказ не имеет никакого номера, его только передали на следующую ступень конвейера. Номер ему присвоят только когда он пройдет очередь исполнения.

Больше никакой информации на асинхронной посылке вы получить не можете. Ваше рыночное/торговое состояние не изменится, пока вы на свой асинхронный запрос через некоторое время не получите пошаговую детализацию, которую можно отловить в OnTradeTransaction.

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

Не стучитесь в отсутствующую дверь.

Я же детально объяснил - "приказ проверен на формальную корректность и отправлен куда-то". Это приказ не имеет никакого номера, его только передали на следующую ступень конвейера. Номер ему присвоят только когда он пройдет очередь исполнения.

Больше никакой информации на асинхронной посылке вы получить не можете. Ваше рыночное/торговое состояние не изменится, пока вы на свой асинхронный запрос через некоторое время не получите пошаговую детализацию, которую можно отловить в OnTradeTransaction.

Спасибо за разъяснения, буду изучать.

 

Возможно, история выросла.

Но на b2617 этот советник снова стал Алертить.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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:

Спасибо за разъяснения, буду изучать.

Ставьте свои флаги, это старая тема.