0% found this document useful (0 votes)
31 views4 pages

TM23 Confirmation Pro

This Pine Script® code implements the 'TM23 Confirmation Pro' indicator for trading analysis. It calculates various signals based on trend, momentum, volume, volatility, and price patterns to provide buy/sell signals and alerts. The indicator visualizes these signals on a chart and includes a scoring system to indicate market conditions.

Uploaded by

resclub
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views4 pages

TM23 Confirmation Pro

This Pine Script® code implements the 'TM23 Confirmation Pro' indicator for trading analysis. It calculates various signals based on trend, momentum, volume, volatility, and price patterns to provide buy/sell signals and alerts. The indicator visualizes these signals on a chart and includes a scoring system to indicate market conditions.

Uploaded by

resclub
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.

0
at https://mozilla.org/MPL/2.0/
// © TradeMisterio1

//@version=6
indicator('TM23 Confirmation Pro', overlay = false)

// === INPUTS ===


src = close
mfiLen = input.int(14, 'MFI Period')
cmfLen = input.int(20, 'CMF Period')
volOscShort = input.int(14, 'Vol Osc Short')
volOscLong = input.int(28, 'Vol Osc Long')

// === CUSTOM ALERT PARAMETERS ===


alertLevelStrongBuy = input.int(20, 'Bullish Confirmation Level')
alertLevelBuy = input.int(10, 'Possible Bullish Entry Level')
alertLevelSell = input.int(-10, 'Possible Bearish Entry Level')
alertLevelStrongSell = input.int(-20, 'Bearish Confirmation Level')

// === SIGNAL FUNCTION ===


signal(r) =>
r > 0 ? 1 : r < 0 ? -1 : 0

// === 1. TREND ===


ema50 = ta.ema(src, 50)
ema200 = ta.ema(src, 200)
emaCross = signal(ema50 - ema200)

supertrendFactor = 3.0
atr = ta.atr(10)
upperBasic = (high + low) / 2 + supertrendFactor * atr
lowerBasic = (high + low) / 2 - supertrendFactor * atr
supertrend = close > upperBasic ? 1 : close < lowerBasic ? -1 : 0

ichimokuBase = (ta.highest(high, 26) + ta.lowest(low, 26)) / 2


ichimokuSignal = signal(close - ichimokuBase)

hma = ta.hma(src, 55)


hmaSignal = signal(close - hma)

tema = 3 * ta.ema(src, 9) - 3 * ta.ema(ta.ema(src, 9), 9) +


ta.ema(ta.ema(ta.ema(src, 9), 9), 9)
temaSignal = signal(close - tema)

// === 2. MOMENTUM ===


rsi = ta.rsi(src, 14)
rsiSignal = rsi > 70 ? -1 : rsi < 30 ? 1 : 0

macdLine = ta.ema(src, 12) - ta.ema(src, 26)


signalLine = ta.ema(macdLine, 9)
macdSignal = signal(macdLine - signalLine)

stochK = ta.stoch(close, high, low, 14)


stochSignal = stochK > 80 ? -1 : stochK < 20 ? 1 : 0

cci = ta.cci(src, 20)


cciSignal = cci > 100 ? 1 : cci < -100 ? -1 : 0
roc = ta.roc(close, 10)
rocSignal = signal(roc)

mom = ta.mom(close, 10)


momSignal = signal(mom)

// === 3. ADX AND DI ===


length = 14
tr = math.max(high - low, math.max(math.abs(high - close[1]), math.abs(low -
close[1])))
plusDM = high - high[1] > low[1] - low ? math.max(high - high[1], 0) : 0
minusDM = low[1] - low > high - high[1] ? math.max(low[1] - low, 0) : 0
plusDI = ta.sma(plusDM, length) / ta.sma(tr, length) * 100
minusDI = ta.sma(minusDM, length) / ta.sma(tr, length) * 100
adx = ta.sma(math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100, length)
adxSignal = adx > 20 ? plusDI > minusDI ? 1 : -1 : 0

// === 4. VOLUME ===


var float pvi = 1000.0
pvi := volume > volume[1] ? pvi[1] * (1 + (close - close[1]) / close[1]) : pvi[1]

var float nvi = 1000.0


nvi := volume < volume[1] ? nvi[1] * (1 + (close - close[1]) / close[1]) : nvi[1]

obv = ta.cum(volume)
mfi = ta.mfi(close, mfiLen)
volOsc = ta.sma(volume, volOscShort) - ta.sma(volume, volOscLong)
cmf = math.sum((close - low - (high - close)) / (high - low) * volume, cmfLen) /
math.sum(volume, cmfLen)

mfiSignal = mfi > 50 ? 1 : mfi < 50 ? -1 : 0


obvSignal = obv > ta.sma(obv, 20) ? 1 : -1
volSignal = volume > ta.ema(volume, 20) ? 1 : -1
cmfSignal = cmf > 0 ? 1 : -1
volOscSignal = volOsc > 0 ? 1 : -1

// === 5. VOLATILITY ===


basis = ta.sma(src, 20)
deviation = 2 * ta.stdev(src, 20)
upperBB = basis + deviation
lowerBB = basis - deviation
bbSignal = close > upperBB ? -1 : close < lowerBB ? 1 : 0

atrChange = signal(ta.atr(14) - ta.atr(14)[1])

// === 6. CANDLES/PRICE ===


var float haOpen = na
haClose = (open + high + low + close) / 4
haOpen := na(haOpen[1]) ? (open + close) / 2 : (haOpen[1] + haClose[1]) / 2
haSignal = signal(haClose - haOpen)

prevHigh = high[1]
prevLow = low[1]
priceBreakout = close > prevHigh ? 1 : close < prevLow ? -1 : 0

// === 7. PATTERNS ===


crossUp = ta.crossover(ema50, ema200)
crossDown = ta.crossunder(ema50, ema200)
crossSignal = crossUp ? 1 : crossDown ? -1 : 0
pivotHigh = ta.pivothigh(high, 5, 5)
pivotLow = ta.pivotlow(low, 5, 5)
pivotSignal = na(pivotHigh) and na(pivotLow) ? 0 : not na(pivotLow) ? 1 : -1

// === TOTAL SCORE ===


totalScore = emaCross + supertrend + ichimokuSignal + hmaSignal + temaSignal +
rsiSignal + macdSignal + stochSignal + cciSignal + rocSignal + momSignal +
adxSignal + mfiSignal + obvSignal + volSignal + volOscSignal + cmfSignal + bbSignal
+ atrChange + haSignal + priceBreakout + crossSignal + pivotSignal

// === UNIFIED SIGNAL ===


buyCount = 0
sellCount = 0

confirmSignals = array.new_int(0)
array.push(confirmSignals, emaCross)
array.push(confirmSignals, supertrend)
array.push(confirmSignals, ichimokuSignal)
array.push(confirmSignals, hmaSignal)
array.push(confirmSignals, temaSignal)
array.push(confirmSignals, rsiSignal)
array.push(confirmSignals, macdSignal)
array.push(confirmSignals, stochSignal)
array.push(confirmSignals, cciSignal)
array.push(confirmSignals, rocSignal)
array.push(confirmSignals, momSignal)
array.push(confirmSignals, adxSignal)
array.push(confirmSignals, mfiSignal)
array.push(confirmSignals, obvSignal)
array.push(confirmSignals, volSignal)
array.push(confirmSignals, volOscSignal)
array.push(confirmSignals, cmfSignal)
array.push(confirmSignals, bbSignal)
array.push(confirmSignals, atrChange)
array.push(confirmSignals, haSignal)
array.push(confirmSignals, priceBreakout)
array.push(confirmSignals, crossSignal)
array.push(confirmSignals, pivotSignal)

for i = 0 to array.size(confirmSignals) - 1 by 1
val = array.get(confirmSignals, i)
buyCount := buyCount + (val == 1 ? 1 : 0)
sellCount := sellCount + (val == -1 ? 1 : 0)
sellCount

signalText = totalScore >= alertLevelStrongBuy ? '🔥 Strong Buy' : totalScore >=


alertLevelBuy ? 'Buy' : totalScore <= alertLevelStrongSell ? '❌ Strong Sell' :
totalScore <= alertLevelSell ? 'Sell' : 'Neutral'

// === TABLE ===


var table confirmTable = table.new(position.top_right, 4, 4, border_width = 1)

if barstate.islast
table.cell(confirmTable, 0, 0, 'Buy', text_color = color.green)
table.cell(confirmTable, 0, 1, str.tostring(buyCount), text_color =
color.green)
table.cell(confirmTable, 1, 0, 'Sell', text_color = color.red)
table.cell(confirmTable, 1, 1, str.tostring(sellCount), text_color = color.red)
table.cell(confirmTable, 2, 0, 'Score', text_color = color.white)
table.cell(confirmTable, 2, 1, str.tostring(totalScore), text_color =
color.white)
table.cell(confirmTable, 3, 0, 'Signal', text_color = color.yellow)
table.cell(confirmTable, 3, 1, signalText, text_color = color.yellow)

// === MAIN PLOT ===


barColor = totalScore >= alertLevelStrongBuy ? color.green : totalScore >=
alertLevelBuy ? color.lime : totalScore <= alertLevelStrongSell ? color.maroon :
totalScore <= alertLevelSell ? color.red : color.gray

// Apply Color to Main Candles


barcolor(barColor)

plot(totalScore, title = 'Confirmation Oscillator', style = plot.style_columns,


color = barColor)
hline(0, 'Neutral', color = color.gray)
hline(alertLevelBuy, '+Bullish Entry', color = color.lime)
hline(alertLevelSell, '-Bearish Entry', color = color.red)

// === BUY/SELL SIGNALS ===


buySignal = ta.crossover(totalScore, alertLevelBuy)
strongBuySignal = ta.crossover(totalScore, alertLevelStrongBuy)
sellSignal = ta.crossunder(totalScore, alertLevelSell)
strongSellSignal = ta.crossunder(totalScore, alertLevelStrongSell)

plotshape(buySignal and not strongBuySignal, 'Buy', shape.triangleup,


location.belowbar, color.lime, size = size.tiny, force_overlay = true)
plotshape(strongBuySignal, 'Strong Buy', shape.triangleup, location.belowbar,
color.green, size = size.normal, force_overlay = true)
plotshape(sellSignal and not strongSellSignal, 'Sell', shape.triangledown,
location.abovebar, color.red, size = size.tiny, force_overlay = true)
plotshape(strongSellSignal, 'Strong Sell', shape.triangledown, location.abovebar,
color.maroon, size = size.normal, force_overlay = true)

// === ALERTS ===


alertcondition(totalScore >= alertLevelStrongBuy, title = 'Bullish Confirmation',
message = '🔥 Bullish Confirmation: Score = {{plot("Confirmation Oscillator")}}')
alertcondition(totalScore >= alertLevelBuy and totalScore < alertLevelStrongBuy,
title = 'Possible Bullish Entry', message = '🔼 Possible Bullish Entry: Score =
{{plot("Confirmation Oscillator")}}')
alertcondition(totalScore <= alertLevelSell and totalScore > alertLevelStrongSell,
title = 'Possible Bearish Entry', message = '🔽 Possible Bearish Entry: Score =
{{plot("Confirmation Oscillator")}}')
alertcondition(totalScore <= alertLevelStrongSell, title = 'Bearish Confirmation',
message = '❌ Bearish Confirmation: Score = {{plot("Confirmation Oscillator")}}')

// === Ribbon Visualization ===


ribbonValue = ta.hma(close, 20)
ribbonColor = totalScore >= alertLevelStrongBuy ? color.green : totalScore >=
alertLevelBuy ? color.lime : totalScore <= alertLevelStrongSell ? color.maroon :
totalScore <= alertLevelSell ? color.red : color.gray

plot(ribbonValue, title = 'Trend Ribbon', color = ribbonColor, linewidth = 2, style


= plot.style_line, force_overlay = true)

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy