Можно ли уточнить задержку в Интернете до выставления заявок?, Как можно раньше выставить заявку после начала их приёма
Пользователь
Сообщений: Регистрация: 27.12.2022
06.08.2025 08:00:22
Я перед началом торгов синхронизирую часы ПК с ntp-сервером, чтобы как можно раньше выставить заявки. Но иногда задержка в Интернете меняется, что может привести к опозданию.
В скрипте, который выставляет заявки, я сначала вызываю
Код
waitForDateTime(datetime)
и она ждёт до времени 06:49:59, т.е. выход из неё происходит за 1 с. до начала приёма заявок. Затем я использую
Код
sleep(935)
это число подобрал опытным путём. После этого начинает работать цикл выставления заявок. Алгоритм Нейгла не использую, т.к. не заметил особой пользы. Иногда почему-то бывают отклонения в 0.2 с и до 0.3 с. Возможно, брокер или биржа в разные дни может тормозить по-разному, чёрт их знает… В цикле выставления заявок перед повтором заявки использую свою функцию задержки на 1 мс, которая делает определённое количество умножений:
Код
local a
for _ = 1, 2604 * ms do
a = 10000 * 10000 a = 10000 * 10000 a = 10000 * 10000 a = 10000 * 10000 a = 10000 * 10000
[...]
a = 10000 * 10000 a = 10000 * 10000 a = 10000 * 10000 a = 10000 * 10000 a = 10000 * 10000
end
В диспетчере задач повышаю приоритет Квика на шаг, до "выше среднего".
Есть ли у кого идеи, как усовершенствовать этот скрипт, чтобы он адаптировался к сиюминутной задержке в Интернете?
Пользователь
Сообщений: Регистрация: 30.01.2015
06.08.2025 10:00:15
Алгоритм Нейгла приводит к увеличению задержки отправки коротких пакетов. Вы его отключили?
Пользователь
Сообщений: Регистрация: 30.01.2015
06.08.2025 10:11:50
Попробуйте посылать пакеты не через 1 ms, а в ответ на предыдущую просылку.
Пользователь
Сообщений: Регистрация: 30.01.2015
06.08.2025 10:16:33
еще можно выставить условную заявку до начала основной сессии .
Пользователь
Сообщений: Регистрация: 27.12.2022
06.08.2025 18:18:44
Цитата
nikolz написал: Алгоритм Нейгла приводит к увеличению задержки отправки коротких пакетов. Вы его отключили?
Я хотел сказать, что алгоритм Нейгла у меня работает, как по умолчанию в Виндовс. У меня сейчас 2-ядерный безвентиляторный ПК, он не тянет отключение этого алгоритма. На 6-ядерном я его отключал, но улучшения по сравнению с неотключением этого алгоритма не заметил.
Условные заявки, похоже, здесь не помогут. У меня кнопка "Поставить новую стоп-заявку" не активна.
Цитата
nikolz написал: Попробуйте посылать пакеты не через 1 ms, а в ответ на предыдущую просылку.
Я повторяю посылки через 5 мс, ждать ответ на предыдущие посылки - это слишком долго.
написал: Алгоритм Нейгла приводит к увеличению задержки отправки коротких пакетов. Вы его отключили?
Я хотел сказать, что алгоритм Нейгла у меня работает, как по умолчанию в Виндовс. У меня сейчас 2-ядерный безвентиляторный ПК, он не тянет отключение этого алгоритма. На 6-ядерном я его отключал, но улучшения по сравнению с неотключением этого алгоритма не заметил.
Условные заявки, похоже, здесь не помогут. У меня кнопка "Поставить новую стоп-заявку" не активна.
Цитата
написал: Попробуйте посылать пакеты не через 1 ms, а в ответ на предыдущую просылку.
Я повторяю посылки через 5 мс, ждать ответ на предыдущие посылки - это слишком долго.
Вы можете посмотреть задержку обмена с сервером брокера в информационном окне QUIK в расширенном режиме. Еще задержку создает очередь заявок на сервере брокера. Особенно в момент открытия и сильного движения рынка. Возможно условная заявка уйдет быстрее. Но это надо проверять. ----------------------- Задержку на уровне мс Вы можете получить лишь в дата центре. Это Вам обойдется примерно 10тр в меcяц.
Пользователь
Сообщений: Регистрация: 20.03.2023
07.08.2025 10:03:08
Serge123, Хотите влезть в очередь заявок раньше маркетмейкера?
Пользователь
Сообщений: Регистрация: 27.12.2022
07.08.2025 10:38:02
Цитата
nikolz написал: Задержку на уровне мс Вы можете получить лишь в дата центре. Это Вам обойдется примерно 10тр в меcяц.
Не обязательно на уровне 1 мс, 7 мс уже хорошо. Мой рекорд, который я поставил недавно, 0.578 мкс: через столько времени мою заявку приняли после начала их приёма. (Везёт же людям!)
Цитата
paluke написал: Хотите влезть в очередь заявок раньше маркетмейкера?
Я каждый раз влезаю раньше мм, после него влезать практич. не имеет смысла: то, что я купил на заёмные средства, придётся продать по цене покупки. Потому что он впаривает заявки на покупку и на продажу в миллиарды акций.
Пользователь
Сообщений: Регистрация: 27.12.2022
07.08.2025 10:48:36
Ошибся: через 578 мкс приняли заявку.
Пользователь
Сообщений: Регистрация: 22.02.2023
07.08.2025 14:58:31
Цитата
nikolz написал: Возможно условная заявка уйдет быстрее. Но это надо проверять.
Проверял задержку активации стоп-лосса. Результат удручающий. Бывает больше секунды! И это после 23:00, когда торговля уже сникла.
написал: Возможно условная заявка уйдет быстрее. Но это надо проверять.
Проверял задержку активации стоп-лосса. Результат удручающий. Бывает больше секунды! И это после 23:00, когда торговля уже сникла.
Может быть это и есть время между сделками. Т е это первая сделка после срабатывания стопа. Надо еще посмотреть таблицу обезличенных сделок в этот момент времени.
написал: Задержку на уровне мс Вы можете получить лишь в дата центре. Это Вам обойдется примерно 10тр в меcяц.
Не обязательно на уровне 1 мс, 7 мс уже хорошо. Мой рекорд, который я поставил недавно, 0.578 мкс: через столько времени мою заявку приняли после начала их приёма. (Везёт же людям!)
Цитата
написал: Хотите влезть в очередь заявок раньше маркетмейкера?
Я каждый раз влезаю раньше мм, после него влезать практич. не имеет смысла: то, что я купил на заёмные средства, придётся продать по цене покупки. Потому что он впаривает заявки на покупку и на продажу в миллиарды акций.
ММ имеет право встать в очередь раньше Вас если там есть спред. В дата центре будете иметь всегда на уровне ms и меньше. Собственно там HFT роботы и пасутся. Иначе танцы с бубном и случайные всплески радости. Много так заработали?
Пользователь
Сообщений: Регистрация: 30.01.2015
08.08.2025 07:57:09
, Правильно я Вас понял что Вы торгуете паями? А вечным фьючерсом не пробовали?
написал: Проверял задержку активации стоп-лосса. Результат удручающий. Бывает больше секунды! И это после 23:00, когда торговля уже сникла.
Может быть это и есть время между сделками. Т е это первая сделка после срабатывания стопа. Надо еще посмотреть таблицу обезличенных сделок в этот момент времени.
Какая ещё "сделка после срабатывания стопа"? nikolz, Вы вообще о чем? Если произошла сделка условия, стоп-лосс активируется и выставляется лимитированная заявка. Всё! Никаких других сделок не требуется. Беда в том, что между сделкой условия и активацией, в среднем проходит полсекунды, а иногда и больше секунды.
Кстати, хотелось бы получить комментарий разработчиков на такое поведение их продукта.
написал: Проверял задержку активации стоп-лосса. Результат удручающий. Бывает больше секунды! И это после 23:00, когда торговля уже сникла.
Может быть это и есть время между сделками. Т е это первая сделка после срабатывания стопа. Надо еще посмотреть таблицу обезличенных сделок в этот момент времени.
Какая ещё "сделка после срабатывания стопа"? , Вы вообще о чем? Если произошла сделка условия, стоп-лосс активируется и выставляется лимитированная заявка. Всё! Никаких других сделок не требуется. Беда в том, что между сделкой условия и активацией, в среднем проходит полсекунды, а иногда и больше секунды.
Кстати, хотелось бы получить комментарий разработчиков на такое поведение их продукта.
Согласен. но возможно, что заявка попадет в конец очереди заявок на сервере брокера.
Пользователь
Сообщений: Регистрация: 30.01.2015
09.08.2025 08:55:52
Цитата
Serge123 написал: Ошибся: через 578 мкс приняли заявку.
А как Вы определили эту величину? Можно подробнее. И какая у Вас задержка по пингу до сервера брокера.
Пользователь
Сообщений: Регистрация: 22.02.2023
10.08.2025 01:27:52
Цитата
nikolz написал: но возможно, что заявка попадет в конец очереди заявок на сервере брокера.
Если между сделкой условия и активацией стопа проходит больше секунды, то место в очереди уже неважно.
написал: но возможно, что заявка попадет в конец очереди заявок на сервере брокера.
Если между сделкой условия и активацией стопа проходит больше секунды, то место в очереди уже неважно.
Последние данные, которые мне известны, то, что ядро сервера QUIK обрабатывало 1000 транзакций в секунду. Допустим сейчас в 10 раз больше. Если длина очереди больше 10 000, то будет больше секунды.
написал: но возможно, что заявка попадет в конец очереди заявок на сервере брокера.
Если между сделкой условия и активацией стопа проходит больше секунды, то место в очереди уже неважно.
Последние данные, которые мне известны, то, что ядро сервера QUIK обрабатывало 1000 транзакций в секунду. Допустим сейчас в 10 раз больше. Если длина очереди больше 10 000, то будет больше секунды.
Какие ещё тысячи транзакций в секунду после одиннадцати вечера? Вы вообще о чем?! В это время одну-то сделку несколько секунд ждать приходится.
написал: но возможно, что заявка попадет в конец очереди заявок на сервере брокера.
Если между сделкой условия и активацией стопа проходит больше секунды, то место в очереди уже неважно.
Последние данные, которые мне известны, то, что ядро сервера QUIK обрабатывало 1000 транзакций в секунду. Допустим сейчас в 10 раз больше. Если длина очереди больше 10 000, то будет больше секунды.
Какие ещё тысячи транзакций в секунду после одиннадцати вечера? Вы вообще о чем?! В это время одну-то сделку несколько секунд ждать приходится.
Вы главное не волнуйтесь. Вы о чем? Вообще-то обсуждается не частота сделок на бирже, а скорость выставления заявки. ----------------- В разное время - разные условия. Чел-ку надо не когда все спят, а на открытие. ------------------------- Если в 11 вечера, то попробуйте отключить алгоритм Нейгла.
Пользователь
Сообщений: Регистрация: 22.02.2023
13.08.2025 20:45:38
Мне-то чего волноваться? Это же не я пишу, как у Райкина: "мы вам пронасосы, а вы нам - проколёса" Перечитайте топик, если у Вас память как у Б3-34.
Всё пройдет. Но это не точно.
Пользователь
Сообщений: Регистрация: 30.01.2015
14.08.2025 05:41:19
Цитата
Ziveleos написал: Мне-то чего волноваться? Это же не я пишу, как у Райкина: " мы вам про насосы , а вы нам - про колёса " Перечитайте топик, если у Вас память как у Б3-34.
А хамить зачем?
Пользователь
Сообщений: Регистрация: 27.12.2022
14.08.2025 18:37:04
Цитата
nikolz написал: , Правильно я Вас понял что Вы торгуете паями? А вечным фьючерсом не пробовали?
Торгую фондом своего брокера, паями и фьючерсами не интересовался.
Мало. Я зарабатываю грязными пассивно 0.05% в день (также в нерабочие дни) от роста цены акции фонда и примерно столько же, если удаётся купленное на заёмные средства от брокера продать на 1 шаг цены выше (а это 0.01 коп.) Но надёжность высокая, цена уже давно в течние торгового дня не меняется
Цитата
nikolz написал: ММ имеет право встать в очередь раньше Вас если там есть спред.
Я такого не замечал, иногда вижу, что мм пропускает меня вперёд при продаже акций, видимо, чтобы своих меньше продать.
Цитата
nikolz написал: В дата центре будете иметь всегда на уровне ms и меньше. Собственно там HFT роботы и пасутся.
Это стрельба из пушки по воробьям. Я не являюсь трейдинговой акулой и не знаю, как это всё настраивается.
local function waitForDateTime(datetime)
local seconds_since_epoch = ostime(datetime)
assert(ostime() < seconds_since_epoch)
while ostime() < seconds_since_epoch do sleep(1) end
end
local function waitForDateTime (datetime)
local seconds_since_epoch = ostime(datetime)
assert(ostime() < seconds_since_epoch)
while ostime() < seconds_since_epoch do sleep ( 1 ) end
end
можно сделать так. Не будет расходоваться время процессора на цикл и сравнение.
Код
local t=os.date("*t"); local x=os.time(t); t.hour=6; t.min=49; t.sec=59; sleep(1000*(os.time(t)-x)
Пользователь
Сообщений: Регистрация: 02.01.2026
04.03.2026 08:50:45
Цитата
Serge123 написал: синхронизирую часы ПК с ntp-сервером
Какой ntp-сервер используете?
Пользователь
Сообщений: Регистрация: 27.12.2022
04.03.2026 19:38:17
ntp.msk-ix.ru, пишут, что это лучший.
Цитата
nikolz написал:можно сделать так. Не будет расходоваться время процессора на цикл и сравнение.
Код
local t = os.date ( "*t" ); local x = os.time (t); t.hour = 6 ; t.min = 49 ; t.sec = 59 ; sleep ( 1000 * ( os.time (t) - x)
Надо будет проверить это на досуге.
Пользователь
Сообщений: Регистрация: 22.02.2023
06.03.2026 14:01:10
Цитата
nikolz написал: можно сделать так. Не будет расходоваться время процессора на цикл и сравнение.
Код
local t=os.date("*t"); local x=os.time(t); t.hour=6; t.min=49; t.sec=59; sleep(1000*(os.time(t)-x)
Немного доработанный вариант:
Код
function WakeUpAt(hour,min,sec,ms)
local t = os.sysdate()
local now = os.time(t)
local tail = t.ms
t.hour = hour
t.min = min
t.sec = sec
sleep(((os.time(t)- now)*1000)- tail + ms)
end
Четвёртый параметр может быть отрицательным. Тест и его результат из лога DebugView:
Код
PrintDbgStr("Start")
for i=1, 10 do
local t = os.date("*t")
WakeUpAt(t.hour,t.min+1,0,0)
local w = os.sysdate()
PrintDbgStr(string.format("WakeUpAt %02d:%02d:%02d.%03d", w.hour,w.min,w.sec,w.ms))
end
function WakeUpAt(hour,min,sec,ms)
local t = os.sysdate()
local now = os.time(t)
local tail = t.ms
t.hour = hour
t.min = min
t.sec = sec
sleep(((os.time(t)- now)*1000)- tail + ms)
end
Если компьютер будет кратковременно переводиться в режим сна, то время запланированной задачи отодвинется на время сна. Поэтому вариант с периодической проверкой текущего времени надёжней.
function WakeUpAt (hour,min,sec,ms)
local t = os.sysdate ()
local now = os.time (t)
local tail = t.ms
t.hour = hour
t.min = min
t.sec = sec
sleep ((( os.time (t) - now) * 1000 ) - tail + ms)
end
Если компьютер будет кратковременно переводиться в режим сна, то время запланированной задачи отодвинется на время сна. Поэтому вариант с периодической проверкой текущего времени надёжней.
Можете объяснить как Вы к этому пришли? ------------------------ Поясняю для Вас: Оба варианта останавливают поток до наступления указанного времени. Мой вариант дергает процессор и JC один раз. Т е на его исполнение надо несколько микросекунд. Вариант с циклом грузит процессор и ОС через каждый квант, который система ему дает. Если надо ждать 1 секунду, то поток, в котором Вы используете цикл, будет бессмысленно вызван 100 раз. А если ждет час? ------------------------ В моем варианте ,вне зависимости сколько ждать , поток будет вызван один раз.
Пользователь
Сообщений: Регистрация: 30.01.2015
07.03.2026 17:04:50
Мой вариант дергает процессор и ОС один раз.
Пользователь
Сообщений: Регистрация: 02.01.2026
07.03.2026 17:40:56
Цитата
nikolz написал: Можете объяснить как Вы к этому пришли?
На практике.
Цитата
nikolz написал: Оба варианта останавливают поток до наступления указанного времени.
Нет. sleep приостанавливает выполнение скрипта на заданное количество миллисекунд.
написал: Оба варианта останавливают поток до наступления указанного времени.
Нет. sleep приостанавливает выполнение скрипта на заданное количество миллисекунд.
Обсуждаем не функцию sleep, а функцию waitForDateTime(datetime) и мой вариант этой функции. Оба варианта останавливают поток до наступления указанного времени.
sleep приостанавливает выполнение скрипта на заданное количество миллисекунд.
Не меньше чем квант ОС или остаток от времени, выделенного для потока. ------------------------- если в цикле применяете многократно sleep, то результат имеет большую погрешность по сравнению с однократным на весь интервал времени. -----------------
Пользователь
Сообщений: Регистрация: 30.01.2015
09.03.2026 13:10:48
если в цикле sleep применяется с минимальным интервалом а весь интервал ожидание существенно больше , то процессор будет лишь греть воздух выполняя многократные вызовы sleep.
nikolz написал: Оба варианта останавливают поток до наступления указанного времени.
Вариант из сообщения #25 - да. Ваш вариант - нет. Он некорректно сработает, как в случае, так и в случае перевода часов, например, при синхронизации.
Цитата
nikolz написал: если в цикле применяете многократно sleep, то результат имеет большую погрешность по сравнению с однократным на весь интервал времени.
Отнюдь, количество вызовов sleep в цикле вообще не имеет значения. Поскольку в примере #25 выход из цикла происходит при достижении заданного времени, то погрешность будет не более максимального значения из max(квант_времени, значение_в_sleep) + погрешность os.time() Изучите, что такое погрешность и как она определяется, прежде, чем пытаться рассуждать на эту тему.
Цитата
nikolz написал: если в цикле sleep применяется с минимальным интервалом а весь интервал ожидание существенно больше ,то процессор будет лишь греть воздух выполняя многократные вызовы sleep.
Поставьте sleep побольше, в чём проблема?
Код
local function waitForDateTime(datetime)
local seconds_since_epoch = os.time(datetime)
assert(os.time() < seconds_since_epoch)
while seconds_since_epoch - os.time() > 1 do sleep(1000) end
while os.time() < seconds_since_epoch do sleep(1) end
end