Биржевой инструмент, примеры использования класса Security.

Биржевой инструмент, примеры использования класса Security.
public Security Securiti

Свойство предоставляет доступ к торговому инструменту вкладки. В инструменте содержится множество полезных данных. Ниже мы рассмотрим несколько сценариев использования этих данных.

Использование шага цены для выставления проскальзывания.

На некоторых торговых площадках присутствуют секции, которые не поддерживают рыночные заявки. Мы можем самостоятельно сэмулировать такую заявку при помощи лимитного ордера. Например, для покупки нужно использовать цену, которая выше цены лучшего предложения в стакане. Такой отступ можно назвать максимально допустимым проскальзыванием. Но есть проблема. Она заключается в том, что многие инструменты имеют разный шаг цены и в топорном варианте пришлось бы подстраивать робота под каждый инструмент. Чтобы сделать его универсальным для всех бумаг, используем свойство PriceStep.

  1. Параметр для хранения количества шагов цены.
  2. Получаем размер шага цены для текущего инструмента вкладки.
  3. Рассчитываем размер проскальзывания уже в единицах измерения цены инструмента.
  4. Рассчитываем цену для ордера уже с учетом проскальзывания.

Проверка максимальной и минимальной цены инструмента.

Некоторые инструменты имеют верхнюю и нижнюю границу цены, за пределами которой запрещено выставлять заявки. Чтобы избежать получения ошибки при выставлении ордера, нужно проверить эти самые границы. В классе Security имеется два поля – PriceLimitHigh и PriceLimitLow – верхняя и нижняя границы соответственно. Используем их в торговой логике.

  1. Получаем ссылку на инструмент вкладки.
  2. Проверяем, если цена ордера меньше значения PriceLimitHigh, значит можно выставить условную заявку на покупку.
  3. Аналогично с шортом, если цена потенциальной заявки выше цены PriceLimitLow, значит можно выставить условную заявку на продажу.

Остановка торгов перед экспирацией.

При торговле срочными контрактами полезным будет значение поля Expiration, которое содержит дату завершения обращения контракта. Чтобы на момент экспирации робот не остался в позиции и не попал на «поставку», внедрим следующую логику: за день до экспирации робот закрывает все позиции, останавливает торговлю и высылает информационное сообщение.

Метод проверяет, не пора ли остановить торговлю в виду приближения экспирации.

  1. Принимает 2 параметра – дату экспирации и текущее время на бирже.
  2. Если параметр экспирации имеет значение по умолчанию, значит инструмент торгуется бессрочно, возвращаем false.
  3. Вычисляем отрезок времени, оставшийся до экспирации.
  4. Если общее количество дней в этом отрезке меньше одного, сообщаем роботу, что пора остановить торговлю.
  5. Иначе нет запрета на торговлю.

И далее используем этот метод в качестве фильтра:

  1. Если робот уже выключен, выходим из метода.
  2. Используем созданный выше фильтр, передавая ему дату экспирации инструмента и биржевое время. Если он возвращает истину, останавливаем робота, закрываем все позиции и высылаем в лог информацию.
  3. Иначе продолжаем выполнять торговую логику.

Конвертация криптовалюты в объем.

Часто встречающийся кейс в роботах для крипты – перевод монет в торговый объем. Допустим вы хотите не задавать объем для каждой бумаги вручную, а чтобы каждый бот использовал для торговли по 100 USDT. Для этого нужно конвертировать монеты в объем.

Рассмотрим на примере пары ETH/USDT. ETH – котируемая валюта, USDT – базовая валюта. Чтобы купить котируемую валюту, нужно отдать базовую. То есть, если цена инструмента равна 1872, значит, чтобы купить один эфир, нужно потратить 1872 USDT. Но нам нужно, чтобы бот покупал на 100 USDT.

  1. Метод ConvertMoneyToVolume первым параметром принимает объем базовой валюты, вторым – цену заявки.
  2. Получаем ссылку на инструмент вкладки.
  3. Вычисляем грязный объем, разделив объем базовой валюты на цену.
  4. Вычисляем чистый объем, чтобы он соответствовал требованию биржи, иначе заявка с неточным объемом будет отклонена.

Для уточнения объема используется такой параметр инструмента как 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.

15:03
129
FAQ

Комментарии

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