Скорость тестирования снизилась в 4 раза

Скорость тестирования снизилась в 4 раза
Atom
11/4/2012
vk37


Взял последнюю версию с кодплекса. Код тестирования без изменений: только новые сборки Стокшарп. До этого раза последний раз обновлялся где-то пару недель назад. Стратегия использует UseMarketDepth = true,




Thanks:


< 1 2 3 
Alexander

Avatar
Date: 11/10/2012
Reply


vk37:

Alexander Mukhanchikov: Ап. Или уже не актуально?

Пока работаю на предыдущей версии. Есть слабая надежда, что как-то все само сабой исправиться )

Продублирую вопрос - Какой код нужно дописать в пример, чтобы увидеть разницу между версиями 4 и 6?

Без ответа на этот вопрос вряд ли что-то исправится.

Thanks:

vk37

Avatar
Date: 11/10/2012
Reply


Так ведь это ж исследовать надо. Не знаю какой код. Потом у вас пример со свечами, а у меня со стаканами.

Thanks:

Mikhail Sukhov

Avatar
Date: 11/10/2012
Reply


vk37:

Alexander Mukhanchikov: Ап. Или уже не актуально?

Пока работаю на предыдущей версии. Есть слабая надежда, что как-то все само сабой исправиться )

Судя по всему, проблема в вашем коде. То, что начало тормозить на новой версии, еще не означает ошибку S#. Возможно, раньше не было каких-то алгоритмов, которые появились в последних версиях и в вашем случае начали использоваться в роботе.

Думаю багу можно закрывать.

Thanks:

vk37

Avatar
Date: 11/18/2012
Reply


Торможение стало происходить из-за работы дочерней стратегии. Что-то не так с синхронизацией? Дочерняя стратегия::::spoiler

using System.Collections.Concurrent;
using StockSharp.Algo;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;

namespace AlgoTrading.SpeedTest
{
    public class MyQuotingStrategy : Strategy
    {
        private readonly ConcurrentStack<Order> _orders = new ConcurrentStack<Order>();
        private readonly OrderDirections _orderDirection;
        private readonly Unit _startPrice;
        private readonly Unit _offset;
        private readonly object _locker = new object();
        private bool _canCancel;

        public MyQuotingStrategy(OrderDirections orderDirection, Unit price, Unit offset)
        {
            _orderDirection = orderDirection;
            _startPrice = price;
            _offset = offset;
        }

        protected override void OnStarted()
        {
            Security
                .WhenMarketDepthChanged()
                .Do(depth =>
                {
                    Order order;
                    _orders.TryPeek(out order);

                    if (order != null && order.State == OrderStates.Active && _canCancel)
                    {
                        var cancelOrder = _orderDirection == OrderDirections.Buy && depth.BestBid != null &&
                                           depth.BestBid.Price > order.Price || _orderDirection == OrderDirections.Sell && depth.BestAsk != null &&
                                           depth.BestAsk.Price < order.Price;

                        if (cancelOrder)
                        {
                            _canCancel = false;
                            order.WhenCanceled().Do(o => RegisterNew(o.Balance,
                                                                     _orderDirection == OrderDirections.Buy
                                                                         ? new Unit(depth.BestBid.Price, UnitTypes.Absolute, Security)
                                                                         : new Unit(depth.BestAsk.Price, UnitTypes.Absolute, Security)))
                                .Once()
                                .Sync(_locker)
                                .Apply(this);
                            CancelOrder(order);
                        }
                    }
                })
                .Sync(_locker)
                .Apply(this);

            RegisterNew(Volume, _startPrice);
            base.OnStarted();
        }

        private void RegisterNew(decimal volume, Unit price)
        {
            var order = new Order()
            {
                Direction = _orderDirection,
                Price = price.ApplyOffset(_orderDirection, _offset),
                Volume = volume,
            };

            order.WhenRegistered().Do(o => _canCancel = true )
            .Once()
            .Sync(_locker)
            .Apply(this);

            order.WhenMatched().Do(o => Stop())
            .Once()
            .Sync(_locker)
            .Apply(this);

            RegisterOrder(order);
            _orders.Push(order);
        }
    }
}

using StockSharp.Algo;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;

namespace AlgoTrading.SpeedTest
{
    public class MarketDepthSkeleton : Strategy
    {
        private OrderDirections? _orderDirection;
        private bool _canProcess = true;
        private readonly object _locker = new object();

        protected override void OnStarted()
        {
            Security
                .WhenMarketDepthChanged()
                .Do(ProcessDepth)
                .Sync(_locker)
                .Apply(this);

            base.OnStarted();
        }

        private void ProcessDepth(MarketDepth depth)
        {
            if (Security.BestAsk == null || Security.BestBid == null)
                return;

            if (_canProcess)
            {
                _canProcess = false;
                _orderDirection = _orderDirection.HasValue ? _orderDirection.Value.Invert() : OrderDirections.Buy;
                var price = depth.GetCurrentPrice(_orderDirection.Value).Value;
                var strategy = new MyQuotingStrategy(_orderDirection.Value,
                                                     new Unit(price, UnitTypes.Absolute, Security),
                                                     new Unit(1, UnitTypes.Step, Security)) { Volume = Volume };
                strategy.WhenStopped().Do(() => _canProcess = true).Once().Sync(_locker).Apply(this);
                ChildStrategies.Add(strategy);
            }
        }
    }
}
Thanks:

vk37

Avatar
Date: 11/19/2012
Reply


Да скорость снизилась из-за работы дочерней стратегии. Отказался пока от использования дочерних стратегий: котирование встроил в основную стратегию. Скорость стала прежней.

Thanks:

Mikhail Sukhov

Avatar
Date: 11/19/2012
Reply


vk37: Да скорость снизилась из-за работы дочерней стратегии. Отказался пока от использования дочерних стратегий: котирование встроил в основную стратегию. Скорость стала прежней.

Вряд ли. В SampleHistoryTesting котирование используется как дочерняя стратегия. И наблюдается только ускорение тестирования.

Thanks:

vk37

Avatar
Date: 11/19/2012
Reply


Я говорю не про статегию MarketQuotingStrategy в SampleHistoryTesting, а про свою дочернюю стратегию. На предыдущей версии сборок тестирование за 2 месяца выполнялось за 20 мин. На новой версии - 1 час 20 мин. На новой версии без механизма дочерних стратегий - 20 мин.

Thanks:

Mikhail Sukhov

Avatar
Date: 11/20/2012
Reply


vk37: Я говорю не про статегию MarketQuotingStrategy в SampleHistoryTesting, а про свою дочернюю стратегию.

Может вы скажите наконец, что нужно в SampleHistoryTesting изменить, чтобы воспроизвести данную ситуацию.

Thanks:

vk37

Avatar
Date: 1/8/2013
Reply


Вопрос со скоростью тестирования решился указанием у дочерней стратегии:```csharp var quotingStrategy = new MyQuotingStrategy(quotingOrder) ;

Thanks:
< 1 2 3 

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

loading
clippy