У вас не стоит Flash Player
Настройки
#75668 - Mon Dec 28 2015 04:17 PM Две проблемы заявок стоп-лимит
Alias Offline
stranger

Registered: Thu Jun 25 2015
Записи: 24
Для открытия позиции использую BuyIfGreater.
Торговля в связке TSLab + QUIK.
Срочный рынок FORTS, инструмент RTS

Обнаружилось две проблемы.

Quote:
BuyIfGreater (int barNum, double shares, double price, string signalName) - Открыть новую длинную позицию если цена станет выше цены в заявке.


Проблема первая.

Цена входа в позицию рассчитывается как цена закрытия бара плюс некоторое значение ATR.

Code:
orderEntry = symbol.ClosePrices[i] + atr; 
symbol.Positions.BuyIfGreater(i + 1, 1, orderEntry, "Открытие Лонг");



В результате, TSLab отправляет в QUIK стоп-заявку с orderEntry (Стоп-лимит, при котором заявка должна сработать) и некоторым ограничением максимальной цены (Цена).

Довольно часто, торговая система биржи отклоняет выставленные таким образом заявки с формулировкой «Цена вне лимита».

В частности, по отвергнутой заявке выставленной 23.12.2015 в 18:30:23 с Ценой 81390 и Стоп-лимитом 78390 был задан вопрос в тех.поддержку брокера, на что был получен ответ: «Выяснили причину отклонения заявки: в текущую сессию верхний лимит по инструменту составлял 81290, поэтому заявка с ценой 81390 не прошла.»

Получается, что TSLab исполняет оператор BuyIfGreater через QUIK некорректно. Выставление заявок может происходить с ценой за границей лимита.

Прошу подсказать решение этой проблемы.


Проблема вторая.

Когда происходит отклонение заявки торговой системой, то в QUIK, в таблице стоп-заявок, статус отклоненной заявки стоит «Исполнена», а в колонке примечание – «Отвергнута ТС».


Quote:
RTS-3.16 Купля 4*****2W 81390 1 1790234122 Исполнена Стоп-лимит 78390 Отвергнута ТС SPBFUT



TSLab принимает такую отвергнутую заявку как исполненную, что приводит к нарушению в работе алгоритма. Алгоритм ведет позицию, которая на самом деле открыта не была, и когда приходит сигнал на выход – «закрывает» её. Но по факту происходит не закрытие не открытой лонговой позиции, а открытие позиции в шорт. В результате шорт болтается сам по себе и приводит к убыткам.

Прошу подсказать решение и этой проблемы тоже.

Наверх
#75687 - Thu Dec 31 2015 09:27 AM Re: Две проблемы заявок стоп-лимит [Re: Alias]
Alias Offline
stranger

Registered: Thu Jun 25 2015
Записи: 24
По результатам общения с тех. поддержкой отвечаю на свой первый вопрос.

Есть два метода BuyIfGreater, которые отличаются числом передаваемых аргументов. Один из них позволяет задать slippage - проскальзывание.

Quote:
void TSLab.Script.IPositionsList.BuyIfGreater (
int barNum,
double shares,
double price,
double slippage,
string signalName
)


Если использовать метод без указания проскальзывания slippage, то TSLab берет проскальзывание из настроек Агента.

В моем примере в настройках агента стояло проскальзывание 3000, поэтому и вышло 78390+3000=81390, что оказалось за пределом лимита в 81290.

sec.FinInfo.MaxPrice - позволяет получить верхний действующий лимит цены. Аналогично определяется нижний.

Тогда код будет примерно такой:
Code:
orderEntry = symbol.ClosePrices[i] + atr; 
slippage = sec.FinInfo.MaxPrice - orderEntry;
symbol.Positions.BuyIfGreater(i + 1, 1, orderEntry, slippage, "Открытие Лонг");


и цена не будет уходить за лимит.

Наверх


Moderator:  ViL, sar