Работа с позициями

Доступ ко всем позициям скрипта осуществляется через свойство ISecurity.Positions. ISecurity.Positions - это список позиций.

Для каждой позиции назначается название сигнала. В один момент может быть активна только одна позиция с одним названием.

Например, если создали позицию "LE" и ее не закрыли, то нельзя создать вторую позицию с таким же названием.

Открытие позиции

Для открытия позиций используются методы sec.Positions.BuyXXX(...) для покупки и sec.Positions.SellXXX(...) для продажи.

Примеры покупок:

sec.Positions.BuyAtMarket(i + 1, 2, "LE"); // Купить два контракта по рынку на следующем баре.
sec.Positions.BuyAtPrice(i + 1, 2, 65000, "LE"); // Выставить лимитную заявку на покупку двух контрактов на следующем баре по цене 65000.
sec.Positions.BuyIfGreater(i + 1, 2, 65000, "LE"); // Выставить условный ордер на покупку двух контрактов на следующем баре если цена будет выше 65000.
sec.Positions.BuyIfLess(i + 1, 2, 65000, "LE"); // Выставить условный ордер на покупку двух контрактов на следующем баре если цена будет ниже 65000.

Примеры продаж:

sec.Positions.SellAtMarket(i + 1, 2, "LE"); // Продать два контракта по рынку на следующем баре.
sec.Positions.SellAtPrice(i + 1, 2, 65000, "LE"); // Выставить лимитную заявку на продажу двух контрактов на следующем баре по цене 65000.
sec.Positions.SellIfGreater(i + 1, 2, 65000, "LE"); // Выставить условный ордер на продажу двух контрактов на следующем баре если цена будет 65000.
sec.Positions.SellIfLess(i + 1, 2, 65000, "LE"); // Выставить условный ордер на продажу двух контрактов на следующем баре если цена будет ниже 65000

Получение позиции

Часто используемый метод для получения позиции GetLastActiveForSignal(...), пример:

Метод ищет активную позицию с названием "LE" и ее возвращает, если нету позиций, то метод вернет null.

Также существуют другие методы для получения позиций, все они пишутся так: sec.Positions.GetXXX(...).

Изменение позиции

Для изменении размера позиции используются методы pos.ChangeAtXXX(...), при этом передается размер новой позиции.

Например, чтобы увеличить длинную позицию на 2 контракта по рынку, надо написать pos.ChangeAtMarket(i + 1, pos.Shares + 2, "LX"); Тут pos.Shares показывает текущее количество контрактов позиции, а когда мы передаем pos.Shares + 2, это означает, что надо увеличить позицию на 2 контракта.

Если же передать отрицательное значение, например -3, то позиция перевернется в короткую с тремя контрактами.

Примеры:

Закрытие позиции

Для закрытия позиции используются методы pos.CloseAtXXX(...).

Примеры:

Важно заметить, что методы которые закрывают позицию по условию (CloseAtPrice, CloseAtProfit, CloseAtStop) должны выставляться на каждом баре пока не закроется позиция, иначе TSLab снимет ордер закрытия на бирже.

Некоторые методы позиции:

Для примера напишем скрипт, который будет покупать после растущей свечи по рынку и выставлять стоп 200 пунктов и тейк 400 пунктов:

Last updated

Was this helpful?