← Back

Как увеличить скорость?

Для сравнения переписал SampleConsole чтоб он выставлял заявку после прохождения сделки с определённой ценой... разница времени сигнальной сделки и заявки получается в среднем 4-6 секунд! в то время как купиловский бот справляется за 1-2... как это побороть?

Comments (14)

Login or Create account, Log in or register to leave a comment

skzuev
skzuev

Я подозреваю, что эти секунды - плата за дополнительные прослойки между логикой работы и QUIK.

С уважением, Сергей Зуев

XMbIPb
XMbIPb Author

Что Вы подразумеваете под прослойками?

Mikhail Sukhov
Mikhail Sukhov

Я правильно понял порядок замера?

  1. Вы получили сделку. Во время?
  2. Выставляете заявку. Мгновенно?
  3. Смотрите на результат. Где именно?

Можно ли привести кусок кода и лог, показывающий время?

Mikhail Sukhov
Mikhail Sukhov

Не понятны символы.

XMbIPb
XMbIPb Author
              var LT = lkoh.LastTrade.Time;

                   trader.NewTrades += Trades =>
                    {

                       foreach (var trade in Trades)
                        {
                            if (LT < trade.Time)
                                if (trade.Price > 16774)
                                {
                                        var order = new Order
                                        {
                                            Account = account,
                                            Price = trade.Price,
                                            Security = lkoh,
                                            Volume = lot,
                                            Direction =

trade.OrderDirection, }; trader.RegisterOrder(order); } }

                   };

                   while (true)
                    {
                        Thread.Sleep(1000000);
                    }

ìÏÇ ÎÅ ×£Ì..ÐÒÏÓÔÏ ÓÒÁ×ÎÉ×ÁÌ ×ÒÅÍÑ ÓÉÇÎÁÌØÎÏÊ ÓÄÅÌËÉ(× ÔÁÂÌÉÃÅ ×ÓÅÈ ÓÄÅÌÏË) É ×ÒÅÍÑ ×ÙÓÔÁ×ÌÅÎÉÑ ÚÁÑ×ËÉ(× ÔÁÂÌÉÃÅ ÚÁÑ×ÏË)...

Mikhail Sukhov
Mikhail Sukhov

Лучше все же вывести в лог, чтобы точно отмести сомнения в том, что проблема в коде. А Вы тестируете или работаете с реальным счетом?

XMbIPb
XMbIPb Author

Пытался вывести время прихода сделки так: if (trade.Price > 16774)

{Console.WriteLine("{0}",DateTime.Now); и так: Console.WriteLine(trader.MarketTime);

но выводимое время почему то больше времени заявки т.е. например выводится 15:27:57 а заявка была выставлена в 15:27:53...как узнать точное время прихода сделки?

XMbIPb
XMbIPb Author

реал

Mikhail Sukhov
Mikhail Sukhov

DateTime.Now = trader.MarketTime DateTime.Now - это локальное время на компьютере. Оно у Вас не точное? Подведите с интернетом.

Я кажется уже догадываюсь, откуда эта "разница" с qpile.

XMbIPb
XMbIPb Author

Время точное..я пробовал и системное, и серверное, разницы нет...

XMbIPb
XMbIPb Author

Последние две заявки были выставлены с задержкой:первая-13 секунд,а вторая-1 секунда..не пойму чем может быть вызван такой разброс?

Mikhail Sukhov
Mikhail Sukhov

Попробуйте на тесте. Если там нет таких задержек, то звоните к брокеру, спрашивать в чем проблема.

S# никаких блокировок не вставляет на отправку заявок. Все уходит как есть в Квик. Проблема или с подключением, или на стороне сервера.

XMbIPb
XMbIPb Author

На тесте трудно отследить момент формирования сигнала.. с сигнальной сделкой проще... Да и чтобы материть брокера с провайдером нужно узнать с какой задержкой сделка пришла в S#, вот только как? Я и не утверждаю что дело в S#, вот только как это доказать?

Mikhail Sukhov
Mikhail Sukhov

Все просто. Сделайте тест по выставленю лимитников с заведомо неисполнимой ценой. Прогоните на тесте и на реале (тест лучше брать не от вашего брокера). Тест - допустим цикл из 100 заявок.

Допонительно, перед отправкой заведите допустим в Order.ExtensionInfo["CreationDate"] = DateTime.Now; Затем, когда пришло событие OrdersChanged, посмотрите Order.Time и сравните со своим CreationDate. Сделайте так хотя бы для 10 заявок. Провайдер думаю не при чем, так как отправка сигнала - это срапвнительно небольшой пакет. Работать должен даже на модемных скоростях, не говоря уж о выделенке. Я думаю проблема именно у брокера

  • сервер не справляется.

И мне кажется, что такие недетерминированные задержки будут у Вас и при работе QPILE и при S# и при ручном трейдинге. Мало вероятно, что в Quik API врезали какой-то замедляющий код.