читать лучше здесь :
http://robot-scalper.ru/нельзя-просто-т ... ого-робота" rel="nofollow
http://robot-scalper.ru/нельзя-просто-т ... та-часть-2" rel="nofollow
Нельзя просто так взять и создать прибыльного торгового робота!
Вводная часть
Разрешите представиться, Денис. Я программист с высшим образованием и огромным опытом практической разработки ПО. Изучал кибернетику. Специальность: Автоматизация систем обработки информации и управления в научно-исследовательской деятельности. Продолжительное время увлекаюсь трейдингом. А точнее, алгоритмическим трейдингом. Понимая принципы торговли на рынке и умея программировать почему бы не написать прибыльного робота? Правда, почему нет? — Легко! Сейчас, только чай допью. ))
Постановка задачи: робот должен зарабатывать, для этого ему нужно покупать актив по наименьшим ценам, а продавать по максимальным.
Разницу будем оставлять себе, не забывая поделиться комиссией с биржей и брокером. Итак, задача поставлена, осталось ее выполнить. Интересно, что из этого получится?!
Для начала нужно определиться на каком рынке мы будем торговать и какими активами. После рассмотрения различных вариантов я остановился на Московской бирже. На ней сделки и расчеты проходят с высокой гарантией. Московская биржа работает по российскому законодательству, что немало важно. Риски по исполнению сделок и расчетов биржа перекладывает на брокеров, тем самым повышая надежность своего бизнеса. Мне это подходит.
Торговать буду фьючерсами, так как биржевая комиссия по ним очень низкая. Она зависит от выбранного финансового инструмента. Колеблется в пределах 0,5 — 2 рублей за скальперскую сделку. Это на порядок ниже, чем при торговле акциями. Условия приемлемые, торговать можно.
Теперь нужно определиться с торговой стратегией. Большинство стратегий описанных в книгах не детализированы и дают лишь общее представление о том как нужно торговать. Разработав по ним торговых роботов и протестировав этих роботов на исторических данных можно заметить, что малую часть времени эти стратегии приносят прибыль, а в другое время они приносят убытки. Такое положение дел меня не может устраивать. Нужно найти, или самостоятельно разработать, действительно прибыльную скальперскую стратегию, которая подавляющую часть времени приносит прибыль. Не наживы ради, а науки для! ))
Так как задача изначально была поставлена чтобы робот покупал по наименьшим ценам, а продавал по максимальным, то из этого и будем исходить.
Возьмем, например, интервал времени 30 минут. Таймфрейм 1М. То есть, получается 30 расчетных свечей. И с помощью условия записанного на языке LUA (QLUA) будем определять минимальное (min) и максимальное (max) значение цены в данном диапазоне времени. У меня уже были некоторые наработки программного кода, поэтому я довольно быстро запрограммировал основу нового робота.
Нужно придумать название роботу. Так как он скальперский, то для простоты, пусть будет "Скальпер". Я не стал тут сильно фантазировать. Гораздо важнее — алгоритм!
Теперь нужно поработать над логикой торгового алгоритма.
Добавим условие: если текущая цена стала равна или меньше min, то робот выставляет заявку на покупку. Или если цена стала больше или равной max, то робот выставляет заявку на продажу.
После этого регулярно делаем проверку: исполнилась ли наша заявка? Если исполнилась, то выставляем еще одну заявку для фиксации прибыли (тейк-профит) от противоположной границы ценового канала.
Ждем. Если тейк-профит отработал, то повторяем все сначала.
В статичном горизонтальном (боковом) ценовом канале данная стратегия отлично отрабатывает! Ура! Маленькая победа!
Но на рынке бывают тренды и диагональные боковики. В этих случаях заявка на открытие позиции срабатывает и цена идет не в зону прибыльности, а в противоположную сторону наращивая убыток. И если ничего не предпринять, то цена дойдет либо до стоп-лосса, либо до маржинкола. Ни один из этих вариантов для меня неприемлем.
На тестах обнаружилась еще одна проблемка. Если выставлять заявки после получения сигнала на открытие позиции, то получается такая штука: цена сходила на экстремум (min или max), робот выставил заявку, но цена уже вернулась в ценовой канал и заявка осталась висеть неисполненная.
Мне стало ясно, что необходимо оптимизировать данные моменты торговой стратегии. И я снова засел за программирование.
Главная2. Нельзя просто так взять и создать прибыльного торгового робота!
Нельзя просто так взять и создать прибыльного торгового робота! Часть 2
Вступление
Первую часть читатели раскритиковали за недостаточное количество технической информации. В данной статье я постараюсь более подробно описать техническую часть создания робота.
Основная часть
Итак, первая версия робота Скальпера была готова. Робот выставлял заявки на открытие позиции, если цена достигала экстремума. Торговал в Статическом ценовом канале. Но часто запаздывал с выставлением заявок.
Задача с запаздыванием решалась «довольно просто». Я потратил два дня и две ночи чтобы полностью переписать логику алгоритма. Нельзя было просто добавить одно условие, всё сложнее.
Теперь робот Скальпер стал заранее выставлять две заявки: одну на покупку, на уровне минимального значения цены за последний диапазон времени, а другую на продажу, от максимального значения цены в этом же диапазоне.
При данном подходе выставления заявок обнаружился один довольно удобный момент: если срабатывает одна из заявок на открытие позиции, то вторая заявка, по сути, становится тейк-профитом! Ее не нужно снимать или передвигать. Не нужно выставлять новый тейк-профит.
Эффективность торговли значительно увеличилась! Маленькая победа меня порадовала ))
Но проведя более тщательные тесты обнаружилась следующая неприятность: наша заявка на минимуме или на максимуме может не отрабатывать даже если цена то и дело бьется в этот уровень! Почему? У вас есть предположения?
Кстати, по этой же причине на графиках появляются минимумы и максимумы.
Никогда не задумывались почему или каким образом образуются экстремумы на графиках?
Всё очень просто. На этих уровнях обычно стоит заявка с большим объемом. Через которую цена не может пробиться. Если мы будем выставлять заявку на этом же уровне, то наша заявка встанет в конец очереди и будет ожидать пока не исполнятся все заявки перед ней. Так можно вообще не дождаться исполнения своей заявки.
Очередное улучшение торгового алгоритма состояло в следующем: теперь робот выставляет заявку на покупку от минимума плюс шаг цены инструмента. И выставляет заявку на продажу от максимума минус шаг цены.
Благодаря такой оптимизации торгового алгоритма эффективность торговли возросла вдвое! И прибыль стала расти гораздо быстрее. Еще одна маленькая победа! ))
ТЕЙК-ПРОФИТ
На каком уровне его лучше выставлять? Если брать фиксированные X пунктов, то в одном случае цена не дойдет до заявки, а в другом случае заявка сработает, но цена пройдет значительно дальше. Тем самым робот существенно недозаработает.
Как показала статистика, статический тейк-профит — не лучшее решение.
А что если выставлять тейк-профит от противоположной границы ценового канала? Как это и было сделано изначально. Можно получить максимальную прибыль!
Но, как показали тесты, ценовые каналы часто смещаются и вероятность срабатывания такого тейк-профита меньше 50%. Это меня категорически не устраивает. Нужно улучшать данный фактор.
Уменьшая величину тейк-профита я пришел к выводу, что при 60% величины ценового канала имеется довольно высокая вероятность срабатывания прибыльной заявки. Гораздо более 50% сделок закрываются в прибыль. И при этом величина прибыли существенная! Оставляем так.
Поторговав несколько дней роботом Скальпером в данной конфигурации мне стало очевидно, что выставленный тейк-профит на 60% величины канала, это еще не самое оптимальное решение. Если канал смещается стремительно и новый ценовой канал образуется дальше чем на половину от прежнего канала, то тейк-профит "залипает". Я решил, что лучше взять 50%, или 40%, или даже 10% канала в виде прибыли, нежели дожидаться стоп-лосса (а это максимальный разовый убыток в торговой системе).
Осталась нерешенной проблема с наклонными ценовыми каналами и с тейк-профитом. Если в горизонтальном ценовом канале робот все сделки (100%) закрывает в прибыль, то при смещении ценового канала позиция могла «залипнуть» и приходилось фиксировать значительный убыток.
СТОП-ЛОСС
Как сделать так, чтобы робот не закрывался по стоп-лоссам? Ведь если не будут срабатывать стоп-лоссы — не будет и убытков! ))
Ну так, это же очевидно! Ответ лежит на поверхности!
Просто, не нужно выставлять стоп-лоссы! ))) И это не шутка!
Но если позиция "залипла", то не дожидаться ведь маржинкола. Будем выходить из позиции по наилучшим ценам.
Поясню. Если робот купил от нижней границы ценового канала, то заявку на фиксацию прибыли он выставит выше цены покупки.
Но если ценовой канал начнет снижаться, то верхняя граница канала будет тянуть за собой тейк-профит. В итоге робот либо возьмет небольшую прибыль, либо закроется примерно в безубыток, либо зафиксирует небольшой убыток. И только на сильных движениях, которые к счастью происходят не часто, убыток может даже превзойти величину тейк-профита.
К сожалению, предсказать с близкой к 100% вероятностью такое движение в моменте внутри торгового дня не представляется возможным. (Новости глазами отслеживать у меня нет никакого желания.) Поэтому придется пожертвовать частью прибыли.
Но, некоторым решением данной проблемы стал результат анализа статистики котировок на предмет наличия направленных движений и флэта в определенные часы торговли.
Сразу было обнаружено, что направленные движения чаще всего происходят:
1. на открытии торговой сессии;
2. перед и сразу после клирингов;
3. на открытии американского рынка.
Исключив торговлю в данное время я получил очередное увеличение доходности. Стратегия стала еще прибыльнее.
Для того чтобы руками постоянно не включать/выключать робота я реализовал 3 настраиваемых диапазона времени, в которых робот самостоятельно торгует. В конце диапазона закрывает позицию и снимает активные заявки, а в начале диапазона продолжает торговать.
Вернемся к ценовым каналам. И посмотрим, что еще можно улучшить в алгоритме.
Итак, после исполнения тейк-профита робот Скальпер начнет торговать уже от границ нового ценового канала, который образовался за то время, что мы держали позицию.
На тестах данное адаптивное поведение торгового робота показало себя гораздо лучше, чем предыдущая торговля в статическом режиме.
Новый режим торговли я назвал Адаптивным профитом.
На сделки робота стало приятно смотреть. Создавалось такое ощущение, что робот обладает человеческим или искусственным интеллектом! Он стал очень ловко подстраиваться под рынок. Человеку еще постараться нужно так поторговать! ))
Пример сделок в направленном трендовом движении.
Для того чтобы не усложнять себе жизнь высчитывая каждый раз значения параметров настроек робота под новые инструменты, я нашел несколько красивых решений, универсально подходящих под любые фьючерсы.
В следующий раз я постараюсь подробно рассказать о других настройках робота. С удовольствием поделюсь своими знаниями и опытом.
Хорошего дня и прибыльной торговли!