mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-07-27 17:27:43 +00:00
35a6702b06
Deep review of all indicator categories verified .md headers against .cs WarmupPeriod, parameters, inputs, and outputs. Fixes include warmup corrections, parameter documentation, output type accuracy, and Pine Script alignment.
40 lines
1.4 KiB
Plaintext
40 lines
1.4 KiB
Plaintext
// Licensed under the Apache License, Version 2.0
|
|
// © mihakralj
|
|
//@version=6
|
|
indicator("Chaikin's Volatility (CVI)", "CVI", overlay=false)
|
|
|
|
//@function Calculates Chaikin's Volatility using high-low range and ROC of EMA
|
|
//@param roc_length Period for Rate of Change calculation
|
|
//@param smooth_length Period for EMA smoothing
|
|
//@returns float Volatility value measuring change in trading ranges
|
|
//@optimized for performance using efficient range ROC calculation
|
|
cvi(simple int roc_length, simple int smooth_length) =>
|
|
var float prevEma = 0.0
|
|
hlRange = high - low
|
|
alpha = 2.0 / (smooth_length + 1)
|
|
if bar_index == 0
|
|
float sum = 0.0
|
|
for i = 0 to smooth_length-1
|
|
sum += nz(hlRange[i])
|
|
prevEma := sum/smooth_length
|
|
ema = nz(prevEma)
|
|
ema := (hlRange - ema) * alpha + ema
|
|
prevEma := ema
|
|
float roc = na
|
|
if bar_index >= roc_length
|
|
roc := ((ema - ema[roc_length])/ema[roc_length]) * 100
|
|
roc
|
|
|
|
// ---------- Main loop ----------
|
|
|
|
// Inputs
|
|
i_roc = input.int(10, "ROC Length", minval=1, maxval=500, tooltip="Period for Rate of Change calculation")
|
|
i_smooth = input.int(10, "Smoothing Length", minval=1, maxval=500, tooltip="Period for EMA smoothing of high-low range")
|
|
|
|
// Calculation
|
|
cviValue = cvi(i_roc, i_smooth)
|
|
|
|
// Plot
|
|
plot(cviValue, "CVI", color=color.yellow, linewidth=2)
|
|
plot(0, "Zero", color.gray, 1, plot.style_circles)
|