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


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

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

Спасибо,

Теги:


Спасибо:


Alexander

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


Смотрите в сторону StrategyPnLManager
Спасибо:

apostar

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


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

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

Код

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


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

Код

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


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

Версия S# : 4.0.3
Спасибо:

Alexander

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


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

apostar

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


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

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

Вот так не работает.
Код

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

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

    ...
}


А вот так работает.
Код

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

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

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

    ...
}
Спасибо:

Alexander

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


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

apostar

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


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

Alexander

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


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


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

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

apostar

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


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

Код

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


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


Цитата:

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

Вероятно, стоило написать "ожидалось в моей стратегии" [blush]
Спасибо:


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

loading
clippy