Торговые роботы Альфа Инвестиции. Часть 1: Интро
Торговые роботы Альфа Инвестиции. Часть 2: Небо и Земля
Торговые роботы Альфа Инвестиции. Часть 3: Установка торгового Терминала
Торговые роботы Альфа Инвестиции. Часть 4: Установка стандартного робота Step-by-Step
Прибыль стандартного робота
В прошлой статье мы с вами запускали стандартного робота StepByStep_v2 на фонде AKGD "Золото" от Альфа-Капитал.
Запуск робота был 16 декабря 2024 года и уже 10 января 2025 года все позиции закрылись.
В Диспетчере Роботов видим "Позиция = 0" и в последнем столбце "севшую батарейку".
Это значит, что робот отработал своё, дальнейший рост актива отрабатываться не будет, т.к. продавать нечего, а в маржиналку мы не лезем.
Посмотрим по отчёту: за 25 дней было выполнено 7 сделок (покупка-продажа), на которых мы заработали 13,28 рублей. Вроде немного, но посмотрим ниже.
Во сколько нам обходится каждая сделка, можно посмотреть на вкладке "Операции".
На ней можно посмотреть, когда был куплен и затем продан лот, сколько Прибыли было получено.
В настройках робота у нас дельта на покупку-продажу была настроена на 1%. Но мы видим, что фактически получаем плавающую прибыль от 0,9% до 1,13% за счёт "Проскальзывания ордеров".
Даты выхода / входа указаны в порядке выхода из позиции.
В самом верху, наш самый первый лот, который купили 16 декабря и он закрылся 10 января. За 25 дней заработали 2.1 рублей при вложенных 199.6.
Самый нижний, это второй лот, купленный 17 декабря и успешно закрытый 18 декабря. Получили 1.78 рублей за один день при вложенных 197.0.
В этом и есть проблема расчёта "чистой" прибыли работы робота. Каждый купленный лот может отработать как через месяц, так и в течении часа. Плюс к этому добавляется то, что при покупке лотов, нам необходимо вложить определенную сумму. Которую мы замораживаем в активе и которая каждый день может меняться в ту или другую сторону.
Можно сделать определенные расчёты, и примерно посмотреть, реальную картину.
Посмотрим вкладку "Сигналы".
В этой владке можно уже посмотреть все сигналы на покупку / продажу по-порядку. От первого до последнего. Зеленый цвет: покупаем лот. Красный цвет: лот продаём.
Из важного: последний столбец. Он нам даёт возможность оценить максимальное количество купленных лотов, и соответственно денежный эквивалент. Ту максимальную сумму, которую нам пришлось "заморозить" в активах.
Попробуем оттолкнуться именно от этого. Что тоже не верно, но примем упрощение.
Для расчёта прибыли буду использовать сервис intelinvest.ru
Использую его уже несколько лет, и пару лет на распродаже купил вечную подписку. Есть нюансы использования, но в целом всё устраивает.
В intelinvest.ru создал отдельный Портфель. И можно было бы загрузить брокерский отчёт, но т.к. робот для статьи работал на том же счету, что и другие мои роботы, отдельную выгрузку по нему получить не получится.
Пришлось все сигналы завести вручную. Благо их не много.
За основу взял 800 рублей: 4 лота по 200 рублей. Относительно её и будет рассчитываться наша прибыль.
Да, прибыль не сошлась с данными робота на 0,02 рубля. Разбираться не стал, возможно какой-то лот неверно занёс. Роли не играет.
По итогу получаем: Прибыль в 1,66% за 25 дней. Это примерно 24% годовых.
По факту больше, т.к. 800 рублей были "заморожены" только при покупке 4 лотов, а это было всего 4 дня. В остальные дни требуемая сумма была 600-400-200 рублей, относительно которых и правильней считать. И даже если эти 800 или даже 2000 рублей мы внесли на счёт заранее, просто на брокерский счёт, то их можно было бы вложить в Денежный фонд AKMM. Таким образом временно припарковать "не работающие" деньги.
Алгоритм работы стандартного робота
Как мы видим, после продажи все позиции, робот по сути прекратил свою работу.
Оно, в принципе, верно. Алгоритм работы стандартного робота StepByStep_v2 такой:
- Мы находим актив, который знаем, что в ближайшее время пойдёт в рост, допустим на 10%
- Мы закупаем определенное количество лотов, например 100.
- Ставим цели на продажу/покупку 10 лотов на каждый 1% измерения стоимости актива.
- Получаем профит от роста актива + "снимаем" дополнительные сливки в период снижения стоимости актива.
По-хорошему, после отработки актива, надо переходить на новый. Т.к. если рост отработан, можно либо засесть в нём, либо затем понабрать лотов на снижении.
Работа с "вечными" активами
Есть другая стратегия
С "вечными" активами нет необходимости сразу покупать большое количество лотов, для его дальнейшей распродажи.
Надо учесть, что максимальные значения активов случаются не так часто. И любой рост заканчивается его последующим падением. И мы в этом время набираем позиции, на которые нужны средства.
Пример "вечных" активов: AKGD и AKME.
Плюсы: активы, которые показывают исторический рост. Нет комиссий за покупку/продажу.
Минусы: просадка может быть серьёзной. Свободных средств может и не хватить. Впрочем, это относится к любым активам на бирже.
Базовая доработка робота
Первая доработка стандартного робота: это автоматический запуск робота при продаже последнего лота.
В момент активного роста актива, перезапустить остановившийся робот мы просто не успеем. И потеряем возможность заработать ещё небольшую прибыль. Да и вручную перезапускать, это надо постоянно быть онлайн.
В общем, вы поняли.
Для автоматического запуска робота повторно, после продажи всех позиций, необходимо создать робот на основе StepByStep_v2 и внести правки:
Необходимо скорректировать Правило 2: выделил жирным то, что необходимо добавить. Можно просто заменить всё правило копипастом.
//Правило 2. Если цена упала и кол-во меньше допустимого,
// то покупаем и добавляем цену покупки в начало списка
if (Input1.Close[0] <= MinPrice* (1.0 - 0.01 * DeltaPercent) && pos + Q <= LongLimit || (xPosition == 0 && inited))
{
if(activeOrder != null && !activeOrder.IsStatusTerminal)
{
if(activeOrder.OrderDirection != OrderDirection.Buy)
CancelActiveOrders(true);
return;//ждём исполнения уже выставленной заявки
}
// если все распродали покупаем Q
if (xPosition == 0 && inited)
{
EnterLong(Q);
}
else
{
EnterLongLimit(MinPrice* (1.0 - 0.01 * (DeltaPercent - OrderSlippage)), Q);
}
var lastSignal = GetLastSignalInfo();
if(lastSignal != null)
{
lastSignalId = lastSignal.SignalID;
lastSignalProcessed = 0;
}
}
После корректировки Сохраняем робот и проводим обязательное Тестирование перед первым запуском.
На этом всё!
Подробно, как создать свой робот на основе, как проводить тестирование напишу уже на своей платформе в Sponsr.
Альфа-Инвестиции. Корректировка торговых роботов
Впереди ещё одна важная корректировка робота.