mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-05 04:27:43 +00:00
35 lines
1.6 KiB
Plaintext
35 lines
1.6 KiB
Plaintext
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0
|
||
// https://mozilla.org/MPL/2.0/
|
||
// © QuanTAlib
|
||
|
||
//@version=6
|
||
indicator("RWMA: Range Weighted Moving Average", shorttitle="RWMA", overlay=true)
|
||
|
||
// @function Calculates the Range Weighted Moving Average.
|
||
// Each bar's contribution is weighted by its range (high - low),
|
||
// giving more influence to volatile bars and less to narrow-range bars.
|
||
// RWMA = Σ(close[i] × range[i]) / Σ(range[i]) over the lookback period.
|
||
// @param src Series to smooth (typically close).
|
||
// @param high_src High price series.
|
||
// @param low_src Low price series.
|
||
// @param period Lookback window length. Must be > 0.
|
||
// @returns The range-weighted moving average value.
|
||
rwma(series float src, series float high_src, series float low_src, simple int period) =>
|
||
float sumWV = 0.0
|
||
float sumW = 0.0
|
||
for i = 0 to period - 1
|
||
float rng = high_src[i] - low_src[i]
|
||
float w = math.max(rng, 0.0)
|
||
sumWV += src[i] * w
|
||
sumW += w
|
||
sumW > 0.0 ? sumWV / sumW : src
|
||
|
||
// ── Inputs ──────────────────────────────────────────────
|
||
p = input.int(14, "Period", minval=1)
|
||
|
||
// ── Calculation ─────────────────────────────────────────
|
||
result = rwma(close, high, low, p)
|
||
|
||
// ── Plot ────────────────────────────────────────────────
|
||
plot(result, "RWMA", color=color.yellow, linewidth=2)
|