Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 142

 
Aleksey Vyazmikin:

Тогда как переходить по настройкам день/месяц/год? Нет, сейчас самый удачный вариант реализации.

Точно так же, как и сейчас. Внимательно читайте что я написал. 
Ааа, понял. Ну тогда с шифтом как я предложил.
 
Artyom Trishkin:
Ну тогда с шифтом

С шифтом вверх/вниз воспринимать, как другое правило - хорошая идея. Но разработчики не услышат - не тот уровень проблемы.

 
pavlick_:

Ну вообще это спорно, скорее всего, это какая-то MSVC специфичная штука. Но вот так точно должно работать:

но не работает.

У вас там #define M(a) пустой :)   Но не суть, в MQL всё-равно это не работает.  Так же как и мой вариант. Только не знаю, почему вы решили, что это специфичная штука. В gcc  это не компилируется?

 

После последнего обновления, билд 1980 от 1 февраля:

Одиночное тестирование запускается через раз, приходится перезапускать МетаТрейдер.

"2019.02.05 08:56:42.453 Core 1 disconnected"

(Винда 7, 64 бита)
 
Alexey Navoykov:

У вас там #define M(a) пустой :)   Но не суть, в MQL всё-равно это не работает.  Так же как и мой вариант. Только не знаю, почему вы решили, что это специфичная штука. В gcc  это не компилируется?

Среди clang, gcc и msvc такое можно только в последнем.
 

Баг в Метаэдиторе.  Если название поля или метода класса совпадает с названием какой-либо штатной MQL-функции, то происходит задержка ввода текста при попытке обратиться к внутренностям данного объекта.

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

class CSymbol
{
 public:
  long ContractSize() { return 0; }
};

class A
{
  CSymbol _symbol;
 public:
  CSymbol* Symbol() { return &_symbol; }
};

class B : public A
{
 public:
  B() { Print(Symbol(). // Здесь происходят задержки при вводе
};
 
В Тестере не работает корректно CopyTicksRange - зависает. Код для воспроизведения
input int EveryHours = 24;    // Через столько часов запрашиваем тики
input int IntervalHours = 72; // Запрашиваем тики такого количества последних рабочих часов

const bool Init = EventSetTimer(EveryHours * 3600); // Установили таймер

// Возвращает время равное Offset-торговым секундам назад.
datetime GetTime( const datetime Offset )
{
  static const ENUM_TIMEFRAMES Periods[] = {PERIOD_CURRENT, PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1};
  
  datetime Res = 0;
  
  for (int i = 0; !Res && (i < ArraySize(Periods)); i++)
    Res = iTime(_Symbol, Periods[i], (int)Offset / PeriodSeconds(Periods[i]));
    
  return(Res);
}

template <typename T>
T MyPrint( const T Value, const string Str, const bool DebugFlag = false )
{
  Print(Str + " = " + (string)Value);

  return(Value);
}

// Удобный вывод в лог
#define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + (string)__LINE__ + ": " + #A)

void OnTimer()
{  
  const datetime BeginTime = GetTime(IntervalHours * 3600); // От этого времени запрашиваем тики
  const datetime EndTime = TimeCurrent();                   // До этого времени запрашиваем тики
  MqlTick Ticks[];
  
  _P(BeginTime);
  _P(EndTime);
  
  // Запрос тиков с даты по дату.
  _P(::CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, (ulong)BeginTime * 1000, (ulong)EndTime * 1000));  
}


Запускать по реальным тикам за январь 2019 EURUSD M1 MQ-Demo.

Просьба исправить.

 

В 1980 билде появился баг со статическими переменными.  Следующий код приводит к переполнению стека, хотя никакой рекурсии тут нет.

struct A
{
  char _a;
  A() { static A a; }
};

void OnStart()
{
  A a;
}
 
И такие случаи бывают

Forum on trading, automated trading systems and testing trading strategies

Why Doesn't MT5 synchronize imported tick data?

landmeister, 2019.02.05 17:30

What if you try to do it with my data series? If you can do it normally that would mean I am doing something wrong. This is my tick data file for XAUUSD from 2003 to 2019.

https://mega.nz/#!x0pyyKgZ!-C5mGNhOFDHjdRJ_DNnU4YZbO4K5lcz2WIb5Hylaj0M

Could you please confirm you can see the whole period in bars?

По одному символу 300 миллионов тиков в виде CSV. Они успешно импортируются в MT5 - 1.6Gb занимают в *.tkc.

Человек сетует, что не видит баров из этих тиков. Наверное, логично при импорте тиков иметь галочку "генерировать бары".


В своих скриптах работал с десятками миллионов тиков (памяти хватает все разом загрузить), но не с сотнями. 60 байт * 300 * 10^6 = 18Gb. А еще раздать каждому Агенту...

И это только один символ из многих... весело у некоторых.

 

Приятно удивила работа ArrayRemove для статических массивов.

ArrayRemove возвращает int, но это не равно количеству удаленных элементов. Баг?

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