Одновременный выход из позиций лимитками, ожидающими в рынке.

Одновременный выход из позиций лимитками, ожидающими в рынке.

Рассмотрим пример того, как выходить из позиции двумя (вообще можно больше, но в примере 2) лимитными ордерами одновременно.

Метод, которым будем пользоваться для закрытия позиций, называется CloseAtLimitUnsafe. Отличие от CloseAtLimit такое:

  1. Старый CloseAtLimit, когда Вы его вызываете, отзывает все другие ордера на закрытие позиции.
  2. CloseAtLimitUnsafe никакие заявки не отзывает. Просто выставляет в рынок очередной ордер, не обращая внимания на предыдущие. Т.ч. надо быть аккуратными при его использовании.

Точка входа у робота контртредовая на канале Envelops.

Итоговая логика робота на графике выглядит так:



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

 

1. Открываем робот-пример. UnsafeLimitsClosingSample.

На ГитХаб в репозитории OsEngine это находится здесь:

https://github.com/AlexWan/OsEngine

Внутри проекта здесь:


 

2. Конструктор и сервисный код.

 

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 limit one percent – расстояние, на котором будет выставлен первый лимитный ордер на закрытие позиции.
9. Profit limit two percent – расстояние, на котором будет выставлен второй лимитный ордер на закрытие позиции.

 

3. Вход в логику в событии завершения свечи.

1. Если режим робота Off, выходим из метода.

2. Если данных по индикатору нет, выходим из метода.

3. Если данных в индикаторе меньше, чем его длина расчёта, выходим из метода.

4. Берём все позиции у источника.

5. Если позиций нет, но режим не позволяет открывать новые позиции, выходим из метода.

6. Если позиций нет, и режим позволяет, идём в метод открытия позиции.

7. Если позиции есть, идём в метод закрытия позиций.

 

4. Логика открытия позиций.

1. Берём значения индикатора и последней цены по свечам.

2. Если вдруг значения индикаторов почему-то равны нулю, выходим из логики.

3. Если цена выше канала, продаём.

4. Если цена ниже канала, покупаем.

 

5. Логика закрытия позиций.

1. Если ранее был активирован стоп приказ, или позиция ещё открывается, выходим из метода.

2. Если по позиции нет закрывающих ордеров, заходим в эту ветку кода.

3. Рассчитываем цену для ордеров на закрытие.

4 Считаем кол-во исполненных ордеров, чтобы не выставить лишнего. Это нужно, т.к. на Московской бирже ордер может быть отозван после клиринга, но при этом уже какие-то раньше ордера исполнялись, и остался один ордер на закрытие.

5. Если ранее по позиции не было исполненных закрывающих ордеров, выставляем два ордера на закрытие.

6. В случае, если по позиции уже был исполненный лимит ордер, выставляем один.

7. В логику закрытия по стоп-приказу заходим один раз, просматривая для этого цену ордера.

8. Считаем цену стоп-ордера отдельно для лонгов, отдельно для шортов.

9. Выставляем стоп-ордер.

 

6. На выходе.

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

Удачных алгоритмов!

Комментарии открыты для друзей!

 

P.S.

Os Engine поддержка терминала: https://t.me/osengine_official_support 

Обсуждаем в телеграмме: https://t.me/o_s_a_chat

Канал проекта: https://t.me/bad_quant

17:41
68

Комментарии

Нет комментариев. Ваш будет первым!