Initial Commit ...
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
///////////////////////////////////////////////////////
|
||||
//
|
||||
// SaherElm IT Center Hull butterfly Oscillator
|
||||
// ---------------------------------------------
|
||||
// saherelm implementation of above oscillator ...
|
||||
//
|
||||
// Maintainer:
|
||||
// ------------
|
||||
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
||||
//
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
//@version=5
|
||||
indicator(title="SaherElm Hull butterfly Oscillator", shorttitle = "XS_HUBF_OSC", overlay = false)
|
||||
|
||||
//
|
||||
// START Inputs ....
|
||||
//
|
||||
//
|
||||
HUBFSrc = input.source(defval = close, title = "Source")
|
||||
|
||||
//
|
||||
HUBFLength = input.int(defval = 11, title = "Length")
|
||||
|
||||
//
|
||||
HUBFMult = input.float(defval = 2.0, title = "Levels Multiplier")
|
||||
//
|
||||
// END Inputs ....
|
||||
//
|
||||
|
||||
//
|
||||
// START Functions ....
|
||||
//
|
||||
//
|
||||
// END Functions ....
|
||||
//
|
||||
|
||||
//
|
||||
// START Calculations ....
|
||||
//
|
||||
//
|
||||
var bullishColor = color.lime
|
||||
var bullishColor1 = color.new(bullishColor, 50)
|
||||
|
||||
//
|
||||
var bearishColor = color.red
|
||||
var bearishColor1 = color.new(bearishColor, 50)
|
||||
|
||||
//
|
||||
var HUBFShortLen = int(HUBFLength / 2)
|
||||
var HUBFHullLen = int(math.sqrt(HUBFLength))
|
||||
|
||||
//
|
||||
var HUBFDen1 = HUBFShortLen * (HUBFShortLen + 1) / 2
|
||||
var HUBFDen2 = HUBFLength * (HUBFLength + 1) / 2
|
||||
var HUBFDen3 = HUBFHullLen * (HUBFHullLen + 1) / 2
|
||||
|
||||
//
|
||||
var HUBFLcwaCoeffs = array.new_float(HUBFHullLen, 0)
|
||||
var HUBFHullCoeffs = array.new_float(0)
|
||||
|
||||
//
|
||||
if barstate.isfirst
|
||||
//
|
||||
// Linearly combined WMA coeffs ...
|
||||
for i = 0 to HUBFLength - 1
|
||||
//
|
||||
HUBFSum1 = math.max(HUBFShortLen - i, 0)
|
||||
HUBFSum2 = HUBFLength - i
|
||||
|
||||
//
|
||||
array.unshift(HUBFLcwaCoeffs, 2 * (HUBFSum1 / HUBFDen1) - (HUBFSum2 / HUBFDen2))
|
||||
|
||||
//
|
||||
// Zero padding of linearly combined WMA coeffs ...
|
||||
for i = 0 to HUBFHullLen - 2
|
||||
array.unshift(HUBFLcwaCoeffs, 0)
|
||||
|
||||
//
|
||||
// WMA convolution of linearly combined WMA coeffs ...
|
||||
for i = HUBFHullLen to array.size(HUBFLcwaCoeffs) - 1
|
||||
//
|
||||
HUBFSum3 = 0.0
|
||||
for j = i - HUBFHullLen to i - 1
|
||||
HUBFSum3 += array.get(HUBFLcwaCoeffs, j) * (i - j)
|
||||
|
||||
//
|
||||
array.unshift(HUBFHullCoeffs, HUBFSum3 / HUBFDen3)
|
||||
|
||||
//
|
||||
var HUBFOs = 0
|
||||
var HUBFLen = array.size(HUBFHullCoeffs) - 1
|
||||
|
||||
//
|
||||
HUBFHma = 0.0
|
||||
HUBFInvHma = 0.0
|
||||
|
||||
//
|
||||
for i = 0 to HUBFLen
|
||||
HUBFHma += HUBFSrc[i] * array.get(HUBFHullCoeffs, i)
|
||||
HUBFInvHma += HUBFSrc[HUBFLen - i] * array.get(HUBFHullCoeffs, i)
|
||||
|
||||
//
|
||||
HUBFHso = HUBFHma - HUBFInvHma
|
||||
|
||||
//
|
||||
HUBFCmean = ta.cum(math.abs(HUBFHso)) / bar_index * HUBFMult
|
||||
|
||||
//
|
||||
HUBFOs := ta.cross(HUBFHso, HUBFCmean) or ta.cross(HUBFHso, - HUBFCmean) ? 0 : HUBFHso < HUBFHso[1] and HUBFHso > HUBFCmean ? -1 : HUBFHso > HUBFHso[1] and HUBFHso < -HUBFCmean ? 1 : HUBFOs
|
||||
|
||||
//
|
||||
HUBFCss0 = color.from_gradient(HUBFHso, 0, HUBFCmean, bullishColor1, bullishColor)
|
||||
HUBFCss1 = color.from_gradient(HUBFHso, - HUBFCmean, 0, bearishColor, bearishColor1)
|
||||
HUBFCss = HUBFHso > 0 ? HUBFCss0 : HUBFCss1
|
||||
//
|
||||
// END Calculations ....
|
||||
//
|
||||
|
||||
//
|
||||
// START Plots ....
|
||||
//
|
||||
//
|
||||
// Oscillator line/histogram ...
|
||||
plot(series = HUBFHso, title = "Hull Butterfly", color = HUBFCss, style = plot.style_histogram)
|
||||
plot(series = HUBFHso, title = "Hull Butterfly", color = chart.fg_color)
|
||||
|
||||
//
|
||||
// Bullish Dots ...
|
||||
plot(series = HUBFOs > HUBFOs[1] and HUBFOs == 1 ? HUBFHso : na, title = "Bullish Dot", color = bullishColor, linewidth = 2, style = plot.style_columns)
|
||||
|
||||
//
|
||||
// Bearish Dots ...
|
||||
plot(series = HUBFOs < HUBFOs[1] and HUBFOs == -1 ? HUBFHso : na, title = "Bearish Dot", color = bearishColor, linewidth = 2, style = plot.style_columns)
|
||||
|
||||
//
|
||||
// Levels ...
|
||||
plot(series = HUBFCmean, color = color.gray, editable = false)
|
||||
plot(series = HUBFCmean / 2, color = color.gray, editable = false)
|
||||
plot(series = -HUBFCmean / 2, color = color.gray, editable = false)
|
||||
plot(series = -HUBFCmean, color = color.gray, editable = false)
|
||||
//
|
||||
// END Plots ....
|
||||
//
|
||||
|
||||
//
|
||||
// START Alerts ...
|
||||
//
|
||||
//
|
||||
// END Alerts ...
|
||||
//
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
// TODOS:
|
||||
// -------
|
||||
// - []
|
||||
//////////////////////////////////////////////////////
|
||||
Reference in New Issue
Block a user