OPEN-SOURCE SCRIPT
Fisher (zero-color + simple OB assist)

//version=5
indicator("Fisher (zero-color + simple OB assist)", overlay=false)
// Inputs
length = input.int(10, "Fisher Period", minval=1)
pivotLen = input.int(3, "Structure pivot length (SMC-lite)", minval=1)
showZero = input.bool(true, "Show Zero Line")
colPos = input.color(color.lime, "Color Above 0 (fallback)")
colNeg = input.color(color.red, "Color Below 0 (fallback)")
useOB = input.bool(true, "Color by OB proximity (Demand below = green, Supply above = red)")
showOBMarks = input.bool(true, "Show OB markers")
// Fisher (MT4-style port)
price = (high + low) / 2.0
hh = ta.highest(high, length)
ll = ta.lowest(low, length)
rng = hh - ll
norm = rng != 0 ? (price - ll) / rng : 0.5
var float v = 0.0
var float fish = 0.0
v := 0.33 * 2.0 * (norm - 0.5) + 0.67 * nz(v[1], 0)
v := math.min(math.max(v, -0.999), 0.999)
fish := 0.5 * math.log((1 + v) / (1 - v)) + 0.5 * nz(fish[1], 0)
// SMC-lite OB
ph = ta.pivothigh(high, pivotLen, pivotLen)
pl = ta.pivotlow(low, pivotLen, pivotLen)
var float lastSwingHigh = na
var float lastSwingLow = na
if not na(ph)
lastSwingHigh := ph
if not na(pl)
lastSwingLow := pl
bosUp = not na(lastSwingHigh) and close > lastSwingHigh
bosDn = not na(lastSwingLow) and close < lastSwingLow
bearishBar = close < open
bullishBar = close > open
demHigh_new = ta.valuewhen(bearishBar, high, 0)
demLow_new = ta.valuewhen(bearishBar, low, 0)
supHigh_new = ta.valuewhen(bullishBar, high, 0)
supLow_new = ta.valuewhen(bullishBar, low, 0)
// แยกประกาศตัวแปรทีละตัว และใช้ชนิดให้ชัดเจน
var float demHigh = na
var float demLow = na
var float supHigh = na
var float supLow = na
var bool demActive = false
var bool supActive = false
if bosUp and not na(demHigh_new) and not na(demLow_new)
demHigh := demHigh_new
demLow := demLow_new
demActive := true
if bosDn and not na(supHigh_new) and not na(supLow_new)
supHigh := supHigh_new
supLow := supLow_new
supActive := true
// Mitigation (แตะโซน)
if demActive and not na(demHigh) and not na(demLow)
if low <= demHigh
demActive := false
if supActive and not na(supHigh) and not na(supLow)
if high >= supLow
supActive := false
demandBelow = useOB and demActive and not na(demHigh) and demHigh <= close
supplyAbove = useOB and supActive and not na(supLow) and supLow >= close
colDimUp = color.new(colPos, 40)
colDimDown = color.new(colNeg, 40)
barColor = demandBelow ? colPos : supplyAbove ? colNeg : fish > 0 ? colDimUp : colDimDown
// Plots
plot(0, title="Zero", color=showZero ? color.new(color.gray, 70) : color.new(color.gray, 100))
plot(fish, title="Fisher", style=plot.style_columns, color=barColor, linewidth=2)
plotchar(showOBMarks and demandBelow ? fish : na, title="Demand below", char="D", location=location.absolute, color=color.teal, size=size.tiny)
plotchar(showOBMarks and supplyAbove ? fish : na, title="Supply above", char="S", location=location.absolute, color=color.fuchsia, size=size.tiny)
alertcondition(ta.crossover(fish, 0.0), "Fisher Cross Up", "Fisher crosses above 0")
alertcondition(ta.crossunder(fish, 0.0), "Fisher Cross Down", "Fisher crosses below 0")
indicator("Fisher (zero-color + simple OB assist)", overlay=false)
// Inputs
length = input.int(10, "Fisher Period", minval=1)
pivotLen = input.int(3, "Structure pivot length (SMC-lite)", minval=1)
showZero = input.bool(true, "Show Zero Line")
colPos = input.color(color.lime, "Color Above 0 (fallback)")
colNeg = input.color(color.red, "Color Below 0 (fallback)")
useOB = input.bool(true, "Color by OB proximity (Demand below = green, Supply above = red)")
showOBMarks = input.bool(true, "Show OB markers")
// Fisher (MT4-style port)
price = (high + low) / 2.0
hh = ta.highest(high, length)
ll = ta.lowest(low, length)
rng = hh - ll
norm = rng != 0 ? (price - ll) / rng : 0.5
var float v = 0.0
var float fish = 0.0
v := 0.33 * 2.0 * (norm - 0.5) + 0.67 * nz(v[1], 0)
v := math.min(math.max(v, -0.999), 0.999)
fish := 0.5 * math.log((1 + v) / (1 - v)) + 0.5 * nz(fish[1], 0)
// SMC-lite OB
ph = ta.pivothigh(high, pivotLen, pivotLen)
pl = ta.pivotlow(low, pivotLen, pivotLen)
var float lastSwingHigh = na
var float lastSwingLow = na
if not na(ph)
lastSwingHigh := ph
if not na(pl)
lastSwingLow := pl
bosUp = not na(lastSwingHigh) and close > lastSwingHigh
bosDn = not na(lastSwingLow) and close < lastSwingLow
bearishBar = close < open
bullishBar = close > open
demHigh_new = ta.valuewhen(bearishBar, high, 0)
demLow_new = ta.valuewhen(bearishBar, low, 0)
supHigh_new = ta.valuewhen(bullishBar, high, 0)
supLow_new = ta.valuewhen(bullishBar, low, 0)
// แยกประกาศตัวแปรทีละตัว และใช้ชนิดให้ชัดเจน
var float demHigh = na
var float demLow = na
var float supHigh = na
var float supLow = na
var bool demActive = false
var bool supActive = false
if bosUp and not na(demHigh_new) and not na(demLow_new)
demHigh := demHigh_new
demLow := demLow_new
demActive := true
if bosDn and not na(supHigh_new) and not na(supLow_new)
supHigh := supHigh_new
supLow := supLow_new
supActive := true
// Mitigation (แตะโซน)
if demActive and not na(demHigh) and not na(demLow)
if low <= demHigh
demActive := false
if supActive and not na(supHigh) and not na(supLow)
if high >= supLow
supActive := false
demandBelow = useOB and demActive and not na(demHigh) and demHigh <= close
supplyAbove = useOB and supActive and not na(supLow) and supLow >= close
colDimUp = color.new(colPos, 40)
colDimDown = color.new(colNeg, 40)
barColor = demandBelow ? colPos : supplyAbove ? colNeg : fish > 0 ? colDimUp : colDimDown
// Plots
plot(0, title="Zero", color=showZero ? color.new(color.gray, 70) : color.new(color.gray, 100))
plot(fish, title="Fisher", style=plot.style_columns, color=barColor, linewidth=2)
plotchar(showOBMarks and demandBelow ? fish : na, title="Demand below", char="D", location=location.absolute, color=color.teal, size=size.tiny)
plotchar(showOBMarks and supplyAbove ? fish : na, title="Supply above", char="S", location=location.absolute, color=color.fuchsia, size=size.tiny)
alertcondition(ta.crossover(fish, 0.0), "Fisher Cross Up", "Fisher crosses above 0")
alertcondition(ta.crossunder(fish, 0.0), "Fisher Cross Down", "Fisher crosses below 0")
Script open-source
Dans l'esprit de TradingView, le créateur de ce script l'a rendu open-source, afin que les traders puissent examiner et vérifier sa fonctionnalité. Bravo à l'auteur! Vous pouvez l'utiliser gratuitement, mais n'oubliez pas que la republication du code est soumise à nos Règles.
Clause de non-responsabilité
Les informations et les publications ne sont pas destinées à être, et ne constituent pas, des conseils ou des recommandations en matière de finance, d'investissement, de trading ou d'autres types de conseils fournis ou approuvés par TradingView. Pour en savoir plus, consultez les Conditions d'utilisation.
Script open-source
Dans l'esprit de TradingView, le créateur de ce script l'a rendu open-source, afin que les traders puissent examiner et vérifier sa fonctionnalité. Bravo à l'auteur! Vous pouvez l'utiliser gratuitement, mais n'oubliez pas que la republication du code est soumise à nos Règles.
Clause de non-responsabilité
Les informations et les publications ne sont pas destinées à être, et ne constituent pas, des conseils ou des recommandations en matière de finance, d'investissement, de trading ou d'autres types de conseils fournis ou approuvés par TradingView. Pour en savoir plus, consultez les Conditions d'utilisation.