devruss
|
Дата: 21.02.2014
И еще одно замечание: OrderGrid показывает цену заявки ту, которую я выставил в самом ордере (141010), а не ту цену, по которой в действительности произошла сделка (140940). Это можно как-нибудь исправить?
|
|
Спасибо:
|
|
|
|
|
Bond
|
Дата: 21.02.2014
Добрый день! Если вы про эмулятор, то там заявки высчитываются не корректно, а расчет PnL не классический. Он вроде как считает стоимость всех активов. Приведенная вами формула верна. Я для себя по ней пересчитываю PnL.
|
|
|
|
|
devruss
|
Дата: 21.02.2014
Bond, спасибо Полез смотреть в исходники - судя по всему авторы считают PnL вот так: Код
public decimal UnrealizedPnL
{
get
{
return _openedTrades.SyncGet(c => c.Sum(t => t.GetPnL()));
}
}
Саму функцию GetPnL() я не нашел, но уже видно, что там идет суммирование по всем трейдам. P.S. Как же я люблю ООП: чтобы посчитать простую функцию MarkToMarketPnL = (Trade.OpenPrice - Current Price) * size * direction надо унаследоваться от 3 классов и 1 интерфейса и вызвать 4 метода рекурсивно:)
|
|
Спасибо:
|
|
|
|
|
Bond
|
Дата: 21.02.2014
[biggrin] Я тоже иногда не понимаю к чему такие "городушки". Я выкинул из эмулятора половину расчетов, заменил их своими и скорость тестирования увеличилась еще на 30%.
|
|
Спасибо:
|
|
|
|
|
ashot
|
Дата: 21.02.2014
|
|
|
|
devruss Что-то никак не могу разобраться как правильно считать PnL в S#. Обычно, PnL = size * (buy price - sell price) * direction sign , где direction sign = 1 if long, = -1 if short. Теперь как считает S#: Код
NEW long: price: 141010, position: 0, totalvolume: 247, PnL: 0
Actual execution: 140940
TP: price: 140700, position: 1, PnL: 70.000000000
Actual execution: 140790
Где price - это цена заявки, actual execution - то как заявка исполнилась в реальности, TP - означает, что робот решил взять прибыль, ПОТОМУ ЧТО он посчитал, что PnL > 0. PnL посчитан из стратегии методом MyTrades.Last().GetPnL() Я всегда считал, что если купил по 140940, а рынок на 140750, то я в минусе, а именно -190. Далее, в чем считается PnL? В рублях или пунктах индекса? Если в рублях, то должно быть (-141010+140790) * 7 рублей MinStepPrice / 10 MinStepSize = -154 рубля (без учета комиссии) Инструмент настроен так: Код
security = new Security
{
Id = "RIH4@FORTS", // по идентификатору инструмента будет искаться папка с историческими маркет данными
Code = "RIH4",
Name = "RTS-3.14",
MinStepSize = 10,
MinStepPrice = 7,
//MinPrice = 10,
//MaxPrice = 1000000,
MarginBuy = 10000, // задаем ГО
MarginSell = 10000,
ExchangeBoard = ExchangeBoard.Forts,
};
Сорри за глупый вопрос, а Вы учитываете бид\аск? В смысле что покупка фиксируется по оферу а продажа по биду? «buy price, sell price» несовсем понятно откуда. Можно ли это понимать как немёк на некорректность вычисления PnL и Equity в S#? Или это в данном случае частность конкретной стратегии? Потому как если PnL врёт то тесты невалидны, а это не гуд. Я сравнительно недавно читаю этот форум и уже второе сообщение подобного толка. Настораживает...
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 21.02.2014
devruss И еще одно замечание: OrderGrid показывает цену заявки ту, которую я выставил в самом ордере (141010), а не ту цену, по которой в действительности произошла сделка (140940). Это можно как-нибудь исправить? Только понимаем того, что такое заявка и что такое сделка.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 21.02.2014
PnL в S# считает только реализованную прибыль. Нереализованную не считает. Ее нужно считать каждому самостоятельно.
|
|
Спасибо:
|
|
|
|
|
devruss
|
Дата: 22.02.2014
Михаил Сухов devruss И еще одно замечание: OrderGrid показывает цену заявки ту, которую я выставил в самом ордере (141010), а не ту цену, по которой в действительности произошла сделка (140940). Это можно как-нибудь исправить? Только понимаем того, что такое заявка и что такое сделка. Если судить по названию, то конечно OrderGrid показывает заявки, но если судить еще и по уроку, то там смешиваются понятия trade/order. Какой элемент S# мне использовать, чтобы в таком же виде выводить только трейды? И раз уж теса про трейды зашла, то есть ли возможность создавать комментарии к трейдам (стратегия, стоплосс/тейкпрофит/условия срабатывания/ и т.д.)?
|
|
Спасибо:
|
|
|
|
|
devruss
|
Дата: 22.02.2014
Михаил Сухов PnL в S# считает только реализованную прибыль. Нереализованную не считает. Ее нужно считать каждому самостоятельно. На мой взгляд, Mark-to-Market PnL намного важнее реализованной прибыли, так MtM PnL еще можно управлять, а Realized уже нет. Предлагаю добавить в список разрабатываемых фич - MtM_PnL_Manager. Без него никакой HFT, mid-frequency trading невозможен. Если нужен feedback в качестве трейдера - готов помочь
|
|
Спасибо:
|
|
|
|
|
loop
|
Дата: 26.02.2014
devruss Михаил Сухов PnL в S# считает только реализованную прибыль. Нереализованную не считает. Ее нужно считать каждому самостоятельно. На мой взгляд, Mark-to-Market PnL намного важнее реализованной прибыли, так MtM PnL еще можно управлять, а Realized уже нет. Предлагаю добавить в список разрабатываемых фич - MtM_PnL_Manager. Без него никакой HFT, mid-frequency trading невозможен. Если нужен feedback в качестве трейдера - готов помочь Поясните пожалуйста для неучей о чем речь? Есть PnL который вычисляется по формуле выше, по бестбандам, минус комиссия и есть ещё с учётом проскальзывания, реджектов и прочих инфраструктурных перепонов? Верно я понимаю? Список всех факторов влияющих на PnL пожалуйста объявите. Как понять что PnL вообще не подкручивается в положительную сторону как это делают метатрейдеровцы, что бы расторговывать клиента. Должна быть открытая формула чтоб можно было фальсифицировать пункт в пункт.
|
|
Спасибо:
|
|
|
|