Так создавался предыдущий робот "Trend"
История создания одного торгового Робота
(Основана на реальных событиях)
Был рабочий день, я сидел за компьютером и тестировал новую торговую стратегию. Стратегия была трендследящая. Результаты по соотношению риск/доходности получались не самыми выдающимися. Впрочем, как и у многих других стратегий подобного типа. Нельзя сказать, что результаты были плохие. На трендовом рынке стратегия показывала приличную доходность. Наш рынок очень волатильный. Депозит можно было удвоить всего за несколько дней. Но потом наступала такая фаза рынка, что вся прибыль просто таяла на глазах. Эту фазу рынка называют боковым движением цены, боковиком, флэтом или консолидацией (когда цена актива продолжительное время остается примерно на месте).
К тому моменту мной уже была накоплена большая статистика доходностей и просадок различных торговых стратегий. Как трендследящих, так и контртрендовых. Было ясно, что никакая элементарная и популяризируемая стратегия не способна постоянно приносить прибыль в долгосрочной перспективе. Всегда наступал момент, когда стратегия отдавала всю накопленную прибыль. Да уж, дела, а ведь кто-то торгует подобные стратегии и потом будет удивляться, когда вся прибыль превратиться в ноль. А вероятность данного события совсем не равна нулю.
Нужно было что-то менять в своем подходе к тестированию стратегий. Иначе, следующие результаты вряд ли будут лучше предыдущих. Я отложил тестирование и программирование в сторону и начал думать над тем, как сохранить ту прибыль, которую множество стратегий могут заработать на тренде. В голове вертелись графики различных акций и фьючерсов. Отчетливо вырисовывались основные паттерны (графические формы) движения цены, на которых переставали приносить прибыль многие торговые стратегии.
Мои коллеги оживленно общались между собой на тему игры в покер. Обсуждали вероятности исхода различных карточных комбинаций. Только и слышно было, вероятность, вероятность, вероятность. Невольно мои мысли переключились на комбинаторику, на модели из теории вероятности, на статистические и математические модели, которые я изучал в университете. Да и позже интересовался этим. Покер и трейдинг имеют очень много общего. Помимо эмоциональной составляющей, в покере очень важно для победы использовать определенные стратегии, математическое ожидание которых положительное. В общем, нужно считать, считать и считать.
Я вообще уверен в том, что на рынке выигрывает тот, кто лучше считает.
Связывая покер с трейдингом, пришло осознание того, что дело не столько в стратегиях, основанных на вероятностях успешных покупок или продаж, сколько в способе управления деньгами. Про управление капиталом я раньше слышал, но практически не использовал его.
Я открыл свой список дел и задач и добавил запись: "Изучить эффективные методы управления капиталом".
В интернете оказалось довольно много материалов по данному вопросу. Во многих объяснениях и примерах рассматривались лишь некоторые части систем управления капиталом. Специально ли люди недоговаривали некоторые нюансы, или же они знали только то, что рассказывали, мне не известно. Но, без некоторых тонкостей их системы управления капиталом из прибыльных легко могли стать убыточными. Благо, мой реальный опыт торговли позволял мне это понять.
В итоге, из множества кусочков переработанного материала сложился довольно интересный пазл. Оставалось дело за малым – запрограммировать новую стратегию и протестировать ее на разных инструментах, на разных таймфреймах и на большом периоде времени.
Для тестирования стратегии я решил использовать программу TSLab.
На рынке существуют и другие программы для тестирования стратегий, но я остановился на этой. У нее есть свои ограничения, но есть и свои достоинства. Одно из достоинств - довольно удобный интерфейс для разработки стратегий и удобный механизм для оптимизации параметров стратегии.
Стратегию я выбрал самую простую и надежную: пересечение двух экспоненциальных средних (EMA). Если быстрая EMA пересекает снизу вверх медленную, то это сигнал на покупку. Если пересекает в обратном направлении, то это сигнал на продажу. Если мы купили и цена растет, то еще раз покупаем. Если цена снижается, то продаем. Всё просто. Но нужно правильно рассчитать, в какой момент совершать сделку, на какой объем и когда фиксировать прибыль или убыток.
С сайта Финама я дополнительно закачал исторические котировки по различным акциям и фьючерсам, для разных таймфреймов.
Я запрограммировал стратегию и подставил некоторые значения в параметры. После тестирования с различными значениями параметров и после оптимизации стратегии стало понятно, что управление капиталом действительно позволяет сильно уменьшить риски и при этом доходность временами просто зашкаливает!
Экспериментальным способом мной был обнаружен универсальный подход к набору позиции, для наилучшего показателя риск/доходность. Тесты на различных акциях и фьючерсах подтвердили это.
Это была удача. Но останавливаться на этом не хотелось!
Робот торговал и совершал довольно много сделок. Было понятно, что на мелких таймфреймах очень много "шума" и тренды долго не длятся. Поэтому таймфреймы меньше 15 минут нам не подходили. На более крупных таймфреймах тренды длятся дольше, а сделок нужно совершать меньше, а это экономия на комиссии. Это хорошо.
Наша стратегия трендследящая. И торговая идея простая: ловить тренды и брать их полным депозитом, с максимальным доходом, а в боковых движениях цены раздавать деньги как можно меньше.
Результатами данной стратегии заинтересовались мои коллеги и друзья трейдеры. В светлую голову одного моего коллеги пришла мысль, которой он поделился: а что, если добавить какой-нибудь фильтр, для отсечения бокового движения цены?
Не плохо! Конечно можно! А какой? Я так сразу сказать не могу ))
Но я знаю, что можно использовать, например, другой трендовый индикатор.
И если мы получаем сразу от двух трендовых систем сигнал на покупку, то это более верный признак начала тренда, чем если бы сигнал был только от одного индикатора.
Вспомогательным сигнальным индикатором я выбрал Parabolic SAR.
Тесты показали, что в боковом движении цены сделок стало меньше и входы по тренду стали реже. Часто входы стали более поздними, но не всегда по худшим ценам. Решение было не плохое, но желание сохранить деньги в боковике было еще очень сильным, так как доходность на боковиках ощутимо снижалась.
Было замечено, что в боковиках две скользящие средние (EMA) довольно близко находятся друг от друга. Расстояние между ними становилось маленьким. А что, если высчитывать эту дельту (разницу между ними) и не торговать, когда она маленькая? Это фактически является еще одним дополнительным фильтром от боковика. Сказано - сделано. Расчет ведется, боковики отсекаются! Стратегия тестируется и оптимизируется.
С боковиками теперь вроде всё стало понятно, а что делать с ситуацией, когда свершилось довольно сильное движение и мы были в хорошем плюсе, но не зафиксировали его, а затем цена отскочила обратно? Прибыль мы не взяли, а теперь и закрыться можно с относительно большим убытком. Выход из позиции был реализован по обратному пересечению скользящих средних. Но, при резком обратном движении цены скользящие средние просто не успевают реагировать и стратегия может принести ощутимый убыток. С этим нужно как-то бороться.
Появилась идея добавить стоп-лосс, чтобы не дожидаться больших убытков, ожидая когда скользящие пересекутся в обратном направлении. Лучше выйти с небольшим убытком, а затем снова войти по тренду. Важно сохранить деньги в сложной ситуации. А по тренду прибыль растет очень быстро.
Так появилось второе дополнительное условие на выход из позиции.
Итак, стоп-лоссы я добавил, протестировал стратегию, сделал оптимизацию.
Результаты получились довольно интересными. Просадки сильно уменьшились, а доходность осталась на хорошем уровне.
Каждый шаг разработки данного Робота был нацелен на улучшение показателей риск/доходности. Была проведена большая аналитическая работа.
Теперь оставалось дело за малым: запрограммировать данного Робота на QPILE под Срочный рынок (фьючерсы) и под Фондовый рынок (акции).
И можно пользоваться плодами алготрейдинга!
Так был разработан торговый Робот Robot_Trend