некорректное свойство Position.CurrentValue
Atom
24.01.2012


В альфа коннекторе в значение CurrentValue попадает значение "свободной позиции". То есть если есть позиция 20 бумаг, и есть стоп заявка на эти 20 бумаг в CurrentValue будет стоять 0.

Это ожидаемое поведение??? Я полагаю что нет. В CurrentValue должна быть текущая позиция я так полагаю? А учет стоп заявок и прочих блокировок должно отржаться в BlockedValue. В данный момент там стоит цифра 0, а по идее для вышеописанной ситуации там будет стоять 20. То есть CurrentValue=20; BlockedValue=20

Если прикупить еще 10 бумаг то будет:CurrentValue=30; BlockedValue=20

Если это баг, буду исправлять.

Теги:


Спасибо: Sergey Masyura


< 1 2 
seashaman

Фотография
Дата: 29.01.2012
Ответить


Sergey Masyura Перейти
seashaman Перейти
OvcharenkoVI Перейти
seashaman Перейти
а никто не сталкивался с проблемой, когда АД выдает ордера только за последние сутки примерно, в итоге при новом запуске, при считывании ордеров, может сформироваться шортовая позиция на лонговой стратегии?


а это всегда так было

интересно, наверняка в альфе есть поле срока хранения ордеров где-нить внутри... а то пришлось весь контроль позиций самому писать и хранить отдельно в итоге.


Исполненные ордера доступны только за последнюю сессию (с учетом вечерней), в Quik также. Как может при считывании ордеров формироваться какая-либо позиция? Есть таблица с балансами/позициями - вся информация есть в ней. У ордеров есть срок действия, его можно задавать при регистрации.

Сергей, в моем случае получается следующая ситуация: с одного счета торгуется несколько стратегий, позиция финальная может быть например нулевой, но по факту три стратегии стоит в шорт, а три в лонг. То есть если весь комплекс перезапустить, и посмотреть позицию, без учета ордеров и внутреннего состояния каждой стратегии, то выяснится, что мы вне рынка, хотя на самом деле проистекают бурные процессы). Конечно как решение на каждую стратегию выделять отдельный счет, но это сильно много чести. Решение ориентироваться стратегии по исполненным ордерам в таком случае тоже не получается, ибо если в позицию вошли три дня назад, то уже встроенными средствами S# мы концов не найдем. В итоге мною было принято решение вести на каждую стратегию внутреннее состояние, мне все равно это приходилось делать, в стратегии много плывущих со временем параметров и один ресет не должен вышибать из тапок весь комплекс. Ну и заодно запихнул туда учет позиций. Понимаю что это идеологически неверно, но как по другому(встроенными методами) решить свою задачу я не придумал. В принципе, можно это все завалить на плечи коннектора, это было бы правильнее. Может это уже сделано, но я в примерах и в доках этого не заметил.
Спасибо:

Sergey Masyura

Фотография
Дата: 30.01.2012
Ответить


seashaman Перейти
Sergey Masyura Перейти
seashaman Перейти
OvcharenkoVI Перейти
seashaman Перейти
а никто не сталкивался с проблемой, когда АД выдает ордера только за последние сутки примерно, в итоге при новом запуске, при считывании ордеров, может сформироваться шортовая позиция на лонговой стратегии?


а это всегда так было

интересно, наверняка в альфе есть поле срока хранения ордеров где-нить внутри... а то пришлось весь контроль позиций самому писать и хранить отдельно в итоге.


Исполненные ордера доступны только за последнюю сессию (с учетом вечерней), в Quik также. Как может при считывании ордеров формироваться какая-либо позиция? Есть таблица с балансами/позициями - вся информация есть в ней. У ордеров есть срок действия, его можно задавать при регистрации.

Сергей, в моем случае получается следующая ситуация: с одного счета торгуется несколько стратегий, позиция финальная может быть например нулевой, но по факту три стратегии стоит в шорт, а три в лонг. То есть если весь комплекс перезапустить, и посмотреть позицию, без учета ордеров и внутреннего состояния каждой стратегии, то выяснится, что мы вне рынка, хотя на самом деле проистекают бурные процессы). Конечно как решение на каждую стратегию выделять отдельный счет, но это сильно много чести. Решение ориентироваться стратегии по исполненным ордерам в таком случае тоже не получается, ибо если в позицию вошли три дня назад, то уже встроенными средствами S# мы концов не найдем. В итоге мною было принято решение вести на каждую стратегию внутреннее состояние, мне все равно это приходилось делать, в стратегии много плывущих со временем параметров и один ресет не должен вышибать из тапок весь комплекс. Ну и заодно запихнул туда учет позиций. Понимаю что это идеологически неверно, но как по другому(встроенными методами) решить свою задачу я не придумал. В принципе, можно это все завалить на плечи коннектора, это было бы правильнее. Может это уже сделано, но я в примерах и в доках этого не заметил.


У стратегии есть PositionManager - при старте стратегии можно ему руками задать начальную позицию (сохраненную в настройках на последнем выходе). Дальще PM сам будет по ордерам считать позицию. Но так как код, который считает позицию закрыт, то я бы вероятно тоже сделал свое решение, чем бодаться неизвестно с чем.

Касательно идеологии - каждый делает так, как ему удобнее, я в этом плане не исключение.
Спасибо:
< 1 2 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy