public Security Securiti
Свойство предоставляет доступ к торговому инструменту вкладки. В инструменте содержится множество полезных данных. Ниже мы рассмотрим несколько сценариев использования этих данных.
На некоторых торговых площадках присутствуют секции, которые не поддерживают рыночные заявки. Мы можем самостоятельно сэмулировать такую заявку при помощи лимитного ордера. Например, для покупки нужно использовать цену, которая выше цены лучшего предложения в стакане. Такой отступ можно назвать максимально допустимым проскальзыванием. Но есть проблема. Она заключается в том, что многие инструменты имеют разный шаг цены и в топорном варианте пришлось бы подстраивать робота под каждый инструмент. Чтобы сделать его универсальным для всех бумаг, используем свойство PriceStep.
Некоторые инструменты имеют верхнюю и нижнюю границу цены, за пределами которой запрещено выставлять заявки. Чтобы избежать получения ошибки при выставлении ордера, нужно проверить эти самые границы. В классе Security имеется два поля – PriceLimitHigh и PriceLimitLow – верхняя и нижняя границы соответственно. Используем их в торговой логике.
При торговле срочными контрактами полезным будет значение поля Expiration, которое содержит дату завершения обращения контракта. Чтобы на момент экспирации робот не остался в позиции и не попал на «поставку», внедрим следующую логику: за день до экспирации робот закрывает все позиции, останавливает торговлю и высылает информационное сообщение.
Метод проверяет, не пора ли остановить торговлю в виду приближения экспирации.
И далее используем этот метод в качестве фильтра:
Часто встречающийся кейс в роботах для крипты – перевод монет в торговый объем. Допустим вы хотите не задавать объем для каждой бумаги вручную, а чтобы каждый бот использовал для торговли по 100 USDT. Для этого нужно конвертировать монеты в объем.
Рассмотрим на примере пары ETH/USDT. ETH – котируемая валюта, USDT – базовая валюта. Чтобы купить котируемую валюту, нужно отдать базовую. То есть, если цена инструмента равна 1872, значит, чтобы купить один эфир, нужно потратить 1872 USDT. Но нам нужно, чтобы бот покупал на 100 USDT.
Для уточнения объема используется такой параметр инструмента как Lot – точность объема. Представим, что Lot для пары ETH/USDT равен 0,01 и рассчитаем нужный нам объем.
dirtyVolume = 100 / 1872 = 0,0534188034188034
Но такое значение биржа не примет, так как точность в нашем случае не более двух знаков после запятой. Чтобы отбросить лишние цифры, разделим это значение на Lot. Возьмем целую часть от полученного числа и умножим на Lot.
clearVolume = 0,0534188034188034 / 0,01 = 5,341880341880342 (отбрасываем дробную часть) = 5 * 0,01 = 0,05
Итого мы выяснили, чтобы купить ETH примерно на 100 USDT, необходимо выставить ордер с объемом 0,05.
Комментарии