Получил такое сообщение:
привет!
у меня в квике стояла камарилла аж с 2014 года, когда вы выложили здесь этот индикатор.
квик обновился до 8 и камарилла пропала.
это не исправить?
Глянул по тэгу
https://smart-lab.ru/tag/Camarilla/ и вот они:
1.
Camarilla Equation. Индикатор для QUIK.
2.
Camarilla Equation. Индикатор для QUIK. Часть 2.
Выкладываю вариант, не зависящий от обновлений QUIK.
-- Camarilla.lua
Settings={
Name = "Camarilla",
period = 'D',
line =
{
{Name = "S5", Color = RGB(255, 0, 0), Type = 1, Width = 2},
{Name = "S4", Color = RGB(255, 165, 0), Type = 1, Width = 2},
{Name = "S3", Color = RGB(255, 255, 0), Type = 1, Width = 2},
{Name = "PP", Color = RGB(0, 255, 0), Type = 1, Width = 2},
{Name = "R3", Color = RGB(0, 191, 255), Type = 1, Width = 2},
{Name = "R4", Color = RGB(0, 0, 255), Type = 1, Width = 2},
{Name = "R5", Color = RGB(139, 0, 255), Type = 1, Width = 2},
}
}
local math_floor = math.floor
local levels = 0
local ydH, ydL, ydC, ydO = {},{},{},{}
local PP, R3, R4, R5 = 0,0,0,0
local S3, S4, S5 = 0,0,0
local delta = 0
local cl = 0
local predThisDay=0
local function dTs(t) return 100*(100*t.year+t.month)+t.day; end
local OldDay = '' -- для выделения начала торгового дня
function Init ()
local t=getDataSourceInfo()
local tt = t.interval
if tt == -3 then
message('Месячный график не обрабатывается.',1)
return
end
return 7
end
function OnCalculate (index)
local time tt=T(index); ---время из свечи
--local ThisDay=dTs(tt) -- дата в формате yyyyMMdd
local tDay=dTs(tt) -- дата в формате yyyyMMdd
local ThisDay = tDay
if Settings.period == 'W' then
ThisDay=tt.week_day -- номер недели
end
if index == 1 then
--message('First ThisDay = '..tostring(ThisDay),1)
local t=getDataSourceInfo()
--7.2.5 Функция предназначена для получения информации об источнике данных для индикатора.
local scale = getSecurityInfo(t.class_code, t.sec_code).scale -- NUMBER, Количество значащих цифр после запятой
mul = 10^scale -- возведение в степень
local tt = t.interval
if tt == -3 then tt = 'месяц'
elseif tt == -2 then tt = 'неделя'
elseif tt == -1 then tt = 'день'
else
tt = tt..' мин.'
end
--message(t.sec_code..'('..t.class_code..'), цифр после запятой: '..scale..', mul = '..mul..', дата = '..ThisDay,1)
levels = levels + 1
if ThisDay ~= OldDay then
OldDay = ThisDay
end
predThisDay = ThisDay
--
delta = H(index) - L(index)
cl = C(index)
R5 = (H(index) / L(index))*cl
calcLevels(index)
local per = 'daily'
if Settings.period == 'W' then
per = 'weekly'
end
message('Camarilla '..per..', Т = '..tt..', © xsharp.ru 20.06.2015', 1)
return
end
if Settings.period == 'W' then
if ThisDay < OldDay then -- для неделек
OldDay = OldDay + 1
if OldDay ~= ThisDay then
OldDay = ThisDay
end
levels = levels + 1
delta = ydH[levels-1] - ydL[levels-1]
cl = ydC[levels-1]
R5 = (ydH[levels-1] / ydL[levels-1])*cl
calcLevels(index)
--if index<120 then
--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
--end
predThisDay = ThisDay
else
if ThisDay ~=predThisDay then
--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
predThisDay = ThisDay
OldDay = OldDay + 1
end
ThisDayF(index)
end
elseif Settings.period == 'D' then
if ThisDay ~= OldDay then -- для дневок
OldDay = OldDay + 1
if OldDay ~= ThisDay then
OldDay = ThisDay
end
levels = levels + 1
delta = ydH[levels-1] - ydL[levels-1]
cl = ydC[levels-1]
R5 = (ydH[levels-1] / ydL[levels-1])*cl
calcLevels(index)
--if index<120 then
--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
--end
predThisDay = ThisDay
else
if ThisDay ~=predThisDay then
--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
predThisDay = ThisDay
OldDay = OldDay + 1
end
ThisDayF(index)
end
elseif Settings.period == 'H4' then
if ThisDay ~= OldDay then -- для дневок
OldDay = OldDay + 1
if OldDay ~= ThisDay then
OldDay = ThisDay
end
levels = levels + 1
delta = ydH[levels-1] - ydL[levels-1]
cl = ydC[levels-1]
R5 = (ydH[levels-1] / ydL[levels-1])*cl
calcLevels(index)
--if index<120 then
--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
--end
predThisDay = ThisDay
else
if ThisDay ~=predThisDay then
--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
predThisDay = ThisDay
OldDay = OldDay + 1
end
ThisDayF(index)
end
end
return S5, S4, S3, cl, R3, R4, R5
end
function round(value)
return math_floor(value*mul + 0.5) / mul
end
function ThisDayF(index)
ydC[levels] = C(index)
if H(index) > ydH[levels] then
ydH[levels] = H(index)
end
if L(index) < ydL[levels] then
ydL[levels] = L(index)
end
end
function calcLevels(index)
ydO[levels] = O(index)
ydH[levels] = H(index)
ydL[levels] = L(index)
ydC[levels] = C(index)
--
R3 = cl + delta * 1.1/4
R4 = cl + delta * 1.1/2
--
S3 = cl - delta * 1.1/4
S4 = cl - delta * 1.1/2
S5 = cl - (R5-cl)
--
R5 = round(R5)
R4 = round(R4)
R3 = round(R3)
S3 = round(S3)
S4 = round(S4)
S5 = round(S5)
end