Блог им. MihailMihalev
Прошёл уже почти год, как сделал надстройку над терминалом квик, чтобы торговать было не так лениво: Я самый ленивый трейдер. За всё это время воспользовался им всего несколько раз. Проблема в том, что какой бы ни был совершенный инструмент для торговли, без статистически подтвержденной стратегии шансы на удачу, даже краткосрочную, довольно невелики. А я человек простой: не вижу — не еду. Пересиживаю в фондах ликвидности и флоатерах, иногда запрыгиваю в акции, чтобы прокатиться на очевидной волне с минимальным риском.
Математическая постановка проблемы:
1) Допустим, есть исторические данные за год в секундном таймфрейме.
2) Есть торговая стратегия, алгоритм которой фиксирован, но имеет ряд параметров.
3) Допустим, параметров 6, по 10 значений в каждом параметре. Это уже миллион комбинаций.
4) Симуляция на питоне одного инструмента за год на секундном таймфрейме занимает ~4 секунды.
Миллион комбинаций на 4 секунды = 4 миллиона секунд ~ 12 дней симуляции, чтобы проверить один инструмент на одной стратегии. Это минимальная оценка при наивной реализации.
Умножаем оценку на количество попыток из-за:
1) Ошибки в алгоритме — 10 попыток (и это далеко не предел, в торговых алгоритмах есть весьма неочевидные сюрпризы)
2) Неверный выбор диапазона значений параметров — по 3 ошибки на параметр — 18 ошибок.
3) Вероятные ошибки в исходных данных и подготовке — пусть 2 ошибки, но это сверхоптимистично.
4) Ещё какие-то форс-мажоры — оставим на полях, но тут тоже может быть существенный коэффициент.
Получаем 10*18*2 = 360 (при допущении, что ошибки друг от друга не зависят)
Итого 4 миллиона умножаем на 360 = 1440 миллионов секунд симуляций. ~ 46 лет чтобы найти оптимальные параметры стратегии с 6 параметрами.
Хочу выразить благодарность тем, кто оставил дельные комментарии под моим первым постом на смартлабе: Девять месяцев инвестирования. Особенно ценны коментарии в духе «все сливают, и ты сольёшь». Это заставляет задуматься и действовать крайне осторожно. Всё правильно, среди этого миллиона комбинаций, при полном непонимании и случайном подборе параметров стратегии, да ещё за реальные деньги, слить — это дело времени.
Да, я самый ленивый трейдер, и даже наверное самый тупой, но я сильный программист — люблю применять грубую программистскую силу в задачах, которые требуют много вычислительных ресурсов.
Дальше идёт погромистская магия...
Спорим, что вы используете свою видеокарту неправильно?
4 секунды симуляции — это на голом питоне. Легким движением рук (если ты тру программист), ускоряем в 40-50раз. И получаем уже 0.1 сек на данных за год. Это на CPU и в один поток. Несколько потоков будут делать это быстрее (правда есть нюансики — быстро упираемся в ограниченную производительность памяти и ускорение не будет пропорционально количеству ядер).
Когда нужен параллелизм, то смотрим в сторну GPU. GPU – это по своей сути такой многоядерный процессор, который за один такт может обрабатывать очень много данных по одной инструкции, но он тупой — имеет мало инструкций по сравнению с CPU. Зная это(а так же, и в первую очередь, как устроены контроллеры памяти, кэши, воркюниты, варпы, и прочая хардварная дичь) можно написать код торгового автомата, который весьма неплохо выполняется на GPU. И вот одна симуляция на данных за полгода происходит уже не 50 милисекунд, а внезапно 8 секунд… но есть один нюанс: параллельно вычисляются 160000 стратегий с разным набором параметров торгового автомата. (конечно на самом деле зависит от размерностей в архитектуре конкретной видеокарты, например моя скорее всего выполняла это в 64000 потоков одновременно).
Т.е. одним нажатием кнопки бабло SearchParams я нахожу лучшие параметры стратегии из 160000 комбинаций за 8 секунд. т. е. Миллион комбинаций я переберу за минуту. Это уже не десятки лет как было в наивной первоначальной оценке. Это уже вполне конечное время, и за несколько попыток в течение очень короткого времени умный поймёт, что играть с казино крайне опасно, а упорный — продолжит эксперименты, потому что если к грубой программерской силе подключить математическую смекалку, то внезапно окажется, что некоторые параметры друг от друга зависят и образуют причудливые многомерные объёмы, а значит реальное количество комбинаций, которое нужно перебирать, сильно снижается, что даёт возможность добавлять ещё параметры и усложнять стратегии.
P.S. Почему секундный таймфрейм? Потому что могу:)
Если таймфрейм минута и параметров максимум 3, можно уже не так напрягаться со скоростью.
Причем тут глобальная развилка. Или уже не секунда, а миллисекунда, не квик, а Си++ в коллокации биржи и реальное ХФТ. Высокая трудоемкость и доходность, ограниченная в объеме ниша.
Или средне-долгосрок, прикидка разумности параметров уже на дневках, доха в текущих условиях порядка 30 годовых и питона (и даже LUA, в пределе экселя ) вполне достаточно.
Но по моему опыту, между среднесроком (время удержания позиции в среднем 2-4 дня) и ХФТ денег почти нет.