Полуфабрикат (полу- + лат. fabricatus, изготовленный) — изделие, которое подверглось первичной обработке, но нуждается в дальнейшей окончательной обработке, чтобы стать пригодным для использования. (https://ru.wikipedia.org)

Hidden text

Первоначальные данные: имеем биржевой терминал QUIK от Сбербанк Брокер. Типовой документированный штатный функционал QUIK позволяет через ODBC выгрузить информацию по текущим торгам и сделкам и загрузить из внешнего текстового файла задания на покупку и продажу.

Цель: спрогнозировать на основании имеющихся исторических данных цену закрытия завтрашнего дня.

Варианты решений:

  • Вариант 1: Обучение системы на основании применения встроенных в 1С анализа и прогнозирования: Дерево решений, кластеризация.

  • Вариант 2: Обучение системы на основании анализа срабатывания сигналов типовых индикаторов технического анализа.

  • Вариант 3: Обучение системы на основании анализа взаимных зависимостей между движениями технических индикаторов.

Вариант 1. Обучение системы на основании применения встроенных в 1С анализа и прогнозирования: Дерево решений, кластеризация.

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

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

  • Порог признания прогноза(%). Это значение при котором имеющаяся система прогнозирования признается допустимой к применению для данного инструмента.

  • Количество дней для анализа. Это количество дней назад в прошлое от текущего дня, для которых будет строиться прогноз.

  • Количество дней актуальности классификации прогнозов. Это значение в течении котрого сделанный на основании прошлый данных анализ будет считаться все еще действительным к применению. По прошествии данного количества дней нам потребуется перепроверить актуальность каждого из методов прогнозирования для каждого инструмента.

  • Для методов кластеризации и дерева решений 1С прогноз может быть диапазоном значений или конкретным значением. Про диапазон значений решение приходит само. Если прогнозная величина попала в диапазон, то прогнозирование отработало. А для случаев, когда система спрогнозировала не диапазон, а конкретное значение воспользуемся возможностью задания точности (погрешности прогноза).

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

Вариант 2: Обучение системы на основании анализа срабатывания сигналов типовых индикаторов технического анализа.

Имеем 18 встроенных в систему торговых стратегий. Значение технических индикаторов получаются путем передачи из 1С в Python информации по ценам и получении обратно рассчитанных технических индикаторов. Используются библиотеки Python "ta" и "ta_lib". В сумме это более 120 технических индикаторов, хотя, конечно, некоторые повторяются. На основании в основном трендовых индикаторов сформированы торговые стратегии.

На примере торговой стратегии по индикатору библиотеки ta MACD в простейшем случае сигналом на покупку будет: ta_MACD_macd_diff больше 0 и растет.

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

Так как у нас есть история сигналов, то мы можем получить отдельную таблицу срабатывания данных сигналов на исторических данных. (сработал сигнал или не сработал)

Соответственно мы можем получить таблицу вероятности срабатывания каждой стратегии технического анализа в прошлом. (абсолютные и относительные значения количеств случаев)

И получив советы текущего дня по данным торговым стратегиям, сразу оценить вероятность их срабатывания на основании исторических вероятностей. Т.е. при поступлении сигнала мы будем смотреть не только на его наличие, но и на его вероятность (достоверность) в прошлом. Так и назовем колонки "Покупать достоверно" и "Продавать достоверно". При этом эти значения по каждому инструменту можно просуммировать, т.е. найти как бы сумму советов умноженных на вероятность. Или взять среднее значение "Достоверных советов". Получится как бы голосование торговых стратегий. Например поступило всего 10 сигналов на покупку от разных стратегий. У каждого из них вероятность колебалась от 0.4 до 0.6 (40-60%). Средняя вероятность например получилась 0,59 (59%). Следовательно поступившие сегодня сигналы на покупку с вероятностью 59 % сработают.

По поступившим советам можно получить расшифровку какие именно сигналы сработали и какова их вероятность.

И расшифровать каждый из советов графически нажатием 1 кнопки.

3: Обучение системы на основании анализа взаимных зависимостей между движениями технических индикаторов.

После проверки варианта 2 возникает закономерное желание не настраивать отдельные стратегии на основании сигналов технических индикаторов. Хочется просто подать на вход какого-либо механизма все имеющиеся технические индикаторы и их составляющие и посмотреть на зависимости от цены закрытия завтрашнего дня при известном изменении индикатора сегодня.

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

Будем рассматривать случаи

  • Индикатор сегодня по отношению ко вчера растет, цена закрытия завтра растет

  • Индикатор сегодня по отношению ко вчера падает, цена закрытия завтра растет

  • Индикатор сегодня по отношению ко вчера растет, цена закрытия завтра падает

  • Индикатор сегодня по отношению ко вчера падает, цена закрытия завтра падает

Посчитаем количество случаев в прошлом.

Соответственно зная абсолютные значения количества случаев, можно получить относительные величины. (вероятность срабатывания, корреляцию)

По аналогии с вариантом прогнозирования 2 мы можем либо сложить наши полученные значения вероятностей и отбирать их по превышению какого-либо порогового значения, либо найти среднее среди прогнозных значений вероятностей, либо как-то предварительно отфильтровать и взять только те вероятности которые, как-то отличаются от 50 % (от простого бросания монетки), а потом уже их анализировать.

Послесловие:

Буду признателен за дополнительные идеи о том как можно спрогнозировать завтрашнюю цену закрытия на рынке. Желательно, не прибегая к методологии машинного обучения Python. (изучение и работы в это направлении продолжаются...)

Комментарии (0)