В бизнесе для оценки эффективности используется показатель рентабельности. В трейдинге тоже можно оценить эффективность торговли разными фьючерсами примерно аналогичным способом и выбрать более эффективный для торговли. Такой подход может быть одним из возможных критериев выбора рабочих фьючерсов и не исключает иные критерии, такие как ликвидность, «понятность» для трейдера и проч.
В нашем случае поток денежных ресурсов, обеспечивающих формирование прибыли – это гарантийное обеспечение (ГО), возможные просадки учитывать не будем.
Со значением прибыли – гораздо сложнее и неопределеннее. Кроме того, у фьючерсов разные волатильность, ГО, шаг цены и стоимость шага цены. А следовательно, к примеру, тейки в 10 пунктов цены на нефти и Сбере – это как минимум разные суммы прибыли, поэтому сравнивать по пунктам цены разные фьючерсы бессмысленно. Необходимо привести показатели прибыли разных фьючерсов в сопоставимый вид или сравнить их другим способом.
Дальнейшие рассуждения и расчеты сделаны для торговли внутри дня одной сделкой, использованы данные дневных интервалов, волатильность усреднена за 10 дней, выбраны только те фьючерсы, которыми я торгую. Волатильность или торговый диапазон (ТД) расчитывается: ТД = High — Low.
Сижу как-то раз за рюмкой чая (это было за год, два или три до моего прихода на Smart-Lab} и приходит мне в голову мысль — а почему бы не попробовать прогнозировать котировки.
Прогноз, естественно, на ТФ 1м, который я использую. Время прогноза пусть будет — 5 минут — вполне достаточное для моих сделок, а недостаточно, так прогноз можно и повторить на следующие 5 минут. Архивы котировок по фьючерсам SBRF и GAZR тоже имеются, минимум за год-два за последние 3 месяца перед экспирацией — хватит и на отладку и на проверку.
Все есть, только как реализовать прогнозирование? — ни одной мысли.
Собственно, не особо мне это было и нужно, рабочая система у меня уже была и меня она вполне устраивала, но мысль о прогнозировании засела, и я время от времени ее думал.
Ничего сколь-нибудь конструктивного в голову не приходило, и было решено для прогнозирования использовать нейросеть, тем более, незадолго до того я немного занимался машинным обучением и нейросетями в том числе.
От использования каких-либо предикторов сразу отказался. Плюс 2-3 слоя к нейросети, и если в данных есть какие-либо взаимосвязи, НС сама внутри себя построит нужные ей предикторы. В общем, подаем на НС поток цен 15-20 отсчетов Vc={C(t0-20),C(t0-19),...C(t0)}, нормируем их к динам диапазону НС — Vcn={c(t0-20),c(t0-19,… c(t0-1), 0} — c(t0) у нас всегда = 0, и пусть НС сама мучается с прогнозированием и поиском c(t0+5). И еще, у всякого метода есть область применимости, потому нельзя учить чему попало. Для этого из обучающей и проверочных последовательностей по возможности исключаем области истории, где прогнозирование невозможно. Иначе получим нечто такое.
Пишу запросы на MOEX ISS, а там исторические данные(с прошедшей экспирацией) можно получить только с короткими названиями тикеров фьючерсов и опционов. Может кто-то уже писал код, чтобы вытащить дату экспирации из короткого названия тикера? Поделитесь пожалуйста.
Это один из запросов на MOEX:
<code>import requests import apimoex import pandas as pd # request_url = ('http://iss.moex.com/iss/history/engines/futures/markets/options/securities.json?date=2021-12-01&assetcode=RIZ1') request_url = ('http://iss.moex.com/iss/history/engines/futures/markets/options/securities.json?date=2021-12-01&assetcode=RTS') arguments = {'securities.columns': (["BOARDID, TRADEDATE, SECID, OPEN, LOW, HIGH, CLOSE, OPENPOSITIONVALUE, VALUE, VOLUME, OPENPOSITION, SETTLEPRICE"])} with requests.Session() as session: iss = apimoex.ISSClient(session, request_url, arguments) data = iss.get() df = pd.DataFrame(data['history']) df.set_index('SECID', inplace=True) print(df.to_string(max_rows=10, max_cols=15), '\n') df.info()</code>
В прошлых 2-х темах мы затронули проблемы, связанные с нерыночными рисками… Например, — разрывы связи, вылеты сервера, перезагрузка операционки, а также внезапные остановки торгов по неизвестным причинам. Желающие могут ознакомится с выводами в соответствующих темах, которые легко найти по тэгу «торговые роботы». Причем некоторые коллеги были настолько любезны, что смогли обобщить обсуждения и сформулировать изящные резюме.
Ныне я предлагаю обсудить решение, связанное с приостановкой торгов по одному или нескольким инструментам.
Вечером 30 августа 2022 года Газпром объявил о новой рекордной выплате дивидендов. В результате, утром 31 августа, на торгах акциями Газпрома было минимум 10 приостановок торгов. Сначала был гэп на открытии, затем неоднократные приостановки торгов.
Что делать в таких случаях?
Если у нас случилась приостановка торгов на время, то как это понять на уровне алгоритма?
Вероятно, можно ввести простое условие об отсутствии тиков по каким-либо инструментам одновременно, которое будет означать приостановку торгов. И, наоборот, наличие тиков по каким-нибудь другим инструментам из этой же или из другой секции мосбиржи. Тогда, для этого, нужно задавать несколько дополнительных и несвязанных инструментов, по наличию тиков на которых мы будем делать вывод о том, что «это просто приостановка торгов по заданным инструментам». Тогда, если найдется хотя бы один такой проверочный инструмент, по которому продолжают поступать тики, то мы, таким образом, поймем, что у нас есть ситуация простой «приостановки торгов», а не чего-то худшего.
Вместо этого можно было бы сделать систему анализа сообщений, поступающих с биржи или от брокера, но это, вероятно, было бы намного сложнее в реализации.
Мнения? Критика? Предложения?