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

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

Страницы: 1
Вопросы Новичка
 
Anton , Nikolay спасибо.
С print-debug и pcall не знаком, надо почитать.
Вопросы Новичка
 
Цитата
Афонькин написал:
всё валится, причем с закрытием терминала, как поймать что? если всё улетает бесследно?
Отвечаю сам себе : в данном конкретном случае лечимся добавлением функции - CandleExist
НО всё таки:  может кто-то имеет опыт отладки именно Индикаторов? Так что бы не методом проб (с вылетов Квика) и ошибок.
Вопросы Новичка
 
Цитата
Nikolay написал:
Добавляете индикатор в доступные скрипты lua и запускаете. Будет ошибка.
Сорри, но не работает Ваш вариант. Этож Индикатор ...

С синтаксисом без запуска в Квике я разобрался добавив в VisualStudio  lua дебугеры. Уже радует.
И теперь Индикатор виден Квиком - НО ... при запуске ошибка типа "арифметика с nil" приводит к закрытию Квика, если резко не закроешь окно с ошибкой :-(
вот в такой строке
Код
TR[i] = math.max( math.max (H(x) - L(x), H(x) - L(x - 1)), math.abs(L(x)-C(x -1)) )
какой то аргумент = nil и всё валится, причем с закрытием терминала, как поймать что? если всё улетает бесследно?
Мучаюсь дальше.
Вопросы Новичка
 
Цитата
Алексей написал:
При наличии синтаксических ошибок индикатор в списке виден не будет
Да видимо это и есть причина.
Знаю за собой такой грешок - в синтаксисе лажануться ...
Теперь найти бы эту ошибку ! Уже замучился, все глаза просмотрел.
Может поделитесь - как в индикаторе ищите ошибку ?
В простом скрипте при запуске все вылазит, а тут и не запустишь ... прям круговая зависимость
Вопросы Новичка
 
продолжаем с вопросам (главное что бы мои вопросы не оказались без ответа - а посмотрев на мои вопросы-ответы (типа сам написал сам ответил или напортачил с синтаксисом) никто и не захочет помогать)

Вопрос  № 4

Ситуация : сделан индикатор, расширенте файла . lua . в файле есть и Settings и Init() и function OnCalculate(Index)
файл находиться в папке - C:\GPB-i-Trade QUIK_x64\LuaIndicators
всё по книге -
а Quik его не видит !
До этого был опыт - и все прошло нормально. Работало норм. Хотя, теперь удалив этот файл - он все равно виден в списке индикаторов
Вообщем, не могу понять логику появления/исчезания индикатора. Может есть хитрость ?
Вопросы Новичка
 
Ошибку нашел !!! извините меня !!!
по рукам мне надавать от души !!!  
Вопросы Новичка
 
Код
ds, err = CreatDataSourse ("TQBR", "HYDR", INTERVAL_H1)

поправил на
Код
ds, err = CreateDataSourse ("TQBR", "HYDR", INTERVAL_H1)

все равно ошибка
Вопросы Новичка
 
продолжаю вопросничать, ну уж извините дилетанта

ВОПРОС № 3

Только начал писать и уже на подключении/получении данных загвоздка

код
Код
ds, err = CreatDataSourse ("TQBR", "HYDR", INTERVAL_H1)
ds:SetEmptyCallback()
sleep(100)
while (err == "" or err == nil) and ds:Size() == 0 do sleep(1) end
if err ~= "" and err ~= nil then message("Ошибка подключения к графику: "..err) end


плюется ошибкой

attempt to call a nil value (global 'CreatDataSourse')

что не так ?
Вопросы Новичка
 
Ну вот кто мне объяснит, почему
Код
z1 = z.bid_count
z4 = tonumber(z.bid[z1].price)
- НЕ работает !!!!!

А ТАК
Код
z4 = tonumber(z.bid[z.bid_count+0].price)
сразу заработало
Вопросы Новичка
 
Цитата
Игорь Б написал:
Попробуй  if z.bid.quantity ~= ' ' then (пока в цикле дойдет до z1  этой строки может уже не быть)
Сделал как Вы и говорили:
Цитата
Игорь Б написал:
for i=1, z1 do (это для оферов)  --для бидов надо написать for i=z1,1, -1 do т.к. счет начинается с края(снизу)
т.е. цикл начинается с этой z1 -й строки - значит точно должна существовать.

Кстати после изменения направления цикла на обратный перестала работать вся логика :( !!!! Рррр - закипает мозг .....

Теперь при проверочном выводе месседжем данных цикла - если раньше №п/п - переменная i отображалась как 1 2 3 4 ..., а теперь 1.0 2.0 3.0 ... - а изменил только направление перебора цикла.
Вопросы Новичка
 
Цитата
Anton написал:
...во второй строке как-как поле называется? Точно-точно?
Ё-моё !!! Блииин. Антон - спасибо. Извините - со слепу! Чёртова латиница.
Ура эту строку прошли на ура.
Спасибо Антон !

Но вот теперь уперлось в
Код
z4 = tonumber(z.bid[z1].price)

пишет  atempt index nil value
Вопросы Новичка
 
Цитата
Игорь Б написал:
for i=1, z1 do (это для оферов)  --для бидов надо написать for i=z1,1, -1 do т.к. счет начинается с края(снизу)
Да Вы тут правы.

Цитата
Игорь Б написал:
Ну и конечно все это надо перенести из OnQuote(class, sec )  в другое место
Почему ? Ведь если я убераю сложение а просто вывожу данные мессаджем -то всё ОК - данные есть, никаких nil !?!?!?!




Меня вот возмущает, что проверка на nil есть, а она не срабатывает.
Код
if z.bid[i].quantity ~= nil then
            lag = lag + tonumber(z.bid[i].guantity)
Вопросы Новичка
 
Продолжу задавать вопросы :

Пытаюсь поработать с данными стакана, а именно сложить объем спроса до достижения суммы при которой полностью можно закрыть позицию, НО вот ну ни как не выходит

Код:
Код
function OnQuote(class, sec ) 
   if class == "SPBFUT" and sec == "HYZ0" then
   z = getQuoteLevel2 (class, sec)
   z1 = z.bid_count
      for i=1, z1 do
         if z.bid[i].quantity ~= nil then
            lag = lag + tonumber(z.bid[i].guantity)
         
            if lag > posicia then
            z3 = tonumber(z.bid[i].price)
            z4 = tonumber(z.bid[z1].price)
            message("Full close :  " .. z3 .. " lag - ".. ( tonumber(z3-z4)))
         
            end
         end
         
               
      end
                        
            lag = 0
   end
end

Ошибка :
attempt to perform arithmetic on a nil value — ругается вот на эту строку:
Код
lag = lag + tonumber(z.bid[i].guantity)

Спасибо!
Вопросы Новичка
 
Цитата
Anton написал:
Очевидно, писали универсальную функцию для скриптов и индикаторов.
А ларчик вот как открывается. Неожиданно !!!

Антон, большое Вам спасибо.
Вопросы Новичка
 
Начинаю изучать Qlua. Для освоения рассматривал код индикаторов, который опубликован поддержкой (поэтому сам код приводить полностью нет смысла). Конкретно Momentum.
Жалко что в тексте нет ремарок.
При штудировании кода возник вопрос, который приводит меня в тупик :
Код
function Init()
   func = MOMENTUM()
   return #Settings.line
end

function OnCalculate(Index)
   return tonumber(Settings.Horizontal_line), ConvertValue(Settings, func(Index, Settings))
end

function MOMENTUM() 
   local it = {[1]=0, l=0}
return function (I, Fsettings, ds)

Логически я читаю так в  Init() инициализируется/запускается экземпляр функции MOMENTUM() ; в OnCalculate(Index) в неё передаются вводные  func(Index, Settings)

откуда во внутренней функции function (I, Fsettings, ds) берутся данные в ds ? !
они по умолчанию как то привязаны к источнику данных ?

Спасибо заранее.
Страницы: 1
Наверх