← 戻る

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

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

このトピックは参考になりましたか?

トピックを共有

コメント (29)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

Mikhail Sukhov
Mikhail Sukhov

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

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

vk37
vk37 著者

Скорость снизилась потому что начали использовать стаканы? Или вы их и до этого использовали и снизилась скорость после обновления версии? Использовал и до этого. Два дня назад запускал оптимизацию. Время исполнения 5 часов. Вчера запустил тот же код. Изменились только сборки с код плекса. Больше ничего не менялось. Время исполнения 20 часов.

Mikhail Sukhov
Mikhail Sukhov

vk37: Использовал и до этого. Два дня назад запускал оптимизацию. Время исполнения 5 часов. Вчера запустил тот же код. Изменились только сборки с код плекса. Больше ничего не менялось. Время исполнения 20 часов.

Проверим тогда на примере SampleHistory. На нем так же начало тормозить?

vk37
vk37 著者

Mikhail Sukhov: Проверим тогда на примере SampleHistory. На нем так же начало тормозить? Не запускал SampleHistory. У меня без отрисовки графиков работает. Структура стратегии примерно как в этом посте. Только своя реализация котирования.

Mikhail Sukhov
Mikhail Sukhov

vk37:

Mikhail Sukhov: Проверим тогда на примере SampleHistory. На нем так же начало тормозить? Не запускал SampleHistory. У меня без отрисовки графиков работает. Структура стратегии примерно как в этом посте. Только своя реализация котирования.

Да в тестере ничего обо то и не менялось за последнее время... Окей, еще раз на какой версии из кодеплекса нет тормозов, а на какой есть?

vk37
vk37 著者

Mikhail Sukhov: Да в тестере ничего обо то и не менялось за последнее время... Окей, еще раз на какой версии из кодеплекса нет тормозов, а на какой есть?

Сборки, на которых работает быстро здесь. Перепроверил еще раз. На них действительно работает быстро, а на последних с кодеплекса тормозит.

Mikhail Sukhov
Mikhail Sukhov

vk37: Сборки, на которых работает быстро здесь. Перепроверил еще раз. На них действительно работает быстро, а на последних с кодеплекса тормозит.

Можно ли узнать номера с кодеплекса?

vk37
vk37 著者

vk37: Можно ли узнать номера с кодеплекса? Новые сборки, на которых проверял, из Subversion rev 20757

Mikhail Sukhov
Mikhail Sukhov

Mikhail Sukhov:

vk37: Можно ли узнать номера с кодеплекса? Новые сборки, на которых проверял, из Subversion rev 20757

Окей, один номер есть. А на какой версии не тормозило?

vk37
vk37 著者

Mikhail Sukhov: Окей, один номер есть. А на какой версии не тормозило? У меня только сборки. Какой номер ревизии я не знаю. Кстати, уже предлагал нумеровать сборки стокшарпа в стиле 4.1.5.ххххх, где ххххх - что-то уникальное для промежуточного билда, например номер ревизии. Было бы такое сделано, не было бы проблемы с определением версии.

Mikhail Sukhov
Mikhail Sukhov

vk37:

Mikhail Sukhov: Окей, один номер есть. А на какой версии не тормозило? У меня только сборки. Какой номер ревизии я не знаю. Кстати, уже предлагал нумеровать сборки стокшарпа в стиле 4.1.5.ххххх, где ххххх - что-то уникальное для промежуточного билда, например номер ревизии. Было бы такое сделано, не было бы проблемы с определением версии.

Архивы на кодеплексе и так нумеруются при скачивании исходников.

vk37
vk37 著者

Я скачиваю из репозитария сабвершн и переношу в свой репозитарий. Поэтому номер версии вашего ревижена отследить не могу.

Alexander
Alexander

vk37: Я скачиваю из репозитария сабвершн и переношу в свой репозитарий. Поэтому номер версии вашего ревижена отследить не могу.

И каким образом при таком вашем скачивании нам нумеровать версии? :) Как выше ответил Миша - если скачивать их стандартными методами - всё в порядке, как вы и хотели.

vk37
vk37 著者

Alexander Mukhanchikov: И каким образом при таком вашем скачивании нам нумеровать версии? :) Как выше ответил Миша - если скачивать их стандартными методами - всё в порядке, как вы и хотели.

Как-то мы, кажется, не понимаем друг друга. Буду при переносе в свой репозитарий указывать в комментарии номер вашего ривижена. Хранить сборки буду все равно в своем репозитарии: мне так удобно. Revision 19986 работает быстро.

Mikhail Sukhov
Mikhail Sukhov

vk37:

Alexander Mukhanchikov: И каким образом при таком вашем скачивании нам нумеровать версии? :) Как выше ответил Миша - если скачивать их стандартными методами - всё в порядке, как вы и хотели.

Как-то мы, кажется, не понимаем друг друга. Буду при переносе в свой репозитарий указывать в комментарии номер вашего ривижена. Хранить сборки буду все равно в своем репозитарии: мне так удобно. Revision 19986 работает быстро.

В последней версии все просто летает... Но там и пример перестал работать.😂

Mikhail Sukhov
Mikhail Sukhov

4.1.4 00:28:23.0952956 4.1.5 не работает 4.1.6 00:04:54.7853761 (с последними фиксами, так как пример был неправильно написан).

vk37
vk37 著者

Mikhail Sukhov: 4.1.4 00:28:23.0952956 4.1.5 не работает 4.1.6 00:04:54.7853761 (с последними фиксами, так как пример был неправильно написан).

Если речь о SampleHistoryTesting, то там стаканы не используются.

Mikhail Sukhov
Mikhail Sukhov

vk37:

Mikhail Sukhov: 4.1.4 00:28:23.0952956 4.1.5 не работает 4.1.6 00:04:54.7853761 (с последними фиксами, так как пример был неправильно написан).

Если речь о SampleHistoryTesting, то там стаканы не используются.

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

Alexander
Alexander

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

vk37
vk37 著者

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

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

Alexander
Alexander

vk37:

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

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

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

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

Mikhail Sukhov
Mikhail Sukhov

vk37:

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

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

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

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

vk37
vk37 著者

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

vk37
vk37 著者

Торможение стало происходить из-за работы дочерней стратегии. Что-то не так с синхронизацией? Дочерняя стратегия::::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);
            }
        }
    }
}
vk37
vk37 著者

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

Mikhail Sukhov
Mikhail Sukhov

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

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

vk37
vk37 著者

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

Mikhail Sukhov
Mikhail Sukhov

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

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

vk37
vk37 著者

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