← Назад

Врет PnLManager.PnL

Версия самая последняя 17334, с dev-ветки Тестирую в EmulationTrader Врет this.PnLManager.PnL - показывает PnL в два раза больше (по модулю), чем есть на самом деле. Даже кривая на графике в два раза больше показывает. Приятно, конечно - но только пока прибыль показывает))) Пришлось заплатку делать для EquityData, чтобы график не врал

Но если сделать запрос this.MyTrades.GetPnL(), то покажет верно

Комментарии (15)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

OvcharenkoVI
OvcharenkoVI

оффтоп

Показывай всем такую эквити с рельного трейдера и продавай робота за 1****** ))

Кот Матроскин
Кот Матроскин Автор

OvcharenkoVI: Показывай всем такую эквити с рельного трейдера и продавай робота за 1****** )) Такая корова нужна самому)))

fish
fish

при реальной работе также, ВРЕТ :D откатил на старую версию

Кот Матроскин
Кот Матроскин Автор

Кот Матроскин: Но если сделать запрос this.MyTrades.GetPnL(), то покажет верно Пересчитал все сделки вручную - и этот метод привирает процентов на 10-15 в разную сторону...

Mikhail Sukhov
Mikhail Sukhov

Кот Матроскин:

Кот Матроскин: Но если сделать запрос this.MyTrades.GetPnL(), то покажет верно Пересчитал все сделки вручную - и этот метод привирает процентов на 10-15 в разную сторону...

Можете привести числа?

Кот Матроскин
Кот Матроскин Автор

Mikhail Sukhov:

Кот Матроскин:

Кот Матроскин: Но если сделать запрос this.MyTrades.GetPnL(), то покажет верно Пересчитал все сделки вручную - и этот метод привирает процентов на 10-15 в разную сторону...

Можете привести числа?

Mikhail Sukhov
Mikhail Sukhov

Кот Матроскин:

Как по этому логу проверить результаты this.MyTrades.GetPnL() и ручные результаты?

Кот Матроскин
Кот Матроскин Автор

Mikhail Sukhov: Как по этому логу проверить результаты this.MyTrades.GetPnL() и ручные результаты? Экселевский файл из генератора отчетов, в нем справа выделен рамкой ручной расчет, со ссылками на цены. Крайний правый столбик (из трех выделенных) - PnL, расчитанный вручную. В текстовом файле ему соответствует "TotPnL = ...", расчитанный this.MyTrades.GetPnL() Сравнивать желательно четные сделки (купил-продал)

Mikhail Sukhov
Mikhail Sukhov

Кот Матроскин: В текстовом файле ему соответствует "TotPnL = ...", расчитанный this.MyTrades.GetPnL() Сравнивать желательно четные сделки (купил-продал)

this.MyTrades.GetPnL() возвращает PnL с учетом нереализованной прибыли (стоимости открытой позиции). И туда нужно передавать только сделки с открытыми позициями. Тоесть, если у вас сделки то открывают, то закрывают, то нереализованная прибыль будет каждый раз пересчитываться.

Но добавим, пожалуй, проверку для передачи туда всевозможных сделок.

Бага с PnLManager не определена. По ней так же приветствуются детальные отчеты. Плюс лог значение Security.MinStepPrice. И да, все в курсе, что у нас пересчет идет из пунктов в рубли?

Кот Матроскин
Кот Матроскин Автор

Mikhail Sukhov: this.MyTrades.GetPnL() возвращает PnL с учетом нереализованной прибыли (стоимости открытой позиции). И туда нужно передавать только сделки с открытыми позициями. Тоесть, если у вас сделки то открывают, то закрывают, то нереализованная прибыль будет каждый раз пересчитываться. Не знаю, правильно ли делал, но последовательность была такая: подписался на strategy.NewMyTrades и после каждой совершенной сделки (и на открытие позиции, и на закрытие) вызывал strategy.MyTrades.GetPnL(), а затем выводил значение в лог. Если не правильно, то уже не знаю, чем получить адекватное значение PnL - strategy.PnLManager.PnL врет безбожно, показывает в два раз больше, чем GetPnL! Для примера: подписался на strategy.EquityManager.NewEquityData и вывел в лог вместе с GetPnL(). По расчетам, GetPnL еще где-то рядом попадает, а equityData.Value, видимо, берется из PnLManager.PnL:

   equityData.Time                   equityData.Value     GetPnL()
2012.03.02 15:20:17.0000	                 1,49000	   0,79000
2012.03.12 10:10:19.0000	                -0,17000	  -0,08000
2012.03.15 10:20:29.0000	                 0,83000	   0,45000
2012.03.16 17:40:13.0000	                -0,07000	   0,07000
2012.03.20 11:50:28.0000	                -1,53000	  -0,80000
2012.03.21 14:00:33.0000                        -1,76000	  -0,91000
2012.03.27 13:30:08.0000	                 0,83000	   0,58000
2012.03.30 18:30:12.0000	                -0,90000	  -0,32000
2012.04.04 13:20:03.0000	                 0,34000	   0,15000
2012.04.06 15:13:41.0000	                 2,36000	   1,17000
2012.04.11 17:50:24.0000	                 1,50000	   0,81000

Mikhail Sukhov: Бага с PnLManager не определена. По ней так же приветствуются детальные отчеты. Какой-то особенный отчет сделать?

Mikhail Sukhov: Плюс лог значение Security.MinStepPrice. И да, все в курсе, что у нас пересчет идет из пунктов в рубли? MinStepPrice = 0.01m, бумага Сбербанк обычка, пункты и рубли вроде как должны идти один к одному

Mikhail Sukhov
Mikhail Sukhov

Кот Матроскин: MinStepPrice = 0.01m, бумага Сбербанк обычка, пункты и рубли вроде как должны идти один к одному

У Сбера с Мамбы MinStepPrice должен быть равен 1.

Кот Матроскин
Кот Матроскин Автор

Mikhail Sukhov:

Кот Матроскин: MinStepPrice = 0.01m, бумага Сбербанк обычка, пункты и рубли вроде как должны идти один к одному У Сбера с Мамбы MinStepPrice должен быть равен 1. У меня стоит MinStepSize = 0.01m, а его цена, по логике, 1 копейка, т.е. 0.01 Почему 1? При тестировании вся история идет в расчете на 1 акцию, с сотыми долями рубля

Mikhail Sukhov
Mikhail Sukhov

Кот Матроскин:

Mikhail Sukhov:

Кот Матроскин: MinStepPrice = 0.01m, бумага Сбербанк обычка, пункты и рубли вроде как должны идти один к одному У Сбера с Мамбы MinStepPrice должен быть равен 1. У меня стоит MinStepSize = 0.01m, а его цена, по логике, 1 копейка, т.е. 0.01 Почему 1? При тестировании вся история идет в расчете на 1 акцию, с сотыми долями рубля

MinStepPrice MinStepSize.

profts
profts

обновился до 4.1.6 - PnLManager.PnL стал выдавать какую-то ерунду... все-таки какие именно нужно указывать параметры для инструмента RIZ2?

сейчас стоят такие :

_secRIZ2 = MainWindow.Instance.Trader.Securities.FirstOrDefault(sec => sec.Code == "RIZ2"); _secRIH2.MinStepSize = 10m; _secRIH2.MinStepPrice = 6.2876m;

2012.12.06 15:09:00.824| |SS_RIZ2@RTS_SPBFUT002yw|Новая позиция: SPBFUT002yw-RIZ2@RTS=0. 2012.12.06 15:09:01.772| |SS_RIZ2@RTS_SPBFUT002yw|PnLManager.PnL = 10 2012.12.06 15:09:06.858| |SS_RIZ2@RTS_SPBFUT002yw|Новая Buy сделка 671730899 по цене 147150 на 1 заявки 54387075. 2012.12.06 15:09:06.863| |SS_RIZ2@RTS_SPBFUT002yw|Новая позиция: SPBFUT002yw-RIZ2@RTS=1. 2012.12.06 15:09:13.080| |SS_RIZ2@RTS_SPBFUT002yw|Новая Sell сделка 671730929 по цене 147150 на 1 заявки 54387076. 2012.12.06 15:09:13.090| |SS_RIZ2@RTS_SPBFUT002yw|Новая позиция: SPBFUT002yw-RIZ2@RTS=0. 2012.12.06 15:09:13.091| |SS_RIZ2@RTS_SPBFUT002yw|PnLManager.PnL = 30 2012.12.06 15:09:18.670| |SS_RIZ2@RTS_SPBFUT002yw|Новая Buy сделка 671731001 по цене 147130 на 1 заявки 54387077. 2012.12.06 15:09:18.674| |SS_RIZ2@RTS_SPBFUT002yw|Новая позиция: SPBFUT002yw-RIZ2@RTS=1. 2012.12.06 15:09:41.016| |SS_RIZ2@RTS_SPBFUT002yw|Новая Sell сделка 671731388 по цене 147080 на 1 заявки 54387081. 2012.12.06 15:09:41.016| |SS_RIZ2@RTS_SPBFUT002yw|Новая позиция: SPBFUT002yw-RIZ2@RTS=0. 2012.12.06 15:09:41.017| |SS_RIZ2@RTS_SPBFUT002yw|PnLManager.PnL = 40

Alexander
Alexander

обновился до 4.1.6 - PnLManager.PnL стал выдавать какую-то ерунду... все-таки какие именно нужно указывать параметры для инструмента RIZ2?

сейчас стоят такие :

_secRIZ2= MainWindow.Instance.Trader.Securities.FirstOrDefault(sec => sec.Code == "RIZ2"); _secRIH2.MinStepSize = 10m; _secRIH2.MinStepPrice = 6.2876m;

в одном случае secRiz, в другом secRih. Лучше подпишитесь на NewTrades и там выведите информацию о MinStepSize \ MinStepPrice у trade.Security