Продолжаем изучение скринеров. Сегодня поговорим о правильном расчёте объёма для торгов по отдельным инструментам. Метод, рассматриваемый ниже, Вам пригодится при создании своих роботов на базе скринеров.
Метод, описанный в данном посте, будет использован во всех примерах скринеров, которые будут обсуждаться в данной серии. Посмотрим на него один раз.

1. Открываем пример.
Открываем папку Robots/Screeners и открываем пример SmaScreener.cs:
2. Параметры для расчёта объёма.
Для расчёта объёма сначала нужно создать три параметра:
- Объявление параметров для расчёта объёмов.
- Создание параметров в конструкторе робота.
Параметры:
- VolumeType – тип расчёта объёма, который Вы хотите использовать.
- Volume – значение объёма. В зависимости от разных типов, выбранных первым параметром, данное значение используется в коде по-разному.
- TradeAssetInPortfolio – используется, если выбран тип объёма «Deposit percent». В этом параметре хранится название валюты, которую мы хотим взять для торгов. В большинстве случаев нужно оставлять «Prime».
Сам метод для расчёта объёмов здесь:
На вход метод принимает источник BotTabSimple для расчёта объёма по конкретной бумаге:
3. GetVolume. Режим «Contracts».
Режим выбора объёма, в котором объём указывается пользователем напрямую. В таком случае расчётов не будет:
4. GetVolume. Режим «Contract currency».
Режим «Валюта контракта». Для MOEX нужно указывать рубли, для крипты USDT:
- Считаем объём в валюте контракта. Для этого запрашиваем у источника по бумаге текущую цену.
- Если проходят боевые торги, нужно в обязательном порядке проверить лотность инструмента и обрезать объём по кол-ву возможных знаков после запятой для бумаги.
- Если робот работает в тестере или оптимизаторе, обрезаем объём до 6 знаков после запятой.
5. GetVolume. Режим «Deposit percent».
Режим «Процент от депозита». Самый сложный вариант расчёта объёма.
- Запрашиваем у источника портфель.
- В данном участке кода мы берём текущий доступный объём средств по портфелю. Либо берём в теле портфеля, либо ищем выбранную валюту в позициях по портфелю.
- Рассчитываем объём с учётом лотности инструмента.
- Обрезаем итоговый объём по кол-ву разрешённых знаков у бумаги или, в случае если мы в тестере или оптимизаторе, оставляем 7 знаков после запятой.
Удачных алгоритмов!
Оглавление данной серии статей здесь: https://smart-lab.ru/company/os_engine/blog/1131003.php
Комментарии открыты для друзей!

OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support