Найти тему

Логические и технические аспекты создания Торговых Роботов на основе ручных стратегий.

Переходим непосредственно к созданию Роботов. Так как для многих, в том числе опытных брокеров, Роботы новая неизвестная страна, расскажу возможно излишне подробно.

В предыдущей статье

было сказано, что Роботы решают основные проблемы с которыми сталкиваются инвесторы при ручной торговле. Основными трудностями является:

1. Трудно постоянно следить за котировками акций, особенно если вы трудитесь по найму. Но с другой стороны для работы Роботов понадобится ноутбук или стационарный компьютер с установленным программой Терминал (вашего брокера, практически всегда брокер предоставляет бесплатно). Программа не очень требовательна к ресурсам, достаточно относительно старой машины. Более важен хороший интернет. Можно установить Терминал и на компьютер на работе, если работодатель позволит. К сожалению ни с смартфона, ни с планшета работать с Роботами не получится, мобильная версия Терминалов так же роботов не поддерживает.

2. Трудно отслеживать движение котировок если портфель диверсифицирован и содержит больше 5-10 акций. А вот тут Роботы полностью решают проблемы, у вас может одновременно работать сотни роботов, по сотням разных акций, по десяткам ваших стратегий.

3. Трудно строго следовать стратегии, не поддаваясь эмоциям и не вносить коррективы в стратегию по ходу изменения цены. И тут вам помогут Роботы, Роботы будут строго следовать вашей стратегии, без эмоций, перекуров и перерывов на обед.

Теперь поговорим непосредственно о Роботах и их секретах. Так что же такое торговый робот? По сути это относительно небольшой скрипт (програмка), в которой описана ваша стратегия, и даны инструкции как действовать в каждой ситуации.

Что важно знать про Роботов.

1. Программа Робота запускается или с какой то периодичностью либо по событию(обычно при закрытии Свечи, если в Роботе не предусмотрена иная периодичность) и проверяет соответствие заданных в Роботе параметров и условий текущей ситуации или стоимости актива.. Периодичность запуска Робота нужно учитывать при выборе Таймфрейма.

2. Робот работает только с одной акцией на заданном в роботе таймфрейме. Ни таймфрейм, ни акцию динамически поменять нельзя, потребуется пересоздавать Робота.

3. Сколькими акциями и на скольких таймфреймах вы собираетесь торговать, столько роботов вам придется запустить в работу.

4. Робот может работать как в режиме Торгов, так и в режиме "Советника". В режиме торгов Робот сам совершает сделки. В режиме Советника, робот вместо сделки пошлет вам сигнал, что согласно заданному вами алгоритму и параметрам, условия для совершения сделки наступили и вам нужно принять решение.

5. При создании алгоритма, задания параметров важно учитывать комиссии, которые вы будите платить за совершенные сделки, согласно вашему тарифному плану у брокера. То есть заданные вами параметры должны обеспечивать превышение доходности сделок над комиссией брокера при любом изменении цены акции.

Как создаются Роботы.

1. Робот работает строго по стратегии, поэтому алгоритм стратегии необходимо создать или подобрать из уже существующих.

2. Торговую стратегию необходимо максимально формализовать, то есть действия согласно алгоритма стратегии должны быть строго определены, не должно быть никаких "действовать по обстановке".

3. Все параметры вашей стратегии собираются в секцию "Покупка" и в секцию "Продажа". То есть Робот должен рассчитать (определить) цену при которой необходимо покупать или продавать.

Рассмотрим все это на конкретном примере. В сети очень редко встречаются подробные описания стратегий по которым торгуют авторы. Поэтому рассмотрим стратегию которая мне попалась и более менее подробно описана.

Концепция "торговой стратегии" и оглавление по блогу.
Трейдинг как работа14 апреля 2022

Описано, по моему мнению, несколько сумбурно, поэтому поясню стратегию как я ее понял, заодно формализуем эту стратегию.

Стратегия является трендовой (пытается определить зарождение тренда на рост или падение), построена на основе ТехАнализа, совмещены три индикатора. Полосы Боллинджера, RSI, Фракталы. Так как стратегия создавалась для ручной торговли, автор попытался максимально точно определить тренд, то есть наличие тренда долны показать все все три индикатора одновременно (хотя я не увидел как Автор использует Фракталы)только тогда предполагается сделка. Правда выбранные Автором коэффициенты отличаются от стандартных в сторону понижения точности определения тренда, что должно по его мнению, компенсироваться увеличением числа индикаторов.

Что бы вам не искать описание примененных индикаторов, тем более индикаторы не тема данной статьи, коротко поясню как они работают.

Полосы Боллинджера.

Представляет собой канал нарисованный тремя линиями. Верхняя часть графика. Основной линией является какая нибудь скользящая (Автор выбрал SMA - простую Скользящую среднюю, обычно SMA берется с периодом 12-24, стандартно 20, Автор применил SMA с периодом 9), от этой линии строится уровень Сопротивления (линия отстоящая от центральной линии на два стандартных отклонения вверх, зеленая линия) и уровень Поддержки (линия отстоящая на 2 стандартных отклонения вниз, красная линия). Чем меньше волатильность, тем диапазон уже, при появлении волатильности диапазон расширяется. Считается, что 95% времени цена находится внутри диапазона, и только в 5% выходит за его пределы. Вот выход цены за пределы диапазона и является сигналом для сделок. Упрощенно (есть и другие варианты для определения сделок). Для покупки нужно что бы свеча коснулась линии Поддержки (нижняя линия) а следующая свеча опустилась ниже этого уровня. Для продажи (в шорт) первая свеча должна коснуться линии сопротивления (верхняя линия) а следующая свеча должна быть выше этой линии. считается, что после этого цена довольно быстро вернется к средней линии (Скользящей), тут сделку можно закрывать. Если после пробоя Сопротивления или Поддержки цена не дойдя до средней линии снова пробивает тот же уровень, это считается продолжением тренда.

RSI.

Индекс Относительной силы. Нижняя часть графика. Показывает как сильно и в какую сторону цена движется относительно предыдущего движения. RSI так же задается период расчета, стандартно период 14. Считается, что если значение RSI больше 79-80 то нужно продавать, если меньше 30-20 то покупать.

Фракталы.

Это определенные фигуры из нескольких свечей, показывающие разворот тренда. На графике в овале выделен один из разворотных фракталов из четырех свеч, две свечи падающие, причем цена закрытия второй свечи меньше цены закрытия первой свечи, затем две свечи растущие, причем цена закрытия четвертой свечи больше цены закрытия третьей свечи. После этого разворотного фрактала тренд с падающего меняется на растущий.

Стрелка №1 на графике показывает момент, где сначала свеча касается линии поддержки (закрытие свечи внутри канала), следующая свеча выходит из канала (закрытие ниже линии поддержки). При этом индикатор RSI чуть ниже значения 30. Это явный сигнал на открытие позиции. Далее цена растет, несколько раз касается линии Сопротивления, что говорит о сохранении тренда, RSI становится больше 70 (что говорит о перепроданности). Вот тут есть дилемма, или закрывать позицию про пересечении RSI уровня 70 сверху вниз, или дождаться пересечения линии Боллинджера средней линии (стрелка 2) и тогда закрыть сделку.

Теперь поговорим, как все описанное выше будет программироваться при написания Робота. Для понимания процесса необходимо пояснить некоторые нюансы не существенные при ручной торговле.

Цены на графиках всегда отрисовываются от самой последней (самой молодой) свечи вглубь в историю. То есть самая молодая свеча имеет № 0, предыдущая № -1(иногда для краткости просто пишется №1), третья вглубь истории № -2 и так далее. То есть график цен, который вы видите, постоянно перерисовывается, только это делается очень быстро и при ручной торговле вы этого не замечаете, а вот для Роботов нумерация свечей является очень важным параметром, так как Роботу необходимо знать с какой свечей из ряда происходит сравнение.

В Роботе, описание на открытие позиции будет иметь следующую конструкцию.

Если (условие) И (условие) ИЛИ (условие) ТО (действие) ИНАЧЕ (действие)

Если условия собираются по логическому И (то для перехода к действию должны быть выполнены все условия), Если по логическому ИЛИ (то для для перехода к действию должно быть выполнено любое одно из условий), ТО это переход к действию кода условия выполнены, ИНАЧЕ переход к действию если условия не выполнены. В реальности не обязательно использовать и ТО и ЕСЛИ, можно что то одно

Открытие позиции:

/// ПРАВИЛО 1

if ((Input1.Low[1] < BB(Input1.Close, 20, 2).GetValue("Lower", 1)) &&(Input1.Close[1] >= BB(Input1.Close, 20, 2).GetValue("Lower", 1)) && (Input1.Close < BB(Input1.Close, 20, 2).GetValue("Lower", 0)) && (RSI(Input1.Close, 14) < 30) )

{ EnterLong(); }

В этом примере if означает ЕСЛИ, (Input1.Low[1] < BB(Input1.Close, 20, 2).GetValue("Lower", 1)) &&(Input1.Close[1] >= BB(Input1.Close, 20, 2).GetValue("Lower", 1)) описывает, что предыдущая свеча коснулась нижней линии индикатора Боллинджера. Тут (Input1.Low[1] < BB(Input1.Close, 20, 2).GetValue("Lower", 1)) описывает, что минимум свечи опускается ниже нижней линии Боллинджера, а (Input1.Close[1] >= BB(Input1.Close, 20, 2).GetValue("Lower", 1)) описывает, что закрытие свечи произошло выше нижней линии Боллинджера. && это логическое И. (Input1.Close < BB(Input1.Close, 20, 2).GetValue("Lower", 0)) условие, что следующая свеча закрылась ниже нижней линии Боллинджера. (RSI(Input1.Close, 14) < 30) условие, что значение RSI должно быть меньше 30. Все условия связаны логическим И, значит должны быть выполнены одновременно. Обратите внимание, что в Input1.Low[1] предыдущая свеча обозначена [1], не [-1], что допустимо. А в Input1.Close номер свечи [0] вообще опущен. EnterLong(); означает открытие позиции по рынку.

Закрытие позиции:

/// ПРАВИЛО 2

if ( (Input1.Close < BB(Input1.Close, 20, 2).GetValue("Middle", 0)) && (CurrentPosition() > 0) )

{CloseLong();}

Тут все совсем просто (Input1.Close < BB(Input1.Close, 20, 2).GetValue("Middle", 0)) тут описано, что цена должна закрыться ниже средней линии полос Боллинджера и что позиция должна быть не нулевой (CurrentPosition() > 0). Тут стоит обратить внимание на Input1.Close в условии, закрытия свечи, ее номер снова [0]. Просто к моменту когда будет закрываться позиция (стрелка 2 на графике), свеча с номером [0] будет совсем другая, там где цена пересечет среднюю линию Боллинджера.

Ну вот собственно мы и создали по стратегии Робота который автоматически откроет и закроет позицию с итоговой прибылью в 5,44%.
Правда я не увидел как Автор применяет тут фракталы, но это не так важно, важно было показать принципы создания Робота на основе стратегии, и что это не очень сложный процесс. К тому же существуют Конструкторы Роботов, в которых Роботы собираются из стандартных "кубиков" условий и действий. При написании данной статьи, я как раз и использовал один из конструкторов Роботов.

PS. Долго не писал в канале. Во первых заболел, Во вторых не мог решить стоит ли по стратегии приводить код Робота. В третьих какую стратегию взять для описания. Описанная стратегия работает на основе ТехАнализа, есть еще класс Уровневых Стратегий, думается стоит описать и этот класс стратегий.

Надеюсь на отклик, понятно ли преподнесен материал, на чем стоит заострить внимание.

С подпиской рекламы не будет

Подключите Дзен Про за 159 ₽ в месяц