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

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

Страницы: 1
QLUA, вопросы начинающих.
 
Запустил  через "Сервисы" - "Lua скрипты",ошибку не выдает . Добавил в папку LuaIndicators и попробовал добавить на график через терминал.Вышла ошибка

Ошибка создания индикатора "VS". Function Init(): ...iles\QUIK-Junior\LuaIndicators\quik_ind.lua:50: attempt to perform arithmetic on a nil value

50 строка :

Ld_0= H(li+ 1) - L(li + 1) --Ld_0 по задумке равняется High(li + 1) - Low(li + 1)
QLUA, вопросы начинающих.
 
Цитата
Sergey Gorokhov написал:
Цитата
Aidar   написал:
как лучше в qlua записать
куда записать?
Имелось ввиду что на языке lua корректно следующее выражение или нет

Ld_0= H( li+ 1) - L(li + 1), --Ld_0 по задумке равняется  High(li + 1) - Low(li + 1)  
 Ld_1= H(li + 2) - L(li + 2)
QLUA, вопросы начинающих.
 
Здравствуйте
У меня есть следующая функция

function VS() -- функция VS
   local H_tmp={}  -- объявление массива под значения High
   local L_tmp={}  -- объявление массива под значения Low
   local V_tmp={}  -- объявление массива под значения VOLUME
   local it = {[1]=0, l=0} -- в массив попадают номера свечек, из которых потом ищется нужная свечка где и рисуется индикатор
   return function (I, Fsettings, ds) -- возвращает значение function (I, Fsettings, ds)
   local Fsettings=(Fsettings or {})
   local Ba = (Fsettings.NUMBER_OF_BARS or 300) -- присваивается значение количество баров или 300
   for li=Ba,0,-1 do

Ld_0= H( li+ 1) - L(li + 1), --Ld_0 по задумке равняется  High(li + 1) - Low(li + 1)
 Ld_1= H(li + 2) - L(li + 2)
...........................................................
end

не совсем могу понять как лучше в qlua записать следующее выражение

Ld_0= H( li+ 1) - L(li + 1), --Ld_0 по задумке равняется  High(li + 1) - Low(li + 1)
 Ld_1= H(li + 2) - L(li + 2)

Или же в таком виде будет корректно?
Функция фракталы
 
Есть еще один вопрос.

Как можно указать чтобы треугольники в индикаторе фрактал располагались не так близко к барам.Т.е. чтобы можно было задавать смещение(отступ) треугольников от HIGH или LOW бара на котором "рисуется" фрактал?
Функция фракталы
 
if it.l >= nP then
           local S = it[Squeeze(it.l-nP+1+math.floor(nP/2),P)]
           local val_h=math.max(unpack(H_tmp))
           local val_l=math.min(unpack(L_tmp))
           local L = GetValueEX(S,LOW,ds)
           local H = GetValueEX(S,HIGH,ds)
           if (val_h == H) and (val_h >0)
               and (val_l == L) and (val_l > 0) then
                   return S,S

Здесь у вас производится непосредственно расчет фрактала, т.е. на основании значения переменной S квик поймет на какой свече выводить фрактал, или я не правильно понимаю?
Функция фракталы
 
function OnCalculate(Index)
local Out1,Out2 = func(Index, Settings)
   SetValue(Out1, 2, ConvertValue(Settings,H(Out1)))
   SetValue(Out2, 3, ConvertValue(Settings,L(Out2)))
   return tonumber(Settings.Horizontal_line),nil,nil
end

Я так понимаю что Out 1,2 это индекс свечи на которой будет отображено TYPE_TRIANGLE_UP или   TYPE_TRIANGLE_DOWN из Settings.line ?
Мне не совсем понятно про  ConvertValue(Settings,H(Out1))  и  return tonumber(Settings.Horizontal_line),nil,nil
Функция фракталы
 
    if CandleExist(I,ds) then
       if I~=it[Squeeze(it.l,P)] then -- если I не равно
           it.l = it.l + 1
           it[Squeeze(it.l,P)] = I
       end

Поясните вот эту строчку пожалуйста

it[Squeeze(it.l,P)] = I

И для чего  вы используете эту переменную в коде индикатора  it.l ?
Squeeze - что это ?
Функция фракталы
 
Sergey Gorokhov , спасибо за  хороший ответ

return function (I, Fsettings, ds)  - поясните пожалуйста вот эту строку из вашего кода
Функция фракталы
 
Здравствуйте.Есть вопрос по индикатору фрактал который есть в доступе в файловом архиве с индикаторами.Конкретно по этому куску кода

function FRACTALS() --Fractals ("FRACTALS")
local H_tmp={}
   local L_tmp={}  
   local it = {[1]=0, l=0}

Правильно ли я понимаю что
local H_tmp={}  -- объявление массива под значения High
   local L_tmp={}  -- объявление массива под значения Low
local it = {[1]=0, l=0}  -- объявление массива it где 1-му элементу массива присваиваем значение 0,   элементу с индексом l присваиваем значение 0

?
QLUA, вопросы начинающих.
 
Цитата
Aidar написал:
В фунцкции main, в цикле for объявляю переменные

function main()

Li_3 = NUMBER_OF_BARS  --количество баров,переменная была объявлена ранее со значением например 200

 for Li_4 = Li_3,0,-1 do

 Ld_0= H(Li_4 + 1) - L(Li_4 + 1), --Ld_0 по задумке равняется  High(Li_4 + 1) - (Low(Li_4 + 1)
 Ld_1= H(Li_4 + 2) - L(Li_4 + 2),

.........................................................

end
end

При запуске выводит unexpected symbol near '='

При  том ошибку выводит на строку  Ld_1= H(Li_4 + 2) - L(Li_4 + 2), а на  строку с Ld_0= H(Li_4 + 1) - Low(Li_4 + 1) ошибку не выводит
Вопрос не актуален.Нашел причину ошибки
QLUA, вопросы начинающих.
 
В фунцкции main, в цикле for объявляю переменные

function main()

Li_3 = NUMBER_OF_BARS  --количество баров,переменная была объявлена ранее со значением например 200

 for Li_4 = Li_3,0,-1 do

 Ld_0= H(Li_4 + 1) - L(Li_4 + 1), --Ld_0 по задумке равняется  High(Li_4 + 1) - (Low(Li_4 + 1)
 Ld_1= H(Li_4 + 2) - L(Li_4 + 2),

.........................................................

end
end

При запуске выводит unexpected symbol near '='

При  том ошибку выводит на строку  Ld_1= H(Li_4 + 2) - L(Li_4 + 2), а на  строку с Ld_0= H(Li_4 + 1) - Low(Li_4 + 1) ошибку не выводит
QLUA, вопросы начинающих.
 
Цитата
Sergey Gorokhov написал:
Settings  =  
{
Name  =   "имя индикатора" ,
MY_LOVE_PARAMETER =  300,
line  =  { ..  ..  
}
}
function   OnCalculate(indx)
 if  indx  <   Size () - Settings.MY_LOVE_PARAMETER  then   return   end  
do_calc(indx)
end
При запуске выводит ошибку
attempt to compare nil with number

на эту строку
if indx < Size()-Settings.MY_LOVE_PARAMETER then return end
QLUA, вопросы начинающих.
 
Цитата
Sergey Gorokhov написал:
QLUA тут вообще не причем. Т.к. происходит непонимание на уровне того что Вам нужно, а не на уровне кода.
Давайте вообще забудем про QLUA и посмотрим обычный терминал QUIK.
В обычном терминале QUIK Вы где-нибудь видите нужное Вам значение?
Я так понимаю что в КВИКЕ это Поток обезличенных сделок.В обычном терминале нет доступа на сколько я знаю,если только не запросить у брокера чтобы он траслировал их в терминал
QLUA, вопросы начинающих.
 
Цитата
Sergey Gorokhov написал:
Aidar  ,

Может мы говорим про разные вещи?
Что именно Вы понимаете под термином "тиковый" объем?
Если брать ФОРЕКС и мт4 то
"Тиковый объем (англ. tick volume) – это количество тиков за некоторый период времени, соответствующее частоте изменений цены маркет-мейкером рынка и не связанное с объемом сделок."
В QLUA я так понимаю можно использовать просто объем который был на каждом баре?
Извиняюсь за глупые вопросы,я пока что учусь QLUA
QLUA, вопросы начинающих.
 
Цитата
Sergey Gorokhov написал:
Цитата
Если Вам нужно получать свежие тики, то они и так попадают в OnCalculate, т.к. он срабатывает при каждом изменении.
Если нужно получать тики за прошлые периоды, то это можно получить только через GetItem
Мне надо тиковые объемы текущие и прошлые за количество баров которые я указал в вашей подсказке

Settings  =  
{
Name  =   "имя индикатора" ,
MY_LOVE_PARAMETER =  300,
line  =  { ..  ..  
}
}
function   OnCalculate(indx)
 if  indx  <   Size () - Settings.MY_LOVE_PARAMETER  then   return   end  
do_calc(indx)
end

Т.е. по идее у меня индикатор должен работать с 300 (или иным заданным количеством) барами.Не совсем понятно как прописать так чтобы он брал и текущие и прошлые значения тикового объема.
QLUA, вопросы начинающих.
 
Цитата
Sergey Gorokhov написал:
Aidar  ,
Да такая возможность есть.
например с тикового графика.
не совсем понятно как прописать.А если я хочу применять индикатор на разных таймфреймах?
QLUA, вопросы начинающих.
 
В QLUA есть возможность Возвращать значение тикового объема бара?
QLUA, вопросы начинающих.
 
Я правильно понимаю что в индикаторе можно объявить массив следующим образом

function Init()

..........
Mass_1={}
.................
Mass_9={}
............
return #Settings.line

end

?

Еще в Settings например можно указать

Type = TYPE_TRIANGLE_UP,  т.е. у нас на графике будет показываться стрелка вверх.Можно ли в квике сделать чтобы вместо стрелки или линий отображался другой символ  например крестик или галочка?
QLUA, вопросы начинающих.
 
Цитата
Sergey Gorokhov написал:
Aidar  ,

Здравствуйте,
К сожалению, Вы не уточнили речь про индикаторы или про обычные lua скрипты.
Если речь про индикаторы, то в таблице Settings можно добавлять свои собственные параметры.
Если речь про обычные скрипты, то есть несколько вариантов:
1) сделать для скрипта ini файл с настройками.
2) сделать через скрипт таблицу в терминале, и установить на таблицу колбек SetTableNotificationCallback
в колбеке ловить все изменения которые происходят в таблице.
таким образом можно реализовать отдельную таблицу в которой будут нужные настройки.
Речь про индикаторы.Я правильно понимаю что можно написать так :

Settings =
{

Name = "имя индикатора",

Size()=300;
line = {....
      }
}


У меня в функции будет присваиваться переменной количество баров .Т.е. примерно следующее

function main ()
........
number Li_32 = Size;
for (number Li_40 = Li_32; ..............)
........................
end


?
QLUA, вопросы начинающих.
 
Цитата
s_mike@rambler.ru написал:
function oncalculate(indx)

if indx <  Size() -200 then return end

do_calc(indx)

end
Здравствуйте.А если я хочу сделать так чтобы можно было менять количество баров для расчета в самом терминале?Это можно вообще реализовать?Просто я до этого изучал только mql4 для mt4 и там можно было так прописать
Страницы: 1
Наверх