PositionManager стратегии

PositionManager стратегии
Atom
6/30/2011
hobo


Объясните, что изменяет число позиций в PositionManager стратегии?

Я использую стратегию на основе TimeFrameStrategy и столкнулся с такой ситуацией:

Изначально позиций не было, затем стратегия выставила заявку, она выполнилась. Однако, PositionManager.Position остался равным 0.
Объем сделок по TargetOrder
base.Trader.MyTrades.Where(mt => mt.Order == TargetOrder).Sum(tr => tr.Trade.Volume)
был равен не 0 (судя по логу из NewMyTrades).

Даже несколько минут спустя после сделки PositionManager.Position так и оставался равным 0.

S# 3.2.1.

Tags:


Thanks:


< 1 2 3  >
Alexander

Avatar
Date: 7/13/2011
Reply


В 3.2.5 ошибка остаётся?

Попробуйте перегрузить стратегию и создавать свой StrategyPositionManager, формируя его не по Order, а по Trades (там флаг есть для конструктора).
Thanks:

hobo

Avatar
Date: 7/13/2011
Reply


Я 3.2.1 использую, пересадить робота сегодня же не готов, надо потестироваться будет.
Я как перейду на старшую версию, понаблюдаю и сообщу. Но подобный сбой - событие редкое, сказать что-то определенное смогу не скоро.
Thanks:

hobo

Avatar
Date: 7/17/2011
Reply


Тестирую 3.2.5. - вообще что-то неведомое происходит и не только с менеджером позиций.
Вот такую штуку я вижу в NewMyTrades и позднее, повторялось сие неоднократно.

Один ордер (Done, Accepted) есть в ордерах, сделка тоже случилась, PositionManager показывает 0.
Thanks:

Alexander

Avatar
Date: 7/17/2011
Reply


hobo
Тестирую 3.2.5. - вообще что-то неведомое происходит и не только с менеджером позиций.
Вот такую штуку я вижу в NewMyTrades и позднее, повторялось сие неоднократно.



А что не так с MyTrade? Куда смотреть?
Время? Да, сегодня торгов нет. Может у вас какая-нибудь демка?
Thanks:

hobo

Avatar
Date: 7/18/2011
Reply


Если сказать просто, то проблема осталась в 3.2.5, вернее даже усилилась.
Если подробнее, то с MyTrade все так. А как сочетается исполненный ордер и наличие сделки в PositionManager(зеленым выделил) с отсутствием позиции в Position (красным)?

PS: да, это демка
Thanks:

Alexander

Avatar
Date: 7/18/2011
Reply


Ну хорошо что неведомое происходит только с менеджером позиций и ничем более :)

Где брэйкпоинт стоит?
Thanks:

hobo

Avatar
Date: 7/18/2011
Reply


Неведомое - что такая штука происходит почти при каждом запуске стратегии. И еще RegisterQuotes то ли ждать приходится долго, то ли он вообще не каждый раз запускается - не разобрался еще, я даже QuotesChanged теперь жду (раньше такой необходимости не было никогда). Ну это так, отступление "о неведомом".
Конкретно этот в NewMyTrades, через несколько интервалов стратегии в OnProcess было тоже самое.
Thanks:

Alexander

Avatar
Date: 7/18/2011
Reply


hobo
И еще RegisterQuotes то ли ждать приходится долго, то ли он вообще не каждый раз запускается - не разобрался еще, я даже QuotesChanged теперь жду (раньше такой необходимости не было никогда). Ну это так, отступление "о неведомом".


Подтвердится - создайте новую тему и подробно опишите.
Thanks:

Alex Ander

Avatar
Date: 7/18/2011
Reply


Часто происходит ошибка с расчетом позиции и профита
Например, сделка совершается, а позиция остается нулевой
Я добавил в стратегию свой расчет позиции и профита:

Обработчик события NewMyTrades:

Code
protected void MyStrategy_NewMyTrades(IEnumerable<MyTrade> myTrades)
        {
            CashPayed += myTrades.Sum(t => t.Trade.Price * t.Trade.Volume * (t.Order.Direction == OrderDirections.Buy ? -1 : 1));
            MyPosition -= myTrades.Sum(t => t.Trade.Volume * (t.Order.Direction == OrderDirections.Buy ? -1 : 1));
        }

CashPayed - баланс денежных средств (при покупке вычитается, при продаже прибавляется)
MyPosition - текущая позиция по стратегии (при покупке прибавляется, при продаже вычитается)
Ну а профит|убыток в моменте = (CashPayed + Security.LastTrade.Price * MyPosition)
За время тестирования ошибок не было ни одной, а стандартный менеджер позиций и PnL-менеджер периодически ошибаются.
Thanks:

Alexander

Avatar
Date: 7/18/2011
Reply


Alex Ander
Часто происходит ошибка с расчетом позиции и профита
Например, сделка совершается, а позиция остается нулевой
Я добавил в стратегию свой расчет позиции и профита:

Обработчик события NewMyTrades:

Code
protected void MyStrategy_NewMyTrades(IEnumerable<MyTrade> myTrades)
        {
            CashPayed += myTrades.Sum(t => t.Trade.Price * t.Trade.Volume * (t.Order.Direction == OrderDirections.Buy ? -1 : 1));
            MyPosition -= myTrades.Sum(t => t.Trade.Volume * (t.Order.Direction == OrderDirections.Buy ? -1 : 1));
        }

CashPayed - баланс денежных средств (при покупке вычитается, при продаже прибавляется)
MyPosition - текущая позиция по стратегии (при покупке прибавляется, при продаже вычитается)
Ну а профит|убыток в моменте = (CashPayed + Security.LastTrade.Price * MyPosition)
За время тестирования ошибок не было ни одной, а стандартный менеджер позиций и PnL-менеджер периодически ошибаются.



Если переопределить дефолтный PositionManager в стратегии, использовать StrategyPositionManager(strategy, false) а не true, как по умолчанию, то позиция будет считаться именно так - по моим сделкам, а не по сделкам. И именно так, как написано у вас в обработчике.
Thanks: Alex Ander
< 1 2 3  >

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

loading
clippy