Оптимизация торговых систем в TSLab и грабли 1.
В связи с валютными войнами не сразу взялся за новую статью. И не сразу родилась тема статьи. В конце концов, было решено пролить свет на то, что есть такое оптимизация торговых система в TSLab, показав самые популярные грабли в этом деле. Я помню, во времена wealthlab 5.0, как пользователи умоляли сделать, наконец, оптимизатор торговых систем (да, его тогда не было еще в wealthlab новой ветки). Да и сейчас, вижу как оптимизация используется во зло, а не во благо, и сам грешил этим в свое время. Так что сегодня будет тотальная оптимизация и никаких гвоздей.
Оптимизация торговых систем в TSLab. Типичная ситуация.
В каждом трейдере всегда живет 2 стороны. Одна все время ратует за то, чтобы купить, продать, торговать, сейчас, больше, а другая все время боится. Сейчас опасно, вынесут ведь, кукл не дремлет, бери сайз меньше, стопы короче, тейк меньше. Никакой америки я не открыл для тех кто торгует на бирже. Каждый борется с этим как может (кто-то уже не борется и задушил в себе страх:) ). Немного в гротескной форме попробуем воспроизвести процесс создания торговой системы и возникающие при этом проблемы и противоречия.
Вся дальнейшая статья будет выстроена в виде диалога Оптимиста и Скептика. Ну, иногда будет влазить Надмозг и комментировать все это безобразие. Разумеется, все эти три персонажа находятся внутри самого обычного тела, принадлежащего самому обычного трейдеру.
О: Мужик! У меня идея гениальной стратегии! Она сделает меня миллионером. Нет! Миллиардером! Нет! Долларовым миллиардером! В общем, я порву рынок как тузик грелку.
С: Да ладно тебе. Ты каждый раз задвигаешь такую речь, но пока что я не ощутил себя в бентли.
О: Ну я тебе о-твечаю что на сей раз все будет ОК. Мы сделаем всех. Вот, смотри что я тут накидал. Это нано-блин-технологии трейдинга!
Рисунок 1. Скрипт, который будем тестировать.
С: Ничего особенного не вижу. Очередной “грааль” за 10 баксов пачка.
О: Да ты посмотри на результаты. Они вообще шоколадные, и это только лонг по акциям сбербанка. Мы на падающем рынке на стоках заработали денег. Профит фактор больше 2, а это уже реально.
Рисунок 2. Доход скрипта на сбербанке.
Рисунок 3. Результаты скрипта на сбербанке.
С: Я бы не стал торопиться с выводами. Трендовая стратения да с таким показателем профитных сделок? Что-то тут не чисто. Ты откуда взял такие результаты, собственно?
О: Ну откуда откуда? Взял оптимизатор, запустил, получил результаты. Далее выбрал лучшее что было и все дела. Вот.
С: Учу тебя, учу, а толку все нет. Давай посмотрим гистограмму распределения результатов оптимизации. Она уже покажет кое что.
О: Ладно. Раз ты настаиваешь. Сейчас подкручу в R один скрипт. Готово. Делаем экспорт в excel результатов оптимизации и вуаля. Смотри.
Рисунок 4. Распределение результатов оптимизации по сбербанку.
С: Что и требовалось доказать. Видишь? У тебя почти все результаты в отрицательной зоне, а значит мы наблюдаем мощный подгон результатов. Лишь небольшая часть плоскости параметров дает профит. А ты выбрал лучший вариант, он расположен в самом правом столбце. Вероятность реализации такого сценария думаю сами видишь :). Он минимален. Шаг вправо, шаг влево, и прощай депозит. Даже нет смысла более глубоко копать и разглядывать все под лупой. Уже сейчас видно. Идея не рабочая.
О: Вот вечно ты везде лезешь и все портишь. На сей раз я не дам тебе загубить идею на корню. Иди в баню. Без тебя обойдусь.
С: Нет, погоди. Бабло, оно не только твое. Это еще и мое бабло. Поэтому придется тебе меня слушать и вникать и трейдить такие системы не санкционировано я тебе не позволю. Видимо, оптимизация торговых систем слишком сложная для тебя наука, но придется мне тебя вразумить раз и навсегда.
Н: Началось. Теперь двое суток придется не спать из-за этих двоих. Чего им вечно больше всех надо? Шли бы на работу, 8 часов отсидел и домой. Зарплату получил и спишь спокойно. Вот мог бы, дал бы обоим по голове.
Случайно блуждание и генерация котировок
С: Чтобы показать тебе всю бредовость твоих идей, придется нам немного погрузиться в мир случайных чисел и собрать свои случайные котировки. Они, конечно не будут имитировать реальные котировки, но будут совершенно случайными. Предлагаю использовать следующий алгоритм генерации котировок:
- у нас есть 3 состояния: +1, 0, -1 и эти состояния равновероятны.
- у нас есть исходная цена инструмента, пусть это будет 100 или любое другое число.
- генерируем случайное число от 0 до 1.
- в зависимости от полученного числа определяем куда будет движение. если выпало 1, то двигаемся в +1.
- создаем 1 тиковую сделку. Ее цена равна исходная цена (или цена предыдущего тика) + направление. В текущем случае это +1.
- создаем так 600 тиковых сделок.
- пакуем эти тики в одну свечу таймфрейма 1M.
- создаем так мнооого свечей. Столько сколько нужно.
- вводим в генератор понятие выходных дней и начала и конца сессии. То есть в 10 по мск начало и в 23.45 конец.
- полученную последовательность приводим к нужному шагу цены. Для сбербанка к 0.01.
О: Хорошо. Давай сделаем это все. Хочется верить, что время будет убито не зря.
Н: После некоторого времени, на выходе родились котировки. Бессонные ночи плохо сказались на умственных способностях моих подопечных, поэтому дальше все будет еще хуже.
Рисунок 5. Генератор случайых чисел.
Н: Как видим, ГСЧ создает хорошее равномерное распределение. Так же проводились тесты и не было обнаружено повторяющихся последовательностей. Сам генератор представляет собой лучшее из возможных генераторов псевдослучайных чисел.
Рисунок 6.Распределение приращений полученных случайных котировок.
Рисунок 7. Q-Q график сгенерированных котировок и нормального распределения.
Н: Из графиков выше видно, что распределения случайных котировок близко к нормальному, что не соответствует реалиям рынка. Но мы и не хотели создавать котировки идентичные реальным, для этого другие способы нужны. Сами котировки изображены на графике ниже.
Рисунок 8. Котировки случайного блуждания.
С: Обрати внимание на то, что цена в конце почти совпадает с ценой вначале. Это не случайно. Котировок было создано несколько, но выбрали мы именно эти для того, чтобы исключить влияние трендовой составляющей на результаты. Если график будет идти только вверх, тогда мы рискуем получить прибыль просто за счет того, что вероятность на нашей стороне. Чаще всего рынок будет идти вверх, и даже случайные входы дадут профит. Мы, естественно, имеем локальные тренды и вверх и вниз, но глобально тренда нет. И свечек создано не просто много, их создано очень много. 10 лет минутных баров. Этого хватит для нашей задачи.
О: И что с этим теперь делать? Я пока идею твою не понял, если она вообще имеется.
С: А теперь мы будем твой “грааль” проверять на этих котировках. Бытует мнение, и оно кажется доказано математически, что на случайных котировках невозможно заработать в долгосрочной перспективе. Логически, я с этим соглашусь. Практически, мы сейчас с тобой это и будем исследовать.
Н: О, боже! Это еще не конец :(.
PS: продолжение в следующей серии.