Найти в Дзене

Анатомия торгового Робота StepByStep_v2 от А-Инвестиции (Альфа банк).

Оглавление

Почему я выбрал для рассказа А-Инвестиции от Альфа Банка.

Подойдем к вопросу без эмоций типа "нравится - не нравится", а прагматично, как и положено подходить в вопросе инвестиций.

И так. Альфа Банк как бы к нему не относились это крупнейший из частных банков РФ, а А-Инвестиции подразделение этого крупного банка. Не смотря на то, что в А-Инвестициях можно использовать КВИК, ими был создан и развивается еще и собственный терминал "А-Инвестиции".

А-Инвестиции единственный брокер РФ (возможно и в мире, по крайней мере других примеров я не знаю) который предоставляет своим клиентам бесплатно торговых роботов, конечно только для терминала собственной разработки (это понятно, зачем предоставлять роботов для КВИК, что бы их использовали у конкурентов).

Конечно, наивно ожидать, что нам предоставят роботов - Грааль, но это будут вполне работоспособные и надежные роботы. Ну не будет серьезный Банк и его Брокер подставляться предлагая откровенную халтуру сливающую депозит. Поэтому эти торговые роботы вполне подойдут как для ознакомления с работой роботизированных систем, так и для построения РоботоФермы.

Какие бывают торговые роботы.

Я разбил торговых роботов на 3 категории.

1. Робот советник. Это робот который сам не совершает никаких сделок, а только подает сигнал "своему хозяину" о наступлении некоего события, например, что цена акции достигла заданного значения. "Хозяин" сам должен решать, что с этой информацией делать.

2. Робот для одноразового применения. Тут роботу разрешено самому совершить сделки, но очень в ограниченном диапазоне. Например вы желаете купить акции на дивидендном ГЭПе, но у вас нет возможности следить за котировками и вы поручаете это сделать роботу. Стратегия тут может быть очень простой, робот следит за падением котировки активы и как только цена вырастает от своего минимума на 0,2 %, мы считаем что мы прошли "дно" и покупаем актив.

3. Робот для долгосрочной работы с активом. Это самый высокий, самый продвинутый уровень торговых роботов, так как робот должен работать очень долго без вмешательства своего "Хозяина", а при долгой работе неизбежно будут происходить различные события -катаклизмы и робот должен их адекватно отрабатывать. Именно на роботах 3 уровня и возможно строить РоботоФерму. И тут должен вас порадовать. что роботы представленные в А-Инвестициях именно 3 уровня.

Конечно все роботы пишутся с использованием какой то инвестиционной стратегии, но для Роботов 3 уровня в код закладывается дополнительно некая концепция позволяющая роботу работать длительное время без вмешательства "Хозяина".

Все Роботы в А-Инвестициях имеют обязательную защиту "от дурака" (прошу не обижаться), то есть вам не дадут запустить робота с ошибочно введенными параметрами, например параметр на покупку не кратный Лоту. А также защиту от слива портфеля, это осуществлено путем запрета иметь в каждый момент времени больше одной торговой заявки (заявки на покупку или продажу) и одного стопа. Значит Робот не сможет ошибочно выставить много заявок на продажу, распродать весь инструмент и уйти в шорт, точно так же Робот не сможет выставить много заявок на покупку потратить весь КЭШ и набрать плечи. В общем разработчики постарались максимально защитить своих клиентов.

Почему мы будем рассматривать торговый Робот StepByStep_v2.

Огромное число блогов для новичков предлагают использовать новичкам Дивидендную стратегию и принципы купил и забыл. Снова появился в блогосфере Ильшат со своей "Кубышкой", правда теперь у него портфель почему то не 6,5 млн, а только 200 000 руб. Но принципы те же откладывать с каждой зарплаты определенные суммы покупать дивидендные акции и богатеть. Да впрочем думаю большинство из вас подписаны на подобные каналы и многие жадно впитывают каждое слово Дивидендных ГУРУ.

Так вот, торговый Робот StepByStep_v2 тоже в первую очередь Дивидендный робот и только во вторую очередь спекулятивный. Поэтому я из множества бесплатных роботов А-Инвестиции выбрал его, что бы сравнить доходности дивидендных стратегий ГУРУ и заработка Робота. Ведь рассказывая про дивидендные стратегии вам обычно умалчивают, что большинство компаний РФ выплачивают дивиденды только раз в год (или неожиданно отменяют дивиденды вовсе). Значит целый год, ваши деньги, лежат мертвым грузом, не принося прибыли и ждут выплатят ли дивиденды в следующем году. А вот торговый Робот StepByStep_v2, в промежутке между дивидендами, работает и зарабатывает на ценовых колебаниях. В итоге доходность Робота оказывается гораздо больше Дивидендной стратегии при тех же и даже меньших рисках.

В статье показано сравнение доходности Дивидендной стратегии и работы Робота с акцией ФосАгро. вот ссылка.

А в этой статье сравнение дивидендной стратегии и работы Робота с акцией Новотек. вот ссылка

Я не собираюсь ничего рекламировать, думайте и решайте сами использовать и зарабатывать больше или вас устраивает доходность дивидендной стратегии.

Посмотрим а как торговый Робот StepByStep_v2.

Вы можете в отчете робота из закладки "КОД" скопировать текст робота в блокнот и спокойно рассмотреть его код.

И так приступим. Код Робота разбит на ШЕСТЬ блоков.

Первый блок, это блок параметров, их бывает ДВА типа, параметры которые действуют с момента запуска робота, до его выключения, и Глобальные параметры которые не меняются даже если робот выключался.

AddInput("Input1", Inputs.Candle, 5, true, "CHMF=МБ ЦК");
AddParameter("StartQ", 6, "Стартовое кол-во", 0);
AddParameter("Q", 2, "Кол-во докупки", 0);
AddParameter("DeltaPercent", 2.5, "% изменения цены для докупки и продажи", 0);

AddGlobalVariable("inited", Types.Boolean, false);
AddGlobalVariable("lastSignalId", Types.Int, 0);
AddGlobalVariable("xPosition", Types.Double, 0.0);
AddGlobalVariable("LastPrice", Types.DoubleDictionary);
AddGlobalVariable("LastPriceCount", Types.Int, 0);
AddGlobalVariable("LongLimitStart", Types.Double, 0);
AddGlobalVariable("StartPrice", Types.Double, 0);
AddGlobalVariable("Last", Types.Double, 0);
AddGlobalVariable("MinPrice", Types.Double, 0);
AddGlobalVariable("Type", Types.Double, 1);

Здесь для нас наиболее интересны параметры "StartQ", "Q","DeltaPercent".

StartQ это параметр первой покупки при первом запуске Робота. Вот тут, как раз, разработчики и заложили концепцию для долгосрочной работы. Поясню в чем суть этой концепции. Предположим вы купили 100 лотов акции по цене 100 рублей. То есть StartQ=100 (Лот = 1, параметр Q принимаем равным 1. DeltaPercent.принимаем равным 2%). Тогда при первом запуске робот покупает 100 акций и выстраивает лесенку из 100 уровней На самом первом уровне цена уровня будет 100 рублей, на втором уровне 102 рубля и т.д.

Как видим, сотый уровень робот создал с ценой 710, 26 руб. Понятно, что цена акции от текущих 100 рублей, до уровня когда завершится цикл Робота с ценой, 710,26 рублей пройдет много много лет и все это время робот будет работать и зарабатывать и на дивидендах и на спекуляциях. Самое главное, что продав акцию за 710,26 рублей цену покупки робот покажет все равно 100 рублей и значит прибыль при продажи последней акции у нас будет 710,26%.

Следующий блок важных для нас глобальных параметров будет следующим.

xPosition - это число акций под управлением данного Робота, дело в том, что робот ведет собственный список и даже если у вас несколько роботов торгуют одной и той же акцией, каждый робот помнит все свои покупки и продажи.

LastPrice тут у нас хранится список уровней роботов и количество акций на каждом уровне.

StartPrice тут стоит цена по которой была куплена самая первая акция с момента запуска робота.

MinPrice цена по которой был продан последний на данный момент уровень.

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

-2

Третий блок, блок стартовой покупки StartQ.

-3

Четвертый блок это блок обработки выстраивания и работы с уровнями робота.

-4

для понимания роботы робота наиболее интересны для нас следующие 2 уровня.

Уровень 5.

-5

Рассмотрим эти блоки подробнее.

if (Input1.Close[0] <= MinPrice* (1.0 - 0.01 * DeltaPercent) && pos + Q <= LongLimit )

В этом месте проверяются условия для покупки акций.

(Input1.Close[0] <= MinPrice* (1.0 - 0.01 * DeltaPercent) означает что если Input1.Close[0] (цена закрытия свечи) меньше или равна MinPrice* (1.0 - 0.01 * DeltaPercent) (MinPrice цена последнего уровня от которого мы торгуем уменьшенная на DeltaPercent заданный нами процент роста или падения цены котировки соответственно для продажи или покупки) и (обязательно должны выполняться оба условия) && pos + Q <= LongLimit ) тут проверяется, что текущая позиция робота (число купленных уже им акций) увеличенное на заданное число акций в докупке не превышает общего максимального количества акций разрешенное роботу.

if(activeOrder != null && !activeOrder.IsStatusTerminal)
{
if(activeOrder.OrderDirection != OrderDirection.Buy)
CancelActiveOrders(true);
return;//ждём исполнения уже выставленной заявки

Тут проверяется выставлена ли уже ранее заявка на покупку, и если стоит ждем ее исполнения.

EnterLongLimit(MinPrice* (1.0 - 0.01 * (DeltaPercent - OrderSlippage)), Q);
var lastSignal = GetLastSignalInfo();
if(lastSignal != null)
lastSignalId = lastSignal.SignalID;

Если заявки на покупку пока нет, то выставляем Лимитную заявку по цене торгуемого уровня уменьшенную на наш заданный процент и проскальзывание заданные в параметрах.

И последний шестой блок. Правило на продажу.

-6

if (Input1.Close[0] >= MinPrice* (1.0 + 0.01 * DeltaPercent) && pos > 0 ) тут мы проверяем, что текущая цена стала больше торгуемого уровня на заданный нами процент и позиция по активу не равна нулю.

Далее проверяем не выставлена ли уже ранее заявка на продажу, если выставлена ждем исполнения, если заявка не выставлена то выставляем лимитную заявку на продажу.

CloseLongLimit(MinPrice* (1.0 + 0.01 * (DeltaPercent - OrderSlippage)), Q);

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

Отвечу на вопрос Ольги Сохраняю, Привлекаю, Преумножаю!. Как не трудно догадаться, что бы для покупки и для продажи были разные проценты достаточно в параметрах добавить отдельный процент для покупки и отдельный процент для продажи и соответственно заменить DeltaPercent на DeltaPercentSell и DeltaPercentBuy в соответствующих блоках. Если это будет интересно, напишу статью где нужно менять параметры, если нет расскажу лично вам.

По таймфреймам. ММВБ требует от провайдеров передавать занные с задержкой в 15 сек. Поэтому комфортный для роботов таймфрейм это 1 минута, больше ставить не стоит, так как мы будем пропускать сделки, Ведь Робот запускается и обрабатывает данные в момент завершения формирования текущей свечи о начале формирования новой свечи.

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

PS. Далее планирую рассказать о настройках терминала для комфортной работы с роботами. Как правильно сравнивать и выбирать тарифные планы. Как работать с КЭШем.