Блог им. Siroeskin
Добавляю код сделанного мной индикатора Parabolik в котором параметр ускорение зависит от волатильности. Чем больше волатильность, тем больше увеличивается ускорение и индикатор быстрее «догоняет» цену. Подобные есть на просторах интернета для метатрейдера (и не бесплатно), для квика не встречал.
Видно, что он дает меньше перескоков (красный), чем обычный Parabolik (черный). Хорошо себя зарекомендовал для выходов из позиций, открытых по тренду. На вход в боковике конечно будет давать ложные сигналы, как и обычный Parabolik (но меньше!), создатель которого не рекомендовал только его использовать для открытия позиций.
Код индикатора:
Settings = {
Name = "Parabolic ATR",
Period_ATR=14,
line = {{
Name = "Parabolic ATR",
Type = TYPE_POINT,
Color = RGB(255,0,0),
Width = 2
}
}
}
old_idx=0
long=false
short=false
revers=false
function Init()
return 1
end
function OnCalculate(idx)
if idx<Settings.Period_ATR then
return nil
else
if idx==Settings.Period_ATR then
psar={}
psar[idx]=L(idx)
long=true
hmax=H(idx)
per_ATR=Settings.Period_ATR
local TR=0
for js=(idx-per_ATR),idx-1 do
TR=(TR+H(js)-L(js))
end
Old_ATR=TR/per_ATR
revers=true
else
if idx~=old_idx then
local TR=0
for js=(idx-per_ATR),idx-1 do
TR=(TR+H(js)-L(js))
end
local ATR=TR/per_ATR
af=ATR/(Old_ATR+ATR)
af=af/10
Old_ATR=ATR
if long then
if hmax<H(idx-1) then
hmax=H(idx-1)
end
psar[idx]=psar[idx-1]+af*(hmax-psar[idx-1])
end
if short then
if lmin>L(idx-1) then
lmin=L(idx-1)
end
psar[idx]=psar[idx-1]+af*(lmin-psar[idx-1])
end
revers=true
end
if long and L(idx)<psar[idx] and revers then
psar[idx]=hmax
short=true
long=false
lmin=L(idx)
af=Step
revers=false
end
if short and H(idx)>psar[idx] and revers then
psar[idx]=lmin
long=true
short=false
hmax=H(idx)
af=Step
revers=false
end
end
old_idx=idx
return psar[idx]
end
end
Добавляется в Quik как индикатор, надо скопировать код в блокнот (например) и сохранить с расширением .lua (можно так: Ind_Parabolik.lua) в папке LuaIndicators в Quik, если папки LuaIndicators нет, то создать ее в папке Quik именно с именем LuaIndicators.
В меню индикаторов появится Parabolic ATR.
В настройках вводится только период для расчета волатильности (рассчитывается как сумма хай минус лоу за период, деленная на период). Максимального шага нет.
Какие вопросы по индикаторам, роботам и прибамбасам для QUIK, отвечу.
Профитной торговли!
Молодец!
А оптимизировали на каких инструментах — секрет?
Спасибо автору.
Интересная жила.
т.е. диапазон предыдущего бара противопоставить ATR (бомба?)
Недоразумение, вероятно, я хотел сказать — что не понял сразу, что Вы испльзуете половину АТР параболик ведь в одну сторону считается, поэтому половина АТР, я сразу не понял.
Просто в текст не удалось зайти, а то можно понять что я подкалываю, а это не так — я просто разбирался.
А что означает «Бомба»?
Не думаю что подкалываете. А если заменить рассчет af в коде на тот что выше я написал параметры изменятся, реакция станет быстрей. Только af=af/10 надо оставить, это приведение к разряду для параболика.
Или адаптивный параболик
На часовом графике не появляется.
Если уменьшить время выскакивает следующая ошибка
C:\SBERBANK\QUIK_SMS\LuaIndicators\Ind_Parabolik.lua:60: attempt to perform arithmetic on field '?' (a nil value)
В чем ошибка не подскажите?
:47: attempt to perform arithmetic on global 'Old_ATR' (a nil value)
Версия 7.12.1.10
47: attempt to perform arithmetic on global 'Old_ATR' (a nil value)
Из-за этого на некоторых графиках не полностью отражается индикатор, т.к. могут идти подряд N=Period_ATR свечей у которых H=L.
Из-за этого TR=0 -> ATR=0 -> Old_ATR=0 и происходит деление на «0»
Что нужно сделать:
строку af=ATR/(Old_ATR+ATR)
Необходимо заменить на:
af=0
if Old_ATR+ATR>0 then
af=ATR/(Old_ATR+ATR)
end
на
for js=(idx-per_ATR+1),idx do
Здравствуйте. Спасибо за статью.
Обратил внимание на то, что переменная Step — нигде не инициализируется, но при этом она используется.
Не подскажите, как это работает?
Я не эксперт в qlua, но сейчас похоже, что инструкция «af=Step» — это простое зануление
47: attempt to perform arithmetic on global 'Old_ATR' (a nil value)
попробовал все выше исправления, не хочет запускатся