Новая версия платформы MetaTrader 5 build 4755: общие улучшения - страница 38

 
Maxim Kuznetsov #:

я знаю места где ставятся наносекунды. но это ни им, ни мне не помогает ;-) 

точность(разрядность) таймстемпа должна соотносится с частотой генерации, скоростью доставки и возможностями обработки. 

К примеру, дельта стакана в криптах рассылается раз 10 мск, ставить милисек.таймер там не имеет смысла - это и с абс.погрешностью слишком близко и до терминала оно летит столько-же а то и больше. А точный таймер это ещё и нагрузка на сервер, внезапный попадосик

Вот именно. Нужно искать компромисс. Текущее полное отсутствие времени в стаканах - по меньшей мере странно, но ставить время с точностью выше миллисекунды - пыль в глаза.

 

b4885, отложки на определенных торговых серверах не исполняются в Тестере.


Код для воспроизведения (запускал по реальным тикам EURUSD с 13.05.2025).

void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun && (TimeCurrent() > D'2025.05.13 01:00'))
  {
    MqlTick Tick;
    
    if (SymbolInfoTick(_Symbol, Tick))
    {
      MqlTradeRequest Request = {};
      MqlTradeResult Result;
      
      Request.action = TRADE_ACTION_PENDING;
      Request.symbol = _Symbol;
      Request.volume = 1;
      Request.price = Tick.bid + 100 * _Point;
      Request.type = ORDER_TYPE_SELL_LIMIT;
      Request.type_filling = ORDER_FILLING_IOC;

      FirstRun = false;
      Print(AccountInfoString(ACCOUNT_SERVER));
      
      if (OrderSend(Request, Result))
      {
        Request.action = TRADE_ACTION_MODIFY;
        Request.order = Result.order;
        Request.type_time = ORDER_TIME_SPECIFIED;
        Request.expiration = D'2025.05.13 02:00:00';
        
        OrderSend(Request, Result);      
      }
    }
  }
}


Воспроизводится на следующих торговых серверах.

2025.05.13 01:00:01   FXOpen-MT5
2025.05.13 01:00:01   sell limit 1 EURUSD at 1.10968 (1.10868 / 1.10941)
2025.05.13 01:00:01   order modified [#2 sell limit 1 EURUSD at 1.10968]
2025.05.13 01:00:01   ICMarketsSC-MT5
2025.05.13 01:00:01   sell limit 1 EURUSD at 1.10994 (1.10894 / 1.10925)
2025.05.13 01:00:01   order modified [#2 sell limit 1 EURUSD at 1.10994]
2025.05.13 01:00:01   FusionMarkets-Live
2025.05.13 01:00:01   sell limit 1 EURUSD at 1.10982 (1.10882 / 1.10939)
2025.05.13 01:00:01   order modified [#2 sell limit 1 EURUSD at 1.10982]

Строка для поискаOshibka 133.

 

Возможно, дело в

Request.type_filling = ORDER_FILLING_IOC;

Для отложек, если не предполагается симуляция рыночных заявок, следовало бы ставить Return.

 
Maxim Kuznetsov #:

обновление стакана - слишком частое событие чтобы на него ставить таймстамп, даже миллисекундный. 

Биржевой реальный стакан точнее биржевая книга ордеров имеет время и таймстамп, нужно просто транслировать целиком книгу ордеров. На первый взгляд это кажется ненужной информаций, но на самом деле она показывает реальный рынок и намерения тех кто являются внутри биржи то есть в зоне co-location.

 
JRandomTrader #:

Возможно, дело в

Для отложек, если не предполагается симуляция рыночных заявок, следовало бы ставить Return.

Дело в экспирации через модификацию.

 
Тема:  Предложение по доработке `MqlTick`: добавить `bid_size` и `ask_size`

Уважаемая команда MetaQuotes,

Предлагаю внести важное и технически обоснованное улучшение в структуру `MqlTick`, а именно — добавить два параметра: `bid_size` и `ask_size`, отражающие объёмы на лучших ценах покупки и продажи.
Текущая проблема:
На данный момент `MqlTick` содержит значения цен `bid`, `ask`, `last`, флаги и объем последней сделки. Однако отсутствует информация о глубине ликвидности на первых уровнях,  даже при наличии данных со стороны брокеров (например, при подключении к реальным биржам через Rithmic, CQG и другие).
       Предложение:
Добавить в структуру `MqlTick` следующие поля:
 struct MqlTick {
   datetime time;       // время тика
   double   bid;        // лучшая цена на покупку
   double   ask;        // лучшая цена на продажу
   double   last;       // последняя цена сделки
   ulong    volume;     // объём последней сделки
   long     time_msc;    // время последнего обновления цен в миллисекундах
   uint     flags;      // флаги типа тика
   double    volume_real  // объем текущей цены Last с повышенной точностью
   double   bid_size;   // НОВОЕ: объём на лучшем bid
   double   ask_size;   // НОВОЕ: объём на лучшем ask
}; 

Также — если возможно — сохранять эти значения в  исторические тики, чтобы можно было анализировать поведение рынка во времени.
 💡 Обоснование:
Добавление этих параметров откроет новые возможности для анализа, в частности:
* отслеживание взаимодействия рыночных и лимитных ордеров;
* определение, сколько объёма снято, а сколько исполнено при смене цены;
* оценка скорости ударов по стакану и плотности ликвидности;
* исключение ложных моделей  "угаданных айсбергов", которые строятся на неполных данных во всем розничном сегменте;
* создание объективной картины агрегированного поведения участников без попыток де-анонимизации.
 📈 Почему это важно:
Внутридневная торговля, особенно скальпинг, невозможна без точного понимания действий участников рынка. Даже если в терминале нет полной глубины стакана, наличие объёмов на `bid` и `ask` уже даёт мощный инструмент оценки давления и поведения цены в моменте.
Это улучшение не ломает совместимость и не требует серьёзных изменений в архитектуре, но делает MT5 гораздо более профессиональным инструментом не только для форекс и CFD, но и для реальной биржевой торговли. МТ5 рассматривается как биржевой терминал в отличие от МТ4.
Заранее благодарю за внимание и надеюсь, что данное предложение будет рассмотрено.

С уважением,
пользователь Ivan Otto.

 
Ivan Otto #:
Тема:  Предложение по доработке `MqlTick`: добавить `bid_size` и `ask_size`

Эти данные имеются в структуре MqlBookInfo, причем более расширенные, чем просто Bid и Ask. А вот хранить историю стакана, видимо, считается слишком большой нагрузкой на сервер. Ее ведь нужно не только хранить, но потом и передавать по запросу. За одни только сутки по одному инструменту накапливается порядка 100Мб.

 
Ihor Herasko #:
Эти данные имеются в структуре MqlBookInfo, причем более расширенные, чем просто Bid и Ask. А вот хранить историю стакана, видимо, считается слишком большой нагрузкой на сервер. Ее ведь нужно не только хранить, но потом и передавать по запросу. За одни только сутки по одному инструменту накапливается порядка 100Мб.

Не всю историю а только Аск и Бид. Сейчас аск и бид сохраняются но без количество.

 

b4885, табличные вкладки в Терминале/Тестере/Визуализаторе, видимо, являются объектом одного и того же GUI-элемента.

Сейчас этот элемент никак не позволяет получить, например, название комментария к ордеру. Приходится его запоминать и руками вбивать. Такая же ситуация с номерами тикетов и другими.

Просьба подумать о добавке в данный общий GUI-элемент возможности копирования/экпортирования данных (и не одной строки, а нескольких).


Доходит до абсурда, что если надо массово получить те же номера тикетов, то проще сделать скриншот таблицы и затем отправить распознавателю текста, чем руками вбивать каждый интересуемый тикет/цену и т.д.

Строка для поиска: Uluchshenie 120.
Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
  • 2025.03.08
  • fxsaber
  • www.mql5.com
В настоящий момент тестер стратегий MetaTrader 5 подвергается глубокой переработки командой MQ...
 

надо что-то делать с масштабированием подвальных индикаторов.

ситуация "в окне должны помещаться все значения (видимые линии не обрезаться границами экрана), но при этом уровни указанные в LEVELS также должны быть видны"

она программно, со стороны индикаторов реализуется ужасно и будет жрать процессор. Со стороны терминала это сильно-сильно проще и эффективнее. 

Сейчас это цирк с конями