← Назад

Ошибки эмулятора 4.2

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

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

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

Комментарии (12)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Rebelion
Rebelion

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

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

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

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

Спасибо.

Andrii
Andrii

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

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

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

вот еще из стандартного примера: http://stocksharp.com/forum/4247/Primier-tiestirovaniia-na-sluchainykh-chislakh-nie-rabotaiet/

Mikhail Sukhov
longtrades
longtrades

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

Rebelion
Rebelion

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

esper
esper

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

Rebelion
Rebelion

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 стопы в эмуляшке не работают - решил уточнить на всякий случай.

longtrades
longtrades

Еще одна ошибка , после этого , 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=(IEnumerable1 #=qSWcuracInqoyrIBFWV7Ipg==, Action1 #=q2EaaJQEcSfiBpdwY8lWHUA==) at StockSharp.Algo.Strategies.Strategy.#=q$UcEWvJX7xX1u7qzWK2_p_XVF6tBY0N2tg0e2ZgnPs8=(IEnumerable1 #=q_yxXJw8b$I1ST6b3rvdfRw==) at System.Action1.Invoke(T obj) at Ecng.Common.DelegateHelper.SafeInvoke(Action1 handler, T arg) at StockSharp.Algo.BaseTrader.RaiseOrdersRegisterFailed(IEnumerable1 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==, Func2 #=qHnWrxU$dZzS0y_Nmz$zKgQ==, Action2 #=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
esper

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

Rebelion
Rebelion
Rebelion

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 минимальных шагов цены - нужно чтобы при генерации из свечей не получалось слишком широкого спреда.
				    });

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

Меняем csharp emulationInfo.UseMarketDepth на ```csharp !emulationInfo.UseMarketDepth

AntonySS
AntonySS

Добрый день!

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

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

longtrades
longtrades

AntonySS: Добрый день!

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

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

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

AntonySS
AntonySS

longtrades:

AntonySS: Добрый день!

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

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

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

Возможно в этом была часть проблемы. Скачал 4.2.2.2 и во время проверки обнаружил, что результаты тестов разнятся при <mark>генерировании стакана</mark> на основании цен последних сделок или свечей:

connector.RegisterMarketDepth(new TrendMarketDepthGenerator(connector.GetSecurityId(security))

При использовании <mark>истинной истории</mark> по стаканам:

connector.RegisterMarketDepth(security)

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