Расхождения в результатах тестирования

Расхождения в результатах тестирования
Atom
31.01.2012
Supervisor


S# 4.0.17 Сделки реальные, стаканы - генерируются.

Стратегия осуществляет вход лимитными заявками. Проблема в том что если запускать тестирование с одинаковыми параметрами несколько раз, результаты расходятся в некоторых местах. Если копнуть глубже - при одном прогоне стратегия может зайти там, где не зашла в другом прогоне, хотя заявку выставляла точно на тот же объем и по той же цене.

Если посмотреть все сделки, цена ходила ЗА данную лимитную заявку (но в пределах одной секунды), то есть в реальности заявка хотя бы частично исполнилась бы.

Вопрос: как работает механизм срабатывания лимитных заявок при тестировании? Используется ли для этого стакан, если да то зачем?




Спасибо:


1 2  >
Mikhail Sukhov

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


[quote=Supervisor;16050]S# 4.0.17 Сделки реальные, стаканы - генерируются.

Стратегия осуществляет вход лимитными заявками. Проблема в том что если запускать тестирование с одинаковыми параметрами несколько раз, результаты расходятся в некоторых местах. Если копнуть глубже - при одном прогоне стратегия может зайти там, где не зашла в другом прогоне, хотя заявку выставляла точно на тот же объем и по той же цене. [/quote]

См. EmulationTrader.Depth[b]Generator[/b].

[quote=Supervisor;16050] Если посмотреть все сделки, цена ходила ЗА данную лимитную заявку (но в пределах одной секунды), то есть в реальности заявка хотя бы частично исполнилась бы. [/quote]

Логи, логи. EmulationTrader.QuotesChanged, NewTrades + все у IMarketEmulator. И еще, смотрите в сторону StrategyDebug.

[quote=Supervisor;16050] Вопрос: как работает механизм срабатывания лимитных заявок при тестировании? Используется ли для этого стакан, если да то зачем?[/quote]

В реальной жизни заявки матчатся по стакану. У нас так же, как в реальной.

Спасибо:

Supervisor

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


Пока собирал логи, нашел периодически встречающийся следующий эксепшн: [code] 2012.01.09 10:35:30.000 000 NewTrades: 140525 1 2012.01.09 10:35:30.000 000 System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qwwb5sjTFCSYY36SuN9QWTYB7Lgdy4EftEZ_XYHIAT4mGvhvBPJDGDqe9ADgidA2G(Trade #=qy06s32P9O9PbttmuPScYjg==) в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qNe3GlOKvjy3aMjgua5KOktxGfUMUCcF7SgAtK9Cmiho=.#=qP3EEOI4cS42t0Sl7gtRt9rP_nsM4GGyuPsyd6LPWjNcnAUV8kssggFSsKncIwmRn(Trade #=qW38wKwVgj$50bqVX0EcIWQ==) в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qzZbrZ99m7MsM4pOQ8Y4getMCXK5BBKc0EEhualiJ528=.#=qnpYooQAAl5y_NkrPd3iqQw==(IEnumerable1 #=qXZRO2w$M9FDwDFHJksbB7g==) в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qzZbrZ99m7MsM4pOQ8Y4getMCXK5BBKc0EEhualiJ528=.#=q134gZnoHxL6PQ5rr995IKxXd5WXzNLhY2uNHaxIRUUA=(IEnumerable1 #=qNhyXP53eaaxj6iwPmnxdSg==) в System.Action1.Invoke(T obj) в Ecng.Common.DelegateHelper.SafeInvoke[T](Action1 handler, T arg) в StockSharp.Algo.BaseTrader.#=q3yxBYAKB2jwHgckGME1CYSGRnwE4x6hmxsPooqDrwZs=.#=qADF07DFOGym8NmKlstV2XA==(IEnumerable`1 #=q2IDDShcMPXIxS0ie3v68jA==) [/code]

Спасибо:

Supervisor

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


Вот случай когда заявка не сработала [code] // Выставление заявки на открытии бара 2012.01.09 12:14:00.000 000 NewTrades: 141740 2 2012.01.09 12:14:00.990 000 QuotesChanged: Бид 141635 57 Бид 141640 30 Бид 141650 6 Бид 141655 83 Бид 141665 4 Бид 141670 13 Бид 141680 65 Бид 141690 31 Бид 141700 44 Бид 141710 56 Оффер 141715 73 Оффер 141725 89 Оффер 141730 38 Оффер 141735 76 Оффер 141745 9 Оффер 141750 42 Оффер 141755 89 Оффер 141760 85 Оффер 141770 19 Оффер 141775 74 2012.01.09 12:14:01.000 000 NewTrades: 141720 1 141720 1 141715 1 141710 1 2012.01.09 12:14:01.990 000 NewOrders: LimitSell 3 141885 Active

...

// Секунда когда заявка должна сработать 2012.01.09 12:14:59.000 000 NewTrades: 141810 2 141810 1 141820 3 141825 1 141835 3 141840 1 141840 1 141840 1 141845 1 141845 4 141845 2 141850 1 141850 1 141850 1 141850 1 141850 1 141850 3 141855 1 141855 2 141855 1 141855 2 141855 1 141855 2 141860 25 141860 1 141860 10 141860 5 141865 1 141865 3 141870 9 141870 9 141875 1 141875 1 141875 1 141880 9 141880 5 141880 1 141880 3 141885 1 141885 4 141885 2 141885 1 141885 1 141885 1 141890 5 141890 5 141890 1 141895 7 141880 2 141855 1 141855 1 141855 3 141855 2 141855 3 141860 6 141860 1 141865 2 141865 1 141875 3 141875 6 141880 3 141880 2 141855 1 141880 1 141855 2 141855 1 2012.01.09 12:14:59.990 000 QuotesChanged: Бид 141785 2 Бид 141795 99 Бид 141800 1 Бид 141810 52 Бид 141820 22 Бид 141830 77 Бид 141840 34 Бид 141845 49 Бид 141855 22 Бид 141860 69 Оффер 141865 37 Оффер 141870 25 Оффер 141875 99 Оффер 141885 82 Оффер 141895 94 Оффер 141905 11 Оффер 141915 13 Оффер 141925 49 Оффер 141930 63 Оффер 141935 58 [/code]

И вот случай когда заявка сработала [code] // Выставление заявки на открытии бара 2012.01.09 12:14:00.000 000 NewTrades: 141740 2 2012.01.09 12:14:00.990 000 QuotesChanged: Бид 141645 53 Бид 141650 77 Бид 141655 61 Бид 141660 28 Бид 141670 24 Бид 141675 41 Бид 141685 50 Бид 141695 7 Бид 141705 74 Бид 141710 56 Оффер 141715 77 Оффер 141725 34 Оффер 141730 21 Оффер 141735 70 Оффер 141745 20 Оффер 141750 7 Оффер 141755 70 Оффер 141760 33 Оффер 141765 61 Оффер 141775 100 2012.01.09 12:14:01.000 000 NewTrades: 141720 1 141720 1 141715 1 141710 1 2012.01.09 12:14:01.990 000 NewOrders: LimitSell 3 141885 Active

...

// Секунда когда заявка должна сработать, и срабатывает 2012.01.09 12:14:59.000 000 NewMyTrades: 141890 3 2012.01.09 12:14:59.000 000 OrdersChanged: LimitSell 3 141885 Done 2012.01.09 12:14:59.000 000 NewTrades: 141810 2 141810 1 141820 3 141825 1 141835 3 141840 1 141840 1 141840 1 141845 1 141845 4 141845 2 141850 1 141850 1 141850 1 141850 1 141850 1 141850 3 141855 1 141855 2 141855 1 141855 2 141855 1 141855 2 141860 25 141860 1 141860 10 141860 5 141865 1 141865 3 141870 9 141870 9 141875 1 141875 1 141875 1 141880 9 141880 5 141880 1 141880 3 141885 1 141885 4 141885 2 141885 1 141885 1 141885 1 141890 5 141890 5 141890 1 141895 7 141880 2 141855 1 141855 1 141855 3 141855 2 141855 3 141860 6 141860 1 141865 2 141865 1 141875 3 141875 6 141880 3 141880 2 141855 1 141880 1 141855 2 141855 1 // Этот самый эксепшн 2012.01.09 12:14:59.000 000 System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qwwb5sjTFCSYY36SuN9QWTYB7Lgdy4EftEZ_XYHIAT4mGvhvBPJDGDqe9ADgidA2G(Trade #=qy06s32P9O9PbttmuPScYjg==) в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qNe3GlOKvjy3aMjgua5KOktxGfUMUCcF7SgAtK9Cmiho=.#=qP3EEOI4cS42t0Sl7gtRt9rP_nsM4GGyuPsyd6LPWjNcnAUV8kssggFSsKncIwmRn(Trade #=qW38wKwVgj$50bqVX0EcIWQ==) в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qzZbrZ99m7MsM4pOQ8Y4getMCXK5BBKc0EEhualiJ528=.#=qnpYooQAAl5y_NkrPd3iqQw==(IEnumerable1 #=qXZRO2w$M9FDwDFHJksbB7g==) в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qzZbrZ99m7MsM4pOQ8Y4getMCXK5BBKc0EEhualiJ528=.#=q134gZnoHxL6PQ5rr995IKxXd5WXzNLhY2uNHaxIRUUA=(IEnumerable1 #=qNhyXP53eaaxj6iwPmnxdSg==) в System.Action1.Invoke(T obj) в Ecng.Common.DelegateHelper.SafeInvoke[T](Action1 handler, T arg) в StockSharp.Algo.BaseTrader.#=q3yxBYAKB2jwHgckGME1CYSGRnwE4x6hmxsPooqDrwZs=.#=qADF07DFOGym8NmKlstV2XA==(IEnumerable`1 #=q2IDDShcMPXIxS0ie3v68jA==) // Выставляются профиты 2012.01.09 12:14:59.990 000 NewOrders: LimitBuy 1 141800 Active 2012.01.09 12:14:59.990 000 NewOrders: LimitBuy 1 141790 Active 2012.01.09 12:14:59.990 000 NewOrders: LimitBuy 1 141780 Active 2012.01.09 12:14:59.990 000 QuotesChanged: Бид 141805 86 Бид 141810 11 Бид 141815 26 Бид 141820 73 Бид 141825 13 Бид 141835 17 Бид 141840 35 Бид 141845 27 Бид 141855 8 Бид 141860 84 Оффер 141865 36 Оффер 141870 9 Оффер 141875 6 Оффер 141885 45 Оффер 141895 16 Оффер 141900 78 Оффер 141910 14 Оффер 141920 36 Оффер 141925 92 Оффер 141935 100 [/code]

Спасибо:

Alexander

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


[quote=Supervisor;16064]Пока собирал логи, нашел периодически встречающийся следующий эксепшн: [code] 2012.01.09 10:35:30.000 000 NewTrades: 140525 1 2012.01.09 10:35:30.000 000 System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qwwb5sjTFCSYY36SuN9QWTYB7Lgdy4EftEZ_XYHIAT4mGvhvBPJDGDqe9ADgidA2G(Trade #=qy06s32P9O9PbttmuPScYjg==) в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qNe3GlOKvjy3aMjgua5KOktxGfUMUCcF7SgAtK9Cmiho=.#=qP3EEOI4cS42t0Sl7gtRt9rP_nsM4GGyuPsyd6LPWjNcnAUV8kssggFSsKncIwmRn(Trade #=qW38wKwVgj$50bqVX0EcIWQ==) в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qzZbrZ99m7MsM4pOQ8Y4getMCXK5BBKc0EEhualiJ528=.#=qnpYooQAAl5y_NkrPd3iqQw==(IEnumerable1 #=qXZRO2w$M9FDwDFHJksbB7g==) в StockSharp.Algo.Strategies.StrategyRuleHelper.#=qzZbrZ99m7MsM4pOQ8Y4getMCXK5BBKc0EEhualiJ528=.#=q134gZnoHxL6PQ5rr995IKxXd5WXzNLhY2uNHaxIRUUA=(IEnumerable1 #=qNhyXP53eaaxj6iwPmnxdSg==) в System.Action1.Invoke(T obj) в Ecng.Common.DelegateHelper.SafeInvoke[T](Action1 handler, T arg) в StockSharp.Algo.BaseTrader.#=q3yxBYAKB2jwHgckGME1CYSGRnwE4x6hmxsPooqDrwZs=.#=qADF07DFOGym8NmKlstV2XA==(IEnumerable`1 #=q2IDDShcMPXIxS0ie3v68jA==) [/code][/quote]

Похоже что Security.LastTrade == null у вас.

Спасибо:

Supervisor

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


Нашел, эксепшн вызвают правила следующего рода: [code=plain] this .When(Security.LastTradePriceLess(new Unit(_enterPrice, UnitTypes.Limit))) .Do(Enter) [/code]

В чем может быть проблема?

Спасибо:

Alexander

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


Security.LastTrade == null в момент срабатывания правила

Спасибо:

Supervisor

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


[quote=Alexander Mukhanchikov;16071]Security.LastTrade == null в момент срабатывания правила[/quote] Ну а в чем причина null? Такие правила стратегий нельзя использовать на тестировании? Или я как-то неправильно настроил и запустил тестирование?

Спасибо:

Mikhail Sukhov

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


[quote=Supervisor;16072]Или я как-то неправильно настроил и запустил тестирование?[/quote]

Думаю что второе. Посмотрите SecuritiesChanged отдельно. Заполняется ли там LastTrade. И что за правило?

Спасибо:

Mikhail Sukhov

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


[quote=Mikhail Sukhov;16073][quote=Supervisor;16072]Или я как-то неправильно настроил и запустил тестирование?[/quote]

Думаю что второе. Посмотрите SecuritiesChanged отдельно. Заполняется ли там LastTrade. И что за правило?[/quote]

Увидел правило. Так это же лимитка. На его момент создания нужно чтобы LastTrade был не null.

Спасибо:

Supervisor

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


Нашел причину данной ошибки и проблемы в целом. Я использовал единый static Storage на всю программу (не только для тестирования). Создание отдельного экземпляра для тестирования по какой-то причине решило эту проблему.

Спасибо:
1 2  >

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

loading
clippy