Сомнения в валидности маркет данных


Сомнения в валидности маркет данных
Atom Reply
9/14/2012


Качаю маркет данные со смарта.
Простая стратегия

дает следующий график доходности (см прикрепленный файл).
Подскажите, пожалуйста, куда посмотреть, чтобы поправить маркет данные?
Capture.PNG 115 KB (0)



Thanks:




20 Answers
pyhta4og

Avatar
Date: 9/14/2012
Reply


я бы начал с того что в стратегии написал проверку
if(Strategy.BestBid.Price=0 || Strategy.BestAsk.Price=0||Strategy.LastTrade.Price=0||
Depth.BestBid.Price=0||Depth.BestAsk.Price=0 || Abs(BestAsk-LastTrade)>много || (BestBid-LastTrade)>много
|| Abs(nextTrade-LastTrade)>много)

где nextTrade - пришедшая сделка, Depth - пришедший стакан.

Это позволит выяснить не было ли действительно кривых данных записано.

Еще вариант - поставить брекпойнт в Strategy.PnLChanged и от туда раскручивать - если PnL стал сильно маленьким, посмотреть по коллстаку на наличие аргументов Trade, Depth с маленькими значениями

Hope it helps.
Thanks:

vk37

Avatar
Date: 9/14/2012
Reply


Добавил брейкпоинт и логгирование в стратегию:

Лог до брейкпоинта:

Лог после брейкпоинта:

Причина, похоже в том, что на какой-то момент у Security BestBid и BestAsk равны null
Topic starter
Thanks:

Alexander

Avatar
Date: 9/14/2012
Reply


это может быть в клиринг, когда стакан очищается. или когда планка. сделайте проверку в стратегии.
Thanks:

vk37

Avatar
Date: 9/14/2012
Reply


Все 5 ошибок на графике до 12:00 )
Topic starter
Thanks:

Mikhail Sukhov

Avatar
Date: 9/14/2012
Reply


vk37 Перейти
Все 5 ошибок на графике до 12:00 )


А что в самих данных?
Thanks:

vk37

Avatar
Date: 9/14/2012
Reply


А где посмотреть? Что перебрать? )
Topic starter
Thanks:

Mikhail Sukhov

Avatar
Date: 9/14/2012
Reply


vk37 Перейти
А где посмотреть? Что перебрать? )


На диске. Данные.
Thanks:

vk37

Avatar
Date: 9/14/2012
Reply


Провереть SecurityChanges на предмет Security.BestAsk == null и Security.BestBid == null?
Topic starter
Thanks:

vk37

Avatar
Date: 9/15/2012
Reply


Проверил все сохраненные MarketDepths. Не нашел ни одного со значениями BestBid == null или BestAsk == null. В стратегии на событии MarketDepthChanged, судя по логу, такие появляются:
Код
2012.09.10 10:36:33.288|       |MDS_RIU2@RTS_test account|depth.LastChangeTime: 2012-09-10T10:36:33.0180000, depth.BestBid: null, depth.BestAsk: null, Security.BestBid: 146900, Security.BestAsk: 146910, Security.LastTrade: null

Думаю, ошибка не в данных.
Проверял так:
Код
                    var marketDepthStorage = _storageRegistry.GetMarketDepthStorage(security, _defaultDrive);
                    var marketDepths = marketDepthStorage.Load(_targetTime.Date);

                    foreach (var depth in marketDepths)
                    {
                        if (depth.BestBid == null || depth.BestAsk == null)
                            Debugger.Break();
                    }
Topic starter
Thanks:

pyhta4og

Avatar
Date: 9/15/2012
Reply


файлы данных можете прикрепить (сделки и стаканы) за проблемный день?
Thanks:

vk37

Avatar
Date: 9/15/2012
Reply


Прикрепить не получилось. Ссылка: http://sdrv.ms/U6jFLM
Topic starter
Thanks:

Alexander

Avatar
Date: 10/24/2012
Reply


Проверьте на последней версии на codeplex.
Thanks:

vk37

Avatar
Date: 11/4/2012
Reply


Alexander Mukhanchikov Перейти
Проверьте на последней версии на codeplex.
Скачал последнюю версию с кодплекса.
Судя по тому, что в отчетах значения MaxDrowdown нереалистично большие цифры, ситуация не изменилась.

Topic starter
Thanks:

vk37

Avatar
Date: 11/7/2012
Reply


Не знаю в чем проблема. Менеджеру статистики верить нельзя: неверно просадку считает. Что делать посоветуете? Свой менеджер статистики писать?
Topic starter
Thanks:

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

Avatar
Date: 11/7/2012
Reply


vk37 Перейти
Свой менеджер статистики писать?

Давно столкнулся с примерно такой же проблемой - в итого написал свой метод вычисления статистики

Thanks:

vk37

Avatar
Date: 11/7/2012
Reply


Я так понимаю, что для расчета прибыли на каждый текущий момент нужна информация о стоимости инструмента на каждый текущий момент. Предполагаю, что стоимость инструмента в закаченных маркет данных на какой-то момент неверна. Могу исключить эту неверную цену из маркет данных. Только я не понимаю как внутри этот PnLManager работает. Откуда он берет текущую цену инструмента? Эх, был бы доступ к исходникам )
Topic starter
Thanks:

vk37

Avatar
Date: 11/8/2012
Reply


На этот раз похоже действительно клиринг.
Topic starter
Thanks:

Alexander

Avatar
Date: 11/10/2012
Reply


vk37 Перейти
На этот раз похоже действительно клиринг.


Клиринг тут как виноват?
Thanks:

vk37

Avatar
Date: 11/10/2012
Reply


Alexander Mukhanchikov Перейти


Клиринг тут как виноват?


В этот раз прибыль некорректно посчиталась в период 18:50 - 19:00. Настроил свою гидру, чтобы маркет данные качались по расписанию работы биржи РТС.
Topic starter
Thanks:

pyhta4og

Avatar
Date: 11/11/2012
Reply


vk37 Перейти
Я так понимаю, что для расчета прибыли на каждый текущий момент нужна информация о стоимости инструмента на каждый текущий момент. Предполагаю, что стоимость инструмента в закаченных маркет данных на какой-то момент неверна. Могу исключить эту неверную цену из маркет данных. Только я не понимаю как внутри этот PnLManager работает. Откуда он берет текущую цену инструмента? Эх, был бы доступ к исходникам )


PnLManager берет bestbid/bestask из стакана для расчета цены инструмента. А вот если их нет то берутся bestbid/bestask из инструмента, потом lasttrade... Короче PnLManager борется до последнего, а если нет ничего то берет НОЛЬ и будет спайк.

Если это в клиринг то возможно в клиринге очистило стакан и пошли такие спецэффекты. А ласттрейд был давно.
Hope it helps
Thanks: vk37 Yury Smykalov


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

loading
clippy