Блог им. AkakiySigizmundovich
Приветствую, глубокоуважаемые алготрейдеры.
Представляю вам довольно простую в понимании, и в осуществлении схему позволяющую из одного посредственного торгующего алгоритма построить целую торговую систему работающую на всех тикетах и рынках.
Что необходимо:
1. Подмешиваем шум (осуществляем дизеринг) в проверенный в работе алгоритм в виде внесения дополнительных данных: немного изменяем переменные, параметры, индикаторы, но в пределах работоспособности. Таким образом получаем несколько алгоритмов незначительно отличающиеся друг от друга на основе одного базового, в нашем примере будет 6( количество может быть любое). Оптимизируем их без комиссии что бы не уменьшать количество сделок, так как работа отдельного алгоритма нас не интересует.
Основной обработчик РТС:
Обработчик SI:
Обработчик ED:
2. Запускаем эти скрипты 1го порядка(обработчики) в торговлю в условиях лаборатории в режиме реального времени на настоящих котировках. Каждому скрипту в случае открытия той или иной позиции присеваем значение 1( или любое другое, зависимости от желаемого ранжирования, можно всем одинаковое, или каким то скриптам отдать приоритет с ранжированием 2 или 3)
3. Создаем скрипт сумматор 2го порядка( непосредственно осуществляющий торговлю), который собирает данные о наличие активных позиций в обработчиках. Суммирует, сглаживает( проводит ресэмплинг ) значения ранжирования и по достижении определенного порога суммы входит, а при снижении выходит из позиции. Проводим оптимизацию и уже только здесь устанавливаем комиссию в тестах.
Эффект переоптимизации отсутствует, так как сигнал на вход и выход не зависит от конкретного обработчика, оптимизируется сумма и они попеременно могут быть любыми в данный момент времени.
Получаем на выходе :
Торговля по всем инструментам идет с количеством лотов от 1-до 5( взависимости от суммы ранжирования), который торгуется отдельной сделкой без изменения количества. На схеме со сделками величина рейнджбара соответствует количеству одновременно открытых позиций( зеленые лонг, красные шорт) в обработчиках торгующих в лаборатории.
РТС комиссия 20п на сделку(40 на круг)
Si комиссия на сделку 3 руб. Торговля внутри дня без переноса позиций
ED комиссия 2 шага цены( 0.0002)
На всех инструментах по факту торгует один и тот же алгоритм с незначительным добавлением шума.
Учитывая особенности пересчета обработчиков, главный скрипт получает сигнал на вход\выход только на следующей свече, таким образом исключены сделки на утренних и других гэповых свечах. Важно сделать тф торгующего скрипта в тестах равным или большим чем в обработчиках, в противном случае будет заглядывание вперед. При реальной торговле нужно делать меньше например 1мин или 15 сек, что бы уменьшить задержки в сигналах.
Скрипты обработчики могут иметь одинаковый ТФ как в моем случае, или разный по типу стратегии трех экранов Элдера, торговля с переносом или внутри дня( можно сделать вход в позицию обработчиков в разное последовательное время) работает одинаково хорошо. Можно сделать так же 3 слой( скрипт 3 порядка) который обсчитывает скрипты 2 порядка. Все зависит от цели, фантазии и типа стратегии. Варианты комбинаций и количество обработчиков бесконечны.
Парадокс!
Ну и это близко к теме торговли облака параметров, как-то так это алго-трейдеры зовут, вроде. Кстати, я бы убрал этап оптимизации отдельных стратегий и вообще этап оптимизации)).
И как результаты у такого подхода на OOS? Платформа на тестах это не позволяет определить, тока в торговле?
Судя по описанию (хотя, как я сказал, тут много пересечений и с ML лесами и с облаками параметров) вы это сами придумали, скорее всего это говорит о вас как о креативно мыслящем человеке, в нашем деле это полезное свойство).
Но вот мы возмем пару каких то измеряемых параметров, построим модель, и она нам предскажет важный отсутствующий. О, теперь у нас есть важный параметр, тогда мы обучим модель и предскажем ещё один. И так далее из ничего у нас будет все!
Акакий Сигизмундович, Вы лучше на сообщение отвечайте, а не просто в теме). Иначе меня не уведомят об ответе.
OOS — out-of-sample — данные, которые стратегия при бэктесте, при оптимизации или обучении ещё не видела.
Акакий Сигизмундович,
Это ж Грааль! Срочно набрать кредитов на всю недвижку и на всех родственников. Через полгода на Гавайи со слугами и челядью уехать отдыхать))))
Я правильно понял вашу идею?
Возьмем для простоты один тикер.
Берем какую-то одну идею. На ее основе делаем 6 разных систем (просто с разными параметрами основной идеи). Но не торгуем эти 6 систем параллельно (как портфель), а собираем сигналы от них (-1,0,1) в едином скрипте. И уже в этом скрипте решаем, что если у нас появилось 4 сигнала (например), то встаем в лонг. Упало до 2-х сигналов — выходим из лонгов.
Я корректно все описал?
Если да, то используете ли какое-то дополнительное управление капиталом/ риск-менеджмент? Ну допустим, при 4 сигналах встаем одним сайзом, при 6 сигналах — уже другим.
И спасибо за интересную статью!
Акакий Сигизмундович, ага, спасибо за ответ!
А можете чуть-чуть пояснить, почему пришли именно к такому решению, а не просто торговать портфель систем? Это как-то упрощает управление? Упрощает анализ?
Не очень понял про устойчивость к обрывам связи и статичности условий. Откуда они берутся? Ведь все сигналы динамические все равно. У вас было 6, а когда станет 4 — еще неизвестно ведь? Или вы имеете ввиду, что просто реже сделки совершаются, и поэтому устойчивее? Например ряд может быть [6,5,6,5,5,5,5,6,5,4]. И если бы вы торговали портфелем классическим, то каждая [6,5] — это была бы сделка, а т.к. у вас шаг больше — то сделки реже?
По поводу смены контракта, то на кубиках только в ручную, если использовать через api народ как то подтягивает через таблицы, спросите на форуме программы.