OPEN-SOURCE SCRIPT

Fisher (zero-color + simple OB assist)

166
//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")

免責聲明

這些資訊和出版物並不意味著也不構成TradingView提供或認可的金融、投資、交易或其他類型的意見或建議。請在使用條款閱讀更多資訊。