Untitled

 avatar
unknown
plain_text
21 days ago
3.8 kB
42
Indexable
//@version=6
indicator("Smt Likitide", overlay=true)

// User Inputs
aSymbol = input.symbol("OKX:BTCUSDT.P", "A Symbol")
bSymbol = input.symbol("OKX:ETHUSDT.P", "B Symbol")
timeframeInput = input.timeframe("", "Timeframe")

// Get A data
aHigh = request.security(aSymbol, timeframeInput, high)
aLow = request.security(aSymbol, timeframeInput, low)
aOpen = request.security(aSymbol, timeframeInput, open)
aClose = request.security(aSymbol, timeframeInput, close)

// Get B data
bHigh = request.security(bSymbol, timeframeInput, high)
bLow = request.security(bSymbol, timeframeInput, low)
bOpen = request.security(bSymbol, timeframeInput, open)
bClose = request.security(bSymbol, timeframeInput, close)

// Previous values
prevAHigh = aHigh[1]
prevALow = aLow[1]
prevBHigh = bHigh[1]
prevBLow = bLow[1]
prevAOpen = aOpen[1]
prevAClose = aClose[1]
prevBOpen = bOpen[1]
prevBClose = bClose[1]

// Body boundaries
aBodyMax = math.max(aOpen, aClose)
aBodyMin = math.min(aOpen, aClose)
bBodyMax = math.max(bOpen, bClose)
bBodyMin = math.min(bOpen, bClose)
prevABodyMax = math.max(prevAOpen, prevAClose)
prevABodyMin = math.min(prevAOpen, prevAClose)
prevBBodyMax = math.max(prevBOpen, prevBClose)
prevBBodyMin = math.min(prevBOpen, prevBClose)

// Volatility Calculation
aRange = (aHigh - aLow) / aClose * 100
bRange = (bHigh - bLow) / bClose * 100


// Wick presence checks (strict enforcement)
aHasTopWick = (aHigh > aBodyMax) and (prevAHigh > prevABodyMax)
aHasBotWick = (aLow < aBodyMin) and (prevALow < prevABodyMin)
bHasTopWick = (bHigh > bBodyMax) and (prevBHigh > prevBBodyMax)
bHasBotWick = (bLow < bBodyMin) and (prevBLow < prevBBodyMin)

bodyFilterHighA = aBodyMax < prevAHigh 
bodyFilterHighB = bBodyMax < prevBHigh 

bodyFilterLowA = aBodyMin > prevALow 
bodyFilterLowB = bBodyMin > prevBLow 


// High Wick Mismatch Conditions
highDiscrepancy1 = aHasTopWick and bHasTopWick and (aHigh > prevAHigh) and (bHigh < prevBHigh) and bodyFilterHighA and bodyFilterHighB and barstate.isconfirmed
highDiscrepancy2 = aHasTopWick and bHasTopWick and (aHigh < prevAHigh) and (bHigh > prevBHigh) and bodyFilterHighA and bodyFilterHighB and barstate.isconfirmed


// Low Wick Mismatch Conditions
lowDiscrepancy1 = aHasBotWick and bHasBotWick and (aLow < prevALow) and (bLow > prevBLow) and bodyFilterLowA and bodyFilterLowB and barstate.isconfirmed
lowDiscrepancy2 = aHasBotWick and bHasBotWick and (aLow > prevALow) and (bLow < prevBLow) and bodyFilterLowA and bodyFilterLowB and barstate.isconfirmed


mainAlert = (highDiscrepancy1 or highDiscrepancy2 or lowDiscrepancy1 or lowDiscrepancy2) 


// Visual Indicators
plotshape(highDiscrepancy1, title="High Wick Mismatch", style=shape.labeldown, color=color.red, location=location.abovebar, textcolor=color.white, size=size.small)
plotshape(highDiscrepancy2, title="High Wick Mismatch", style=shape.labeldown, color=color.red, location=location.abovebar, textcolor=color.white, size=size.small)
plotshape(lowDiscrepancy1, title="Low Wick Mismatch", style=shape.labelup, color=color.green, location=location.belowbar, textcolor=color.white, size=size.small)
plotshape(lowDiscrepancy1, title="Low Wick Mismatch", style=shape.labelup, color=color.green, location=location.belowbar, textcolor=color.white, size=size.small)

// Alerts
alertcondition(mainAlert, title="Main Alert", message="Discrepancy detected between A and B!")
//alertcondition(highDiscrepancy2, title="High Wick Mismatch Alert", message="High wick discrepancy detected between A and B!")
//alertcondition(lowDiscrepancy1, title="Low Wick Mismatch Alert", message="Low wick discrepancy detected between A and B!")
//alertcondition(lowDiscrepancy2, title="Low Wick Mismatch Alert", message="Low wick discrepancy detected between A and B!")
Editor is loading...
Leave a Comment