Рассмотрим пример того, как усреднять позицию, выставляя в рынок одновременно несколько ордеров.
Методы, которыми будем пользоваться для усреднения позиций, называются BuyAtLimitToPositionUnsafe и SellAtLimitToPositionUnsafe. В отличие от старых методов (Без приписки Unsafe), данные методы не убирают предыдущие ордера на усреднение, и можно выставить в рынок множество ордеров.
Точка входа у робота контртредовая на канале Envelops.
Итоговая логика робота на графике выглядит так:

Шорт, прикрытый стоп ордером, выход в плюс через профит, и два лимитных ордера на бирже для усреднения.
На ГитХаб в репозитории OsEngine это находится здесь:
https://github.com/AlexWan/OsEngine
Внутри проекта здесь:


1. Поле для хранения источника BotTabSimple. В это поле потом мы положим объект источника и сможем обращаться к нему из любой части робота. Так удобнее.
2. Поле для хранения индикатора.
3. Параметры. Чуть позже поговорим про каждый.
4. Создание источника BotTabSimple.
5. Создание параметров.
6. Создание индикатора Envolops. Установка его длины и отклонения из параметров.
7. Подписка на событие CandleFinishedEvent (завершение свечи). В обработчике этого события будет вся торговая логика.
8. Подписка на событие изменение параметров. В этом обработчике мы будем устанавливать индикатору новое значение длины.
9. Отключаем автоматическое сопровождение позиции.
Настройки такие:

За что отвечают параметры:
1. Regime – режим работы.
1. Off – Выключен.
2. On – включено без ограничений.
3. OnlyLong – открытие только длинных позиций.
4. OnlyShort – открытие только коротких позиций.
5. OnlyClosePosition – доступно только закрытие позиций.
2. Volume type – режим выбора объёма.
1. Contracts – кол-во контрактов инструмента.
2. Contract currency – валюта контракта.
3. Deposit percent – процент от депозита.
3. Volume – значение объёма. Что именно, зависит от предыдущего пункта. В случае Contracts тут указывается объём инструмента. В случае Contract currency здесь указывается кол-во рублей или долларов, которыми нужно войти. В случае с Deposit percent здесь указывается % от общего депозита, которым нужно войти в контракт.
4. Asset in portfolio – тут нужно указывать название валюты, которое будет использовано для расчёта объёма, если Вы выбрали тип объёма “Deposit percent”. В тестере оставляем «Prime». На крипте это обычно “USDT”.
5. Envelops length – длина индикатора Envelops.
6. Envelops deviation – отклонение индикатора Envelops.
7. Stop percent – движение от входа до выхода в % для установки стоп-приказа.
8. Profit percent – движение от входа до выхода в % для установки профит-приказа.
9. Average one percent – расстояние, на котором будет выставлен первый лимитный ордер на усреднение позиции.
10. Average two percent – расстояние, на котором будет выставлен второй лимитный ордер на усреднение позиции.

1. Если режим робота Off, выходим из метода.
2. Если данных по индикатору нет, выходим из метода.
3. Если данных в индикаторе меньше, чем его длина расчёта, выходим из метода.
4. Берём все позиции у источника.
5. Если позиций нет, но режим не позволяет открывать новые позиции, выходим из метода.
6. Если позиций нет, и режим позволяет, идём в метод открытия позиции.
7. Если позиции есть, идём в метод закрытия позиций.

1. Берём значения индикатора и последней цены по свечам.
2. Если вдруг значения индикаторов почему-то равны нулю, выходим из логики.
3. Если цена пробила верхнюю границу канала, продаём.
4. Если цена пробила нижнюю границу канала, покупаем.

1. Если ранее был активирован стоп приказ или профит, или позиция ещё открывается, выходим из метода.
2. Если по позиции нет открывающих ордеров, заходим в эту ветку кода.
3. Рассчитываем цену для ордеров для усреднения.
4. Считаем кол-во исполненных открывающих ордеров, чтобы не выставить лишнего.
5. Если ранее по позиции был только один ордер (т.е. отрывающий позицию), выставляем два ордера на усреднение.
6. Место использования методов для усреднения позиции.
7. В случае, если по позиции уже было два открывающих ордера, т.е. осталось по логике одно усреднение, усредняем.
8. Место использования методов для усреднения позиции.

1. Считаем цену для стопа.
2. Пытаемся перевыставить стоп.
3. Считаем цену для профита.
4. Выставляем профит.
Робот, торгующий контртренд от канала Envelops, прикрытый стоп ордером с выходом в прибыль по Профиту в %, и два лимитных ордера на бирже для усреднения позиции, если цена пошла против нашей позиции.

Удачных алгоритмов!
P.S.
Os Engine поддержка терминала: https://t.me/osengine_official_support
Обсуждаем в телеграмме: https://t.me/o_s_a_chat
Канал проекта: https://t.me/bad_quant
Комментарии