Ох уж эти COTы. Т.к. я торгую в большей части нефть, то и COTы будем гонять по ней))
И так, берём данные COT по WTI (не legacy, а полный формат с расшифровкой по всем группам).
данные с начала 2007 до конца 2015 будем использовать на обучение (LEARN)
данные с начала 2016 до настоящего времени для контроля (TEST)
возьмём нейронку (RNN) и заставим её подумать, а именно найти связь между изменением отчётов COT во времени и будущим движением цены, на входе у неё только данные по COT (плюс цена закрытия) и направление движения рынка на 7 торговых дней вперёд (для обучения), будем регистрировать изменения цен закрытия только выше 5%.
функции определения движения:
Up = (Close == Min(Close, PREDICTION_PEROID)) && (Max(Close, PREDICTION_PEROID) — Close > 5%)
Down = (Close == Max(Close, PREDICTION_PEROID)) && (Close — Min(Close, PREDICTION_PEROID) > 5%)
проверим боеготовность сеточки,
на входе 3 параметра (Close, Max(Close, PREDICTION_PEROID), Min(Close, PREDICTION_PEROID))
её задача найти функции определения движения цены, заданные мной:
LEARN >> eval @ epoch 400: Accuracy = 0,95, Precision = 0,91, F1 = 0,92
TEST >> eval @ epoch 400: Accuracy = 0,82, Precision = 0,79, F1 = 0,80
0.8 на контрольном датасете после 400 прогонов, дальше гонять не будем, работает.
и так, COTы, 16 параметров(OpenInterest,ProducerLongs,ProducerShorts,SwapDealerLongs,SwapDealerShorts,SwapDealerSpreads,MoneyManagerLongs,MoneyManagerShorts,MoneyManagerSpreads,OtherReportableLongs,OtherReportableShorts,OtherReportableSpreads,TotalReportableLongs,TotalReportableShorts,NonReportableLongs,NonReportableShorts) + Close:
LEARN >> eval @ epoch 400: Accuracy = 0,84, Precision = 0,83, F1 = 0,72
TEST >> eval @ epoch 400: Accuracy = 0,60, Precision = 0,56, F1 = 0,45
после 400 прогонов, сетка начала затачиваться под конкретный датасет (неудивительно параметров много), но на контрольном датасете провал 0.45
Срежем количество параметров, вычислив чистую позицию по каждой группе
пример: ProducerTotal = (ProducerLongs-ProducerShorts)/OpenInterest
итого, COTы, 5 параметров
(OpenInterest,ProducerTotal,SwapDealerTotal,MoneyManagerTotal,OtherReportableTotal) + Close:
LEARN >> eval @ epoch 400: Accuracy = 0,78, Precision = 0,71, F1 = 0,60
TEST >> eval @ epoch 400: Accuracy = 0,51, Precision = 0,31, F1 = 0,31
связь с будущим движением цен закрытия — не обнаружена, 0.31 — неуд.
Ну и на последок небольшой cheat. А что, если мы будем знать данные COT за неделю вперёд (так-то они опаздывают на неделю, данные со вторника выходят в конце недели)… Дадим нашей нейронке заглянуть на неделю вперёд в отчётах COT, поможет ли это ей найти связь с будущим движением цены?
LEARN >> eval @ epoch 400: Accuracy = 0,84, Precision = 0,82, F1 = 0,73
TEST >> eval @ epoch 400: Accuracy = 0,49, Precision = 0,38, F1 = 0,38
0.38, увы, прогнозной функции будущих цен из данных COT наша нейронка извлечь не смогла, даже имея данные на неделю вперёд.
Как же использовать COTы? Смотреть экстремумы. Это то малое, но ценное, что у нас есть))
И сейчас наши старшие братья, крупные спекули, фонды, набились в лонг. Им нужно 60+. Но самые хорошие движения начинаются там, где эти ребята ещё не набились в одну сторону.
Удачных трейдов!