Новая версия платформы MetaTrader 5 build 1595: доступ к ценовой истории - страница 12

 
Renat Fatkhullin:

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

Если без багов, то очень хорошо! Правда, почему потребление памяти выросло на 70%? И, вообще, почему такое огромное количество памяти уходит на прогон 29 Мб тиков?

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

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

Ошибки, баги, вопросы

fxsaber, 2017.04.20 09:11

если в терминале и так есть история, то почему к ней обязываете обращаться через HistorySelect, а не по принципу MT4 - SELECT_BY_POS? И что совсем непонятно, зачем HistoryDealGet* реализован через тикет с соответствующей O(N), когда логично опять же через SELECT_BY_POS?


Очень интересные записи

HistoryDealGetInteger(DealTicket, DEAL_TICKET);
HistoryOrderGetInteger(OrderTicket, ORDER_TICKET);

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

Ошибки, баги, вопросы

fxsaber, 2017.04.19 22:15

HistoryDealGet* и HistoryOrderGet*-функции написаны очень странно, с точки зрения производительности.

Когда делаю HistorySelect, например, на 100К отдельных записей. То HistoryDealGet-функция требует первым аргументом не номер записи в исторической таблице, а тикет. При этом таблица отсортирована по времени, а не по тикету. Поэтому при выполнении, первое, что делает HistoryDealGet-функция, это бежит каждый раз по таблице и ищет подходящий Ticket.


Зачем столь нерациональное расходование ресурсов?! Получается, что самый первый тикет и самый последний будут выполняться с разными скоростями. И чтобы получить все характеристики последней сделки, HistoryDealGet-функции будут каждый раз пробегать всю таблицу.


Почему не сделать нормально?

long HistoryDealGetInteger( const int index, const ENUM_ORDER_PROPERTY_INTEGER  property_id ); // номер сделки, а не тикет


И как HFT-робота тестировать, если для того, чтобы узнать размер комиссии текущей позиции, нужно лезть каждый раз в тормозную историю через HistorySelect и ни в коем случае не через HistorySelectByPosition? Посмотреть проскальзывание отложенного ордера превращается в треш производительности!

 

Экспорт истории работает, а импорта нету. Уже много лет обещают и никак сделать не могут.  Мне кажется это из-за неправильного подхода хранения исторических данных. Когда-то я пытался расшифровать файлы истории MT5 и оказалось в них целый атомный ледокол "Ленин", - то есть навороченные типа "горе от ума". Нечто похожее я видел в НиньдзяТрейдер (содрали с них, что ли). Фактически в МТ5 все что нужно было сделать, это взять те же файлы hst как в MT4 и добавить OHLC - Ask, без всякой записи какого-то среднего спреда, что неправильно как это сделано в МТ5. Это было бы просто и оптимально. И работать было бы с историей легко.

Если на написание скрипта для импорта в hst для MT4 нужно потратить 2-3 часа, а с интерфейсом в виде дополнения 2-3 дня, ну неделю от силы. То для МТ5 разработчикам видимо понадобится 2-3 года. Уже более года наверное прошло, как было заявлено.

 
ANG3110:

Экспорт истории работает, а импорта нету. Уже много лет отбещают и никак сделать не могут.  Мне кажется это из-за неправильного подхода хранения исторических данных. Когда-то я пытался расшифровать файлы истории MT5 и оказалось в них целый атомный ледокол "Ленин", - то есть навороченные типа "горе от ума". Нечто похожее я видел в НиньдзяТрейдер (содрали с них, что ли). Фактически в МТ5 все что нужно было сделать, это взять те же файлы hst как в MT4 и добавить OHLC - Ask, без всякой записи какого-то среднего спреда, что неправильно как это сделано в МТ5. Это было бы просто и оптимально. И работать было бы с историей легко.

Вы все в свое костылестроение смотрите. Тем более, что вы своими импортами пытаетесь решать проблемы, которые давно уже штатно решены в МТ5.

А мир изменился и ему нужно другое - пользоваться и не задумываться. Именно так МТ5 и работает: все данные и тики доступны автоматически.

Мир - это не 100 трейдеров, которым нравится играть в импорт и собственную разработку инфраструктуры. Трейдеры совсем в другом месте находятся и им совсем другого уровня сервис нужен.

 
Renat Fatkhullin:

Вы все в свое костылестроение смотрите. Тем более, что вы своими импортами пытаетесь решать проблемы, которые давно уже штатно решены в МТ5.

А мир изменился и ему нужно другое - пользоваться и не задумываться. Именно так МТ5 и работает: все данные и тики доступны автоматически.

Мир - это не 100 трейдеров, которым нравится играть в импорт и собственную разработку инфраструктуры. Трейдеры совсем в другом месте находятся и им совсем другого уровня сервис нужен.

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

1596 мт5

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

В логах ничего. 


 
Vladislav Andruschenko:

1596 мт5

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

В логах ничего. 



А в свойствах индикаторов, случайно, не отключили все таймфреймы:

Все таймфреймы отключены

?


 
Vladimir Karputov:


А в свойствах индикаторов, случайно, не отключили все таймфреймы:

?




Извините, индикатор не мой. открыл код - там перерасчет Массивов МА.

из-за этого на всей истории он "вешает" терминал. поставил - обрабатывать макс 100 баров - все работает

 

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

Простые структуры

Структуры, которые не содержат строки, объекты класса и объекты динамических массивов, называются простыми структурами; переменные таких структур могут свободно копироваться друг в друга, даже если это разные структуры.

За долгие годы было написано много кода по этим правилам.  А теперь в сервис-деске вдруг заявляют, мол теперь копирование структур запрещено, а справку забыли поправить. Вот так просто.  Причём даже никаких анонсов этого нововведения я не видел.  Ну как так можно, господа?  Почему вы так несерьёзно и наплевательски относитесь к пользователям?    Сами не пробовали поставить себя на их место?  Годами отлаживаешь коды, потом вдруг правила меняются на ходу - и всё по новой.  Бесконечный процесс переписывания кода.  Сейчас вот юнионы подсовывают, завтра опять поменяют правила...  Зачем нужен такой язык?

Я понимаю раньше, когда язык был просто дополнительной фичей для МТ, то такое наплевательское отношение ещё можно было понять.   Но сейчас когда на базе языка уже выстроена куча сервисов...

 
Alexey Navoykov:

Недавно обновился на новый билд и обнаружил, что перестало работать копирование простых структур друг в друга.

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

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2017.04.27 13:38

Там произвольный кастинг через union - любые простые структуры без кастомных конструкторов и операторов копирования. Для всех статей на этом ресурсе этот кастинг будет работать.

template <typename T>
class CASTING
{
public:
  template <typename T1>
  static const T Casting( const T1 &Value )
  {
    union CAST
    {
      T1 Value1;
      const T Value2;

      CAST( const T1 &Value)
      {
        this.Value1 = Value; // кастомный оператор может все испортить
      }
    };

    const CAST Union(Value);

    return(Union.Value2);
  }
};

#define _C(A, B) CASTING<A>::Casting(B)

void OnStart()
{
  MqlTick Tick = {0};
  
  Tick = _C(MqlTick, Tick); // Tick = (MqlTick)Tick;
}
Более тонкое изменение, это то, что теперь указатель на объект класса считается компилятором также объектом. Например, если указатель является полем структуры, то она перестает быть простой.
 
fxsaber:
Более тонкое изменение, это то, что теперь указатель на объект класса считается компилятором также объектом. Например, если указатель является полем структуры, то она перестает быть простой.

Так это всегда так было.

Но вообще я речь вёл не о том, как придумать очередной костыль к MQL, а о том, что может пора бы уже разработчикам начать серьёзней относится и к своему продукту, и к пользователям. Тем более если эти пользователи на базе этого языка создают продукты в Маркете, принося потом доход компании.   По факту MQL - вечно сырой продукт.  Сегодня программа на нём работает, а через месяц уже нет.  Куда такое годится.