← Zurück

По событию order.WhenNewTrades() приходят не все сделки

Использую событие order.WhenNewTrades(). для высавления стопов, но обнаружил что не всегда на весь объем срабатывает стоп. Решил подсчитать объем и выяснил, что когда много сделок разом валилось он иногда некоторые пропускал, редко правда, но все же. Вот не пойму это только у меня так?

War dieses Thema hilfreich?

Thema teilen

Kommentare (17)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

MenDel
MenDel Autor

Подписался на события сразу по двум методам (order.WhenNewTrades() и order.WhenAllTrades()) и вывел результаты в Debug. Строки идут парами, первая сделка, вторая общая сумма. В конце еще при остановке стратегии вывел две строчки с результатом. Из картины видно что NewTrades не отреагировал на все сделки. А AllTrades сработал только после того как набрал весь объем. Помогите решить проблему, почему так?

12:41:12.9887028 *************** NewTrades => 59 12:41:12.9887028 *************** NewTrades => 59 12:41:12.9897029 *************** NewTrades => 1 12:41:12.9897029 *************** NewTrades => 60 12:41:18.0002039 *************** NewTrades => 1 12:41:18.0022041 *************** NewTrades => 61 12:41:40.1774214 *************** NewTrades => 59 12:41:40.1784215 *************** NewTrades => 120 12:41:41.4365473 *************** NewTrades => 55 12:41:41.4375474 *************** NewTrades => 175 12:41:41.4385475 *************** NewTrades => 15 12:41:41.4385475 *************** NewTrades => 190 12:41:41.4395476 *************** NewTrades => 29 12:41:41.4395476 *************** NewTrades => 219 12:41:41.4405477 AllTrades => 59 12:41:41.4415478 AllTrades => 59 12:41:41.4425479 AllTrades => 1 12:41:41.4425479 AllTrades => 60 12:41:41.4435480 AllTrades => 1 12:41:41.4435480 AllTrades => 61 12:41:41.4435480 AllTrades => 59 12:41:41.4445481 AllTrades => 120 12:41:41.4445481 AllTrades => 55 12:41:41.4455482 AllTrades => 175 12:41:41.4455482 AllTrades => 15 12:41:41.4455482 AllTrades => 190 12:41:41.4465483 AllTrades => 29 12:41:41.4465483 AllTrades => 219 12:41:41.4475484 AllTrades => 10 12:41:41.4475484 AllTrades => 229 12:41:41.4485485 AllTrades => 24 12:41:41.4485485 AllTrades => 253 12:41:41.4485485 AllTrades => 24 12:41:41.4495486 AllTrades => 277 12:41:41.4495486 AllTrades => 1 12:41:41.4505487 AllTrades => 278 12:41:41.4505487 AllTrades => 10 12:41:41.4505487 AllTrades => 288 12:41:41.4515488 AllTrades => 12 12:41:41.4515488 AllTrades => 300 12:41:41.4525489 AllTrades => 121 12:41:41.4525489 AllTrades => 421 12:41:41.4525489 AllTrades => 79 12:41:41.4535490 AllTrades => 500

12:41:58.2272262 В итоге метод AllTrades набрал => 500 12:41:58.2272262 В итоге метод NewTrades набрал => 219

а если объем набрался не весь, то получается так

12:54:20.1774138 *************** NewTrades => 104 12:54:20.1784139 *************** NewTrades => 104 12:54:20.1794140 *************** NewTrades => 11 12:54:20.1844145 *************** NewTrades => 115 12:54:20.1854146 *************** NewTrades => 1 12:54:20.1854146 *************** NewTrades => 116 12:54:20.1864147 *************** NewTrades => 10 12:54:20.1874148 *************** NewTrades => 126

12:56:44.2168163 В итоге метод AllTrades набрал => 0 12:56:44.2168163 В итоге метод NewTrades набрал => 126

а вот объем прошел одной сделкой, здесь все нормально

12:59:03.1937126 AllTrades => 500 12:59:03.1947127 AllTrades => 500 12:59:03.1947127 *************** NewTrades => 500 12:59:03.1957128 *************** NewTrades => 500

12:59:15.4719403 В итоге метод AllTrades набрал => 500 12:59:15.4719403 В итоге метод NewTrades набрал => 500

esper
esper

Какая версия? Какой терминал? Вызывается ли событие Trader.NewMyTrades?

MenDel
MenDel Autor

esper: Какая версия? Какой терминал? Вызывается ли событие Trader.NewMyTrades?

версия 4.1.6, Ну такой объем я могу только на демо квике испытать, на реальном счете такой я не смогу такой объем пропустить. Нет, я же с ордером работаю, по его сделкам. Зачем мне все сделки трэйдера.

esper
esper

Сергей MenDel: Нет, я же с ордером работаю, по его сделкам. Зачем мне все сделки трэйдера.

Вам, возможно, они не нужны, а я хочу понять где проблема.

MenDel
MenDel Autor

esper:

Сергей MenDel: Нет, я же с ордером работаю, по его сделкам. Зачем мне все сделки трэйдера.

Вам, возможно, они не нужны, а я хочу понять где проблема.

Вот добавил еще Trader.MyTrades это событие работает отлично, в отличии от order.WhenNewTrades

14:14:24.8718352 ***** MyTrades 4 14:14:24.8728353 ***** MyTradeS 4 14:14:24.8748355 *************** NewTrades => 4 14:14:24.8758356 *************** NewTradeS => 4 14:14:49.8613339 ***** MyTrades 11 14:14:49.8623340 ***** MyTradeS 15 14:14:49.8623340 *************** NewTrades => 11 14:14:49.8633341 *************** NewTradeS => 15 14:14:49.8643342 ***** MyTrades 368 14:14:49.8643342 ***** MyTradeS 383 14:14:49.8653343 *************** NewTrades => 368 14:14:49.8653343 *************** NewTradeS => 383 14:14:49.8653343 ***** MyTrades 51 14:14:49.8663344 ***** MyTradeS 434 14:14:49.8673345 *************** NewTrades => 51 14:14:49.8673345 *************** NewTradeS => 434 14:15:05.2218698 ***** MyTrades 1 14:15:05.2228699 ***** MyTradeS 435 14:15:05.2238700 *************** NewTrades => 1 14:15:05.2238700 *************** NewTradeS => 435 14:15:09.3762852 ***** MyTrades 10 14:15:09.3772853 ***** MyTradeS 445 14:15:09.3782854 *************** NewTrades => 10 14:15:09.3782854 *************** NewTradeS => 445 14:15:09.3792855 ***** MyTrades 4 14:15:09.3852861 ***** MyTradeS 449 14:15:09.3852861 *************** NewTrades => 4 14:15:09.3862862 *************** NewTradeS => 449 14:15:09.3872863 ***** MyTrades 1 14:15:09.3882864 ***** MyTradeS 450 14:15:09.3892865 ***** MyTrades 8 14:15:09.3892865 ***** MyTradeS 458 14:15:09.3902866 ***** MyTrades 11 14:15:09.3902866 ***** MyTradeS 469 14:15:09.3912867 ***** MyTrades 23 14:15:09.3912867 ***** MyTradeS 492 14:15:09.3922868 ***** MyTrades 1 14:15:09.3922868 ***** MyTradeS 493 14:15:09.3932869 ***** MyTrades 2 14:15:09.3932869 ***** MyTradeS 495 14:15:09.3932869 ***** MyTrades 5 14:15:09.3942870 ***** MyTradeS 500 14:15:09.3952871 AllTrades => 4 14:15:09.3952871 AllTradeS => 4 14:15:09.3962872 AllTrades => 11 14:15:09.3962872 AllTradeS => 15 14:15:09.3972873 AllTrades => 368 14:15:09.3972873 AllTradeS => 383 14:15:09.3982874 AllTrades => 51 14:15:09.3982874 AllTradeS => 434 14:15:09.3982874 AllTrades => 1 14:15:09.3992875 AllTradeS => 435 14:15:09.3992875 AllTrades => 10 14:15:09.4002876 AllTradeS => 445 14:15:09.4002876 AllTrades => 4 14:15:09.4012877 AllTradeS => 449 14:15:09.4012877 AllTrades => 1 14:15:09.4022878 AllTradeS => 450 14:15:09.4022878 AllTrades => 8 14:15:09.4022878 AllTradeS => 458 14:15:09.4032879 AllTrades => 11 14:15:09.4032879 AllTradeS => 469 14:15:09.4042880 AllTrades => 23 14:15:09.4042880 AllTradeS => 492 14:15:09.4042880 AllTrades => 1 14:15:09.4052881 AllTradeS => 493 14:15:09.4052881 AllTrades => 2 14:15:09.4062882 AllTradeS => 495 14:15:09.4062882 AllTrades => 5 14:15:09.4072883 AllTradeS => 500

14:15:22.3715846 В итоге метод AllTrades набрал => 500 14:15:22.3715846 В итоге метод NewTrades набрал => 449 14:15:22.3725847 В итоге метод MyTrades набрал => 500

MenDel
MenDel Autor

И еще вот появился вопрос по поводу MyTrades. Когда первый раз стратегию запускаю по событию MyTrades все нормально приходит. Но если я её остановлю и заново включу, то при каждой сделке MyTrades срабатывает дважды. А если снова выключить и включить то трижды и т.д. Можете обьяснить в чем проблема?

14:38:33.1196455 ***** MyTrades 88 14:38:33.1206456 ***** MyTradeS 88 14:38:33.1216457 ***** MyTrades 39 14:38:33.1216457 ***** MyTradeS 127 14:38:33.1216457 ***** MyTrades 88 14:38:33.1226458 ***** MyTradeS 215 14:38:33.1226458 ***** MyTrades 39 14:38:33.1236459 ***** MyTradeS 254 14:38:33.1236459 ***** MyTrades 88 14:38:33.1236459 ***** MyTradeS 342 14:38:33.1246460 ***** MyTrades 39 14:38:33.1246460 ***** MyTradeS 381 14:38:33.1256461 *************** NewTrades => 88 14:38:33.1256461 *************** NewTradeS => 88 14:38:33.1266462 *************** NewTrades => 39 14:38:33.1266462 *************** NewTradeS => 127

esper
esper

Сергей MenDel: И еще вот появился вопрос по поводу MyTrades. Когда первый раз стратегию запускаю по событию MyTrades все нормально приходит. Но если я её остановлю и заново включу, то при каждой сделке MyTrades срабатывает дважды. А если снова выключить и включить то трижды и т.д. Можете обьяснить в чем проблема? В OnStopped надо отписываться от соответствующего события, правила делают это автоматически.

esper
esper

Покажите минимальный код, не совсем понятно, что вы считаете.

MenDel
MenDel Autor

esper: Покажите минимальный код, не совсем понятно, что вы считаете.

    ```csharp

    private readonly object _syncLock = new object();
    private bool check { get; set; }
    private decimal price { get; set; }
    private Order order = new Order();
    private DateTime startTime { get; set; }
    private decimal volAllTrades { get; set; }
    private decimal volNewTrades { get; set; }
    private decimal volMyTrades { get; set; }

    private void NewOrderRegister()
    {
            order = this.CreateOrder(OrderDirections.Sell, price, 500);
            volAllTrades = 0;
            volNewTrades = 0;
            volMyTrades = 0;

            order.WhenAllTrades().Do(trades => trades.ForEach(t =>
            {
                volAllTrades += t.Trade.Volume;
                Debug.WriteLine(DateTime.Now.TimeOfDay + " AllTrades => " + t.Trade.Volume);
                Debug.WriteLine(DateTime.Now.TimeOfDay + " AllTradeS => " + volAllTrades);

            })).Apply(this);

            order.WhenNewTrades().Do(trades => trades.ForEach(t =>
                {
                    volNewTrades += t.Trade.Volume;
                    Debug.WriteLine(DateTime.Now.TimeOfDay + " *************** NewTrades => " + t.Trade.Volume);
                    Debug.WriteLine(DateTime.Now.TimeOfDay + " *************** NewTradeS => " + volNewTrades);

                })).Apply(this);

            RegisterOrder(order);
    }

    protected override void OnStarted()
    {
        check = false;
        startTime = DateTime.Now;
        Trader.NewMyTrades += trades => trades.ForEach(t =>
            {
                if (t.Trade.Time.TimeOfDay >= startTime.TimeOfDay)
                {
                    volMyTrades += t.Trade.Volume;
                    Debug.WriteLine(DateTime.Now.TimeOfDay + " ***** MyTrades " + t.Trade.Volume);
                    Debug.WriteLine(DateTime.Now.TimeOfDay + " ***** MyTradeS " + volMyTrades);
                }
            });

        Security.WhenMarketDepthChanged().Do(md =>
            {
                if (!check)
                {
                    MarketDepth m = md;
                    price = m.BestBid.Price;
                    NewOrderRegister();
                    check = true;
                }

            }).Sync(_syncLock).Apply(this);

        base.OnStarted();
    }
esper
esper

Прогнал этот код раз 10 на последней 4.1.7 с кодеплекса, проблема не воспроизвелась.

MenDel
MenDel Autor

esper: Прогнал этот код раз 10 на последней 4.1.7 с кодеплекса, проблема не воспроизвелась.

Там же вроде 4.1.6 последняя. В чем у меня может быть проблема?

esper
esper

MenDel: Там же вроде 4.1.6 последняя. Здесь.

MenDel
MenDel Autor

Не знаю в чем была проблема, но создал новый проект с новой сборкой 4.1.7 и проблема исчезла. Подскажите пожалуйста в чем разница между сборками dev и trunk. Какой лучше пользоваться? Они совершенно разные. В них даже методы по разному называются OnStarted и OnStarting

Moadip
Moadip

Подскажите пожалуйста в чем разница между сборками dev и trunk. trunk Т.к. сейчас все новые коммиты в ней. dev Это типа для тестов.🙂

Если на codeplex открыть какой нибудь коммит, то видно какие изменения были, и куда.

Например Commit 22415

edittrunk/References/Abt.Controls.SciChart.Wpf.dll edittrunk/References/Abt.Controls.SciChart.Wpf.XML (View full diff)

Видно что изменилось два файла в trunk ветке.

MenDel
MenDel
MenDel Autor

Ребят не ругайте мя если это мой комп гонит, но все же я седня раз 100 прогнал код. В dev сборке ни разу не ошибся, а в trunk много раз ошибся.

И кстати хотел спросить почему QuikTrader в trunk требует еще 3 дополнительные библиотеки: Ecng.Serialization, PowerCollections, StockSharp.Logging И почему в dev переопределяем метод в стратегии OnStarting, а в trunk он уже называется OnStarted

esper
esper

MenDel: Ребят не ругайте мя если это мой комп гонит, но все же я седня раз 100 прогнал код. В dev сборке ни разу не ошибся, а в trunk много раз ошибся.

И кстати хотел спросить почему QuikTrader в trunk требует еще 3 дополнительные библиотеки: Ecng.Serialization, PowerCollections, StockSharp.Logging И почему в dev переопределяем метод в стратегии OnStarting, а в trunk он уже называется OnStarted

В dev ветке лежит очень старая версия, обновляться необходимо из trunk-а. Покажите тогда полный лог стратегии и шлюза, свои сообщения в лог пишите так же с помощью```csharp this.AddInfoLog

esper
esper

Ошибку поправили, фикс будет в следующем обновлении в течение недели.

MenDel hroft