← Zurück

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

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

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

Спасибо,

War dieses Thema hilfreich?

Thema teilen

Kommentare (8)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Alexander
Alexander

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

apostar
apostar Autor

Спасибо. Попробовал 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
Alexander

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

apostar
apostar Autor

Александр, поставил 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
Alexander

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

apostar
apostar Autor

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

Alexander
Alexander

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

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

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

apostar
apostar Autor

Я просто почему-то подумал (😊) что все элементы в 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.

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