Sergey (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Ошибка скрипта после переподключения
 
Цитата
BlaZed написал:
Цитата
Старатель написал:
Нельзя в OnInit никаких ожиданий делать. Если данных нет, то они и не появятся пока из OnInit не выйдете.
Вы правы, не подумал об этом.
Да и основной поток ожиданиями напрягать тоже далеко не самая лучшая идея.
Благодарю.

Sergey , код из OnInit лучше перенести в main перед вечным циклом
Хорошо
странное поведение getSecurityInfo("", ticker).class_code
 
Цитата
Владимир написал:
Sergey, Где это Вы такое выкопали? Вот, навскидку из этого форума ( https://forum.quik.ru/forum10/topic5013/) :

 Sergey Gorokhov  
 QUIK clients support  
#221.01.2020 10:16:25
Один инструмент может торговаться в нескольких классах.
getSecurityInfo при отсутствии кода класса, вернет параметры инструмента из первого попавшегося класса, но не факт что нужного.
В связи с чем, правильно самому указывать нужный класс
Значит я заблуждался, я ожидал что class_code может возвращать желаемый класс, а не только первый попавшийся.  
Ошибка скрипта после переподключения
 
Цитата
BlaZed написал:
Кстати, а в чем смысл для каждого инструмента искать class_code?
По мне лучше указывать явно нужные sec_code и class_code, и понадежнее будет, да и код станет проще.
Сейчас пока так и сделал, сделал с явным указанием кода. Но пригодится это когда инструментов много и с разных рынков. На основании некоторых предварительных критериев формируются динамические списки по ним и затем уже читаются lua скриптом. BlaZed спасибо за помощь!
странное поведение getSecurityInfo("", ticker).class_code
 
Цитата
Артем написал:
Это поле дублирует указанное на входе. Какой класс укажете такой там и будет.
А если на входе не указано, какое значение там будет?
странное поведение getSecurityInfo("", ticker).class_code
 
Цитата
Владимир написал:
Sergey, Вы поняли неверно: класс задаётся НА ВХОДЕ.
TABLE getSecurityInfo (STRING class_code, STRING sec_code)
И на выходе он будет именно тем, что был задан на входе. Это не "метод", а именно поле.
Значит мы о разном. Метод .class_code после функции getSecurityInfo("", instrument)  позволяет получить код класса: указав название инструмента в поле STRING sec_code и не задавая его в поле STRING class_code.
Но почему-то этот метод подтягивает только первое значение из списка, наверняка же там есть другие значения?
Вопрос остается актуальным
странное поведение getSecurityInfo("", ticker).class_code
 
Цитата
Артем написал:
Это поле дублирует указанное на входе. Какой класс укажете такой там и будет.
Я не про поле спросил же, а про метод class_code. Либо я вас не верно понял
странное поведение getSecurityInfo("", ticker).class_code
 
Я к чему спросил, в квике есть коды бумаг с одинаковыми названиями(как в моем случае "FIVE"). Как в этом случае корректно применять метод .class_code ?
Ошибка скрипта после переподключения
 
Вопрос по этому поводу задал здесь https://forum.quik.ru/forum10/topic6471/
странное поведение getSecurityInfo("", ticker).class_code
 
Подскажите, с каким параметром getSecurityInfo("", "FIVE").class_code вернет "TQBR" место "EQRP_INFO" ?
Ошибка скрипта после переподключения
 
Проблема в .class_code. На этих инструментах он выдает "EQRP_INFO" а должен возвращать "TQBR"
Ошибка скрипта после переподключения
 
Но если сделать прямо:

ticker="FIVE" --код инструмента/бумаги
classcode="TQBR" --код класса инструмента/бумаги, если нужен фондовый рынок - вводить TQBR вместо SPBFUT
iNterval=INTERVAL_D1 --таймфрейм

и подставить все в:

ds=CreateDataSource(classcode, ticker, iNterval ) --создаем источник данных

в этом случае работает.

Похоже ошибка либо в  getSecurityInfo(), либо в методе  .class_code
Ошибка скрипта после переподключения
 
Цитата
BlaZed написал:
Ну и причесать код ...
Есть очень необычная странность, для акций с приставкой -гдр. У меня не работает выгрузка, например если:
ticker_list = {{"FIVE"}, {"TCSG"}}
Ошибка скрипта после переподключения
 
BlaZed спасибо! Мне теперь разбираться и проверять на пару дней.  
Ошибка скрипта после переподключения
 
Цитата
BlaZed написал:
Цитата
Sergey написал:
classcode не глобальная - локальная в цикле for
Неа, она у вас именно глобальная. Обратитесь из любой другой функции к переменной classcode и удивитесь.

Цитата
Sergey написал:
попробуйте сами:
Не согласен, так же как и раньше выдаст ошибку на строчке
Код
  classcode =  getSecurityInfo ( "" ,instrument).class_code  
и до проверки classcode==nil просто не дойдет

Тут дело в том, что ошибка плавающая, и будет появляться если удачно совпадет момент чтения данных из getSecurityInfo с моментом подключения к серверу, когда старые данные уже удалились, но еще не загрузились новые.
При вашем sleep(3000) это может быть, ну скажем 1 раз из 10 раз, а поставьте sleep(100), так сразу увидите, что ошибка никуда не делась.
Похоже что вы правы, без sleep() вылетает сразу. Вариант вынести все в OnInit()? Но ведь там тоже нет гарантии что переменная classcode успеет записаться сразу после инициализации скрипта, даже при условии проверки соединения и не вылетит с ошибкой
Ошибка скрипта после переподключения
 
попробуйте сами:
function main()
....while is_run do
....sleep(3000)
........for key, instrument in pairs(ticker_list) do
............classcode=getSecurityInfo("",instrument).class_code
............if classcode~=nil then
................тут без изменений

............end
........end
....end
end
Ошибка скрипта после переподключения
 
Цитата
BlaZed написал:
Цитата
Sergey написал:
Сейчас работает надежно, независимо от  коннекта к серверу:
Ну как вам сказать... скрипт ругался на невозможность получить getSecurityInfo("",instrument).class_code


Цитата
Sergey написал:
if classcode~=nil then
Такая проверка не поможет, ибо classcode у вас глобальная и после первой же итерации всегда будет не nil если инструмент существует, и по такому условию просто каждую итерацию скрипт будет пропускать
classcode не глобальная - локальная в цикле for
Ошибка скрипта после переподключения
 
В общем, если у кого вдруг похожая проблема, решение банальное - проверкой на nil. Сейчас работает надежно, независимо от  коннекта к серверу:
while do
....if classcode~=nil then
........body

....end
end
Отдельное спасибо BlaZed, за то, что натолкнул на мысли
Ошибка скрипта после переподключения
 
Все таки if (isConnected () ==  1) then работает через раз, все-таки не показалось. Долго работало нормально, а сегодня после очередного дисконнекта скрипт снова отвалился, с той же ошибкой в 27 строке - nil . Сорри за столько сообщений, но я не нашел как редактировать или удалить написанные сообщения
Ошибка скрипта после переподключения
 
Цитата
BlaZed написал:
Ну или можно обернуть в проверку соединения
Забираю свои слова обратно, это работает. Хотя странно повело по началу, наверное мне показалось
Ошибка скрипта после переподключения
 
Я заметил, что classcode=getSecurityInfo("",instrument).class_code может быть nill даже когда связь установлена, вероятно не успевают загрузиться данные getSecurityInfo().
В init тоже не вариант..
Здесь бы очень подошло что-то вроде try-exeptions как в python, но я не знаю пока как это делать на lua
Ошибка скрипта после переподключения
 
Цитата
BlaZed написал:
Ну или можно обернуть в проверку соединения
Эта конструкция не сработала. Попробую первый вариант, вынести 'classcode (а так же out_file и ds)' в OnInit()
Ошибка скрипта после переподключения
 
Цитата
BlaZed написал:
Ну или можно обернуть в проверку соединения
Код
   function   main ()
   while  is_run  do 
     if ( isConnected () =  =  1 ) then 
 --- ТУТ ВАШ КОД -- 
     end 
     sleep ( 3000 )
   end 
 end   
но код вам явно причесать не помешало бы, слишком много ненужных повторов действий
Благодарю за отклик и скорую помощь! Сделаю как вы советуете.
Ошибка скрипта после переподключения
 
2. Если вручную переподключить соединение с интернетом, так же останавливается. После ручного запуска - работает до ручной остановки или переподключения интернета
Ошибка скрипта после переподключения
 
Цитата
BlaZed написал:
Скрипт не должен завершаться при разрыве соединения, если, конечно, это специально не реализовано.

Поэтому возникают следующие вопросы:
1) Скрипт молча останавливается или ошибку какую выдает?
2) Если вручную переподключиться, скрипт остановится?
3) Если ли в скрипте колбеки onConnected, onDisconnected, onCleanUp? Если есть, то что в них?
4) Используется ли проверка подключеия isConnected? Если используется, то как именно?

В идеале показали бы скрипт, предварительно удалив из него то, что считаете ком.тайной.
1. Останавливается без ошибок
2. Работает
3. Нет
4. Нет

-- параметры
is_run=true
ticker_list = {"EUR_RUB__TOM", "USD000UTSTOM"}
iNterval=INTERVAL_M15
corrTime=3
pFile="C:\\QUIK\\script\\"
cBars=1

--настройка параметров
function strText(int)
local m=tostring(int)
local mLen=string.len(int)

if mLen==1 then
Output="0" ..tostring(m)
else Output=m
end
return Output
end


function main()
while is_run do
for key, instrument in pairs(ticker_list) do --в цикле перебираем бумаги из ticker_list
classcode=getSecurityInfo("",instrument).class_code --получаем класс бумаги (TQBR,SPBFUT,CETS,ect.) по ее тикеру
out_file=io.open(pFile..instrument..".csv","w") --открываем с режимом для перезаписи

ds=CreateDataSource(classcode, instrument, iNterval ) --создаем источник данных
ds:SetUpdateCallback(NewChartData) --обновление последних данных (NewChartData)
local Size=ds:Size()
if Size>0 then

if cBars>Size then
cBars=Size-1
end

out_file:write("<DATE>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>\n") -- записываем название колонок

for i=Size-cBars, Size, 1 do
local O=ds:O(i)
local H=ds:H(i)
local L=ds:L(i)
local C=ds:C(i)
local V=ds:V(i)
local T=ds:T(i)

sTime=os.time(T)
datetime=os.date("!*t",sTime)

--вывод в файл
out_file:write(tostring(datetime.year)..tostring(strText(datetime.month))..tostring(strText(datetime.day))..","..tostring(strText(datetime.hour + corrTime))..tostring(strText(datetime.min))..tostring(strText(datetime.sec))..","..tostring(O)..","..tostring(H)..","..tostring(L)..","..tostring©..","..tostring(V).."\n")
out_file:flush() --сохраняем изменения
end
out_file:close() --закрываем файл
end
end
sleep(3000)   -- приостановка на 3 секунды
end
end
Ошибка скрипта после переподключения
 
Использую мобильный интернет для торговли. После потери соединения Quik 8.11 начинает переподключаться. После переподключения останавливается скрипт и запускается только руками.
Все расчеты в
is_run = True
function main()
....while is_run do
...
end

Функцию OnStop() не использую, пробовал с ней, результат такой-же.
function OnStop()
....is_run = false
end

Подскажите проблему.  
Странно работает QMinEditor, Quik Junior
 
Цитата
Egor Zaytsev написал:
Добрый день,
     
      Ошибка, из-за которой утилита QMinEditor не поддерживала работу с       новыми dat-файлами, исправлена в версии 8.6.0 утилиты.
     
      Приносим вам свои извинения за доставленные неудобства.
Не пойму, откуда скачивать QMinEditor? И где прочитать про условия пользования и инструкцию?
API для WebQuik
 
Несколько раз поднимался вопрос про API для WebQuik и несколько раз отвечали что API не будет. Я в очередной раз желаю от разработчиков полноценного API с документацией. Это нормальная практика в современном мире для подобного софта.
Страницы: 1
Наверх