Если речь идёт о параметре "Количество сделок за сегодня", можно написать такой скрипт, которые будет работать с этим параметром, при условии, что сервер брокера получает этот параметр из торговой системы МБ. Проверить это можно по списку доступных параметров для рассматриваемого класса в окне настройки фильтра списка заказываемых классов и инструментов и параметров ( в терминалах 8.12 и новее - это пункт меню Система/Настройки/Основные настройки/Программа/Получение данных/Котировки).
Если параметр недоступен - можно обратиться к брокеру и уточнить у него, возможно ли обеспечить трансляцию этого параметра. Если параметр доступен - Вы можете заказать его терминалом, например, явным образом отметив параметр для заказа, или используя умный заказ данных. Название параметра для заказа данных по нему с использованием функций QLUA - "NUMTRADES".
Если речь идёт о параметре "Количество сделок за сегодня", можно написать такой скрипт, которые будет работать с этим параметром, при условии, что сервер брокера получает этот параметр из торговой системы МБ. Проверить это можно по списку доступных параметров для рассматриваемого класса в окне настройки фильтра списка заказываемых классов и инструментов и параметров ( в терминалах 8.12 и новее - это пункт меню Система/Настройки/Основные настройки/Программа/Получение данных/Котировки).
Если параметр недоступен - можно обратиться к брокеру и уточнить у него, возможно ли обеспечить трансляцию этого параметра. Если параметр доступен - Вы можете заказать его терминалом, например, явным образом отметив параметр для заказа, или используя умный заказ данных. Название параметра для заказа данных по нему с использованием функций QLUA - "NUMTRADES".
Хотелось бы индикатор, показывающий среднюю величину сделки, только не за сегодня, а "общее количество", только без всяких сглаживаний. Аналогично индикатору объема, с возможностью вывода в виде линии, гистограммы и т.д. Раз его не существует, значит и согласовывать не надо не с кем по поводу авторских прав. Если есть возможность добавьте его в quik или хотя бы в архив
Если Вас интересует параметр, отображающие количество "всех сделок" за "всё время торгов", т.е. за текущую торговую сессию, + все прошедшие - то у нас нет информации о том, чтобы какая-либо биржа транслировала эту информацию. Наиболее вероятно, она не транслируется вовсе.
Пожелания по написанию и добавлению скриптов в рабочее место QUIK мы не принимаем, т.к. эта задача может быть решена пользователем самостоятельно. Вы можете найти готовое решение, заказать его у какого-либо разработчика, либо создать его самостоятельно.
Andrey Bezrukov написал: Если Вас интересует параметр, отображающие количество "всех сделок" за "всё время торгов", т.е. за текущую торговую сессию, + все прошедшие - то у нас нет информации о том, чтобы какая-либо биржа транслировала эту информацию. Наиболее вероятно, она не транслируется вовсе.
Странно, в справке к приложению написано совсем другое: Контрактов во всех сделках - Общее количество - Объем совершенных в текущей сессии сделок, штук. Вот такой параметр доступен для построения графика. Где неправда?
Kander написал: Не нашел ни одного скрипта отслеживающего такой параметр, как количество сделок, на ммвб он доступен.
Мы Вам отвечаем, что да, параметр, отражающий количество сделок за сегодня есть, доступен обращения при помощи функций QLUA по строке "NUMTRADES".
Далее, Вы уточняете, что Вас интересуют данные не только за текущую сессию, а за весь период торгов, что мы поняли как, условно - "несколько сессий, много прошедших сессий".
Цитата
Kander написал: Хотелось бы индикатор, показывающий среднюю величину сделки, только не за сегодня, а "общее количество"
На что мы ответили, что такого параметра ТС не транслирует, и в QUIK такого параметра нет. Вы можете только самостоятельно как-то выполнять накопление и учёт этих данных из сессии в сессию. Или построить график истории изменения параметра без использования lua-индикаторов. Возможно, если брокер ведёт накопление данных истории изменения этого параметра - Вы также получите и график за прошлые торговые сессии. Но этот момент лучше уточнить непосредственно у брокера. Для этого при добавлении графика измените источник данных с обезличенных сделок на изменения этого параметра
То, что Вы приводите в последнем сообщении - это другой параметр, но он тоже отображает данные только за текущую торговую сессию, и да, его можно использовать в скриптах на LUA и функциях QLUA. Чтобы узнать его текстовый идентификатор - Вы можете добавить его в таблицу текущих торгов и выполнить по DDE в Excel с формальными заголовками. Заголовок, указанный для этого столбца и будет его строковым идентификатором. Этот же подход можете применять и для других параметров. И по нему также можно построить график истории изменения параметра без использования LUA-индикатаров
Если же Вы имеете что-то другое и с нашей стороны имеет место недопонимание Вашей задачи - просьба подробно описать что именно Вам нужно.
Andrey Bezrukov написал: На что мы ответили, что такого параметра ТС не транслирует, и в QUIK такого параметра нет. Вы можете только самостоятельно как-то выполнять накопление и учёт этих данных из сессии в сессию.
Несколько раз перечитал, ваш ответ и нахожусь в недоумении. Что бы не припираться, я покажу скрин, а вы ответьте, что показывает параметр на графике "общее количество". Это разрешит обсуждаемый вопрос.
Скрытый текст
В справке к приложению написано, что он показывает - Объем совершенных в текущей сессии сделок, штук Если это не количество сделок за каждую сессию, как написано в справке, то что?
Andrey Bezrukov написал: Контрактов во всех сделках - Общее количество - Объем совершенных в текущей сессии сделок, штук.
Контракт и переводится как сделка. Вы можете дать вменяемый ответ, можно ссылкой на статью. Почему из вас надо сутками ответ выбивать?
О каких контрактах идет речь на скрине выше(акции Five)?
контракт - это обязательство, которое возникает вследствие сделки по определённым активам. Например, на акциях Газпрома возникает позиция по акциям, на фьючерсах Газпрома возникает позиция по контрактам. Контракт есть обязательство выполнить определенные действия к какому то сроку (например купить или продать акции)
не нужно наезжать, сначала имеет смысл определиться в терминологии.
s_mike@rambler.ru написал: не нужно наезжать, сначала имеет смысл определиться в терминологии.
Я не наезжаю, а как раз пытаюсь разобраться, если бы вы нормально, так что бы не возникало вопросов, заполнили справочную информацию, мы бы не тратили свое время на выяснение.
Мы сейчас не говорим о срочном рынке(деривативах), фьючерсах или опционах, мы говорим о фондовом рынке, о рынке акций. Конкретно о акциях компании "Пятерочка", график которых на скрине выше. Где есть сделки, лоты и акции, ну и их денежное выражение в валюте(лента сделок)
Откуда взялись контракты? Откуда берется информация о этих контрактах? В общей ленте сделок нет никаких контрактов. В чем измеряются эти контракты и как они соотносятся со сделками?
Кто-нибудь может поделиться индикатором скользящей средней Laguerre? Я бы и сам мог написать, но формулу не до конца понял. Может, кто-нибудь может подсказать?
Dobrota написал: Кто-нибудь может поделиться индикатором скользящей средней Laguerre? Я бы и сам мог написать, но формулу не до конца понял. Может, кто-нибудь может подсказать?
if (L0 >= L1) CU = L0 - L1; else CD = L1 - L0; if (L1 >= L2) CU = CU + L1 - L2; else CD = CD + L2 - L1; if (L2 >= L3) CU = CU + L2 - L3; else CD = CD + L3 - L2;
if (CU + CD != 0) LRSI = CU / (CU + CD); val1[i] = LRSI; i--; }
Вернулся к попыткам написать скользящую среднюю LaguerreMA. Не могу найти ошибку в коде(в программировании полный новичок) - индикатор постепенно улетает куда-то в космос после нескольких первых значений. По аналогичной схеме написал уже код для других 5-6 индикаторов, там все четко отображает. Часть кода:
function Init() local index_1 = 0 myEMA = cached_LMA() return 1 end
function OnCalculate(index) if index == 0 then return nil end if index ~= index_1 then index_1 = index return myLMA(index, Settings.value_type, Settings.gamma) end end
function cached_LMA() local cache={} local L0 = {} local L1 = {} local L2 = {} local L3 = {}
return function(ind, v_t, kk)
local v_type = v_t local index = ind local k = kk
if index == 1 then L0[index] = dValue(index, v_type) L1[index] = dValue(index, v_type) L2[index] = dValue(index, v_type) L3[index] = dValue(index, v_type) cache[index] = dValue(index, v_type) else L0[index] = (1 - k)* dValue(index-1, v_type) + L0[index-1] L1[index] = L0[index-1] + k * L1[index-1] - k * L0[index] L2[index] = L1[index-1] + k * L2[index-1] - k * L1[index] L3[index] = L2[index-1] + k * L3[index-1] - k * L2[index] cache[index] = (L0[index]+2*L1[index]+2*L2[index]+L3[index])/6
end
return cache[index] end end
Функция dValue просто определяет значение цены в зависимости от индекса и типа цены. Можете подсказать, в чем ошибка?
Возникла проблема, что не подгружаются вообще никакие индикаторы. Может быть я что-то делаю не так? QUIK 8.13.3.1 предлагает на выбор запуск Lua 5.4.1 или Lua 5.3.5 Например, копирую код с этого форума от 24.05.2019 16:47:09 в файл с расширением .lua Сервис-Луа скрипты-добавить. Жму на любом графике Добавить график (индикатор) и в списке нет нового имени...
Разобрался. QLUA.chm в помощь. ...расположены в папке LuaIndicators в каталоге терминала. Если папка отсутствует в каталоге, необходимо создать ее вручную. Список скриптов не доступен из диалога Сервисы / LUA скрипты....
func = RSI() ;
local rsi_count={}
nk=ds[real]:Size()
for i=1,nk do rsi_count[i]=func(i, {Period=rsi_period, VType="Typical"}, ds[real]) end
if rsi_count[nk]~=nil then
rsi0=rsi_count[nk]
rsi1=rsi_count[nk-1]
rsi2=rsi_count[nk-2]
rsi3=rsi_count[nk-3]
rsi4=rsi_count[nk-4]
max_rsi=math.max(rsi0,rsi1,rsi2,rsi3,rsi4)
in_rsi=math.min(rsi0,rsi1,rsi2,rsi3,rsi4)
else
mm (real.." "..nk.." rsi_count[num_candles]=nil") ; sleep (100)
end
Может быть есть готовый индикатор пропущенных данных для графиков ? https://forum.quik.ru/forum13/topic7059/ Если нет, возможно его размещение средствами LUA в заголовке окна или только в области графика? [img]data:image/jpeg;base64,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[/img][img]data:image/jpeg;base64,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[/img]
Может быть есть готовый индикатор пропущенных данных для графиков ? https://forum.quik.ru/forum13/topic7059/ Если нет, возможно его размещение средствами LUA в заголовке окна или только в области графика?
Если Вас интересует параметр, отображающие количество "всех сделок" за "всё время торгов", т.е. за текущую торговую сессию, + все прошедшие - то у нас нет информации о том, чтобы какая-либо биржа транслировала эту информацию. Наиболее вероятно, она не транслируется вовсе.
Пожелания по написанию и добавлению скриптов в рабочее место QUIK мы не принимаем, т.к. эта задача может быть решена пользователем самостоятельно. Вы можете найти готовое решение, заказать его у какого-либо разработчика, либо создать его самостоятельно.
Добрый день! Скачал папку LuaIndicators, вставил в QUIK. Но при открытии программы, новые индикаторы не появляются. Меня интересует только индикатор Зигзаг. Вопрос, как мне его добавить в программу?
Если Вас интересует параметр, отображающие количество "всех сделок" за "всё время торгов", т.е. за текущую торговую сессию, + все прошедшие - то у нас нет информации о том, чтобы какая-либо биржа транслировала эту информацию. Наиболее вероятно, она не транслируется вовсе.
Пожелания по написанию и добавлению скриптов в рабочее место QUIK мы не принимаем, т.к. эта задача может быть решена пользователем самостоятельно. Вы можете найти готовое решение, заказать его у какого-либо разработчика, либо создать его самостоятельно.
Добрый день! Скачал папку LuaIndicators, вставил в QUIK. Но при открытии программы, новые индикаторы не появляются. Меня интересует только индикатор Зигзаг. Вопрос, как мне его добавить в программу?
откройте в текстовом редакторе исходники индикаторов. уберите лишние. сохраните под именем индикатора. поместите его в папку ...QUIK\LuaIndicators
Скажите, пожалуйста, встречал ли кто-нибудь индикатор, который может отобразить график зеркально - цена в реальности идёт вверх, а на графике - вниз? Такие индикаторы есть - например, для MetaTrader - ReverseSymbol https://www.mql5.com/ru/code/9390 Для другой программы он называется Mirror bars.
Добрый день, понадобился для Quik индикатор WMA, скопировал всю папку с индикаторами в Quik, при выборе MA индикатора программа подвисает на некоторое время с ошибкой.
...\LuaIndicators\MA.lua:234: attempt to index a nil value (global 'arg')
в чем может быть дело? Штатные индикаторы MA нормально работают.
Верно понимаем, что скрипты индикаторов были загружены с нашего сайта (https://arqatech.com/upload/iblock/398/INDICATORS.zip)? Выберите версию Lua 5.3.5 для скриптов-индикаторов, удалите из окна графика ранее добавленные Lua-индикаторы, затем добавьте нужный индикатор повторно.
Верно понимаем, что скрипты индикаторов были загружены с нашего сайта ( https://arqatech.com/upload/iblock/398/INDICATORS.zip )? Выберите версию Lua 5.3.5 для скриптов-индикаторов , удалите из окна графика ранее добавленные Lua-индикаторы, затем добавьте нужный индикатор повторно.
Нет, я ваши не нашел, скачал такую же папку с гитхаба, они там ссылались на эту ветку форума. Поставил вашу папку - все завелось сразу. Сравнил файлы MA.lua, есть различие примерно в 400 байт, ваш файл больше по размеру и работает. Спасибо за помощь.
добрый день помгите пожалуйста, делаю индикатор для quik Хай лоу пред дня + ATR , вот как мне прибавить значение atr к линии хая и лоя? что совсем не пойму
Settings = { Name = "1-HLDAY+ATR", line = { { Name = "HIGH", Color = RGB(0,200,0), Type = TYPE_DASH, Width = 2 }, { Name = "LOW", Color = RGB(200,0,0), Type = TYPE_DASH, Width = 2 } } }
function Init() func = ATR() return #Settings.line end
function OnCalculate(Index) local Out = ConvertValue(Settings, func(Index, Settings)) local HL = tonumber(Settings.Horizontal_line) if Out then local prev = GetValue(Index-1, 2) or GetValue(Index-1, 3) or 0 if Out > prev then return HL,Out,nil else return HL,nil,Out end else return HL,nil,nil end end
function ATR() --Average True Range ("ATR") local f_TR = TR() local tmp = {pp=nil, p=nil} local it = {p=0, l=0} return function (I, Fsettings, ds) local Fsettings=(Fsettings or {}) local P = (Fsettings.Period or 14) if (P > 0) then if I == 1 then tmp = {pp=nil, p=nil} it = {p=0, l=0} end local tr = f_TR(I,ds) if CandleExist(I,ds) then if I~=it.p then it = {p=I, l=it.l+1} tmp.pp = tmp.p end if it.l < P then tmp.p = (tmp.pp or 0) + tr elseif it.l == P then tmp.p = ((tmp.pp or 0) + tr) / P return tmp.p elseif it.l > P then tmp.p = ((tmp.pp or 0) * (P-1) + tr) / P return tmp.p end end end return nil end end
function TR() --True Range ("TR") local it = {pp=0, p=0, l=0} return function (I, ds) if I == 1 then it = {pp=0, p=0, l=0} end if CandleExist(I,ds) then if I~=it.p then it={pp=it.p, p=I, l=it.l+1} end if it.l == 1 then return math.abs(GetValueEX(it.p,DIFFERENCE, ds)) else return math.max(math.abs(GetValueEX(it.p,DIFFERENCE, ds)), math.abs(GetValueEX(it.p,HIGH,ds) - GetValueEX(it.pp,CLOSE,ds)), math.abs(GetValueEX(it.pp,CLOSE,ds)-GetValueEX(it.p,LOW,ds))) end end return nil end end
function Squeeze(I,P) return math.fmod(I-1,P+1) end
function ConvertValue(T,...) local function r(V, R) if R and string.upper®== "ON" then R=0 end if V and tonumber® then if V >= 0 then return math.floor(V * 10^R + 0.5) / 10^R else return math.ceil(V * 10^R - 0.5) / 10^R end else return V end end local arg = {...} arg.n = select('#', ...) if arg.n > 0 then for i = 1, arg.n do arg[i]=arg[i] and r(arg[i] * ((T and T.Multiply) or 1), (T and T.Round) or "off") end return unpack(arg) else return nil end end
function GetValueEX(I,VT,ds) VT=(VT and string.upper(string.sub(VT,1,1))) or ANY if VT == OPEN then --Open return (O and O(I)) or (ds and ds:O(I)) elseif VT == HIGH then --High return (H and H(I)) or (ds and ds:H(I)) elseif VT == LOW then --Low return (L and L(I)) or (ds and ds:L(I)) elseif VT == CLOSE then --Close return (C and C(I)) or (ds and ds:C(I)) elseif VT == VOLUME then --Volume return (V and V(I)) or (ds and ds:V(I)) elseif VT == MEDIAN then --Median return ((GetValueEX(I,HIGH,ds) + GetValueEX(I,LOW,ds)) / 2) elseif VT == TYPICAL then --Typical return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3) elseif VT == WEIGHTED then --Weighted return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4) elseif VT == DIFFERENCE then --Difference return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds)) else --Any return (ds and ds[I]) end return nil end function Init() return #Settings.line end local atr = tonumber(function ATR()) local hl = { -- year -- month -- day -- high -- low }
function OnCalculate(index)
local dt = T(index) if not C(index) then return end local trdt = getTradeDate()
if dt.day ~= trdt.day or dt.month ~= trdt.month or dt.year ~= trdt.year then
if dt.day ~= hl.day or dt.month ~= hl.month or dt.year ~= hl.year then hl.year = dt.year hl.day = dt.day hl.month = dt.month hl.high = H(index) hl.low = L(index) else hl.high = (math.max(hl.high,H(index))) + atr hl.low = math.min(hl.low,L(index)) end
написал: Добрый день! Подскажите где взять indicators.zip под lua 5.4. У меня часть индикаторов на 5.4. и вместе на одном графике они не уживаются с 5.3.
indicators.zip Это какой-то архив? Вы где его взяли? Вы думаете, что все должны знать, что у Вас в этом архиве?
Смотрите пост 80.Там есть ссылка, но там только lua 5.3, который не работает вместе с 5.4. Один индикатор psar я починил заменой unpack(arg) на table.unpack(arg), но не все можно так просто починить, нужно к автору этих индикаторов обращаться. И было бы здорово переделать их под 5.4, а не чтобы каждый сам их прилаживал под себя. Хотя и так тоже наверное можно. Вот переделанный мной Psar под lua 5.4
Код
Settings = {
Name = "*PSAR (Parabolic SAR)",
Step = 0.02,
MaxStep = 0.2,
line = {{
Name = "Horizontal line",
Type = TYPE_LINE,
Color = RGB(140, 140, 140)
},
{
Width = 3,
Name = "PSAR_Up",
Type = TYPE_POINT,
Color = RGB(221, 44, 44)
},
{
Width = 3,
Name = "PSAR_Down",
Type = TYPE_POINT,
Color = RGB(0, 206, 0)
}
},
Round = "off",
Multiply = 1,
Horizontal_line="off"
}
function Init()
func = PSAR()
return #Settings.line
end
function OnCalculate(Index)
local Out = ConvertValue(Settings, func(Index, Settings))
local HL = tonumber(Settings.Horizontal_line)
if Out then
if Out > ((H(Index)-L(Index))/2)+L(Index) then
return HL,Out,nil
else
return HL,nil,Out
end
else
return HL,nil,nil
end
end
function PSAR() --Parabolic SAR ("PSAR")
local tmp = {pp=nil, p=nil}
local it = {ppp=0, pp=0, p=0, l=0}
return function (I, Fsettings, ds)
local Out = nil
local Fsettings=(Fsettings or {})
local Step = (Fsettings.Step or 0.02)
local MaxStep = (Fsettings.MaxStep or 0.2)
if I == 1 then
tmp = {pp=nil, p=nil}
it = {ppp=0, pp=0, p=0, l=0}
end
if CandleExist(I,ds) then
if I~=it.p then
it={ppp=it.pp, pp=it.p, p=I, l=it.l+1}
tmp.pp = tmp.p
end
local cand = {ppp=nil, pp=nil, p=nil}
tmp.p = {Val = nil, Step = 0, Ext = 0, Long = true}
cand.p = {H = GetValueEX(it.p,HIGH,ds), L = GetValueEX(it.p,LOW,ds)}
if it.l==2 then
tmp.p = {Val = GetValueEX(it.p,HIGH,ds), Step = Step, Ext = cand.p.H, Long = true}
end
if it.l > 2 then
local Revers = false
tmp.p.Val = tmp.pp.Val + tmp.pp.Step * (tmp.pp.Ext - tmp.pp.Val)
tmp.p.Long = tmp.pp.Long
tmp.p.Ext = tmp.pp.Ext
tmp.p.Step = tmp.pp.Step
if tmp.pp.Long then
if cand.p.L < tmp.p.Val then
tmp.p = {Val = tmp.pp.Ext, Step = Step, Ext = cand.p.L, Long = false}
Revers = true
end
else
if cand.p.H > tmp.p.Val then
tmp.p = {Val = tmp.pp.Ext, Step = Step, Ext = cand.p.H, Long = true}
Revers = true
end
end
if not Revers then
cand.pp = {H = GetValueEX(it.pp,HIGH,ds), L = GetValueEX(it.pp,LOW,ds)}
cand.ppp = {H = GetValueEX(it.ppp,HIGH,ds), L = GetValueEX(it.ppp,LOW,ds)}
if tmp.pp.Long then
if cand.p.H > tmp.pp.Ext then
tmp.p.Ext = cand.p.H
tmp.p.Step = tmp.pp.Step + Step
if tmp.p.Step > MaxStep then tmp.p.Step = MaxStep end
end
if cand.pp.L < tmp.p.Val then tmp.p.Val = cand.pp.L end
if cand.ppp.L < tmp.p.Val then tmp.p.Val = cand.ppp.L end
else
if cand.p.L < tmp.pp.Ext then
tmp.p.Ext = cand.p.L
tmp.p.Step = tmp.pp.Step + Step
if tmp.p.Step > MaxStep then tmp.p.Step = MaxStep end
end
if cand.pp.H > tmp.p.Val then tmp.p.Val = cand.pp.H end
if cand.ppp.H > tmp.p.Val then tmp.p.Val = cand.ppp.H end
end
end
end
return tmp.p.Val
end
return nil
end
end
SMA,MMA,EMA,WMA,SMMA,VMA = "SMA","MMA","EMA","WMA","SMMA","VMA"
OPEN,HIGH,LOW,CLOSE,VOLUME,MEDIAN,TYPICAL,WEIGHTED,DIFFERENCE,ANY = "O","H","L","C","V","M","T","W","D","A"
function CandleExist(I,ds)
return (type(C)=="function" and C(I)~=nil) or
(type(ds)=="table" and (ds[I]~=nil or (type(ds.Size)=="function" and (I>0) and (I<=ds:Size()))))
end
function Squeeze(I,P)
return math.fmod(I-1,P+1)
end
function ConvertValue(T,...)
local function r(V, R)
if R and string.upper(R)== "ON" then R=0 end
if V and tonumber(R) then
if V >= 0 then return math.floor(V * 10^R + 0.5) / 10^R
else return math.ceil(V * 10^R - 0.5) / 10^R end
else return V end
end
local arg = {...}
arg.n = select('#', ...)
if arg.n > 0 then
for i = 1, arg.n do
arg[i]=arg[i] and r(arg[i] * ((T and T.Multiply) or 1), (T and T.Round) or "off")
end
return table.unpack(arg)
else return nil end
end
function GetValueEX(I,VT,ds)
VT=(VT and string.upper(string.sub(VT,1,1))) or ANY
if VT == OPEN then --Open
return (O and O(I)) or (ds and ds:O(I))
elseif VT == HIGH then --High
return (H and H(I)) or (ds and ds:H(I))
elseif VT == LOW then --Low
return (L and L(I)) or (ds and ds:L(I))
elseif VT == CLOSE then --Close
return (C and C(I)) or (ds and ds:C(I))
elseif VT == VOLUME then --Volume
return (V and V(I)) or (ds and ds:V(I))
elseif VT == MEDIAN then --Median
return ((GetValueEX(I,HIGH,ds) + GetValueEX(I,LOW,ds)) / 2)
elseif VT == TYPICAL then --Typical
return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3)
elseif VT == WEIGHTED then --Weighted
return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4)
elseif VT == DIFFERENCE then --Difference
return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds))
else --Any
return (ds and ds[I])
end
return nil
end
Наши примеры Lua-индикаторов, доступные сейчас на сайте, действительно работают только с Lua версии 5.3.
Мы зарегистрировали Ваше пожелание на добавление индикаторов, совместимых с Lua 5.4. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Формула SMMA: SMMAi = (sum(Pi) - SMMAi-1 + Pi) / n, где Pi - значение цены в i-ом периоде, SMMAi-1 - значение SMMA в предыдущем периоде, n - установленное в параметрах индикатора количество периодов.
Если необходимо рассмотреть что-то более подробно, просим Вас уточнить вопрос.
glotov_pa@mail.ru написал: Подскажите как с помощью индикатора ADX получить данные DI+ и DI-. Нужен пример.
Никак. ---------- Это ADX вычисляется через D+ и D-, а не наоборот. -------------------- Можно вычислить индикаторы D+ и D-: D+ это EMA от High(i)-High(i-1) D- 'это EMA от Low(i)-Low(i-1) ----------------- см. в интернете.
Сергей написал: Добрый день, написал маленький индикатор, который показывает просадку.
продолжение... написал маленький индикатор, который показывает просадку от максимума. Проблема в том, что при выводе на график выходят не те данные, что приходят в месседж. Почему-то последний максимум применяется для всех свечей, а нужно что-бы максимум применялся только для тех свечей, которые идут после вычисления очередного максимума.
Settings = { Name = "*Vet_Rollback", line = { { Color = RGB(153, 204, 0), Type = TYPE_HISTOGRAM, Width = 0 },
} }
function Init() maxh = 0 return #Settings.line end
function OnCalculate(idx) if idx > 1 and H(idx)~= nil then if maxh < H(idx) then maxh = H(idx) rollback = (L(idx) - maxh) / maxh * 100 else rollback = (L(idx) - maxh) / maxh * 100
end message(tostring(maxh).." "..H(idx).." "..L(idx)) message(tostring(rollback)) return rollback end
Да, данные правильно приходят, потому как хай у вас в начале графика,
но если взять например такой график, то видно, что расчет значения в месендже правильный, а на графический вывод подаёт значение высчитанное с самого большого хая, т.е (желтые стрелки) реальное значение должно быть -0,67, а на графике оно -17.
Сергей написал: что бы понятнее было, на графике просадка составила -31%, а на индикаторе -36, как от самого последнего хая.
У Вас так и считает скрипт. Т е просадка вычисляется от самого большого High. ------------------- Есть такая особенность в расчетах индикаторов: -------------------- Индикатор при запуске вычисляется два раза. В первый раз в нем запомнится самый большой максимум на графике Во второй раз вы и получите просадку всех значений относительного этого максимума. -------------- Такой способ вычисления индикаторов это такой прикол создателей QUIK. Чтобы жизнь медом не казалась. ------------- Про это писал лет ...надцать назад. Потом еще многие и много. ---------------- Пишите скрипт с учетом этого факта.
Благодарю, я так и предположил, что двойной расчёт идет. Написал "костыль", теперь показывает верно, правда только с первого просмотра, после обновления свечи опять слетает, но мне достаточно для анализа. ------------------------------- Создателям QUIK 'респект'
Сергей написал: Благодарю, я так и предположил, что двойной расчёт идет. Написал "костыль", теперь показывает верно, правда только с первого просмотра, после обновления свечи опять слетает, но мне достаточно для анализа. ------------------------------- Создателям QUIK 'респект'
проблема решается путем установки в начальное значение всех переменных при индексе=1 например,так ваш скрипт:
Код
name="*Vet_Rollback"
Settings={Name =name};
function OnCalculate(i)
local Hi,Li=H(i),L(i)
if i==1 then
maxh=0
else
if Hi then
if maxh<Hi then maxh = Hi end
rollback=(Li-maxh)/maxh * 100
message(tostring(maxh..";"..Hi..";"..Li..";"..rollback))
end
end
return rollback
end
function Init()
Settings.line ={ { Color = RGB(153, 204, 0),Type = TYPE_HISTOGRAM,Width = 0}}
return #Settings.line
end
glotov_pa@mail.ru написал: Подскажите как с помощью индикатора ADX получить данные DI+ и DI-. Нужен пример.
Никак. ---------- Это ADX вычисляется через D+ и D-, а не наоборот. -------------------- Можно вычислить индикаторы D+ и D-: D+ это EMA от High(i)-High(i-1) D- 'это EMA от Low(i)-Low(i-1) ----------------- см. в интернете