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

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

Страницы: 1
Пользовательские таблицы, Привязка к вкладке
 
Очень бы хотелось иметь возможность привязывать пользовательские таблицы к конкретным вкладкам Квика.
Например иметь такую опцию в функции CreateTable() или SetWindowPos(...)

Сейчас для того, что бы открыть таблицу в определенной вкладке, нужно запускать скрипт робота находясь в ней.
Если скриптов несколько, то бегать по вкладкам запуская их.
Кроме того при закрытии терминала или аварийном перезапуске пользовательские таблицы вновь открываются во вкладке вкладке, которая была открыта на момент выхода из Квика.  Робот обижается :)
getDepoEx, Ошибки при выполнении функции
 
Еще один момент.
Вчера поставил рядом две функции выборки из одной и той же таблицы:

1:   p=getDepo( "555555", "MC0003300000",  "SU26225RMFS1", "L01-00000F00").depo_current_balance
2:   y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal

В 9-30 скрипт вылетел с указанием на сроку 2.  Т.е. getDepo(...) отработала штатно в отличие от getDepoEx(...)

Хрень какая-то :(
getDepoEx, Ошибки при выполнении функции
 
версия 7.23.2.5

Сергей, спасибо за ваши попытки помочь. Давайте попробуем воспроизвести ситуацию.

Пусть у вас в цикле getDepoEx(...).currentball получает количество бумаг определенного тикера периода T2. Т.е. той бумаги, которая у вас реально есть в портфеле.

В настройках Квика стоит "Очищать данные после смены даты ...на сервере" и "Восстанавливать связь с 9-30 до ...

С вечера запустите скрипт и если он живым  доедет до 10-00 следующего утра, я посыплю голову пеплом и закрою вопрос или попробую поискать причину вне Квика.
getDepoEx, Ошибки при выполнении функции
 
Цитата
Sergey Gorokhov написал:
Kolossi,

не воспроизводится
Код
   if   getDepo Ex ( "MC0003300000" ,  "555555" ,  "SU26225RMFS1" ,  "L01-00000F00" ,  2 )  then 
   message ( "getDepoEx~=nil" )
 else 
   message ( "getDepoEx is nil" )
 end 
  

 

Может у Вас версия терминала старая?
Новая. Вы не внимательно читаете.  Ошибка выскакивает только в момент коннекта с сервером в первый раз за текущие сутки.
Т.е. в терминале стоит реконнект начиная с 9-30 утра и в Основных настройках стоит "Очищать данные после смены даты ...на сервере".   Вот в момент первого реконнекта это и происходит. Дальше все нормально работает.

PS У вас nil, потому что стоит не ваш счет клиента 555555 и другие параметры тоже не ваши.  
getDepoEx, Ошибки при выполнении функции
 
Цитата
Sergey Gorokhov написал:
Цитата
Kolossi написал:
 
Цитата
Sergey Gorokhov  написал:
 
Цитата
 Kolossi   написал:
Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
А это сообщение разве не говорит что значение nil?
Не говорит, это сообщение о причине остановки скрипта.

сообщение о причине остановки скрипта,  как раз и говорит о том что Вы пытаетесь получить параметр таблицы которая есть nil
Как уже было сказано и еще раз повторим, что для решения проблемы  надо сделать проверку на nil
Еще раз попробую объяснить. Я не тупой и не начинающий :) И пример с type тоже не зря привел.
Сама проверка на nil, останавливает скрипт !!!.
Т.е. в конструкции

if getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2) then
  y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
end

первая строка останавливает скрипт с диагнозом : attempt to index a nil value
 
getDepoEx, Ошибки при выполнении функции
 
Цитата
Sergey Gorokhov написал:
Цитата
Kolossi написал:
Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
А это сообщение разве не говорит что значение nil?
Не говорит, это сообщение о причине остановки скрипта.
getDepoEx, Ошибки при выполнении функции
 
Цитата
vgi написал:
Цитата
Kolossi написал:
 
Цитата
vgi  написал:
Вы любите рисковать))
Код
   local  depo  =   getDepo Ex ( "MC0003300000" ,  "555555" ,  "SU26225RMFS1" ,  "L01-00000F00" ,  2 )
 .. .
  
   
Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт.

Помимо рисковать, ещё любите спамить))
Попробуйте кнопку  Просмотр  перед тем, как  Отправить .
На форуме нет возможности исправить/удалить сообщение.

А по делу. Ситуация странная, надеюсь АРКА поможет.
Как бы то ни было, надо, чтобы ошибки не вышибали скрипт. Используйте pcall / xpcall и логгируйте ошибки.
https://forum.quik.ru/messages/forum10/message34051/topic3970/#message34051
Ну вот и спамером обозвали :(, не со зла я :) . Надеюсь админ почистит.
По ситуации мне не понятно, почему такой проблемы нет в других функциях получения данных из таблиц типа getParamEx и др . Завтра на открытии попробую посмотреть getDepo(...)
getDepoEx, Ошибки при выполнении функции
 
--
getDepoEx, Ошибки при выполнении функции
 
Дубль
getDepoEx, Ошибки при выполнении функции
 
Цитата
Kolossi написал:
Цитата
vgi написал:
 
Цитата
Kolossi  написал:
Добрый день !  Столкнулся с проблемой при использовании данной функции.   ...
y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
 
Добрый день!

Вы любите рисковать))
В lua, как в динамически типизированном языке, стоит всегда добавлять проверки на null, а потом уже доставать из переменной значения, как из таблицы:
 
Код
      local   depo   =     getDepo  Ex (  "MC0003300000"  ,  " 555555 " ,  "SU26225RMFS1" ,  "L01 - 00000F00" ,   2  )
  local   currentbal   =   depo   and   depo.currentbal 
                           or     0     -- например      
 

Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт.  Повторюсь, только в момент подключения к серверу в первый раз за сутки, когда очищаются данные на сервере (как прописано в настройках Квика). Дальше в течении дня все работает корректно.
getDepoEx, Ошибки при выполнении функции
 
Цитата
Kolossi написал:
Цитата
vgi написал:
 
Цитата
Kolossi  написал:
Добрый день !  Столкнулся с проблемой при использовании данной функции.   ...
y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
 
Добрый день!

Вы любите рисковать))
В lua, как в динамически типизированном языке, стоит всегда добавлять проверки на null, а потом уже доставать из переменной значения, как из таблицы:
 
Код
      local   depo   =     getDepo  Ex (  "MC0003300000"  ,  " 555555 " ,  "SU26225RMFS1" ,  "L01 - 00000F00" ,   2  )
  local   currentbal   =   depo   and   depo.currentbal 
                           or     0     -- например      
 

Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт.  Повторюсь, только в момент подключения к серверу в первый раз за сутки, когда очищаются данные на сервере (как прописано в настройках Квика). Дальше в течении дня все работает корректно.
getDepoEx, Ошибки при выполнении функции
 
Цитата
vgi написал:
Цитата
Kolossi написал:
Добрый день !  Столкнулся с проблемой при использовании данной функции.   ...
y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal

Добрый день!

Вы любите рисковать))
В lua, как в динамически типизированном языке, стоит всегда добавлять проверки на null, а потом уже доставать из переменной значения, как из таблицы:
Код
   local  depo  =   getDepo Ex ( "MC0003300000" ,  "555555" ,  "SU26225RMFS1" ,  "L01-00000F00" ,  2 )
 local  currentbal  =  depo  and  depo.currentbal 
                          or   0   -- например   

Пробовал, сама первая строка, которую вы предлагаете вышибает скрипт.  Повторюсь только в момент подключения к серверу в первый раз за сутки, когда очищаются данные на сервере (как прописано в настройках Квика). Дальше в течении дня все работает корректно.
getDepoEx, Ошибки при выполнении функции
 
Цитата
Sergey Gorokhov написал:
Цитата
Kolossi написал:
Возможно это баг разработчиков. Но я не могу придумать как это обойти, кроме как останавливать скрипт на время обновления данных. Подскажите если кого озарит
Почему именно баг? Вы же сами сказали что данных нет. А раз данных нет то и возвращать естественно нечего.
И даже в документации про это сказано:
Цитата
В случае ошибки функция возвращает «nil».
остается только добавить проверку на nil
Если бы она возвращала nil, я бы сюда не обращался. Скрипт останавливается с ошибкой : attempt to index a nil value
getDepoEx, Ошибки при выполнении функции
 

Добрый день !

Столкнулся с проблемой при использовании данной функции.

...
y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
...

Получаю ошибку несуществующего аргумента в момент очистки таблиц при первом за текущие сутки коннекте к серверу 9-30.  Дальше работает корректно, все данные из таблицы лимитов получаются, при переконнекте скрипт не вылетает.

Попробовал посмотреть что она в этот момент возвращает
...
y=type(getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2))
...

получил:   bad argument #1 to type (value expected)

Выборки из других таблиц getParamEx, getPortfolioInfoEx работают как и должны круглосуточно.

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

Обращение к произвольной таблицы
 
Добрый день знатоки!

Подскажите пожалуйста, а то я уже всю голову сломал.
В скрипте создаю таблицу

t_id=AllocTable()

Я так понимаю, что t_id создается случайным образом

Как обратится к этой таблице из другого скрипта, который этот идентификатор не знает?

Ну или передать переменную из скрипа в скрипт что ли ?

Спасибо,

Игорь

Ошибки в функции getQuoteLevel2!!!, Возвращаемый стакан котировок не всегда соответствует (нормальным) условиям...
 
Цитата
Egor Zaytsev написал:
Добрый день.


Lua не работает с таблицами QUIK, а берет информацию напрямую с сервера брокера.
Поэтому в этом месте рекомендуем обратиться к брокеру и если брокер затруднится в разборе проблемы,
то инициируйте обращение к нам. Будем разбираться.
Начинается обычный пинг-понг и пользователь в качестве мячика :(
--
По вопросу написания и использования скриптов, прошу обращаться в техническую поддержку разработчика ПО Quik: http://arqatech.com/ru/support/

С уважением,

Владислав Сидельников
Эксперт
Департамент брокерского обслуживания
Банк ВТБ (ПАО)
--
Ошибки в функции getQuoteLevel2!!!, Возвращаемый стакан котировок не всегда соответствует (нормальным) условиям...
 
Добрый день !

Вчера (пятница 29/06/18) произошел странный сбой, который обошелся мне в приличную сумму.
С утра перестал отвечать основной сервер брокера ВТБ и все переключились на Сервер2.
Ближе к обеду я обратил внимание на некорректное выставление заявок скриптом QUIK.
После разбирательства выяснилось, что функция getQuoteLevel2() возвращает данные, которые не соответствуют содержимому стакана.

Конкретный трейс - в открытом стакане Алросы нижний оффер 98.64, верхний бид 98.62. Картинка статичная, сделок нет.

Запрос
...
local gql=getQuoteLevel2(x_classcode,x_seccode)
return gql.bid[1].price
...
возвращает значения:  98.64, 98.68, 98.42...

В общем вместо первого бида в таблице возвращалось что-попало.

В связи с этим хотел узнать , берет ли функция данные из открытого в квике стакана или это дерьмо лезет напрямую с сервера брокера ?

 Если будут предложения, как в такую ситуацию больше не попадать, заранее спасибо!
Сервисные функции, getInfoParam('SERVERTIME') возвращает пустую строку
 
Спасибо !
Не думал, что попадусь на такой ерунде. Понедельник...:)
Сервисные функции, getInfoParam('SERVERTIME') возвращает пустую строку
 
Помогите пожалуйста коллеги.
getInfoParam возвращает пустую строку и я не понимаю почему.

Простейший код

if isConnected()==1 then
    local a=getInfoParam("Tradedate")
    local b=getInfoParam("Servertime")
    message(a,1)
    message(b,1)
end

в ответ в message пустые строки
Время рабочей сессии. Версия  7.6.1.1

Спасибо!
Звуки в Qlua, Вопрос по звуковой индикации
 
Цитата
s_mike@rambler.ru написал:
Звуки в Lua
Спасибо.  Только я из-под wine на Mac, может быть по этому: "module 'alien' not found"
Где его вообще взять ?
Звуки в Qlua, Вопрос по звуковой индикации
 
Добрый день !
Подскажите знатоки, есть какая то библиотека проигрывания звукового файла под lua?
Или хотя бы бипер на худой конец ?

Спасибо.

Игорь
Работа с именем переменной
 
Цитата
Sergey Denegin написал:
В луа для этого есть глобальная переменная _G через которую можно обратиться к любой переменной, или даже процедуре.
например _G["a1"] выдаст значение переменной а1
а _G["a1"]["b2"] выдаст значение к элементу массива a1.b2
те в данном примере

if _G[c]=0 then
  ...
end

?
Работа с именем переменной
 
Подскажите пожалуйста человеку не знакомому достаточно подробно с lua.
Как обработать переменную, имя которой представлено в строке?
Например :

var1=0
a = "var"
b = "1"
c =a..b
далее мне нужно например в конструкции if проверить значение переменной var1 имея переменную c.
В некоторых языках для этого используется оператор $
там это выглядит так:
if $c = 0 then
    ........
end

Как это сделать в lua?

Прошу извинить, что не нашел этого в руководстве :(
Вызов окна настроек при запуске индикатора
 
Цитата
Алексей Дуванов написал:
под wine (linux) 7.1.1 и 7.1.2 стало нормально открывать вкладку индикатора.
Также отдельное спасибо, что-то подкрутили в модуле статвол (опционный аналитик) - теперь работает под вайном (правда есть небольшие косячки, но работать можно)
Алексей, а функция sleep(n) у вас под wine корректно работает? У меня false возвращает :(
Вызов окна настроек при запуске индикатора
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Попробуйте обновить версию до 7.1
Проверьте будет ли наблюдаться там указанная проблема?
Дело в том что в версии 7.1 диалог настроек графиков был переделан и там используются другие контролы, поэтому проблем не должно быть
Спасибо, попробую.
Вызов окна настроек при запуске индикатора
 
Цитата
SDL написал:
Цитата
Kolossi   написал:
отсутствует вкладка "Общие".
Имеются только вкладки "Дополнительно" и "Уровни".
Ага, есть такая проблема. В Linux из-под WINE у меня проявляется. И в 6-й версии так же.
Наверно, эта вкладка написана очень нестандартно.
Ага, у меня как раз из-под wine (Mac). И что делать, есть варианты ?
Вызов окна настроек при запуске индикатора
 
Даже минимальный код
------
Settings=
{
Name="example",

}


function Init()
return 1
end
function OnCalculate(index)

return nil

end
----------
дает тот же результат.
Вызов окна настроек при запуске индикатора
 
Цитата
Kolossi написал:
dofile(getWorkingFolder().."\\include\\ma.lua")
Пардон

Settings=
{
Name="EMA",
period=50,
value_type="C",
line=
{
{
Name="1",
Color=RGB(0,172,220),
Type=TYPE_LYNE,
Widh=4
}
}
}

function dValue(i,param)
local v = param or "C"
if v=="O" then
return O(i)
elseif v=="H" then
return H(i)
elseif v=="L" then
return L(i)
elseif v=="C" then
return C(i)
elseif v=="V" then
return V(i)
elseif v=="M" then
return H(i)+L(i)/2
elseif v=="T" then
return H(i)+L(i)+C(i)/3
elseif v=="W" then
return H(i)+L(i)+2*C(i)/4
else
return C(i)
end
end

function Init()
return 1
end
function OnCalculate(index)
if index <Settings.period then
return nil
else
local sum=0
for i=index-Settings.period+1, index do
sum=sum+C(i)
end
return sum/Settings.period
end
end
Вызов окна настроек при запуске индикатора
 
Цитата
Egor Zaytsev написал:
Сообщите еще версия QUIK и ссылку на файл dofile(getWorkingFolder().."\\Include\\ma.lua")
Егор, версия указана в первом сообщении.
Ссылка на инкладник не принципиально, я могу эту функцию убрать, результат тот же
простейший вариант:
dofile(getWorkingFolder().."\\include\\ma.lua")

Settings=
{
Name="EMA",
period=50,
value_type="C",
line=
{
{
Name="1",
Color=RGB(0,172,220),
Type=TYPE_LYNE,
Widh=4
}
}
}

function dValue(i,param)
local v = param or "C"
if v=="O" then
return O(i)
elseif v=="H" then
return H(i)
elseif v=="L" then
return L(i)
elseif v=="C" then
return C(i)
elseif v=="V" then
return V(i)
elseif v=="M" then
return H(i)+L(i)/2
elseif v=="T" then
return H(i)+L(i)+C(i)/3
elseif v=="W" then
return H(i)+L(i)+2*C(i)/4
else
return C(i)
end
end

function Init()
return 1
end
function OnCalculate(index)
if index <Settings.period then
return nil
else
local sum=0
for i=index-Settings.period+1, index do
sum=sum+C(i)
end
return sum/Settings.period
end
end
Вызов окна настроек при запуске индикатора
 
Цитата
Egor Zaytsev написал:
Добрый день.

Просьба выложить скриншот проблемы и скрипт индикатора.
http://s019.radikal.ru/i632/1603/c0/3cb3fb8ccf89.png

dofile(getWorkingFolder().."\\Include\\ma.lua")

Settings=
{
Name="EMA",
period=50,
value_type="C",
line=
{
{
Name="1",
Color=RGB(0,172,220),
Type=TYPE_LYNE,
Widh=4
}
}
}

function Init()
myEMA = cached_EMA()
return 1
end
function OnCalculate(index)
return myEMA(index, Settings.period, Settings.value_type)
end
Вызов окна настроек при запуске индикатора
 
Добрый день.
Подскажите начинающему как победить проблему.
При добавлении индикатора, написаного на lua в появляющемся окне настроек индикатора отсутствует вкладка "Общие".
Имеются только вкладки "Дополнительно" и "Уровни". В результате невозможно задать параметры индикатора.
Quik версия 7.0.4.10
Спасибо
Страницы: 1
Наверх