Каждый отдельный робот в OsEngine может открывать множество разнонаправленных позиций. При этом, чтобы различать позиции для различного управления ими в будущем, их необходимо помечать. Поговорим об одном из способов помечать позиции через поля SignalTypeOpen и SignalTypeClose у позиции.
Разберём робота, который торгует ДВЕ торговые логики одновременно, разделяя логику как раз по сигналам.
1. О чём речь?
Каждый экземпляр класса робота одновременно может вести несколько позиций. Фактически это число ничем не ограниченно, все упирается в производительность железа и размер средств на счете. В таких случаях роботу бывает необходимо разделять позиции по каким-либо критериям, например, по причинам открытия и/или закрытия позиции. Для этих целей в классе Position имеется два открытых поля:
public string SignalTypeOpen
public string SignalTypeClose
Оба они могут содержать произвольное строковое значение, передаваемое через торговые методы.
Как правило, сигналы используются для анализа позиций и удобства восприятия информации, но также с их помощью можно строить сложные торговые системы, основанные на ветвлении логики в зависимости от сигнала, приведшего к открытию и закрытию позиции.
2. Открываем робот-пример. TwoEntrySample.
На ГитХаб в репозитории OsEngine это находится здесь.
Внутри проекта здесь:
3. У робота два индикатора, по которым он одновременно торгует.
В остальном он стандартен:
1. Параметры для настройки.
2. Два индикатора. Envelops и PriceChannel. Два индикатора канала.
3. Источник для подключения к одному инструменту.
4. Вход в логику у него через событие завершения свечи.
Настройки такие:
За что отвечают параметры:
1. Regime – режим работы.
a. Off – Выключен.
b. On – Включен и будет входить и в лонг и в шорт.
2. Volume type – режим выбора объёма.
a. Contracts – кол-во контрактов инструмента.
b. Contract currency – валюта контракта.
c. Deposit percent – процент от депозита.
3. Volume – значение объёма. Что именно, зависит от предыдущего пункта. В случае Contracts тут указывается объём инструмента. В случае Contract currency здесь указывается кол-во рублей или долларов, которыми нужно войти. В случае с Deposit percent здесь указывается % от общего депозита, которым нужно войти в контракт.
4. Asset in portfolio – тут нужно указывать название валюты, которое будет использовано для расчёта объёма, если Вы выбрали тип объёма “Deposit percent”. В тестере оставляем «Prime». На крипте это обычно “USDT”.
5. Envelop deviation – отклонение для индикатора Envelops.
6. Envelop moving length – длина центральной линии индикатора Envelops.
7. Price channel length – длина индикатора PriceChannel.
4. Во время открытия позиции помечаются строковым сигналом.
Для этого в методе открытия позиции добавляется один параметр:
5. Докупаем вторую позицию, обращая внимание на сигнал в первой.
Если у нас открыта одна позиция с каким-то сигналом, то по ней больше в логику открытия не входим:
6. Сортируем позиции по разным методам закрытия, смотря на сигнал.
Логику закрытия тоже разделяем на две, в зависимости от сигнала открытия:
7. Тип позиции в интерфейсе.
В таблице позиций в роботах и главном интерфейсе есть колонки «Signal Type Open» и «Signal Type Close». Если Вы помечаете позиции таким образом, в данных колонках Вы увидите тип сигнала:
Удачных алгоритмов!
Поддержка OsEngine: https://t.me/osengine_official_support
Комментарии