// This Pine Script® code is subject to the terms of the Mozilla Public License 2.
0
at [Link]
// © mrdxb
//@version=5
indicator("Fix-Move Pro", overlay=true, precision=4, max_bars_back=1000,
max_lines_count=500)
// === INPUTS: Heat Zone Settings ===
h = [Link](14, 'Lookback Window', tooltip='The number of bars used
for the estimation. Recommended range: 3-50')
alpha = [Link](0.25, 'Relative Weighting', step=0.25,
tooltip='Relative weighting of time frames. Recommended range: 0.25-25')
x_0 = [Link](12, "Start Regression at Bar", tooltip='Bar index on
which to start regression. Recommended range: 5-25')
atr_length = [Link](7, 'ATR Length (Kernel ATR)', minval=1)
nearFactor = [Link](1.9, 'Near ATR Factor', minval=0.5, step=0.1)
farFactor = [Link](5, 'Far ATR Factor', minval=1.0, step=0.25)
// === INPUTS: Scalping Master RSI ===
recommendation = [Link](true, title="Enable RSI Labels (Scalping Master)")
rsiLength = [Link](13, "RSI Length")
rsiOverbought = [Link](65, "RSI Overbought Level")
rsiOversold = [Link](30, "RSI Oversold Level")
// === INPUTS: Custom ATR Bands ===
mal = [Link](47, "SMA Half Length")
atrl = [Link](89, "ATR Length")
atrm = [Link](3.0, "ATR Multiplier")
// === LIBRARY ===
import jdehorty/KernelFunctions/2 as kernels
// === FUNCTIONS ===
getBounds(_atr, _nearFactor, _farFactor, _yhat) =>
_upper_far = _yhat + _farFactor * _atr
_upper_near = _yhat + _nearFactor * _atr
_lower_near = _yhat - _nearFactor * _atr
_lower_far = _yhat - _farFactor * _atr
_upper_avg = (_upper_far + _upper_near) / 2
_lower_avg = (_lower_far + _lower_near) / 2
[_upper_near, _upper_far, _upper_avg, _lower_near, _lower_far, _lower_avg]
kernel_atr(length, _high, _low, _close) =>
trueRange = na(_high[1]) ? _high - _low : [Link]([Link](_high - _low,
[Link](_high - _close[1])), [Link](_low - _close[1]))
[Link](trueRange, length)
// === MAIN CALCULATIONS (Heat Zones) ===
yhat_close = [Link](close, h, alpha, x_0)
yhat_high = [Link](high, h, alpha, x_0)
yhat_low = [Link](low, h, alpha, x_0)
ktr = kernel_atr(atr_length, yhat_high, yhat_low, yhat_close)
[upper_near, upper_far, upper_avg, lower_near, lower_far, lower_avg] =
getBounds(ktr, nearFactor, farFactor, yhat_close)
// === COLORS ===
red_far = [Link]([Link](#e7ba05, 0), title='Upper Boundary Color: Far')
red_near = [Link]([Link](#e9c407, 41), title='Upper Boundary Color:
Near')
green_near = [Link]([Link](#06dcfd, 6), title='Lower Boundary Color:
Near')
green_far = [Link]([Link](#00d5ff, 35), title='Lower Boundary Color:
Far')
// === PLOTS: Heat Zones ===
p_upper_far = plot(upper_far, color=red_far, title='Upper External Heat Zone',
linewidth=1)
p_upper_avg = plot(upper_avg, color=red_near, title='', linewidth=1)
p_upper_near = plot(upper_near, color=red_near, title='Upper External Heat Zone',
linewidth=1)
p_lower_near = plot(lower_near, color=green_near, title='Lower Internal Heat Zone',
linewidth=1)
p_lower_avg = plot(lower_avg, color=green_near, title='', linewidth=1)
p_lower_far = plot(lower_far, color=green_far, title='Lower Internal Heat Zone',
linewidth=1)
fill(p_upper_far, p_upper_avg, color=red_far, title='Upper Boundary: Farmost
Region')
fill(p_upper_near, p_upper_avg, color=red_near, title='Upper Boundary: Nearmost
Region')
fill(p_lower_near, p_lower_avg, color=green_near,title='Lower Boundary: Nearmost
Region')
fill(p_lower_far, p_lower_avg, color=green_far, title='Lower Boundary: Farmost
Region')
// === Scalping Master RSI ===
rsiValue = [Link](close, rsiLength)
isOverbought = rsiValue >= rsiOverbought
isOversold = rsiValue <= rsiOversold
var int laststate = 0
var float hh = low
var float ll = high
var label labelll = na
var label labelhh = na
var float last_actual_label_hh_price = 0.0
var float last_actual_label_ll_price = 0.0
obLabelText() => "SELL"
osLabelText() => "BUY"
createOverBoughtLabel(isIt) =>
isIt ? [Link](bar_index, high, obLabelText(), style=label.style_label_down,
color=[Link], textcolor=[Link]) : na
createOverSoldLabel(isIt) =>
isIt ? [Link](bar_index, low, osLabelText(), style=label.style_label_up,
color=[Link], textcolor=[Link]) : na
if (recommendation)
if (laststate == 2 and isOverbought)
hh := high
labelhh := createOverBoughtLabel(true)
last_actual_label_ll_price := label.get_y(labelll)
if (laststate == 1 and isOversold)
ll := low
labelll := createOverSoldLabel(true)
last_actual_label_hh_price := label.get_y(labelhh)
if (isOverbought)
if (high >= hh)
hh := high
if not na(labelhh)
label.set_xy(labelhh, bar_index, high)
laststate := 1
if (isOversold)
if (low <= ll)
ll := low
if not na(labelll)
label.set_xy(labelll, bar_index, low)
laststate := 2
// === ATR Bands (from Scalping Master) ===
mva = [Link](close, mal)
atrv = [Link](atrl)
pEnv = mva + (mva * (atrv / close * atrm))
mEnv = mva - (mva * (atrv / close * atrm))
plot(mva, color=[Link], title="Simple Moving Average", linewidth=2)
plot(pEnv, color=[Link], title="High Envelope", linewidth=2)
plot(mEnv, color=[Link], title="Low Envelope", linewidth=2)