СыроеШкин
СыроеШкин личный блог
01 июля 2016, 14:18

Для QUIK индикатор Parabolik учитывающий волатильность

   Добавляю код сделанного мной индикатора Parabolik в котором параметр ускорение зависит от волатильности. Чем больше волатильность, тем больше увеличивается ускорение и индикатор быстрее «догоняет» цену. Подобные есть на просторах интернета для метатрейдера (и не бесплатно), для квика не встречал.

 Для QUIK индикатор 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, отвечу.

Профитной торговли!

49 Комментариев
  • Money Мaster
    01 июля 2016, 14:29
    не появляется в индикаторах
      • Money Мaster
        01 июля 2016, 15:13
        СыроеШкин, а версия Quik влияет? 6.12.0.31
          • Money Мaster
            01 июля 2016, 15:34
            СыроеШкин, все заново сделал получилось, первый раз почему то файл получился 0 килобайт, сейчас все ок
  • .i.
    01 июля 2016, 15:06
    вроде очень похоже, если шаг у квиковского параболика увеличить — вы бы сравнили не с тем же шагом, а визуально близким
  • Евгений Черных
    01 июля 2016, 15:10
    Хорошая работа!
    Молодец!
  • baron_samedi
    01 июля 2016, 15:10
    управляется предыдущим значением сглаженного  на 14 атр.
    А оптимизировали на каких инструментах — секрет?
      • baron_samedi
        01 июля 2016, 16:21
        СыроеШкин, 
        Спасибо автору.
        Интересная жила.
  • *ZzZ*
    01 июля 2016, 15:10
    спасибо
  • kaliostro
    01 июля 2016, 16:09
    похож на индикатор АМА
  • Анатолий И.
    01 июля 2016, 16:35

       Какие вопросы по индикаторам, роботам и прибамбасам для QUIK, отвечу.

    Как можно сделать, чтобы в таблице видеть разницу между Си и USDRUB_TOM?
      • Анатолий И.
        01 июля 2016, 20:27
        СыроеШкин, значит только в отдельную специальную таблицу можно будет ввести значение получается.
  • baron_samedi
    01 июля 2016, 16:46
    af=ATR/(Old_ATR+ATR) <br>//- дошло - в одну сторону - полволатильности... ;-))
    
      • baron_samedi
        02 июля 2016, 15:25
        СыроеШкин,
        Недоразумение, вероятно, я хотел сказать — что не понял сразу, что Вы испльзуете половину АТР  параболик ведь в одну сторону считается, поэтому половина АТР, я сразу не понял.
        Просто в текст не удалось зайти, а то можно понять что я подкалываю, а это не так — я просто разбирался.
        А что означает «Бомба»?
  • golubevart
    01 июля 2016, 19:35
    У меня индикатор так и не появился после всех манипуляций. Даже в списке отсутствует.
  • Savin
    01 июля 2016, 20:30
    индикатор ахахах… наркомания не лечится, есть только фазы ремиссии а потом снова срывы
  • Black-Turtle
    02 июля 2016, 16:27
    напишите плиз как для мт4 называется такой тип параболика. спасибо
  • Андрей Нестеров
    22 июля 2016, 19:22
    СыроеШкин. Спасибо Вам большое за предоставленные индикаторы.
  • Александр
    02 февраля 2017, 18:28
    Доброго дня.
    На часовом графике не появляется.
    Если уменьшить время выскакивает следующая ошибка
    C:\SBERBANK\QUIK_SMS\LuaIndicators\Ind_Parabolik.lua:60: attempt to perform arithmetic on field '?' (a nil value)
    В чем ошибка не подскажите?
  • Дмитрий Рубцов
    07 июля 2017, 19:46
    Вот такая ошибка выдаётся
    :47: attempt to perform arithmetic on global 'Old_ATR' (a nil value)
    Версия 7.12.1.10
  • Ramil Shahattudinov
    11 сентября 2018, 16:54
    Выдаёт такую же ошибку:
    47: attempt to perform arithmetic on global 'Old_ATR' (a nil value)
  • robot_bsk
    19 сентября 2018, 03:03
    Деление на «0» не проверяется.
    Из-за этого на некоторых графиках не полностью отражается индикатор, т.к. могут идти подряд 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
    • AmiGator
      28 ноября 2018, 14:08
      robot_bsk, ваше решение не работает
      • robot_bsk
        28 ноября 2018, 15:59
        AmiGator, не информативно. Что именно не работает? Есть ли ошибки? Если есть то какие? Какой инструмент? Какой таймфрейм?
        • AmiGator
          29 ноября 2018, 13:19
          robot_bsk, attempt to perform arithmetic on a nil value, любой, любой
          • robot_bsk
            29 ноября 2018, 15:05
            AmiGator, Замените строчку
            for js=(idx-per_ATR),idx-1 do
            на
            for js=(idx-per_ATR+1),idx do




  • Pavel
    23 января 2020, 03:55

    Здравствуйте. Спасибо за статью.
    Обратил внимание на то, что переменная Step — нигде не инициализируется, но при этом она используется.

    Не подскажите, как это работает?
    Я не эксперт в qlua, но сейчас похоже, что инструкция «af=Step» — это простое зануление

  • DJ
    08 мая 2020, 14:07
    Также выдает ошибку
    47: attempt to perform arithmetic on global 'Old_ATR' (a nil value)
    попробовал все выше исправления, не хочет запускатся
    • robot_bsk
      08 мая 2020, 14:21
      DJ, строчек for js=(idx-per_ATR),idx-1 do  в коде 2шт. Попробуйте заменить обе
      • DJ
        08 мая 2020, 22:26
        robot_bsk, огромное спасибо,  заработало!!!
  • Golova
    19 августа 2020, 13:16
    Проверил, работает, только на ТФ 1 час не работает. Подскажите что подкрутить?
  • Дмитрий
    13 декабря 2020, 11:35
    я был в тех местах где побывали мы, и по горам рядом с боржоми и в Тбилиси и в Ахалцихе, правда еще в Батуми, и сейчас в Алании)
  • Дмитрий
    14 декабря 2020, 22:49
    Пасаны, а где взять код индикатора демаркер в инете на луа для квика
  • Дмитрий
    16 февраля 2021, 21:53
    Огромное спасибо всем ребятам которые скорректировали код. у меня заработал после двух исправление что советовали в конце ветки

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн