Блог им. 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)
попробовал все выше исправления, не хочет запускатся