Unrealized Pnl по открытым позициям

Unrealized Pnl по открытым позициям
Atom
12/25/2011
apostar


Здравствуйте,

Имеется стратегия парной торговли, реализованная в виде BasketStrategy и нескольких принадлежащих ей ChildStrategies, каждая работает со своей Security. Есть ли удобный способ в S# посчитать суммарный Unrealized PnL (по открытым позициям) в рублях для этих стратегий, не используя TraderPnLManager (потому что параллельно работает еще одна стратегия)?

Спасибо,


Tags:


Thanks:


Alexander

Avatar
Date: 12/26/2011
Reply


Смотрите в сторону StrategyPnLManager

Thanks:

apostar

Avatar
Date: 12/26/2011
Reply


Спасибо. Попробовал SecurityPnLManager в каждой из стратегий с последующим суммированием всех Position * Price * MinStepPrice / MinStepCount. Первая попытка с StrategyPnLManager не задалась, такое впечатление что не умножает на MinStepPrice / MinStepCount. Наверное что-то неправильно инициализирую - используется EmulationTrader и Security инициализируются вручную.

Заметил еще одну вещь - при использовании EmulationTrader при совершении сделок видно изменение PnL при приходе новых котировок. Например:

[code=plain] 00:03:59.990 | | MACS_RIZ1 | Правило 'Изменение стакана инструмента RIZ1@RTS' активировано. 00:03:59.990 | | MACS_RIZ1 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 00:03:59.990 | | MACS_RIZ1 | Правило 'Изменение стакана инструмента RSZ1@RTS' активировано. 00:03:59.990 | | MACS_RIZ1 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 00:04:59.990 | | MACS_RIZ1 | Правило 'Изменение стакана инструмента RIZ1@RTS' активировано. 00:04:59.990 | | MACS_RIZ1 | : TransactionId=65003398, Id=0, Price=0, Balance=1, Security=RIZ1@RTS, State=None 00:04:59.990 | | MACS_RIZ1 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 00:04:59.990 | | MACS_RIZ1 | Новая Buy сделка 1 по цене 155006 на 1 заявки 65003397. 00:04:59.990 | | MACS_RIZ1 | Новая Buy сделка 2 по цене 154976 на 1 заявки 65003398. 00:04:59.990 | | MACS_RIZ1 | Правило 'Изменение позиции стратегии MACS_RIZ1' активировано. 00:04:59.990 | | MACS_RIZ1 | Правило 'Полное исполнение 0' активировано. 00:04:59.990 | | MACS_RIZ1 | Правило 'Полное исполнение 0' удалено. 00:04:59.990 | | MACS_RIZ1 | Правило 'Изменение стакана инструмента RSZ1@RTS' активировано. 00:04:59.990 | | MACS_RIZ1 | Pos: 1 PnL -2 UnrealizedPnl -2 Total Pnl -8 00:05:59.990 | | MACS_RIZ1 | Правило 'Изменение стакана инструмента RIZ1@RTS' активировано. 00:05:59.990 | | MACS_RIZ1 | Pos: 1 PnL -20 UnrealizedPnl -20 Total Pnl -26 00:05:59.990 | | MACS_RIZ1 | Правило 'Изменение стакана инструмента RSZ1@RTS' активировано. 00:05:59.990 | | MACS_RIZ1 | Pos: 1 PnL -20 UnrealizedPnl -20 Total Pnl -26 00:06:59.990 | | MACS_RIZ1 | Правило 'Изменение стакана инструмента RIZ1@RTS' активировано. 00:06:59.990 | | MACS_RIZ1 | Pos: 1 PnL -20 UnrealizedPnl -20 Total Pnl -26 00:06:59.990 | | MACS_RIZ1 | Правило 'Изменение стакана инструмента RSZ1@RTS' активировано. 00:06:59.990 | | MACS_RIZ1 | Pos: 1 PnL -20 UnrealizedPnl -20 Total Pnl -24 00:07:59.990 | | MACS_RIZ1 | Правило 'Изменение стакана инструмента RIZ1@RTS' активировано. 00:07:59.990 | | MACS_RIZ1 | Pos: 1 PnL -32 UnrealizedPnl -32 Total Pnl -36 [/code]

То же самое упражнение при использовании RealTimeEmulationTrader показывает что SecurityPositionManager и SecurityPnLManager по каким-то причинам не смогли понять что были совершены сделки.

[code=plain] 18:23:52.276 | | MACS_RIH2 | Правило 'Изменение стакана инструмента RIH2@RTS' активировано. 18:23:52.277 | | MACS_RIH2 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 18:23:52.352 | | MACS_RIH2 | Правило 'Изменение стакана инструмента RIH2@RTS' активировано. 18:23:52.365 | | MACS_RIH2 | : TransactionId=66219600, Id=0, Price=0, Balance=1, Security=RIH2@RTS, State=None 18:23:52.367 | | MACS_RIH2 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 18:23:52.368 | | MACS_RIH2 | Правило 'Изменение стакана инструмента RIH2@RTS' активировано. 18:23:52.368 | | MACS_RIH2 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 18:23:52.402 | | MACS_RIH2 | Новая Buy сделка 1 по цене 9592 на 1 заявки 66219599. 18:23:52.431 | | MACS_RIH2 | Новая Buy сделка 2 по цене 139660 на 1 заявки 66219600. 18:23:52.432 | | MACS_RIH2 | Правило 'Полное исполнение 0' активировано. 18:23:52.435 | | MACS_RIH2 | Правило 'Полное исполнение 0' удалено. 18:23:52.471 | | MACS_RIH2 | Правило 'Изменение стакана инструмента RSH2@RTS' активировано. 18:23:52.471 | | MACS_RIH2 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 18:23:52.472 | | MACS_RIH2 | Правило 'Изменение стакана инструмента RSH2@RTS' активировано. 18:23:52.473 | | MACS_RIH2 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 18:23:52.494 | | MACS_RIH2 | Правило 'Изменение стакана инструмента RIH2@RTS' активировано. 18:23:52.496 | | MACS_RIH2 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 18:23:52.497 | | MACS_RIH2 | Правило 'Изменение стакана инструмента RIH2@RTS' активировано. 18:23:52.498 | | MACS_RIH2 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 18:23:52.603 | | MACS_RIH2 | Правило 'Изменение стакана инструмента RIH2@RTS' активировано. 18:23:52.604 | | MACS_RIH2 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 18:23:52.605 | | MACS_RIH2 | Правило 'Изменение стакана инструмента RIH2@RTS' активировано. 18:23:52.605 | | MACS_RIH2 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 18:23:52.650 | | MACS_RIH2 | Правило 'Изменение стакана инструмента RSH2@RTS' активировано. 18:23:52.651 | | MACS_RIH2 | Pos: 0 PnL 0 UnrealizedPnl 0 Total Pnl 0 [/code]

Не могли бы помочь понять в чем может быть дело?

Версия S# : 4.0.3

Thanks:

Alexander

Avatar
Date: 12/26/2011
Reply


Большая просьба в первую очередь поставить 4.0.11, т.к. со времён 4.0.3 было очень много фиксов.

Thanks:

apostar

Avatar
Date: 12/28/2011
Reply


Александр, поставил 4.0.11, не помогло.

В стратегии подменяются PositionManager и PnLManager в перегруженном методе Start().

Вот так не работает. [code=csharp] ///

/// Запустить торговый алгоритм. /// public override void Start() { // Change the position manager. PositionManager = new SecurityPositionManager(Security);

// Change the PnL Manager
PnLManager = new SecurityPnLManager(Security);

...

} [/code]

А вот так работает. [code=csharp] ///

/// Запустить торговый алгоритм. /// public override void Start() { Security.Trader = Trader;

// Change the position manager.
PositionManager = new SecurityPositionManager(Security);

// Change the PnL Manager
PnLManager = new SecurityPnLManager(Security);

...

} [/code]

Thanks:

Alexander

Avatar
Date: 12/28/2011
Reply


Т.е. в итоге заработало? Сделайте инициализацию Security.Trader = Trader при создании инструмента.

Thanks:

apostar

Avatar
Date: 12/29/2011
Reply


Да, заработало. Дело, кажется, вот в чем: я использую ITrader = RealTimeEmulationTrader для тестирования стратегии, но когда я смотрю на Securities полученные из ITrader, я вижу что в свойстве Trader у этих Securities стоит экземпляр класса SmartTrader, а не RealTimeEmulationTrader как ожидалось.

Thanks:

Alexander

Avatar
Date: 12/29/2011
Reply


[quote=apostar;15274]Да, заработало. Дело, кажется, вот в чем: я использую ITrader = RealTimeEmulationTrader для тестирования стратегии, но когда я смотрю на Securities полученные из ITrader, я вижу что в свойстве Trader у этих Securities стоит экземпляр класса SmartTrader, а не RealTimeEmulationTrader как ожидалось.[/quote]

Это логично, т.к. все инструменты в действительности приходят из RealTimeEmulationTrader.Trader, т.е. на самом деле из SmartTrader

И что значит ожидалось? Ожидалось кем, зачем? :)

Thanks:

apostar

Avatar
Date: 12/29/2011
Reply


Я просто почему-то подумал ([blush]) что все элементы в Trader.Securities будут иметь ссылку именно на тот экземпляр Trader'а, которому они принадлежат чтобы избежать потенциальных проблем с использованием extension методов и подпиской на события. Выдуманный пример - если в стратегии есть следующая логика:

[code=plain]

  1. Выбрать нужные Securities из this.Trader.Securities
  2. Для каждой из этих Securities выполнить security.Trader.NewMyTrades += FooHandler [/code]

То есть FooHandler будет подписан на событие NewMyTrades класса SmartTrader, а не RealTimeEmulationTrader, который и будет эмулировать эти MyTrades. Каюсь, не проверял, но заподозрил что если в описанной ситуации SmartTrader наблюдает за сделками пришедшими из SmartCOM, то FooHandler не будет вызван потому что сделка сгенерируется в RealTimeEmulationTrader, а не в SmartTrader.

[quote] И что значит ожидалось? Ожидалось кем, зачем? :) [/quote] Вероятно, стоило написать "ожидалось в моей стратегии" [blush]

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy