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.
65 lines
2.2 KiB
Plaintext
65 lines
2.2 KiB
Plaintext
// Licensed under the Apache License, Version 2.0
|
||
// © mihakralj
|
||
//@version=6
|
||
indicator("Coral Filter (CORAL)", "CORAL", overlay=true)
|
||
|
||
//@function Calculates the Coral trend filter using 6 cascaded EMAs with polynomial combination
|
||
//@param source Series to smooth
|
||
//@param period Smoothing period (determines EMA alpha via di = (period-1)/2 + 1)
|
||
//@param cd Constant D — controls the polynomial weighting of cascaded EMAs (default 0.4)
|
||
//@returns Coral filter value from first bar
|
||
//@description The Coral filter (LazyBear, adapted from MT4) chains 6 EMA passes and linearly
|
||
// combines stages 3-6 using polynomial coefficients derived from 'cd'. This creates a smooth,
|
||
// low-lag trend line. Structure: 6× cascaded EMA → polynomial combination.
|
||
// di = (period - 1) / 2 + 1
|
||
// c1 = 2 / (di + 1) (EMA alpha)
|
||
// c2 = 1 - c1 (EMA complement)
|
||
// c3 = 3*(cd² + cd³)
|
||
// c4 = -3*(2*cd² + cd + cd³)
|
||
// c5 = 3*cd + 1 + cd³ + 3*cd²
|
||
// bfr = -cd³*i6 + c3*i5 + c4*i4 + c5*i3
|
||
// Note: c3 + c4 + c5 + (-cd³) = 1 (unity DC gain).
|
||
coral(series float source, simple int period, simple float cd = 0.4) =>
|
||
float di = (period - 1.0) / 2.0 + 1.0
|
||
float c1 = 2.0 / (di + 1.0)
|
||
float c2 = 1.0 - c1
|
||
|
||
// Polynomial combination coefficients from Constant D
|
||
float cd2 = cd * cd
|
||
float cd3 = cd2 * cd
|
||
float c3 = 3.0 * (cd2 + cd3)
|
||
float c4 = -3.0 * (2.0 * cd2 + cd + cd3)
|
||
float c5 = 3.0 * cd + 1.0 + cd3 + 3.0 * cd2
|
||
|
||
// 6 cascaded EMAs
|
||
var float i1 = 0.0
|
||
var float i2 = 0.0
|
||
var float i3 = 0.0
|
||
var float i4 = 0.0
|
||
var float i5 = 0.0
|
||
var float i6 = 0.0
|
||
|
||
i1 := c1 * source + c2 * i1
|
||
i2 := c1 * i1 + c2 * i2
|
||
i3 := c1 * i2 + c2 * i3
|
||
i4 := c1 * i3 + c2 * i4
|
||
i5 := c1 * i4 + c2 * i5
|
||
i6 := c1 * i5 + c2 * i6
|
||
|
||
// Polynomial combination of stages 3-6
|
||
float bfr = -cd3 * i6 + c3 * i5 + c4 * i4 + c5 * i3
|
||
bfr
|
||
|
||
// ---------- Main loop ----------
|
||
|
||
// Inputs
|
||
i_period = input.int(21, "Smoothing Period", minval=1)
|
||
i_cd = input.float(0.4, "Constant D", minval=0, maxval=1, step=0.01)
|
||
i_source = input.source(close, "Source")
|
||
|
||
// Calculation
|
||
coral_value = coral(i_source, period=i_period, cd=i_cd)
|
||
|
||
// Plot
|
||
plot(coral_value, "CORAL", color=color.yellow, linewidth=2)
|