некорректное свойство 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




12 Ответов
Sergey Masyura

Фотография
Автор статей
Дата: 24.01.2012
Ответить


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

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

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

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


Привет. Спасибо за баг, у себя такого не замечал, если честно. Надо посмотреть какие поля берутся.
Если есть возможность помочь - буду здорово.
Спасибо:

Sergey Masyura

Фотография
Автор статей
Дата: 24.01.2012
Ответить


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

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

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

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


http://stocksharp.codeplex.com/workitem/852
Спасибо:

ra81

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


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

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

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

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


https://stocksharp.codeplex.com/workitem/852


Ок. Займусь. Там мелочи.
Автор топика
Спасибо:

OvcharenkoVI

Фотография
Автор статей
Дата: 25.01.2012
Ответить


Только на днях мучался с этим свойством) ждем фикса
Спасибо:

ra81

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


В итоге ситуация такая получилась в результате исследования (на MICEX тестил на SBER3):

Если стоп ставится без TargetProfit, тогда "Свободная позиция" будет равна текущему размеру позиции. Стоит только выставить TargetProfit, как размер стопа вычитается из текущей позиции и Position.CurrentValue будет равен этой разнице.

В любом случае это не верно, но стоит принять к сведению тем кто использует уже коннектор.

Закрыл тикет. Не совсем верно коммент вкатил, не до конца ясно что коммит делает. В общем проблему с неработающим экспортом позиций он тоже решает.
http://stocksharp.codepl.../changeset/changes/13844

ПС: привык с GIT работать. Сорри.

ВОРНИНГ: Пока отменил коммит. Возможно есть ошибка. После перепроверки будет ясно.
Автор топика
Спасибо:

seashaman

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


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

Alexander

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


ra81 Перейти
В итоге ситуация такая получилась в результате исследования (на MICEX тестил на SBER3):

Если стоп ставится без TargetProfit, тогда "Свободная позиция" будет равна текущему размеру позиции. Стоит только выставить TargetProfit, как размер стопа вычитается из текущей позиции и Position.CurrentValue будет равен этой разнице.

В любом случае это не верно, но стоит принять к сведению тем кто использует уже коннектор.

Закрыл тикет. Не совсем верно коммент вкатил, не до конца ясно что коммит делает. В общем проблему с неработающим экспортом позиций он тоже решает.
https://stocksharp.codepl.../changeset/changes/13844

ПС: привык с GIT работать. Сорри.

ВОРНИНГ: Пока отменил коммит. Возможно есть ошибка. После перепроверки будет ясно.


Раз появляются такие ворнинги просьба в транк ветку класть только те изменения, в которых уверены на 110%. Всё что подлежит тестированию - в дев ветку.
Из транка я собираю релизы, дев ветка будет помёржена с транком на этапе S# 4.1
Спасибо:

OvcharenkoVI

Фотография
Автор статей
Дата: 27.01.2012
Ответить


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


а это всегда так было
Спасибо:

seashaman

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


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


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

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

Sergey Masyura

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


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


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

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


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

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 сам будет по ордерам считать позицию. Но так как код, который считает позицию закрыт, то я бы вероятно тоже сделал свое решение, чем бодаться неизвестно с чем.

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


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

loading
clippy