OPEN-SOURCE SCRIPT
Updated

Amritsingh Pinbar Candle GhostTrade Criteria

75
//version=5
indicator("Custom Candle with Asymmetric Wicks", overlay=true)

// === User Inputs ===
// Body percent thresholds (as % of full candle)
bodyMin = input.float(72.0, "Minimum Body %", minval=0.0, maxval=100.0)
bodyMax = input.float(85.0, "Maximum Body %", minval=0.0, maxval=100.0)

// Wick ratio threshold (e.g., 2.0 means one wick must be at least 2x the other)
wickRatio = input.float(2.0, "Min Wick Asymmetry Ratio", minval=1.0, step=0.1)

// === Candle Calculations ===
bodySize = math.abs(close - open)
candleRange = high - low

// Avoid divide-by-zero
validCandle = candleRange > 0

// Body as % of full candle
bodyPercent = validCandle ? (bodySize / candleRange) * 100 : 0

// Wick sizes
upperWick = high - math.max(close, open)
lowerWick = math.min(close, open) - low

// Ensure both wicks are present (non-zero)
bothWicksPresent = (upperWick > 0) and (lowerWick > 0)

// Wick asymmetry condition (either wick must be ≥ wickRatio × the other)
wickAsymmetry = (upperWick >= lowerWick * wickRatio) or (lowerWick >= upperWick * wickRatio)

// Final condition: all must be true
signal = validCandle and bothWicksPresent and wickAsymmetry and (bodyPercent >= bodyMin and bodyPercent <= bodyMax)

// === Plotting ===
plotshape(signal, title="Candle Signal", location=location.belowbar, style=shape.labelup, color=color.orange, size=size.small, text="⚡")
barcolor(signal ? color.orange : na)
Release Notes
//version=5
indicator("Custom Candle with Asymmetric Wicks", overlay=true)

// === User Inputs ===
// Body percent thresholds (as % of full candle)
bodyMin = input.float(72.0, "Minimum Body %", minval=0.0, maxval=100.0)
bodyMax = input.float(85.0, "Maximum Body %", minval=0.0, maxval=100.0)

// Wick ratio threshold (e.g., 2.0 means one wick must be at least 2x the other)
wickRatio = input.float(2.0, "Min Wick Asymmetry Ratio", minval=1.0, step=0.1)

// === Candle Calculations ===
bodySize = math.abs(close - open)
candleRange = high - low

// Avoid divide-by-zero
validCandle = candleRange > 0

// Body as % of full candle
bodyPercent = validCandle ? (bodySize / candleRange) * 100 : 0

// Wick sizes
upperWick = high - math.max(close, open)
lowerWick = math.min(close, open) - low

// Ensure both wicks are present (non-zero)
bothWicksPresent = (upperWick > 0) and (lowerWick > 0)

// Wick asymmetry condition (either wick must be ≥ wickRatio × the other)
wickAsymmetry = (upperWick >= lowerWick * wickRatio) or (lowerWick >= upperWick * wickRatio)

// Final condition: all must be true
signal = validCandle and bothWicksPresent and wickAsymmetry and (bodyPercent >= bodyMin and bodyPercent <= bodyMax)

// === Plotting ===
plotshape(signal, title="Candle Signal", location=location.belowbar, style=shape.labelup, color=color.orange, size=size.small, text="⚡")
barcolor(signal ? color.orange : na)

Disclaimer

The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.