Помогите с PNL ьенеджером
Atom Ответить
01.07.2013


Обьясните пожалуйста...у меня такая ситуация: нужно в PnL менеджер стратегии сообщить информация по имеющимся позам...то есть например я запускаю стратегию, и у меня имеется 50 контрактов в Long ...мне нужно что бы со стартом моя стратегия приняла эти позиции в PnL менеджер, и в будущем правильно расчитала реализованную прибыль или убыток...При старте стратегии, Pnl менеджер у меня пустой, но инфа о сделках при которых у меня была набранна данная поза у меня есть, я ее сохраняю,пытаюсь передать ее в Pnl менеджер через фабрику сущностей, создавая сделки по имеющейся информации и помещая их в Pnl менеджер, но все равно считает он потом не правильно...как сделать это правильно?подскажите пожалуйста...

Теги:


Спасибо:




3 Ответов
yar1k0v

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


PnL Manager отвечает за отображения суммарного дохода или убытка по вашим позициям.
Вам нужен PositionManager.
Скиньте пожалуйста ваш код по запуску и остановке стратегии, так будет проще вам помочь.
Спасибо:

casper-ss

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


else if (_LinePos != null)
{
decimal minElem;
decimal maxElem;

decimal dec = _LinePos.Select(l => l.Volume).Sum();

if (_LinePos.Where(e => e.Volume > 0).Count() != 0)
{
minElem = _LinePos.Where(e => e.Volume > 0).Min(p => { return p.Line; });
maxElem = _LinePos.Where(e => e.Volume > 0).Max(p => { return p.Line; });
}
else
{
minElem = _LinePos.Max(p => { return p.Line; });
maxElem = _LinePos.Max(p => { return p.Line; });
}

if (flagSyncPnlMan == true)
{
PnLManager.Reset();
for (decimal i = maxElem; i >= minElem;i=i-10 )
{
var e = _LinePos.Find(elem =>
{
if (elem.Line == i)
{
return true;
}
else return false;
});
if (e.Volume > 0)
{
ChangeManBuyPnL(e.Volume, e.Line);
}
}
}


if (dec - Position > 0)
{
var _clearPos = dec - Position;

for (decimal i = minElem; i <= maxElem; i = i + 10)
{
var elem = _LinePos.Find(e =>
{
if (e.Line == i)
{
return true;
}
else
return false;
});

if (elem.Volume >= _clearPos)
{
elem.Volume = elem.Volume - _clearPos;
if (flagSyncPnlMan == true)
{
ChangeManSellPnL(_clearPos, elem.PriceOrderProfit);
}
_clearPos = 0;
}
else if (elem.Volume < _clearPos)
{
_clearPos = _clearPos - elem.Volume;
if (flagSyncPnlMan == true)
{
ChangeManSellPnL(Volume, elem.PriceOrderProfit);
}
elem.Volume = 0;
}
if (_clearPos == 0)
{
break;
}
}
}
else if (dec - Position < 0)
{
decimal _clearPos = Position - dec;

if (_LinePos.Where(e => e.Volume > 0).Count() != 0)
{
minElem = _LinePos.Where(e => e.Volume > 0).Min(p => { return p.Line; });
}
else
{
minElem = _LinePos.Max(p => { return p.Line; });
}

var elem = _LinePos.Find(e =>
{
if (e.Line == minElem)
{
return true;
}
else
return false;
});
elem.Volume = elem.Volume + _clearPos;
if (flagSyncPnlMan == true)
{
ChangeManBuyPnL(_clearPos, elem.Line);
}
}


public void ChangeManBuyPnL(decimal vol, decimal price)
{
var tr = new Trade();
var ord = new Order();
tr.Volume = vol;
tr.Price = price;
tr.Security = this.Security;
ord.Portfolio = this.Portfolio;
ord.Security = this.Security;
ord.Direction = OrderDirections.Buy;
ord.Volume = vol;
ord.Price = price;
var mytr = _mW._trader.EntityFactory.CreateMyTrade(ord, tr);
mytr.Trade.IsSystem = true;
this.PnLManager.ProcessMyTrade(mytr);
}


_LinePos - лист с инфой по сделкам по которым была набрана позиция, там есть инфа по цене сделки на покупку и обьему который по этой цене прошел...
Автор топика
Спасибо:

casper-ss

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


в PositionMenedger инфу по позициям сообщая так:


if (this.PositionManager.Position == 0)
{
this.PositionManager.Positions = this.Trader.Positions.Where(p => p.Security == this.Security);
flagSyncPnlMan = true;
}
Автор топика
Спасибо:


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

loading
clippy