Попытка найти тонкую настройку Марка 3 показала разброс прибыли от -30% до +150% за месяц. Сегодня рассказываю, почему не пошел тест на фондовом рынке; ловушку оптимизации и ценные ошибки.
После того, как робот был протестирован на корректность написания и показал потенциал прибыльности с рандомными параметрами, измерим на какой возврат (ROI) он способен при точной настройке.
Не самое лучшее начало дня выглядит так:
Возможно из-за того, что сегодня суббота нет соединения с сервером, но на этот случай у меня есть исходный код Марка 3 на GitHub, который можно скомпилировать и получить локальный файл. Оптимизации быть!
Идея (провальная): Тестировать (сейчас) на акциях
Базовая торговая стратегия Марка 3 — подразумевающая, что сегодня рынок будет двигаться туда же, куда двигался вчера — теоретически, наиболее подходит для рынка акций, где тренды более выраженные, чем на валютном рынке. Попробуем доказать это эмпирически.
И так, для теста используем индекс S&P500. Конечно, в общем случае, нужно тестировать робота на многих инструментах (лучше вообще по всем, которые дает брокер), но я пока ограничусь одним индексом для проверки идеи.
Базовые параметры: Открытие сделок с открытием лондонской биржи (9:00 UTC), а закрытие по окончанию нью-йоркской сессии (23:00).
Таким образом, теоретически, будет охвачен активный торговый период каждого дня и не будет переноса позиций через ночь (рисков из-за увеличения маржинального обеспечения на выходных и комиссий).
Стоп и тейк по 10’000 пунктов, этого хватит, чтобы не закрывались ордера по этим параметрам. Нам нужно узнать чистый функционал стратегии.
Мда, на фондовом рынке результаты при отсутствующих настройках оказались значительно хуже, чем на валютном, на котором разрабатывался и тестировался робот на предмет работоспособности.
При беглом взгляде проблема видна невооруженным взглядом — беспокойство на фоновом в последний месяц не дает рынку и пару дней подряд двигаться в одном направлении.
Что не удивительно, в текущих обстоятельствах — стимулы на триллионы долларов и мартовский обвал фондового рынка дают о себе знать. Короче, идея с акциями правильная в теории, но не подходит для рынка сейчас.
Сейчас рынок акций ведет себя технически непредсказуемо на фоне фундаментальных факторов, среди которых политика количественного смягчения от ФРС США и прочие причины.
Уходя от философии, просто вернусь на валютный рынок, который ведет себя более предсказуемо даже в текущей ситуации и лучше подчиняется техническому анализу, на котором базируется торговая стратегия.
Оптимизация на валютном рынке
Робота протестировал на валютном рынке еще в прошлый раз, но теперь наша цель — максимизация прибыли. Начну с контрольного теста.
Все работает корректно, теперь можно попробовать найти лучшее время входа в рынок и выхода в течение дня.
Для оптимизации примем часть параметров за статичные, а некоторые будем менять, чтобы найти оптимальные настройки.
Оптимизация по времени
Идея оптимизации заключается в том, что стратегия может приносить бóльшую прибыль, если правильно подгадать время открытия и закрытия сделок в течение дня.
Статичные: объем позиций 100k; Стоп и Тейк по 100 пт.
Динамические: открытие и закрытие торговой сделки.
При разных значения для часа открытия и часа закрытия (от 0 до 24 часов) тестер говорит о наличии 576 вариантов, но на самом деле их будет вдвое меньше.
Робот завершит половину тестов вообще без сделок, так как будет получаться входные условия не удовлетворяющие открытию позиций (час открытия > часа закрытия).
Но вот среди оставшихся — наверняка будут более или менее прибыльные, чем в контрольном тесте.
Из-за небольшого количества параметров оптимизации (всего 2), но широкому спектру значений переменных (по 24 варианта) оптимизация заняла более часа.
От убытка 30% до прибыли 150%
Самым убыточным вариантом является открытие позиции в 1 утра и закрытие позиции в 24 часа, то открыта есть с начала и до конца дня.
В таком случае за прошедший календарный месяц депозит опустился бы с $5’000 до $3’480, то есть потери превысили бы 30%
Наиболее прибыльным вариантом является открытие позиции в 23 часа и закрытие в 24 часа, то есть захватываем только последний часовой бар дня.
В таком случае робот за месяц превратил $5’000 в $12’667, что в пересчете на проценты более 150%.
Почему нельзя взять самый лучший результат оптимизации и получать 150% прибыли?
Если коротко — это ловушка оптимизации.
Что такое ловушка оптимизации (общий случай):
Оптимизация любого робота проводится по историческому периоду, и найденные лучшие параметры будут давать 100500 прибыли только на историческом периоде, а на любом другом — не факт.
В этом вопросе мнения разных создателей роботов расходятся — кто-то (1) говорит, что используя лучшие исторические параметры можно рассчитывать на 60-70%% прибыльности от лучшего результата оптимизации, кто-то (2) советует оптимизировать на всю историю.
Мое мнение заключается в следующем (по аргументам):
1. Рассчитывать на 60-70%% глупо, поскольку это может быть и 10-1000%%. Чем аргументируются эти цифры и почему для разных систем, которые могут отличаться до бесконечности, цифры одинаковые? (Ответа нет).
2. Оптимизация по всей истории приведет или к отсутствию прибыльных вариантов, с высокой вероятностью, или превратит робота в Грааль, вероятность чего стремится к нулю. Такой подход не имеет смысла.
Тогда зачем вообще оптимизировать?
Чтобы получить множество средних значений, представляющих собой стабильные параметры, и понять возможный разброс результатов при изменении конъюнктуры рынка — размер и окружение этого множества.
В случае оптимизации Марка 3 по параметру времени открытия и закрытия позиций внутри дня, множество лежит в середине дня:
То есть я теперь (после оптимизации) наверняка знаю, что держать сделку открытой в течение всего дня — первый столбец— не самый прибыльный (даже убыточный) вариант.
Также знаю, что если открывать позицию в 7-10 часов утра и закрывать в 1 час дня, то эта стратегия с высокой вероятность будет приносить прибыль порядка 10% в месяц.
Запомним этот сценарий как вариант стабильных параметров, но проверим и самый прибыльный.
Неожиданные 100% в месяц на оптимизации
По мере завершения оптимизации я обнаружил еще одно множество результатов:
На последних циклах оптимизации выяснилось, что открывая позицию в направлении вчерашнего дня после 19:00 и удерживая ее до закрытия рынка, можно зарабатывать более 100% в месяц.
Выглядит подозрительно, однако, это некое множество результатов, то есть не ловушка оптимизации, о которой говорилось ранее.
Поскольку это множество, то при некотором отличии текущего или любого последующего месяца от того, по которому велась оптимизация, результат с большой вероятностью будет аналогичным.
По крайней мере, согласно общей теории. Проверим?
Новая идея из логической ошибки при оптимизации
При проверке на графике с визуализацией я быстро понял, что такие хорошие результаты были вызваны человеческой ошибкой.
То есть, робот работает совершенно корректно, тестер тоже, и эта прибыльность действительно достижима, но при одном интересном изменении — если закрывать сделки в 25 часов (в сутках 24, если что).
Для оптимизации я крайним параметром переменной close_hour задал значение 24, а в алгоритме Марк 3 предусматривается закрытие на следующий час, после заданного значения.
То есть, для множества этих 100%+ результатов, сделки просто не закрывались до тех пор, пока не уйдут в Стоп или Тейк, которые отстоят на 100 пт. от цены открытия.
Несмотря на неожиданную логическую ошибку в задании параметров оптимизации, стратегия от этого не становится неприбыльной! Протестирую такую вариацию за прошедший год.
Результаты получились любопытные: без закрытия позиций по времени робот не уводит депозит в просадку (стоп небольшой, но пока шел тест я думал будут образовываться пулы отрицательных сделок), торгует себе немного в плюс, немного в минус, периодически двигая депозит вверх.
Итоги дня
Что в сухом итоге? Голая стратегия «Сегодня = Вчера», не приносит прибыли (но и убытков), что было доказано при оптимизации, однако отдельные ее вариации, бывают прибыльными и даже очень.
Если честно, поиск оптимальной точки выхода изначально планировался следующим шагом в оптимизации. То есть, я надеялся, выделить какой-то прибыльный интервал по времени, а потом выжимать из него максимум, через стоп и тейк (то есть вторая оптимизация должна была идти по уже вычисленным статичными переменными времени).
Но учитывая неожиданно открывшийся прибыльный вариант с отсутствием закрытия позиций, теперь буду оптимизировать по 3 параметрам: Времени открытия, Стопу и Тейку.