Блог им. FZF
В первой части мы рассмотрели «теорему о средней волатильности» где, обозначили такое свойство:волатильности могут на разных таймфреймах значительно отличаться друг от друга. Но они всегда будут со временем сходится к одному значению.
Вот, на этом свойстве и будет построен индикатор. Для индикатора нам нужны волатильности на различных таймфреймах. В качестве индикатора волатильности берутся два стандартных индикатора, но которые по сущности показывают одно и тоже.
Price Channel (PC) или ценовой канал. Индикатор представляет из себя две линии, которые ограничивают канал колебаний цены. Верхняя граница канала обозначает уровень локального максимума за прошедшие N периодов, а нижняя граница – уровень локального минимума за тот же промежуток времени. Таким образом, цена ограничивается максимальными точками колебаний – экстремумами за N периодов.
Средний Истинный Диапазон (Average True Range, ATR) . Если кратко, то это усредненное значение длин свечей за определенный период. По сути, это Price Channel одной свечи, усредненный за N периодов. (В моем случае он считается через простое усреднение).
Задача индикатора ожидаемого движения заключается в том, чтобы измерить волатильность на разных «таймфреймах», сравнить их и выявить значительные расхождения между ними. Для этого используются следующие составляющие:
Price Channel N периодов (РК1), как показатель волатильности за N периодов ;
Price Channel 2*N периодов (РК2), как показатель волатильности за 2*N периодов ;
Price Channel 4*N периодов (РК4), как показатель волатильности за 4*N периодов ;
ATR N периодов, как базовое значение с условным N0=1.
Получив эти значения, вычисляем отношения ATR к РК масштабе ATR:
L1=ATR/PK1*КОРЕНЬ(N); L2=ATR/PK2*КОРЕНЬ(2*N); L3=ATR/PK4*КОРЕНЬ(4*N);
L1 – это расхождение в волатильности с базовой величиной самого короткого периода. На графике эта величина будет присутствовать в виде зеленой линии. Ее значение выше единицы показывает, что последние N периодов рынок стоял в слишком узком диапазоне цен.
Далее вычисляется среднее (L1+L2+L3)/3. Эта величина отражает усредненное отклонение волатильности с базовой величиной самого короткого периода. На графике эта величина будет присутствовать в виде синей линии. Ее значение выше единицы показывает, что последние 4*N периодов рынок стоял в слишком узком диапазоне цен. Этот показатель говорит, что возможно, рынку пора делать движение и выравнивать значения волатильностей. Для фильтрации шумов есть пороговое значение F (filter): сигнал принимается во внимание когда (L1+L2+L3)/3 > F
И основная сигнальная линия ( на графике отображается красным) вычисляется как L1*(L1+L2+L3)/3 при условии что (L1+L2+L3)/3 > F. Если условие не выполняется, значение равно(1).
Значение сигнальной линии выше единицы показывает, что назревает движение для выравнивания значений волатильности.
На каком таймфрейме и с каким периодом использовать этот индикатор, зависит от того, какой величины движение вы хотите поймать. Показания индикатора можно (нужно) использовать, когда вы собираетесь продавать опционы. Поскольку он предупреждает о возможном движении.
Далее идет код индикатора. Его нужно скопировать в текстовый файл, присвоить ему расширение .lua и положить его в каталог Квика в папку LuaIndicators
По умолчанию (period ) N=14; (filter) F=1,2 ; индикатор должен появиться в списке индикаторов под именем "FZF_dVOL2". Свои индикаторы я начинаю с FZF чтобы потом их легче было искать в общем списке и они стоят в одной кучке.
Settings= { Name = "FZF_dVOL2", period = 14, filter = 1.2, line = { { Name = "FZF_L1", Color = RGB(0, 255, 0), Type = TYPE_LINE, Width = 1 }, { Name = "FZF_L2", Color = RGB(0, 255, 255), Type = TYPE_LINE, Width = 1 }, { Name = "FZF_L3", Color = RGB(255, 0, 0), Type = TYPE_LINE, Width = 2 } } } function Init() return 3 end function OnCalculate(index) if index < (Settings.period*4+1) then return nil else local sum = 0 local ATR=0 for i = index-Settings.period+1, index do sum = sum + math.max(math.abs(C(i-1) - L(i)),math.abs(H(i) - C(i-1)),(H(i) - L(i))) end ATR=sum/Settings.period --посчитали АТР -- прайс канал с периодом 1 MAX1 = H(index) MIN1 = L(index) for i = 0, (Settings.period-1) do if MAX1 < H(index-i) then MAX1 = H(index-i) end if MIN1 > L(index-i) then MIN1 = L(index-i) end end -- прайс канал с периодом *2 MAX2 = H(index) MIN2 = L(index) for i = 0, (Settings.period*2-1) do if MAX2 < H(index-i) then MAX2 = H(index-i) end if MIN2 > L(index-i) then MIN2 = L(index-i) end end -- прайс канал с периодом *4 MAX4 = H(index) MIN4 = L(index) for i = 0, (Settings.period*4-1) do if MAX4 < H(index-i) then MAX4 = H(index-i) end if MIN4 > L(index-i) then MIN4 = L(index-i) end end local L1= 0 local L2= 0 local L3= 0 L1=ATR/(MAX1 - MIN1)*math.sqrt(Settings.period) L2=ATR/(MAX2 - MIN2)*math.sqrt(Settings.period*2) L3=ATR/(MAX4 - MIN4)*math.sqrt(Settings.period*4) local LL1= 0 local LL2= 0 local LL3= 0 LL1 = L1 --короткий канал LL2 = (L1+L2+L3)/3 -- Среднее if(LL2 < Settings.filter) then LL3=1 else LL3 = L1*(L1+L2+L3)/3 end return LL1, LL2 , LL3 end end
Хотя, опять же, «в своё время», я наоборот выкидывал значения Брент в период после 20:00 МСК. Сейчас — уже нельзя так. Пиндосы рулить стали вечерними движениями.
А вот для РИ, сбера или рубля — самое-самое оно…
Чет все настолько обалдели, что даже сказать нечего?
1. По сути насколько понял речь о том, что локальный рост АТР (по сравнению с шириной PriceChannel) используется как признак возможного начала движения. Правильно интерпретирую?
При этом последующее снижение обратно ниже барьера не говорит об окончании движения??? Это делает применение индикатора неочевидным. Как Вы определяете, что опционы можно снова продавать?
2. Чисто на мой испорченный вкус. Величину Lx хочется сразу прологарифмировать.
Тогда водораздел пройдет через 0, а не через 1. И выбросы наверх будут уже не настолько ломать масштаб графика, чтобы затруднить восприятие и интерпретацию информации...
Что думаете насчет логарифма?
Если АТР тоже сжимается, то это общее падение падение волатильности.
Окончание движения в этом индикаторе не ловится. Потому как, может начаться достаточно длительный тренд.
Прологарифмировать в принципе можно, но это не принесет новой информации. Поскольку, то что ниже нулевого уровня не имеет прогнозного значения (окончания трендов не ловятся). Показатели индикатора уменьшатся на порядок, так как сейчас это произведение чисел больше (1), а будет произведение чисел меньше (1)
Цена-то скакнула, а опционы — хрен! Не совсем прав был я, значит… В выхи снова посчитаю динамику АТР-ов.
Грубо если отклонение относительное от мин значения за период не более 10% и от максимума на 10% за период, то мы говорим о том, что мы находимся в диапазоне постоянной волы по БА, не растет и не падает. Чем больше тайм фреймов тем резче картинка, но добавляется вероятность поймать «шум-всплеск»… Тоже не грааль, но фильтрует периоды по воле БА.
Используя PriceChannel, можно построить индикатор на одном таймфрейме.