Ошибки эмулятора 4.2
Atom Ответить
02.01.2014


Подведу итог текущих ошибок тестера:

Лишние моиТейды в EmulationTrader
BasketStrategy генерирует грааль!
Проблема с тестером (абсолютно не понятно в чем проблема, если на SampleHistory не воспроизведется, значит будет проигнорировано).

Какие еще есть проблемы? Просьба давать ссылки именно на ошибки, а не на вопросы или не непонятные вещи. Если ошибка здесь не приведена, то скорее всего она описана непонятно.



Спасибо:




12 Ответов
Rebelion

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


Михаил Сухов Перейти
Подведу итог текущих ошибок тестера:


Проблема с тестером (абсолютно не понятно в чем проблема, если на SampleHistory не воспроизведется, значит будет проигнорировано).

Какие еще есть проблемы? Просьба давать ссылки именно на ошибки, а не на вопросы или не непонятные вещи. Если ошибка здесь не приведена, то скорее всего она описана непонятно.


Михаил, добрый вечер. Если нужно, я могу прислать Вам свой проект целиком для тестирования и указать, что конкретно делал (какие данные брал и как работал). Просто в паблик стратегию и свой нубокод не хочу выкладывать (стыдно, честно :-) ). Если можете - дайте мыло, на которое нужно будет архив выслать.

Спасибо.
Спасибо:

Andrii

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


Михаил Сухов Перейти
Подведу итог текущих ошибок тестера:

Лишние моиТейды в EmulationTrader
BasketStrategy генерирует грааль!
Проблема с тестером (абсолютно не понятно в чем проблема, если на SampleHistory не воспроизведется, значит будет проигнорировано).

Какие еще есть проблемы? Просьба давать ссылки именно на ошибки, а не на вопросы или не непонятные вещи. Если ошибка здесь не приведена, то скорее всего она описана непонятно.


вот еще из стандартного примера: https://stocksharp.ru/fo...-chislakh-nie-rabotaiet/
Спасибо: Mikhail Sukhov

longtrades

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


А с этим только у метя проблемы ? события
Спасибо:

Rebelion

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


Да, вопрос, - а стоп-лоссы не пашут сейчас в эмуляции? Если да, кто кто могёт поделиться рецептом "реализации" оных косвенно (но не по факту построения свечи). Пасибки.
Спасибо:

longtrades

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


Еще одна ошибка , после этого , EmulationTrader вылетает.

2014/01/08 16:45:40.512| |#=q$TVAZv2WzY1qGjz80r1CIY92Hu5bfXHMYoAarEBZe7E=|Заявка 60299243. Исполнение объема 1 по цене 142810.
2014/01/08 16:45:40.512| |#=q$TVAZv2WzY1qGjz80r1CIY92Hu5bfXHMYoAarEBZe7E=|Заявка 60299243 полностью исполнена.
2014/01/08 16:45:40.512| |#=q$TVAZv2WzY1qGjz80r1CIY92Hu5bfXHMYoAarEBZe7E=|Сделка 190 заявки 60299243 P=60299243 V=142810.
2013/10/01 10:27:14.060| |EmulationTrader|Order changed: 60299243/1048 Покупка Цена=142820 Объем=1 Сост=Done Бал=0
2014/01/08 16:45:40.512|Error |#=q$TVAZv2WzY1qGjz80r1CIY92Hu5bfXHMYoAarEBZe7E=|Заявка 60299243 для перерегистрации не найдена.
2014/01/08 16:45:40.513| |#=q$TVAZv2WzY1qGjz80r1CIY92Hu5bfXHMYoAarEBZe7E=|Заявка 60299249 снята.
2014/01/08 16:45:40.513| |#=q$TVAZv2WzY1qGjz80r1CIY92Hu5bfXHMYoAarEBZe7E=|Заявка 60299251 зарегистрирована.
2013/10/01 10:27:14.060| |EmulationTrader|OrderFailed: 60299250/0 Покупка Цена=142830 Объем=1 Сост=Pending Бал=1
System.InvalidOperationException: Заявка 1048 для перерегистрации не найдена.
2013/10/01 10:27:14.060|Error |EmulationTrader|System.NullReferenceException: Object reference not set to an instance of an object.
at StockSharp.Algo.Slippage.SlippageManager.#=qHSjOHMMXp_bJx8EfxAt1nw==.#=qLnEyjd4aNsYfRsi9E8yzyA==(Order #=qptDStyeiQm7xlH2sVMN5Ww==)
at StockSharp.Algo.Slippage.SlippageManager.RegisterFailed(OrderFail fail)
at StockSharp.Algo.Strategies.Strategy.#=qmOjbgpBRxlSEyg$kAkD9rF$WJ598ihLCUESLgdBw4wU=(IEnumerable`1 #=qSWcuracInqoyrIBFWV7Ipg==, Action`1 #=q2EaaJQEcSfiBpdwY8lWHUA==)
at StockSharp.Algo.Strategies.Strategy.#=q$UcEWvJX7xX1u7qzWK2_p_XVF6tBY0N2tg0e2ZgnPs8=(IEnumerable`1 #=q_yxXJw8b$I1ST6b3rvdfRw==)
at System.Action`1.Invoke(T obj)
at Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
at StockSharp.Algo.BaseTrader.RaiseOrdersRegisterFailed(IEnumerable`1 fails)
at StockSharp.Algo.BaseTrader.RaiseOrderFailed(OrderFail fail)
at StockSharp.Algo.BaseTrader.#=qRFsJgLpydq$Kddrkt15L9Vrih$5fgk1Tnr0nOUfL8MQ=.#=qH9b_CQZfd7t4rl3yUqFVnGwaiCBuchglgFiNWgObp1M=(Security #=qwF_zoEhyqAZy_XLCIx2llQ==)
at StockSharp.Algo.BaseTrader.#=qRFsJgLpydq$Kddrkt15L9Vrih$5fgk1Tnr0nOUfL8MQ=.#=qfJM68qe4H7rqVn1UK6QHIBAiE3Dx5RlWpifz7oo7Wmc=(Security #=qmMPCKl4ithkuoucPLmF1XQ==, ExecutionMessage #=qCKf2rdV7ikNYahTqqPfwjA==)
at StockSharp.Algo.BaseTrader.#=q$TfDfS0iDuWzNMuCslIWlKtajC5ivx_9AJJJxiurNcE=[TMessage](TMessage #=qWYMQZIHiv9H6MOj7Ak3qVA==, Func`2 #=qHnWrxU$dZzS0y_Nmz$zKgQ==, Action`2 #=qe3yM3XwnqZTyc95sZDXkLQ==, Boolean #=qOko32PUJB4bfGkZPJz$6kPQvtFffyI3jszlsOJWbcXc=)
at StockSharp.Algo.BaseTrader.#=qILcbrwgux5SIrEBkV$o_EYBb3JEeuQSSU2IxlSFFFPA=(ExecutionMessage #=q3hfMeB45u9JUaM2Bh2vVaw==)
at StockSharp.Algo.BaseTrader.OnProcessMessage(Message message, MessageDirections direction)
at StockSharp.Algo.Testing.BaseEmulationTrader.OnProcessMessage(Message message, MessageDirections direction)
at StockSharp.Algo.Testing.EmulationTrader.OnProcessMessage(Message message, MessageDirections direction)
Спасибо:

esper

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


Rebelion Перейти
Да, вопрос, - а стоп-лоссы не пашут сейчас в эмуляции? Если да, кто кто могёт поделиться рецептом "реализации" оных косвенно (но не по факту построения свечи). Пасибки.

Про какие стопы идет речь?
Спасибо:

Rebelion

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


esper Перейти
Rebelion Перейти
Да, вопрос, - а стоп-лоссы не пашут сейчас в эмуляции? Если да, кто кто могёт поделиться рецептом "реализации" оных косвенно (но не по факту построения свечи). Пасибки.

Про какие стопы идет речь?


Код

        private void OnNewOrderTrades(IEnumerable<MyTrade> myTrades)
        {
            var protectiveStrategies = myTrades.Select(t =>
            {
                var newStrategyFromTrade = new StopLossStrategy(t, new Unit(TraderHelper.ShrinkPrice(t.Trade.Security, stopLossParameter * (decimal)currentParams.candleSize))) { IsTrailing = true, UseQuoting = false, PriceOffset = (decimal)currentParams.candleSize*3, DisposeOnStop = true, ProtectiveVolume = t.Trade.Volume, MaxRegisterFailCount = 5, };

                return newStrategyFromTrade;
            });

            foreach(var s in protectiveStrategies)
                ChildStrategies.Add(s);

            base.OnNewMyTrades(myTrades);
        }


не вызывается в режиме эмуляции. Сама регистрация заявки и стопа на неё производится следующим образом:

Код

                            var newOrderDirection = delayedVolume > 0 ? OrderDirections.Buy : OrderDirections.Sell;
                            var newOrderPrice = isNewEntranceSignalUp == true ? Security.LastTrade.Price + Security.MinStepSize * pricePieces : Security.LastTrade.Price - Security.MinStepSize * pricePieces;

                            var newPositionToOpen = this.CreateOrder(newOrderDirection, newOrderPrice, Math.Abs(delayedVolume));

                            newPositionToOpen.WhenMatched().Do(() => newPositionToOpen.WhenNewTrades().Do(OnNewOrderTrades).Apply(this)).Apply(this);
                            RegisterOrder(newPositionToOpen);


Версия библиотеки S# в тестере - 4.1.19.1 (к сожалению, код, отрабатывающий на 4.1.19.1 в режиме эмуляции падает в бесконечный цикл перевыставления заявки в версиях 4.2.1.x, логи я прилагал выше, использовал свечи Renko и Range, разные конфигурации - тики, тики и стаканы, включал-выключал стаканогенератор - для 4.2.1.x итог один). В реальной торговле этот код пахал (стопы отрабатывали).

Просто вроде где-то на форуме краем глаза видел, что в 4.1.x.y стопы в эмуляшке не работают - решил уточнить на всякий случай.
Спасибо:

esper

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


Стакан для инструмента зарегистрирован?
Спасибо: Rebelion

Rebelion

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


esper Перейти
Стакан для инструмента зарегистрирован?


Пасиба за наводку!
У меня в коде (брался за основу пример из 4.2.1.7) было так почему-то...

Код

				if (emulationInfo.UseMarketDepth									// тест подразумевает наличие стаканов
						&& (generateDepths == true									// если выбрана генерация стаканов вместо реальных стаканов
						|| emulationInfo.UseCandleTimeFrame!=TimeSpan.Zero			// для свечей генерируем стаканы всегда
					))
				{
                   
					// если история по стаканам отсутствует, но стаканы необходимы для стратегии,
					// то их можно сгенерировать на основании цен последних сделок или свечек.

                    
					//trader.RegisterMarketDepth(new TrendMarketDepthGenerator(trader.GetSecurityId(security))
                    trader.RegisterMarketDepth(new TrendMarketDepthGenerator(security)
				    {
						Interval = TimeSpan.FromSeconds(1), // стакан для инструмента в истории обновляется раз в секунду
						MaxAsksDepth = 3,
						MaxBidsDepth = 3,
						UseTradeVolume = true,
						MaxVolume = 1,
						MinSpreadStepCount = 1,  // минимальный генерируемый спред - 2 минимальных шага цены
						MaxSpreadStepCount = 3, // не генерировать спрэд между лучшим бид и аск больше чем 5 минимальных шагов цены - нужно чтобы при генерации из свечей не получалось слишком широкого спреда.
				    });


Ессно не работала генерация стаканов.

Меняем
Код
emulationInfo.UseMarketDepth
на
Код
!emulationInfo.UseMarketDepth
- стаканы генерируются.
Спасибо:

AntonySS

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


Добрый день!

Скачал самое последнее обновление API 4.2.2.1

При запуске стандартных SampleHistoryTesting и SampleHistoryTestingParallel я обнаружил что при каждом новом прогоне на одних и тех же исторических данных, которые идут в комплекте с API, я получаю совершенно разные результаты, причем порой различные в разы, как в положительную, так и в отрицательную сторону.
Спасибо:

longtrades

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


AntonySS Перейти
Добрый день!

Скачал самое последнее обновление API 4.2.2.1

При запуске стандартных SampleHistoryTesting и SampleHistoryTestingParallel я обнаружил что при каждом новом прогоне на одних и тех же исторических данных, которые идут в комплекте с API, я получаю совершенно разные результаты, причем порой различные в разы, как в положительную, так и в отрицательную сторону.


Думаю причина в этом: 4.2.2.1 Очень долго регистрируются заявки
Спасибо:

AntonySS

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


longtrades Перейти
AntonySS Перейти
Добрый день!

Скачал самое последнее обновление API 4.2.2.1

При запуске стандартных SampleHistoryTesting и SampleHistoryTestingParallel я обнаружил что при каждом новом прогоне на одних и тех же исторических данных, которые идут в комплекте с API, я получаю совершенно разные результаты, причем порой различные в разы, как в положительную, так и в отрицательную сторону.


Думаю причина в этом: 4.2.2.1 Очень долго регистрируются заявки


Возможно в этом была часть проблемы. Скачал 4.2.2.2 и во время проверки обнаружил, что результаты тестов разнятся при генерировании стакана на основании цен последних сделок или свечей:
Код
connector.RegisterMarketDepth(new TrendMarketDepthGenerator(connector.GetSecurityId(security))


При использовании истинной истории по стаканам:
Код
connector.RegisterMarketDepth(security)


результаты прогонов идентичны.
Спасибо:


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

loading
clippy