Обсуждение статьи "Как получить синхронизированные массивы для использования в алгоритмах портфельной торговли"

 

Опубликована статья Как получить синхронизированные массивы для использования в алгоритмах портфельной торговли:

Описан практический подход к синхронизации баров между инструментами портфеля в MQL5. Предложены классы для загрузки, хранения и выравнивания OHLCV с опциями: пустой бар или перенос значений предыдущего бара, выбор символа синхронизации и обработка асинхронных новых баров. Показаны примеры использования в индикаторах мультиграфиков и корзины. Читатель получает готовый API для стабильных портфельных расчетов.

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

  • nорговля спредом: спот — фьючерс на этот спот;
  • анализ корреляций инструментов;
  • различные хэджирующие стратегии торговли;
  • анализ взаимного движения инструментов (например, так называемая "сила" валют).

Все перечисленные выше варианты портфельной торговли и/или портфельного анализа требуют, чтобы обрабатываемые данные (бары) инструментов были синхронизированы между собой по времени. Иначе результат может сильно отличаться от реального и от задуманного в математическом алгоритме обработки данных. Это особенно актуально на бирже, где встречается большое количество малоликвидных инструментов с многочисленными отсутствующими барами.

Автор: Dmitriy Skub

 
Ещё не дочитал до конца, но уже вопрос по поводу использования ассоциативных массивов. Поскольку все ряды изначально отсортированы, то не проще ли (эффективнее) делать слияние за один проход с продвижением интераторов внутри каждого из массивов? Для доступа на чтение - индекс - история не меняется - должно работать быстрее ассоциативного.
 

Обращение по начальной и конечной датам требуемого интервала времени

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   datetime         stop_time,         // по какую дату
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   );

MQ не стали делать вариант этой перегрузки, когда всегда в сутках 1440 M1-баров.

При таком функционале, вроде, ничего больше придумывать не нужно.