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

 
b4885, неправильное сообщение об ошибке компилятора "function not defined".
class A
{  
public:
  const MqlTick Tick;
  
  A( const MqlTick &iTick ) : Tick(iTick) {} // function not defined
};

Заодно и невозможность инициализировать в классе поле из штатной структуры.

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

 
fxsaber #:
b4885, неправильное сообщение об ошибке компилятора "function not defined".

Заодно и невозможность инициализировать в классе поле из штатной структуры.

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

Нет копи-конструктора во встроенной структуре - именно эта function not defined, так что сообщение подходит, хотя могло бы содержать упоминание конкретного метода.

Вот так работает через обертку:

struct MyMqlTick: MqlTick
{
  MyMqlTick(const MyMqlTick &other)
  {
    this = other;
  }
};

class A
{  
public:
  const MyMqlTick MyTick;
  
  A(const MyMqlTick &iTick) : MyTick(iTick) {}
};
 
Stanislav Korotky #:

Нет копи-конструктора во встроенной структуре - именно эта function not defined, так что сообщение подходит, хотя могло бы содержать упоминание конкретного метода.

Вот так работает через обертку:

Спасибо, обход, конечно, простой. Но само сообщение, мягко говоря, кривое.

 

Баг в функции CopyTicksRange в тестере.

Беру пример индикатора TestCopyTicksRange.mq5 вот отсюда, так сказать из MQ-шного первоисточника.

Меняю в нем один символ, чтобы запрос тиков делался не для последних 7 баров, а с отступом на 10 баров назад:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(TimeCurrent()<ExtNextBar)
      return(rates_total);
//---
   ExtNextBar=NextBarTime(TimeCurrent(),_Period);
   int copied=CopyTime(_Symbol,_Period,10,7,ExtTimes);
   if(copied>1)
     {
      ulong from_msc=ExtTimes[0]*1000;
      ulong to_msc=ExtTimes[copied-1]*1000;
      int   ticks_trade=CopyTicksRange(_Symbol,ExtTicksTrade,COPY_TICKS_TRADE,from_msc,to_msc);
      int   ticks_info=CopyTicksRange(_Symbol,ExtTicksInfo,COPY_TICKS_INFO,from_msc,to_msc);
      int   ticks_all=CopyTicksRange(_Symbol,ExtTicksAll,COPY_TICKS_ALL,from_msc,to_msc);
      PrintFormat("%s - %s  ticks_trade=%d  ticks_info=%d  ticks_all=%d",TimeToString(ExtTimes[0]),TimeToString(ExtTimes[copied-1]),ticks_trade,ticks_info,ticks_all);
     }
   else
      PrintFormat("copied=%d  last_error=%d",copied,GetLastError());
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }

В результате функция CopyTicksRange тики не возвращает, никакой признак ошибки не взводится (это я уже проверял в другом индикаторе, из книги, который тоже в тестере теперь не работает). В логе видим такое:

2025.05.24 20:40:48.697 XAUUSD.c,H1: testing of Indicators\MQL5Book\p5\TestCopyTicksRange.ex5 from 2025.05.01 00:00 to 2025.05.24 00:00 started
2025.05.24 20:40:48.876 XAUUSD.c : real ticks begin from 2023.01.02 00:00:00
2025.05.24 20:40:56.488 2025.05.01 01:10:00   2025.04.30 08:00 - 2025.04.30 14:00  ticks_trade=0  ticks_info=0  ticks_all=0
2025.05.24 20:41:04.359 2025.05.01 02:00:00   2025.04.30 09:00 - 2025.04.30 15:00  ticks_trade=0  ticks_info=0  ticks_all=0
2025.05.24 20:41:19.046 2025.05.01 03:00:00   2025.04.30 10:00 - 2025.04.30 16:00  ticks_trade=0  ticks_info=0  ticks_all=0
2025.05.24 20:41:26.567 2025.05.01 04:00:00   2025.04.30 11:00 - 2025.04.30 17:00  ticks_trade=0  ticks_info=0  ticks_all=0
Ошибки, баги, вопросы - Проверка на размер массива помогла.
Ошибки, баги, вопросы - Проверка на размер массива помогла.
  • 2019.02.19
  • Aleksey Vyazmikin
  • www.mql5.com
Причину пока не понимаю - вероятно массив с координатой. Проверка на размер массива помогла - строим линию только при больше чем одной точки. что полный код для воспроизведения не предоставляют те. Правда OnDeinit с контрольным запросом не отработал
 
Хорошо бы добавить в язык MQL надежный парсер JSON. В основном надо разбирать строки, а не создавать. Поэтому хотя бы deserialize.
Имеющаяся библиотека JASON не все варианты правильно парсит. В моем случае происходит подмена данных.
Детали тут
https://www.mql5.com/ru/forum/63015/page12#comment_56778042
Библиотеки: JSON Serialization and Deserialization (native MQL)
Библиотеки: JSON Serialization and Deserialization (native MQL)
  • 2022.07.10
  • Ruslan Piraliyev
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: JSON Serialization and Deserialization (native MQL)
 
Forester #:
Хорошо бы добавить в язык MQL надежный парсер JSON. В основном надо разбирать строки, а не создавать. Поэтому хотя бы deserialize.
Имеющаяся библиотека JASON не все варианты правильно парсит. В моем случае происходит подмена данных.
Детали тут
https://www.mql5.com/ru/forum/63015/page12#comment_56778042

В MQL5 и так уже натянули много всякого. Если каждый формат (другим людям ведь потребуется не только JSON, но и куча других стандартов) поддерживать в MQL5, то зачем тогда MQL5 сделан языком столь высокого уровня?

ИМХО, посмотрите другие библиотеки работы с JSON или пофиксите баг в текущей используемой.

 

Опечатка в документации - лишнее слово

https://www.mql5.com/ru/docs/series/timeseries_access

Мы не можем прямо обратиться к серверу, но любая Copy-функция при нехватке истории в формате HCC терминал автоматически инициирует посылку такого запроса от терминала к торговому серверу.

Для сравнения:

https://www.mql5.com/en/docs/series/timeseries_access

We can't refer to a server directly, but any Copy-function automatically initiates request sending to a server, if the history in HCC format is not enough.

 
b4885, ALT+G-переход не работает в ME, если используется массив.
struct A { int Temp; };

struct B { A a; };

void OnStart()
{
  B Arr[1];
  B Var;
  
  Arr[0].a.Temp = 1; // ALT+G на Temp НЕ работает.
  Var.a.Temp = 1;    // ALT+G на Temp работает.
}
Строка для поиска: Uluchshenie 121.
 

господа-разработчики, а не могли бы вы для: ПКМ по графику/Properties/ глака "show ohlc"  - добавить дневную волатильность инструмента? (как на рисунке) Нужно в %, в пунктах можно и не делать. Для коррелируюихся инструментов это важно. Можно, конечно, прожать Ctrl+M и там смотреть, но эт неудобно - пока в куче найдёшь нужное... а так - переключился на соседнюю вкладку, сравнил и порядок! Или сделать по умолчанию, чтобы отражалась инфо, как на картинке. 

  фунт, волатильность