Иногда терминал перестает получать данные - то есть "паровозик ездит", серверное время меняется, соединение "установлено", но значения времени/номера последней полученной записи остаются прежними - соответственно, в интерфейсе никакие изменения не отражаются. Как-то это можно полечить?
Я про это писал и выкладывал скрипт, который это обнаруживает и пишет в лог файлы
Пользователь
Сообщений: Регистрация: 30.01.2015
24.07.2026 13:00:51
лекарство только одно - стучать брокеру по ...
Пользователь
Сообщений: Регистрация: 11.05.2026
28.09.2026 15:46:58
Брокер сбер, на других норм, у меня каждые 10 секунд залипает 2-3 секунды, у тебя такое происходит, можешь посмотреть?
Пользователь
Сообщений: Регистрация: 27.01.2017
03.11.2026 10:27:32
Да уже столько писал про это. В последних версиях явно что-то изменили в работе поток данных. В итоге они идут неспешно, при длительном отключении терминала от брокера, вызовется очистка данных терминала и вы получите все что было от начала дня снова. Также потоки данных игнорируют умный заказ данных... Но все как задумано. Правда, судя по всему, разработчики забыли или даже не пробовали 7-ую версию, которая работала стабильно столько лет. А теперь мажорные версии каждый квартал, но до сих пор древняя кодировка в текстах, нет поддержки HDPI мониторов, нет изменения размеров базовых окно терминала...
Пользователь
Сообщений: Регистрация: 30.01.2015
03.11.2026 11:40:29
Последнее время или потому, что версия КВИК 12 , но у Сбербанка вообще полный писец. Когда ему вздумается останавливает передачу данных на минуты и связь не разрывает. Теперь может принимать данные ,но не отображать в строке время сервера и принятые данные, а прыгать через несколько или даже десятки секунд. ------------------------------------- Я уже перестал эти приколы записывать в лог файлы. Смысла нет. ---------------------------------- Советую тем , кто начинает - не связывайтесь с этим брокером , чтобы потом не удивляться почему такое Г..но получается,
Пользователь
Сообщений: Регистрация: 27.01.2017
04.11.2026 13:14:50
Цитата
nikolz написал: Последнее время или потому, что версия КВИК 12 , но у Сбербанка вообще полный писец. Когда ему вздумается останавливает передачу данных на минуты и связь не разрывает. Теперь может принимать данные ,но не отображать в строке время сервера и принятые данные, а прыгать через несколько или даже десятки секунд. ------------------------------------- Я уже перестал эти приколы записывать в лог файлы. Смысла нет. ---------------------------------- Советую тем , кто начинает - не связывайтесь с этим брокером , чтобы потом не удивляться почему такое Г..но получается,
Удивительным образом, у меня Сбер один из лучших. ВТБ - полный кошмар. Альфа - лучше всех. Финам - такое... Очень часто рвет связь.
Но самое печальное на последних версиях - это если обрыв связи был продолжительное время, минут 10, то после восстановления будет вызван колбек OnCleanUp. По крайней мере я это вижу на двух брокерах.
До 10-ой версии я этот колбек видел может раз в год.
написал: Последнее время или потому, что версия КВИК 12 , но у Сбербанка вообще полный писец. Когда ему вздумается останавливает передачу данных на минуты и связь не разрывает. Теперь может принимать данные ,но не отображать в строке время сервера и принятые данные, а прыгать через несколько или даже десятки секунд. ------------------------------------- Я уже перестал эти приколы записывать в лог файлы. Смысла нет. ---------------------------------- Советую тем , кто начинает - не связывайтесь с этим брокером , чтобы потом не удивляться почему такое Г..но получается,
Удивительным образом, у меня Сбер один из лучших. ВТБ - полный кошмар. Альфа - лучше всех. Финам - такое... Очень часто рвет связь.
Но самое печальное на последних версиях - это если обрыв связи был продолжительное время, минут 10, то после восстановления будет вызван колбек OnCleanUp. По крайней мере я это вижу на двух брокерах.
До 10-ой версии я этот колбек видел может раз в год.
Это интересный момент. Давайте разбираться. Чудес не бывает. ----------------------------- Возможно Вы не видите эти остановы. Я выкладывал скрипт записи лог файла Можете его запустить и выложить результат. ----------------------------- Либо это связано с сервером Какой у вас IP сбербанка У меня 194.54.14.224 порт 15100
Пользователь
Сообщений: Регистрация: 30.01.2015
05.11.2026 09:51:57
Скрипт, который измеряет задержку --------------------------------- 1) сервера брокера от времени прихода последних данных 2) сервера брокера от локального времени компьютера с учетом часового пояса 3) времени компьютера от сервера точного времени ------------------------- разность времени сервера точного времени (атомных часов) и моего ПК ПК синхронизирован Поэтому смещение не более 1 секунды ----------------- Скрипт:
Код
function T2S(T) local x={} for s in T:gmatch("[^:]+") do x[#x+1]=tonumber(s) end return x; end
function get_ntp_time(server)
server = server or "pool.ntp.org"
local cmd = string.format(
'w32tm /stripchart /computer:%s /samples:1 /packetinfo', server)
local p = io.popen(cmd)
if not p then return nil, "io.popen не удался" end
local out = p:read("*a")
p:close()
local last_hex
for h in out:gmatch("0x(%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x)") do
last_hex = h
end
if last_hex then
local hi = tonumber(last_hex:sub(1, 8), 16)
local lo = tonumber(last_hex:sub(9, 16), 16)
if hi then
return hi - 2208988800, lo / 4294967296, "hex"
end
end
local last_txt
for s in out:gmatch("(%d+%.%d+%.%d+%s+%d+:%d+:%d+)") do
last_txt = s
end
if last_txt then
local d, mo, y, H, M, S =
last_txt:match("(%d+)%.(%d+)%.(%d+)%s+(%d+):(%d+):(%d+)")
local ts = os.time({
year = tonumber(y), month = tonumber(mo), day = tonumber(d),
hour = tonumber(H), min = tonumber(M), sec = tonumber(S),
})
return ts, 0, "text"
end
return nil
end
MaxTime=30
loc_time=0;
Dt=0;
sts=""
function main()
while run do
local tim=os.time()
if tim-loc_time>60 then
local ts, frac, src = get_ntp_time("pool.ntp.org")
if ts then
Dt=ts -tim
sts="ПК-ntp="..tostring(Dt)
loc_time=tim
else sts=""
end
end
local t = os.date("*t")
local os_HMS=100*(100*(t.hour-1)+t.min)+t.sec;
local os_S=60*(60*(t.hour-1)+t.min)+t.sec;
TS=getInfoParam("SERVERTIME")
TW=getInfoParam("LASTRECORDTIME")
if TS and TW then
TL=getInfoParam("LASTPINGTIME")
if TS_OLD and TS~=TS_OLD then
if D>MaxTime then
if temp==0 then str=TS_HMS; temp=D else temp=temp+D end
else
if temp>MaxTime then str=str..",задержка="..temp; Log:write(str.."\n"); Log:flush(); begin=Log:seek(); end
temp=0;
Log:seek("set",begin);
local D1=math.abs((os_S-X)//1)
Log:write(TS..", ".."данные-сервер="..D..",ПК-сервер="..D1..","..sts.."\n"); Log:flush();
if D>Dt+1.1 and D1<MaxTime then begin=Log:seek();end
end
end
t1=T2S(TW); t2=T2S(TS); X=60*(60*t1[1]+t1[2])+t1[3] X1=60*(60*t2[1]+t2[2])+t2[3] D=math.abs(X-X1)
end
TL_OLD=TL; TS_OLD=TS;
sleep(200);
end
end
function OnInit(ph)
ph=ph:sub(1,ph:len()-3).."log";
Log = io.open(ph, "w"); Log:seek("end");
begin=Log:seek(); X=0; X1=0;
D=0; temp=0; run=true
end
Скрипт записывает в файл, если запаздывание данных от сервера брокера больше 1 секунды ---------------------- текущий результат Сбербанк
Содержание строки результата: 9:26:39, -время сервера данные-сервер=2, время сервера отличается от времени поступления последних данных на 2 секунды ПК-сервер=3, -время сервера отличается от локального времени компьютера с учетом часового пояса на 3 секунды ПК-ntp=0 -- локальное время компьютера отличается от атомных часов сервера точного времени на 0 секунд
Пользователь
Сообщений: Регистрация: 30.01.2015
05.11.2026 09:54:58
проверить свой компьютер можете здесь:
Пользователь
Сообщений: Регистрация: 05.11.2026
05.11.2026 10:07:37
Цитата
ОлегК написал: Брокер сбер, на других норм, у меня каждые 10 секунд залипает 2-3 секунды, у тебя такое происходит, можешь посмотреть?
У меня 1в1 проблема у Сбера, удалось как-нибудь решить? Я даже винду переустановил, ничего не помогает..
Пользователь
Сообщений: Регистрация: 27.01.2017
05.11.2026 11:19:39
Цитата
Это интересный момент. Давайте разбираться. Чудес не бывает. ----------------------------- Возможно Вы не видите эти остановы. Я выкладывал скрипт записи лог файла Можете его запустить и выложить результат. ----------------------------- Либо это связано с сервером Какой у вас IP сбербанка У меня 194.54.14.224 порт 15100
У Сбера теперь один адрес сервера, точнее шлюза. Скрипты у меня уже очень давно проверяют расхождения времен сервера, пакета и локального времени. И если разница больше порога (у меня 3 сек.), то переходят в режим ожидания.
Ваш скрипт запустил, данные-сервер=0 стабильно, разница с локальным временем 1 сек. Хотя явно есть смещение на час, т.к. пишет 3599.
Я советую посмотреть на записи в информационном окне: Очередь сетевых сообщений Очередь сервисных задач
Например, ВТБ стабильно там показывает большие цифры. У Сбера там 0. При этом ВТБ, по моим проверкам, игнорирует настройки заказа данных терминала и отправляет вам все, даже по классам CROSSRATE , валютным парам, SPBOPT и т.д. В итоге вы получаете достаточно плотный поток данных. Хотя подписаны на одни ОФЗ, как у меня, например.
Пользователь
Сообщений: Регистрация: 30.01.2015
05.11.2026 12:34:58
поправил функцию main
Код
function main()
X=0; X1=0; X1_OLD=0;
while run do
local tim=os.time()
if tim-loc_time>60 then
local ts, frac, src = get_ntp_time("pool.ntp.org")
if ts then
Dt=ts -tim
sts="ПК-ntp="..tostring(Dt)
loc_time=tim
else sts=""
end
end
local t = os.date("*t")
local os_HMS=100*(100*(t.hour-1)+t.min)+t.sec;
local os_S=60*(60*(t.hour-1)+t.min)+t.sec;
TS=getInfoParam("SERVERTIME")
TW=getInfoParam("LASTRECORDTIME")
if TS and TW then
if TS_OLD and TS~=TS_OLD then
t1=T2S(TW); t2=T2S(TS); X=60*(60*t1[1]+t1[2])+t1[3] X1=60*(60*t2[1]+t2[2])+t2[3]
if X1-X1_OLD~=60 then Log:seek("set",begin); end
local D1=math.abs((os_S-X)//1)
Log:write(TS..", ".."данные-сервер="..D..",ПК-сервер="..D1..","..sts.."\n"); Log:flush();
if D>Dt+1.1 and D1<MaxTime then begin=Log:seek();end
end
D=math.abs(X-X1)
end
TL_OLD=TL; X1_OLD=X1; TS_OLD=TS;
sleep(200);
end
end
function T2S(T) local x={} for s in T:gmatch("[^:]+") do x[#x+1]=tonumber(s) end return x; end
function get_ntp_time(server)
server = server or "pool.ntp.org"
local cmd = string.format(
'w32tm /stripchart /computer:%s /samples:1 /packetinfo', server)
local p = io.popen(cmd)
if not p then return nil, "io.popen не удался" end
local out = p:read("*a")
p:close()
local last_hex
for h in out:gmatch("0x(%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x)") do
last_hex = h
end
if last_hex then
local hi = tonumber(last_hex:sub(1, 8), 16)
local lo = tonumber(last_hex:sub(9, 16), 16)
if hi then
return hi - 2208988800, lo / 4294967296, "hex"
end
end
local last_txt
for s in out:gmatch("(%d+%.%d+%.%d+%s+%d+:%d+:%d+)") do
last_txt = s
end
if last_txt then
local d, mo, y, H, M, S =
last_txt:match("(%d+)%.(%d+)%.(%d+)%s+(%d+):(%d+):(%d+)")
local ts = os.time({
year = tonumber(y), month = tonumber(mo), day = tonumber(d),
hour = tonumber(H), min = tonumber(M), sec = tonumber(S),
})
return ts, 0, "text"
end
return nil, "Не удалось разобрать вывод w32tm:\n" .. out
end
function main()
local X,X1,X1_OLD,TS_OLD,loc_time,Dt,sts=0,0,0,0,0,0,"";
while run do
local tim=os.time()
if tim-loc_time>60 or loc_time==0 then
local ts, frac, src = get_ntp_time("pool.ntp.org")
if ts then
Dt=ts -tim
sts="ПК-ntp="..tostring(Dt)
loc_time=tim
else sts=""
end
end
local t = os.date("*t")
local os_S=60*(60*(t.hour-1)+t.min)+t.sec;
TS=getInfoParam("SERVERTIME") TW=getInfoParam("LASTRECORDTIME")
if TS and TW then
if TS~=TS_OLD then
t1=T2S(TW); X=60*(60*t1[1]+t1[2])+t1[3]
t2=T2S(TS); X1=60*(60*t2[1]+t2[2])+t2[3]
Log:seek("set",begin);
D1=math.abs((os_S-X1)//1) D=math.abs(X-X1)
Log:write(TS..", ".."дан-серв="..D..",ПК-серв="..D1..","..sts.."\n"); Log:flush();
if D>Dt+1 then begin=Log:seek();end
end
end
TL_OLD=TL; X1_OLD=X1; TS_OLD=TS;
sleep(20);
end
end
function OnInit(ph)
ph=ph:sub(1,ph:len()-3).."log";
Log = io.open(ph, "w"); Log:seek("end");
begin=Log:seek(); run=true
end
вот этот оператор содержит смещение 1 для моего часового пояса относительно московского времени local os_S=60*(60*(t.hour-1)+t.min)+t.sec; если Вы в Москве то замените 1 на 0