Новая версия платформы MetaTrader 5 build 3280: Улучшения и исправления по отзывам трейдеров - страница 2

 

Могу ли я предложить улучшение ... Он заключается в следующем: Выполнив следующий код сценария

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart() 
{ 
  
        ENUM_TIMEFRAMES time = PERIOD_D1;
        string szSymbol = "EURUSD";
        long id = ChartOpen(szSymbol, time);
        ChartRedraw(id);

        ChartIndicatorAdd(id, 0, iCustom(szSymbol, time, "Media Movel.ex5"));
}

в любом окне, у нас откроется новое окно с символом EURUSD, и мы сможем добавить пользовательский индикатор во вновь созданное окно ..... PERFECT... Однако если мы превратим этот же скрипт в сервис, как показано ниже:

#property service
//+------------------------------------------------------------------+
void OnStart()
{
        ENUM_TIMEFRAMES time = PERIOD_D1;
        string szSymbol = "EURUSD";
        long id = ChartOpen(szSymbol, time);
        ChartRedraw(id);

        ChartIndicatorAdd(id, 0, iCustom(szSymbol, time, "Media Movel.ex5"));
}

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

Было бы ОЧЕНЬ ХОРОШО, если бы сервис мог добавить индикатор, так как мы можем использовать сервисы для выполнения дополнительной работы, не перегружая советника, например, но даже если это невозможно сделать, есть предложение, кто знает, разрешить сервису запускать скрипт, в любом случае это бы очень помогло...

И если не слишком злоупотреблять... было бы также здорово, если бы в языке MQL5 была функция EXIT() чтобы обеспечить быстрый способ выхода из рекурсивного кода, когда он генерирует сбой, но не вместо резкого выхода, мы можем обработать ошибку и полностью завершить выполнение программы через вызов EXIT()... точно так же, как это происходит, когда мы вызываем ExpertRemove() для завершения работы эксперта ... в любом случае, спасибо за внимание... 😁👍

 

Я несколько раз устанавливал MT5 для режима /portbale. Три из них в настоящее время работают параллельно, два находятся в канале релиза по мере торговли, а один - в канале бета-тестирования.

К сожалению, в окне с вопросом о том, обновить сейчас или позже для нового обновления, не указано, какая версия может быть обновлена: Релиз или бета-версия:


Было бы неплохо, если бы в этом окне просто говорилось:" Загруженообновление версии (или бета-версии). Своевременное ... "

Таким образом, пользователь будет знать, хочет ли он обновлять информацию в течение недели (FX открыт) или, что еще лучше, только в выходные дни.

Возможно, можно также различать обновления релиза и бета-версии по цвету. Это может помочь избежать ошибок.

 
MetaQuotes:

В пятницу 29 апреля 2022 года будет выпущена обновленная версия платформы MetaTrader 5. В ней мы внесли ряд небольших дополнений и исправлений по отзывам, полученным после публикации версии 3270.

Обновление содержит следующие изменения:

  1. Terminal: Исправлено заполнение стандартных уровней Trailing Stop в контекстном меню открытых ордеров и позиций.
  2. Terminal: Обновлены переводы пользовательского интерфейса.
  3. Исправления по крешлогам.

Обновление будет доступно через систему Live Update.

Раз уж пошли такие "маленькие" по составу исправления, прошу вас в следующий релиз включить исправление такого бага: удаление информации об объеме тиков при копировании тиков из Time$Sale исходного символа в кастомарный с использованием стандартного функционала платформы МТ5.

Это небольшой, но очень досадный баг для тех кто  работает с биржевыми инструментами, так как данный баг приводит к тому что на пользовательских "continous" фьючерсах, построенных в МТ5, невозможно применять индикаторы, работающие с биржевой тиковой историей!

Continous NQ

 
Данное предупреждение компилятора не является лишним?
void OnStart()
{
  Print(DEAL_REASON_TP == ORDER_REASON_TP); // implicit conversion from 'enum ENUM_ORDER_REASON' to 'enum ENUM_DEAL_REASON'
}
 

Ошибка компилятора с преобразованием enum-ов.

ENUM_DEAL_REASON Reason() { return(DEAL_REASON_CLIENT); }

void OnStart()
{
  ENUM_ORDER_REASON Reason1 = Reason();                    // 'Reason' - cannot convert enum
  ENUM_ORDER_REASON Reason2 = (ENUM_ORDER_REASON)Reason(); // OK
}

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

 
fxsaber #:

Ошибка компилятора с преобразованием enum-ов.

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

Ошибок вроде нет. Каждый enum - это собственный тип. Один к другому можно привести только явным приведением. На неявное компилятор ругается.

 
Stanislav Korotky #:

Ошибок вроде нет. Каждый enum - это собственный тип. Один к другому можно привести только явным приведением. На неявное компилятор ругается.

Error вместо Warning.

'Reason' - cannot convert enum
1 errors, 0 warnings            
 
fxsaber #:

Error вместо Warning.

Ну и что?

 
Stanislav Korotky #:

Ну и что?

Ну давайте тогда такой код не компилировать.

void OnStart()
{
  double d = 0;
  int i = d;
}
 
fxsaber #:

Error вместо Warning.

Согласно Документации: enum относятся к некоторому ограниченному множеству данных. В этом смысле сравнение и присваивание принципиально не отличаются: в обоих случаях должен быть или Warning или Error. А то что сравнивать можно, а присваивать нельзя - это нонсенс

Причина обращения: