Donochian CCISo this indicator have the following:
1. MTF CCI
2. donochian channel MTF both non repaint mode
buliish and bearish zone determine by ratio of the the donochian cahnnel
enter or exit can be either the bullish or bearish change of color or by cross over or under of the CCI
or combination of both
The high max and low max of the donochian channel show in hilated bar
Cari dalam skrip untuk "mtf"
Donochian zonesThis indicator give the ratio between the high and low of donochian channel and if we take ratio and add it to each other then we can calculate if it + meaning bullish trend or negative meaning bearish trend
using non repainting MTF we can see the zone of the channel at different time set
we can use this indicator to filter bad signal or make it stand alone
here example of amazon stock with 360 min mtf over one hour graph
here facebook 240min over 15 min graph
linreg-areas (like fib system just more accurate) So this system is a different approach to form a daily fib like system.
Its based on linear regression and its slope , we calculate the slope of the line and we put it in MTF format that is without security and non repainting (int2=1440 min)
As you in graph the coin in this case BTC has cycle from low to high similar to the fibs system.
the lowest level is bellow -0.2 , next level is -0.1 ,0,0.1 and above 0.2 is consider the highest
with this system its easy to find the highs and the lows as the coin go between the levels either up or down like the fibs system.
one can use this together with fibs system in order to make analysis more accurate.
also it easy to set signals once the slope go between levels either up or down . another advantage for this system compare to fibs system is the ability to reduce the MTF to lower frame let say 4 hour or even less and then by the same logic to create system of high and lows to the most smaller frames (but if you do that you need in code to change the levels setting numbers so it fit the best )
follow the direction of the slope and you will find the road that you wish:))
Moving Average Stop and Reverse alertsNothing fancy here , the main study is this one
so all credit to him. I change the MTF settings (int2 is contol of that ) and adds alerts
So in basic its a better SAR with MTF function
DEMARSIV1 alerts and take profitThis version is the same as DEMARSI with following differences
I add take profit to short and long when DEMA MTF 1 is crossing DEMA MTF 2 (they are calculated different that why when you increase int2 in min to longer time the difference between them increse)
if you want the TP to be on signal of fast and slow DEMA RSI 2 (just change the code inside) by putting the long cond to be as the buy cond
for any questions please ask
BSP-colorsIts MTF of the BSP model. here i need to warn you that this model can repaint. so I did not create any signals to it. On the other hand since its design for this mistake. you can use it to see the bullish or bearish zones in easy way.
So the basic idea here is to see the zones of buy and sell of weis model in mTF format.
Inverse Fisher-rsi-crudeSo this is a crude version just to show the idea. I use the code of capissoimo, www.tradingview.com
together with my older code and I just change few things. in next version I will try make it more correct, but this is just to show the idea of the MTF reverse fisher RSI
this is setting for 30 min graph with MTF of 120 min
so have fun
Gomoku_V2I tried to improve the one - step equilibrium table.
Since the original glance consisted of the middle line of the Hiroo band, something is calculated from the upper and lower lines.
Leading span A = Double the width of the HiLo band (Green 2) * (1-75 (≒ 76.4% return)), the central complex clouds only changed the expression at a glance.
It is unified to shift all lines at first glance by 25. The old lagging span was renamed to the preceding price span.
You can use the first line of conversion line and reference line with the combination of the preceding conversion line, the preceding reference line and the preceding price span.
The part surrounded by the preceding conversion line and the preceding reference line is defined as rain cloud.
The leading span B is the interpretation of the rain cloud and the effective value of the cloud.
(the width of the reference line and the leading span A) ÷ The width of the rain cloud is like the intensity of the cloud.
Rain clouds have the same properties as clouds, and the twisted parts are weak.
When the type of cloud and rain cloud are different, it is countervailing and resistance seems to be weak.
Even when the width of the leading span A and the leading reference line is narrow, the resistance seems to be weak.
It seems there are clouds above and below as well because it was the motivation for development so there are two clouds each above and below. The clouds are five (although it is actually six) so it is the fifth grade.
It should normally be bounced back in the green zone.
There is a red zone for abnormal price fluctuations.
It seems that the upper and lower clouds only bounce back toward the center.
If you are not satisfied with price movements overall it seems that you are in the range market, often breaking through for the passage of time.
Update Ver 2.0
integrate MTF amagumo
Devices of color arrangement
The resistance is strong where the cloud color is thin.
It should be weak as the force is canceled as much as it is black.
Batch display option for each part
Specealthanks
Ichimoku kinkou hyou
KazmaxFAN Club # Place for technical discussion
一目均衡表を改良してみました。
元の一目はハイローバンドの中線から構成されていたので、上下の線から何かを算出しています。
先行スパンA=ハイローバンドの幅の2倍(Green2)*(1-75(≒76.4%戻し)) という発見により、中央の複雑な雲は一目の表現を変えるだけにしました。
一目の線は全て25前にずらすのに統一です。旧遅行スパンは先行価格スパンに改名しました。
先行転換線と先行基準線と先行価格スパンの組み合わせで一目の転換線と基準線の使い方が出来ます。
先行転換線と先行基準線で囲まれた部分は雨雲と定義。
先行スパンBは雨雲と雲の実効値という解釈です。
(基準線と先行スパンAの幅)÷雨雲の幅が雲の強度という感じです。
雨雲も雲と同じ性質を持っていて、ねじれた部分は弱いぽいです。
雲と雨雲の種類が異なる時は打ち消しあって抵抗が弱いようです。
先行スパンAと先行基準線の幅が狭い時も抵抗が弱いようです。
上下にも雲があるように思えたのが開発の動機だったので上下に各2本雲があります。雲が5本(本当は6本ですが)だから五目です。
通常はグリーンゾーンで跳ね返されるはずです。
異常な価格変動用にレッドゾーンがあります。
上下の雲は中央に向けて跳ね返すくらいしかしないようです。
全体的に価格移動に困ればレンジ相場になって、時間の経過で強行突破することが多いように見えます。
Update Ver2.0
MTF amagumoを統合
配色を工夫
雲の色が薄い所は抵抗が強いです。
黒い所ほど力が打ち消しあって弱いはずです。
各パーツごとに一括表示オプション
Specealthanks
一目均衡表
KazmaxFAN倶楽部 #テクニカル議論の場
Naveen Prabhu with EMA//@version=6
indicator('Naveen Prabhu with EMA', overlay = true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500)
a = input(2, title = 'Key Vaule. \'This changes the sensitivity\'')
c = input(5, title = 'ATR Period')
h = input(false, title = 'Signals from Heikin Ashi Candles')
BULLISH_LEG = 1
BEARISH_LEG = 0
BULLISH = +1
BEARISH = -1
GREEN = #089981
RED = #F23645
BLUE = #2157f3
GRAY = #878b94
MONO_BULLISH = #b2b5be
MONO_BEARISH = #5d606b
HISTORICAL = 'Historical'
PRESENT = 'Present'
COLORED = 'Colored'
MONOCHROME = 'Monochrome'
ALL = 'All'
BOS = 'BOS'
CHOCH = 'CHoCH'
TINY = size.tiny
SMALL = size.small
NORMAL = size.normal
ATR = 'Atr'
RANGE = 'Cumulative Mean Range'
CLOSE = 'Close'
HIGHLOW = 'High/Low'
SOLID = '⎯⎯⎯'
DASHED = '----'
DOTTED = '····'
SMART_GROUP = 'Smart Money Concepts'
INTERNAL_GROUP = 'Real Time Internal Structure'
SWING_GROUP = 'Real Time Swing Structure'
BLOCKS_GROUP = 'Order Blocks'
EQUAL_GROUP = 'EQH/EQL'
GAPS_GROUP = 'Fair Value Gaps'
LEVELS_GROUP = 'Highs & Lows MTF'
ZONES_GROUP = 'Premium & Discount Zones'
modeTooltip = 'Allows to display historical Structure or only the recent ones'
styleTooltip = 'Indicator color theme'
showTrendTooltip = 'Display additional candles with a color reflecting the current trend detected by structure'
showInternalsTooltip = 'Display internal market structure'
internalFilterConfluenceTooltip = 'Filter non significant internal structure breakouts'
showStructureTooltip = 'Display swing market Structure'
showSwingsTooltip = 'Display swing point as labels on the chart'
showHighLowSwingsTooltip = 'Highlight most recent strong and weak high/low points on the chart'
showInternalOrderBlocksTooltip = 'Display internal order blocks on the chart\n\nNumber of internal order blocks to display on the chart'
showSwingOrderBlocksTooltip = 'Display swing order blocks on the chart\n\nNumber of internal swing blocks to display on the chart'
orderBlockFilterTooltip = 'Method used to filter out volatile order blocks \n\nIt is recommended to use the cumulative mean range method when a low amount of data is available'
orderBlockMitigationTooltip = 'Select what values to use for order block mitigation'
showEqualHighsLowsTooltip = 'Display equal highs and equal lows on the chart'
equalHighsLowsLengthTooltip = 'Number of bars used to confirm equal highs and equal lows'
equalHighsLowsThresholdTooltip = 'Sensitivity threshold in a range (0, 1) used for the detection of equal highs & lows\n\nLower values will return fewer but more pertinent results'
showFairValueGapsTooltip = 'Display fair values gaps on the chart'
fairValueGapsThresholdTooltip = 'Filter out non significant fair value gaps'
fairValueGapsTimeframeTooltip = 'Fair value gaps timeframe'
fairValueGapsExtendTooltip = 'Determine how many bars to extend the Fair Value Gap boxes on chart'
showPremiumDiscountZonesTooltip = 'Display premium, discount, and equilibrium zones on chart'
modeInput = input.string( HISTORICAL, 'Mode', group = SMART_GROUP, tooltip = modeTooltip, options = )
styleInput = input.string( COLORED, 'Style', group = SMART_GROUP, tooltip = styleTooltip,options = )
showTrendInput = input( false, 'Color Candles', group = SMART_GROUP, tooltip = showTrendTooltip)
showInternalsInput = input( false, 'Show Internal Structure', group = INTERNAL_GROUP, tooltip = showInternalsTooltip)
showInternalBullInput = input.string( ALL, 'Bullish Structure', group = INTERNAL_GROUP, inline = 'ibull', options = )
internalBullColorInput = input( GREEN, '', group = INTERNAL_GROUP, inline = 'ibull')
showInternalBearInput = input.string( ALL, 'Bearish Structure' , group = INTERNAL_GROUP, inline = 'ibear', options = )
internalBearColorInput = input( RED, '', group = INTERNAL_GROUP, inline = 'ibear')
internalFilterConfluenceInput = input( false, 'Confluence Filter', group = INTERNAL_GROUP, tooltip = internalFilterConfluenceTooltip)
internalStructureSize = input.string( TINY, 'Internal Label Size', group = INTERNAL_GROUP, options = )
showStructureInput = input( false, 'Show Swing Structure', group = SWING_GROUP, tooltip = showStructureTooltip)
showSwingBullInput = input.string( ALL, 'Bullish Structure', group = SWING_GROUP, inline = 'bull', options = )
swingBullColorInput = input( GREEN, '', group = SWING_GROUP, inline = 'bull')
showSwingBearInput = input.string( ALL, 'Bearish Structure', group = SWING_GROUP, inline = 'bear', options = )
swingBearColorInput = input( RED, '', group = SWING_GROUP, inline = 'bear')
swingStructureSize = input.string( SMALL, 'Swing Label Size', group = SWING_GROUP, options = )
showSwingsInput = input( false, 'Show Swings Points', group = SWING_GROUP, tooltip = showSwingsTooltip,inline = 'swings')
swingsLengthInput = input.int( 50, '', group = SWING_GROUP, minval = 10, inline = 'swings')
showHighLowSwingsInput = input( false, 'Show Strong/Weak High/Low',group = SWING_GROUP, tooltip = showHighLowSwingsTooltip)
showInternalOrderBlocksInput = input( true, 'Internal Order Blocks' , group = BLOCKS_GROUP, tooltip = showInternalOrderBlocksTooltip, inline = 'iob')
internalOrderBlocksSizeInput = input.int( 5, '', group = BLOCKS_GROUP, minval = 1, maxval = 20, inline = 'iob')
showSwingOrderBlocksInput = input( true, 'Swing Order Blocks', group = BLOCKS_GROUP, tooltip = showSwingOrderBlocksTooltip, inline = 'ob')
swingOrderBlocksSizeInput = input.int( 5, '', group = BLOCKS_GROUP, minval = 1, maxval = 20, inline = 'ob')
orderBlockFilterInput = input.string( 'Atr', 'Order Block Filter', group = BLOCKS_GROUP, tooltip = orderBlockFilterTooltip, options = )
orderBlockMitigationInput = input.string( HIGHLOW, 'Order Block Mitigation', group = BLOCKS_GROUP, tooltip = orderBlockMitigationTooltip, options = )
internalBullishOrderBlockColor = input.color(color.new(GREEN, 80), 'Internal Bullish OB', group = BLOCKS_GROUP)
internalBearishOrderBlockColor = input.color(color.new(#f77c80, 80), 'Internal Bearish OB', group = BLOCKS_GROUP)
swingBullishOrderBlockColor = input.color(color.new(GREEN, 80), 'Bullish OB', group = BLOCKS_GROUP)
swingBearishOrderBlockColor = input.color(color.new(#b22833, 80), 'Bearish OB', group = BLOCKS_GROUP)
showEqualHighsLowsInput = input( false, 'Equal High/Low', group = EQUAL_GROUP, tooltip = showEqualHighsLowsTooltip)
equalHighsLowsLengthInput = input.int( 3, 'Bars Confirmation', group = EQUAL_GROUP, tooltip = equalHighsLowsLengthTooltip, minval = 1)
equalHighsLowsThresholdInput = input.float( 0.1, 'Threshold', group = EQUAL_GROUP, tooltip = equalHighsLowsThresholdTooltip, minval = 0, maxval = 0.5, step = 0.1)
equalHighsLowsSizeInput = input.string( TINY, 'Label Size', group = EQUAL_GROUP, options = )
showFairValueGapsInput = input( false, 'Fair Value Gaps', group = GAPS_GROUP, tooltip = showFairValueGapsTooltip)
fairValueGapsThresholdInput = input( true, 'Auto Threshold', group = GAPS_GROUP, tooltip = fairValueGapsThresholdTooltip)
fairValueGapsTimeframeInput = input.timeframe('', 'Timeframe', group = GAPS_GROUP, tooltip = fairValueGapsTimeframeTooltip)
fairValueGapsBullColorInput = input.color(color.new(#00ff68, 70), 'Bullish FVG' , group = GAPS_GROUP)
fairValueGapsBearColorInput = input.color(color.new(#ff0008, 70), 'Bearish FVG' , group = GAPS_GROUP)
fairValueGapsExtendInput = input.int( 1, 'Extend FVG', group = GAPS_GROUP, tooltip = fairValueGapsExtendTooltip, minval = 0)
showDailyLevelsInput = input( false, 'Daily', group = LEVELS_GROUP, inline = 'daily')
dailyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'daily', options = )
dailyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'daily')
showWeeklyLevelsInput = input( false, 'Weekly', group = LEVELS_GROUP, inline = 'weekly')
weeklyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'weekly', options = )
weeklyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'weekly')
showMonthlyLevelsInput = input( false, 'Monthly', group = LEVELS_GROUP, inline = 'monthly')
monthlyLevelsStyleInput = input.string( SOLID, '', group = LEVELS_GROUP, inline = 'monthly', options = )
monthlyLevelsColorInput = input( BLUE, '', group = LEVELS_GROUP, inline = 'monthly')
showPremiumDiscountZonesInput = input( false, 'Premium/Discount Zones', group = ZONES_GROUP , tooltip = showPremiumDiscountZonesTooltip)
premiumZoneColorInput = input.color( RED, 'Premium Zone', group = ZONES_GROUP)
equilibriumZoneColorInput = input.color( GRAY, 'Equilibrium Zone', group = ZONES_GROUP)
discountZoneColorInput = input.color( GREEN, 'Discount Zone', group = ZONES_GROUP)
type alerts
bool internalBullishBOS = false
bool internalBearishBOS = false
bool internalBullishCHoCH = false
bool internalBearishCHoCH = false
bool swingBullishBOS = false
bool swingBearishBOS = false
bool swingBullishCHoCH = false
bool swingBearishCHoCH = false
bool internalBullishOrderBlock = false
bool internalBearishOrderBlock = false
bool swingBullishOrderBlock = false
bool swingBearishOrderBlock = false
bool equalHighs = false
bool equalLows = false
bool bullishFairValueGap = false
bool bearishFairValueGap = false
type trailingExtremes
float top
float bottom
int barTime
int barIndex
int lastTopTime
int lastBottomTime
type fairValueGap
float top
float bottom
int bias
box topBox
box bottomBox
type trend
int bias
type equalDisplay
line l_ine = na
label l_abel = na
type pivot
float currentLevel
float lastLevel
bool crossed
int barTime = time
int barIndex = bar_index
type orderBlock
float barHigh
float barLow
int barTime
int bias
// @variable current swing pivot high
var pivot swingHigh = pivot.new(na,na,false)
// @variable current swing pivot low
var pivot swingLow = pivot.new(na,na,false)
// @variable current internal pivot high
var pivot internalHigh = pivot.new(na,na,false)
// @variable current internal pivot low
var pivot internalLow = pivot.new(na,na,false)
// @variable current equal high pivot
var pivot equalHigh = pivot.new(na,na,false)
// @variable current equal low pivot
var pivot equalLow = pivot.new(na,na,false)
// @variable swing trend bias
var trend swingTrend = trend.new(0)
// @variable internal trend bias
var trend internalTrend = trend.new(0)
// @variable equal high display
var equalDisplay equalHighDisplay = equalDisplay.new()
// @variable equal low display
var equalDisplay equalLowDisplay = equalDisplay.new()
// @variable storage for fairValueGap UDTs
var array fairValueGaps = array.new()
// @variable storage for parsed highs
var array parsedHighs = array.new()
// @variable storage for parsed lows
var array parsedLows = array.new()
// @variable storage for raw highs
var array highs = array.new()
// @variable storage for raw lows
var array lows = array.new()
// @variable storage for bar time values
var array times = array.new()
// @variable last trailing swing high and low
var trailingExtremes trailing = trailingExtremes.new()
// @variable storage for orderBlock UDTs (swing order blocks)
var array swingOrderBlocks = array.new()
// @variable storage for orderBlock UDTs (internal order blocks)
var array internalOrderBlocks = array.new()
// @variable storage for swing order blocks boxes
var array swingOrderBlocksBoxes = array.new()
// @variable storage for internal order blocks boxes
var array internalOrderBlocksBoxes = array.new()
// @variable color for swing bullish structures
var swingBullishColor = styleInput == MONOCHROME ? MONO_BULLISH : swingBullColorInput
// @variable color for swing bearish structures
var swingBearishColor = styleInput == MONOCHROME ? MONO_BEARISH : swingBearColorInput
// @variable color for bullish fair value gaps
var fairValueGapBullishColor = styleInput == MONOCHROME ? color.new(MONO_BULLISH,70) : fairValueGapsBullColorInput
// @variable color for bearish fair value gaps
var fairValueGapBearishColor = styleInput == MONOCHROME ? color.new(MONO_BEARISH,70) : fairValueGapsBearColorInput
// @variable color for premium zone
var premiumZoneColor = styleInput == MONOCHROME ? MONO_BEARISH : premiumZoneColorInput
// @variable color for discount zone
var discountZoneColor = styleInput == MONOCHROME ? MONO_BULLISH : discountZoneColorInput
// @variable bar index on current script iteration
varip int currentBarIndex = bar_index
// @variable bar index on last script iteration
varip int lastBarIndex = bar_index
// @variable alerts in current bar
alerts currentAlerts = alerts.new()
// @variable time at start of chart
var initialTime = time
// we create the needed boxes for displaying order blocks at the first execution
if barstate.isfirst
if showSwingOrderBlocksInput
for index = 1 to swingOrderBlocksSizeInput
swingOrderBlocksBoxes.push(box.new(na,na,na,na,xloc = xloc.bar_time,extend = extend.right))
if showInternalOrderBlocksInput
for index = 1 to internalOrderBlocksSizeInput
internalOrderBlocksBoxes.push(box.new(na,na,na,na,xloc = xloc.bar_time,extend = extend.right))
// @variable source to use in bearish order blocks mitigation
bearishOrderBlockMitigationSource = orderBlockMitigationInput == CLOSE ? close : high
// @variable source to use in bullish order blocks mitigation
bullishOrderBlockMitigationSource = orderBlockMitigationInput == CLOSE ? close : low
// @variable default volatility measure
atrMeasure = ta.atr(200)
// @variable parsed volatility measure by user settings
volatilityMeasure = orderBlockFilterInput == ATR ? atrMeasure : ta.cum(ta.tr)/bar_index
// @variable true if current bar is a high volatility bar
highVolatilityBar = (high - low) >= (2 * volatilityMeasure)
// @variable parsed high
parsedHigh = highVolatilityBar ? low : high
// @variable parsed low
parsedLow = highVolatilityBar ? high : low
// we store current values into the arrays at each bar
parsedHighs.push(parsedHigh)
parsedLows.push(parsedLow)
highs.push(high)
lows.push(low)
times.push(time)
leg(int size) =>
var leg = 0
newLegHigh = high > ta.highest( size)
newLegLow = low < ta.lowest( size)
if newLegHigh
leg := BEARISH_LEG
else if newLegLow
leg := BULLISH_LEG
leg
startOfNewLeg(int leg) => ta.change(leg) != 0
startOfBearishLeg(int leg) => ta.change(leg) == -1
startOfBullishLeg(int leg) => ta.change(leg) == +1
drawLabel(int labelTime, float labelPrice, string tag, color labelColor, string labelStyle) =>
var label l_abel = na
if modeInput == PRESENT
l_abel.delete()
l_abel := label.new(chart.point.new(labelTime,na,labelPrice),tag,xloc.bar_time,color=color(na),textcolor=labelColor,style = labelStyle,size = size.small)
drawEqualHighLow(pivot p_ivot, float level, int size, bool equalHigh) =>
equalDisplay e_qualDisplay = equalHigh ? equalHighDisplay : equalLowDisplay
string tag = 'EQL'
color equalColor = swingBullishColor
string labelStyle = label.style_label_up
if equalHigh
tag := 'EQH'
equalColor := swingBearishColor
labelStyle := label.style_label_down
if modeInput == PRESENT
line.delete( e_qualDisplay.l_ine)
label.delete( e_qualDisplay.l_abel)
e_qualDisplay.l_ine := line.new(chart.point.new(p_ivot.barTime,na,p_ivot.currentLevel), chart.point.new(time ,na,level), xloc = xloc.bar_time, color = equalColor, style = line.style_dotted)
labelPosition = math.round(0.5*(p_ivot.barIndex + bar_index - size))
e_qualDisplay.l_abel := label.new(chart.point.new(na,labelPosition,level), tag, xloc.bar_index, color = color(na), textcolor = equalColor, style = labelStyle, size = equalHighsLowsSizeInput)
getCurrentStructure(int size,bool equalHighLow = false, bool internal = false) =>
currentLeg = leg(size)
newPivot = startOfNewLeg(currentLeg)
pivotLow = startOfBullishLeg(currentLeg)
pivotHigh = startOfBearishLeg(currentLeg)
if newPivot
if pivotLow
pivot p_ivot = equalHighLow ? equalLow : internal ? internalLow : swingLow
if equalHighLow and math.abs(p_ivot.currentLevel - low ) < equalHighsLowsThresholdInput * atrMeasure
drawEqualHighLow(p_ivot, low , size, false)
p_ivot.lastLevel := p_ivot.currentLevel
p_ivot.currentLevel := low
p_ivot.crossed := false
p_ivot.barTime := time
p_ivot.barIndex := bar_index
if not equalHighLow and not internal
trailing.bottom := p_ivot.currentLevel
trailing.barTime := p_ivot.barTime
trailing.barIndex := p_ivot.barIndex
trailing.lastBottomTime := p_ivot.barTime
if showSwingsInput and not internal and not equalHighLow
drawLabel(time , p_ivot.currentLevel, p_ivot.currentLevel < p_ivot.lastLevel ? 'LL' : 'HL', swingBullishColor, label.style_label_up)
else
pivot p_ivot = equalHighLow ? equalHigh : internal ? internalHigh : swingHigh
if equalHighLow and math.abs(p_ivot.currentLevel - high ) < equalHighsLowsThresholdInput * atrMeasure
drawEqualHighLow(p_ivot,high ,size,true)
p_ivot.lastLevel := p_ivot.currentLevel
p_ivot.currentLevel := high
p_ivot.crossed := false
p_ivot.barTime := time
p_ivot.barIndex := bar_index
if not equalHighLow and not internal
trailing.top := p_ivot.currentLevel
trailing.barTime := p_ivot.barTime
trailing.barIndex := p_ivot.barIndex
trailing.lastTopTime := p_ivot.barTime
if showSwingsInput and not internal and not equalHighLow
drawLabel(time , p_ivot.currentLevel, p_ivot.currentLevel > p_ivot.lastLevel ? 'HH' : 'LH', swingBearishColor, label.style_label_down)
drawStructure(pivot p_ivot, string tag, color structureColor, string lineStyle, string labelStyle, string labelSize) =>
var line l_ine = line.new(na,na,na,na,xloc = xloc.bar_time)
var label l_abel = label.new(na,na)
if modeInput == PRESENT
l_ine.delete()
l_abel.delete()
l_ine := line.new(chart.point.new(p_ivot.barTime,na,p_ivot.currentLevel), chart.point.new(time,na,p_ivot.currentLevel), xloc.bar_time, color=structureColor, style=lineStyle)
l_abel := label.new(chart.point.new(na,math.round(0.5*(p_ivot.barIndex+bar_index)),p_ivot.currentLevel), tag, xloc.bar_index, color=color(na), textcolor=structureColor, style=labelStyle, size = labelSize)
deleteOrderBlocks(bool internal = false) =>
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
for in orderBlocks
bool crossedOderBlock = false
if bearishOrderBlockMitigationSource > eachOrderBlock.barHigh and eachOrderBlock.bias == BEARISH
crossedOderBlock := true
if internal
currentAlerts.internalBearishOrderBlock := true
else
currentAlerts.swingBearishOrderBlock := true
else if bullishOrderBlockMitigationSource < eachOrderBlock.barLow and eachOrderBlock.bias == BULLISH
crossedOderBlock := true
if internal
currentAlerts.internalBullishOrderBlock := true
else
currentAlerts.swingBullishOrderBlock := true
if crossedOderBlock
orderBlocks.remove(index)
storeOrdeBlock(pivot p_ivot,bool internal = false,int bias) =>
if (not internal and showSwingOrderBlocksInput) or (internal and showInternalOrderBlocksInput)
array a_rray = na
int parsedIndex = na
if bias == BEARISH
a_rray := parsedHighs.slice(p_ivot.barIndex,bar_index)
parsedIndex := p_ivot.barIndex + a_rray.indexof(a_rray.max())
else
a_rray := parsedLows.slice(p_ivot.barIndex,bar_index)
parsedIndex := p_ivot.barIndex + a_rray.indexof(a_rray.min())
orderBlock o_rderBlock = orderBlock.new(parsedHighs.get(parsedIndex), parsedLows.get(parsedIndex), times.get(parsedIndex),bias)
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
if orderBlocks.size() >= 100
orderBlocks.pop()
orderBlocks.unshift(o_rderBlock)
drawOrderBlocks(bool internal = false) =>
array orderBlocks = internal ? internalOrderBlocks : swingOrderBlocks
orderBlocksSize = orderBlocks.size()
if orderBlocksSize > 0
maxOrderBlocks = internal ? internalOrderBlocksSizeInput : swingOrderBlocksSizeInput
array parsedOrdeBlocks = orderBlocks.slice(0, math.min(maxOrderBlocks,orderBlocksSize))
array b_oxes = internal ? internalOrderBlocksBoxes : swingOrderBlocksBoxes
for in parsedOrdeBlocks
orderBlockColor = styleInput == MONOCHROME ? (eachOrderBlock.bias == BEARISH ? color.new(MONO_BEARISH,80) : color.new(MONO_BULLISH,80)) : internal ? (eachOrderBlock.bias == BEARISH ? internalBearishOrderBlockColor : internalBullishOrderBlockColor) : (eachOrderBlock.bias == BEARISH ? swingBearishOrderBlockColor : swingBullishOrderBlockColor)
box b_ox = b_oxes.get(index)
b_ox.set_top_left_point( chart.point.new(eachOrderBlock.barTime,na,eachOrderBlock.barHigh))
b_ox.set_bottom_right_point(chart.point.new(last_bar_time,na,eachOrderBlock.barLow))
b_ox.set_border_color( internal ? na : orderBlockColor)
b_ox.set_bgcolor( orderBlockColor)
displayStructure(bool internal = false) =>
var bullishBar = true
var bearishBar = true
if internalFilterConfluenceInput
bullishBar := high - math.max(close, open) > math.min(close, open - low)
bearishBar := high - math.max(close, open) < math.min(close, open - low)
pivot p_ivot = internal ? internalHigh : swingHigh
trend t_rend = internal ? internalTrend : swingTrend
lineStyle = internal ? line.style_dashed : line.style_solid
labelSize = internal ? internalStructureSize : swingStructureSize
extraCondition = internal ? internalHigh.currentLevel != swingHigh.currentLevel and bullishBar : true
bullishColor = styleInput == MONOCHROME ? MONO_BULLISH : internal ? internalBullColorInput : swingBullColorInput
if ta.crossover(close,p_ivot.currentLevel) and not p_ivot.crossed and extraCondition
string tag = t_rend.bias == BEARISH ? CHOCH : BOS
if internal
currentAlerts.internalBullishCHoCH := tag == CHOCH
currentAlerts.internalBullishBOS := tag == BOS
else
currentAlerts.swingBullishCHoCH := tag == CHOCH
currentAlerts.swingBullishBOS := tag == BOS
p_ivot.crossed := true
t_rend.bias := BULLISH
displayCondition = internal ? showInternalsInput and (showInternalBullInput == ALL or (showInternalBullInput == BOS and tag != CHOCH) or (showInternalBullInput == CHOCH and tag == CHOCH)) : showStructureInput and (showSwingBullInput == ALL or (showSwingBullInput == BOS and tag != CHOCH) or (showSwingBullInput == CHOCH and tag == CHOCH))
if displayCondition
drawStructure(p_ivot,tag,bullishColor,lineStyle,label.style_label_down,labelSize)
if (internal and showInternalOrderBlocksInput) or (not internal and showSwingOrderBlocksInput)
storeOrdeBlock(p_ivot,internal,BULLISH)
p_ivot := internal ? internalLow : swingLow
extraCondition := internal ? internalLow.currentLevel != swingLow.currentLevel and bearishBar : true
bearishColor = styleInput == MONOCHROME ? MONO_BEARISH : internal ? internalBearColorInput : swingBearColorInput
if ta.crossunder(close,p_ivot.currentLevel) and not p_ivot.crossed and extraCondition
string tag = t_rend.bias == BULLISH ? CHOCH : BOS
if internal
currentAlerts.internalBearishCHoCH := tag == CHOCH
currentAlerts.internalBearishBOS := tag == BOS
else
currentAlerts.swingBearishCHoCH := tag == CHOCH
currentAlerts.swingBearishBOS := tag == BOS
p_ivot.crossed := true
t_rend.bias := BEARISH
displayCondition = internal ? showInternalsInput and (showInternalBearInput == ALL or (showInternalBearInput == BOS and tag != CHOCH) or (showInternalBearInput == CHOCH and tag == CHOCH)) : showStructureInput and (showSwingBearInput == ALL or (showSwingBearInput == BOS and tag != CHOCH) or (showSwingBearInput == CHOCH and tag == CHOCH))
if displayCondition
drawStructure(p_ivot,tag,bearishColor,lineStyle,label.style_label_up,labelSize)
if (internal and showInternalOrderBlocksInput) or (not internal and showSwingOrderBlocksInput)
storeOrdeBlock(p_ivot,internal,BEARISH)
fairValueGapBox(leftTime,rightTime,topPrice,bottomPrice,boxColor) => box.new(chart.point.new(leftTime,na,topPrice),chart.point.new(rightTime + fairValueGapsExtendInput * (time-time ),na,bottomPrice), xloc=xloc.bar_time, border_color = boxColor, bgcolor = boxColor)
deleteFairValueGaps() =>
for in fairValueGaps
if (low < eachFairValueGap.bottom and eachFairValueGap.bias == BULLISH) or (high > eachFairValueGap.top and eachFairValueGap.bias == BEARISH)
eachFairValueGap.topBox.delete()
eachFairValueGap.bottomBox.delete()
fairValueGaps.remove(index)
// @function draw fair value gaps
// @returns fairValueGap ID
drawFairValueGaps() =>
= request.security(syminfo.tickerid, fairValueGapsTimeframeInput, [close , open , time , high , low , time , high , low ],lookahead = barmerge.lookahead_on)
barDeltaPercent = (lastClose - lastOpen) / (lastOpen * 100)
newTimeframe = timeframe.change(fairValueGapsTimeframeInput)
threshold = fairValueGapsThresholdInput ? ta.cum(math.abs(newTimeframe ? barDeltaPercent : 0)) / bar_index * 2 : 0
bullishFairValueGap = currentLow > last2High and lastClose > last2High and barDeltaPercent > threshold and newTimeframe
bearishFairValueGap = currentHigh < last2Low and lastClose < last2Low and -barDeltaPercent > threshold and newTimeframe
if bullishFairValueGap
currentAlerts.bullishFairValueGap := true
fairValueGaps.unshift(fairValueGap.new(currentLow,last2High,BULLISH,fairValueGapBox(lastTime,currentTime,currentLow,math.avg(currentLow,last2High),fairValueGapBullishColor),fairValueGapBox(lastTime,currentTime,math.avg(currentLow,last2High),last2High,fairValueGapBullishColor)))
if bearishFairValueGap
currentAlerts.bearishFairValueGap := true
fairValueGaps.unshift(fairValueGap.new(currentHigh,last2Low,BEARISH,fairValueGapBox(lastTime,currentTime,currentHigh,math.avg(currentHigh,last2Low),fairValueGapBearishColor),fairValueGapBox(lastTime,currentTime,math.avg(currentHigh,last2Low),last2Low,fairValueGapBearishColor)))
getStyle(string style) =>
switch style
SOLID => line.style_solid
DASHED => line.style_dashed
DOTTED => line.style_dotted
drawLevels(string timeframe, bool sameTimeframe, string style, color levelColor) =>
= request.security(syminfo.tickerid, timeframe, [high , low , time , time],lookahead = barmerge.lookahead_on)
float parsedTop = sameTimeframe ? high : topLevel
float parsedBottom = sameTimeframe ? low : bottomLevel
int parsedLeftTime = sameTimeframe ? time : leftTime
int parsedRightTime = sameTimeframe ? time : rightTime
int parsedTopTime = time
int parsedBottomTime = time
if not sameTimeframe
int leftIndex = times.binary_search_rightmost(parsedLeftTime)
int rightIndex = times.binary_search_rightmost(parsedRightTime)
array timeArray = times.slice(leftIndex,rightIndex)
array topArray = highs.slice(leftIndex,rightIndex)
array bottomArray = lows.slice(leftIndex,rightIndex)
parsedTopTime := timeArray.size() > 0 ? timeArray.get(topArray.indexof(topArray.max())) : initialTime
parsedBottomTime := timeArray.size() > 0 ? timeArray.get(bottomArray.indexof(bottomArray.min())) : initialTime
var line topLine = line.new(na, na, na, na, xloc = xloc.bar_time, color = levelColor, style = getStyle(style))
var line bottomLine = line.new(na, na, na, na, xloc = xloc.bar_time, color = levelColor, style = getStyle(style))
var label topLabel = label.new(na, na, xloc = xloc.bar_time, text = str.format('P{0}H',timeframe), color=color(na), textcolor = levelColor, size = size.small, style = label.style_label_left)
var label bottomLabel = label.new(na, na, xloc = xloc.bar_time, text = str.format('P{0}L',timeframe), color=color(na), textcolor = levelColor, size = size.small, style = label.style_label_left)
topLine.set_first_point( chart.point.new(parsedTopTime,na,parsedTop))
topLine.set_second_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedTop))
topLabel.set_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedTop))
bottomLine.set_first_point( chart.point.new(parsedBottomTime,na,parsedBottom))
bottomLine.set_second_point(chart.point.new(last_bar_time + 20 * (time-time ),na,parsedBottom))
bottomLabel.set_point( chart.point.new(last_bar_time + 20 * (time-time ),na,parsedBottom))
higherTimeframe(string timeframe) => timeframe.in_seconds() > timeframe.in_seconds(timeframe)
updateTrailingExtremes() =>
trailing.top := math.max(high,trailing.top)
trailing.lastTopTime := trailing.top == high ? time : trailing.lastTopTime
trailing.bottom := math.min(low,trailing.bottom)
trailing.lastBottomTime := trailing.bottom == low ? time : trailing.lastBottomTime
drawHighLowSwings() =>
var line topLine = line.new(na, na, na, na, color = swingBearishColor, xloc = xloc.bar_time)
var line bottomLine = line.new(na, na, na, na, color = swingBullishColor, xloc = xloc.bar_time)
var label topLabel = label.new(na, na, color=color(na), textcolor = swingBearishColor, xloc = xloc.bar_time, style = label.style_label_down, size = size.tiny)
var label bottomLabel = label.new(na, na, color=color(na), textcolor = swingBullishColor, xloc = xloc.bar_time, style = label.style_label_up, size = size.tiny)
rightTimeBar = last_bar_time + 20 * (time - time )
topLine.set_first_point( chart.point.new(trailing.lastTopTime, na, trailing.top))
topLine.set_second_point( chart.point.new(rightTimeBar, na, trailing.top))
topLabel.set_point( chart.point.new(rightTimeBar, na, trailing.top))
topLabel.set_text( swingTrend.bias == BEARISH ? 'Strong High' : 'Weak High')
bottomLine.set_first_point( chart.point.new(trailing.lastBottomTime, na, trailing.bottom))
bottomLine.set_second_point(chart.point.new(rightTimeBar, na, trailing.bottom))
bottomLabel.set_point( chart.point.new(rightTimeBar, na, trailing.bottom))
bottomLabel.set_text( swingTrend.bias == BULLISH ? 'Strong Low' : 'Weak Low')
drawZone(float labelLevel, int labelIndex, float top, float bottom, string tag, color zoneColor, string style) =>
var label l_abel = label.new(na,na,text = tag, color=color(na),textcolor = zoneColor, style = style, size = size.small)
var box b_ox = box.new(na,na,na,na,bgcolor = color.new(zoneColor,80),border_color = color(na), xloc = xloc.bar_time)
b_ox.set_top_left_point( chart.point.new(trailing.barTime,na,top))
b_ox.set_bottom_right_point(chart.point.new(last_bar_time,na,bottom))
l_abel.set_point( chart.point.new(na,labelIndex,labelLevel))
// @function draw premium/discount zones
// @returns void
drawPremiumDiscountZones() =>
drawZone(trailing.top, math.round(0.5*(trailing.barIndex + last_bar_index)), trailing.top, 0.95*trailing.top + 0.05*trailing.bottom, 'Premium', premiumZoneColor, label.style_label_down)
equilibriumLevel = math.avg(trailing.top, trailing.bottom)
drawZone(equilibriumLevel, last_bar_index, 0.525*trailing.top + 0.475*trailing.bottom, 0.525*trailing.bottom + 0.475*trailing.top, 'Equilibrium', equilibriumZoneColorInput, label.style_label_left)
drawZone(trailing.bottom, math.round(0.5*(trailing.barIndex + last_bar_index)), 0.95*trailing.bottom + 0.05*trailing.top, trailing.bottom, 'Discount', discountZoneColor, label.style_label_up)
parsedOpen = showTrendInput ? open : na
candleColor = internalTrend.bias == BULLISH ? swingBullishColor : swingBearishColor
plotcandle(parsedOpen,high,low,close,color = candleColor, wickcolor = candleColor, bordercolor = candleColor)
if showHighLowSwingsInput or showPremiumDiscountZonesInput
updateTrailingExtremes()
if showHighLowSwingsInput
drawHighLowSwings()
if showPremiumDiscountZonesInput
drawPremiumDiscountZones()
if showFairValueGapsInput
deleteFairValueGaps()
getCurrentStructure(swingsLengthInput,false)
getCurrentStructure(5,false,true)
if showEqualHighsLowsInput
getCurrentStructure(equalHighsLowsLengthInput,true)
if showInternalsInput or showInternalOrderBlocksInput or showTrendInput
displayStructure(true)
if showStructureInput or showSwingOrderBlocksInput or showHighLowSwingsInput
displayStructure()
if showInternalOrderBlocksInput
deleteOrderBlocks(true)
if showSwingOrderBlocksInput
deleteOrderBlocks()
if showFairValueGapsInput
drawFairValueGaps()
if barstate.islastconfirmedhistory or barstate.islast
if showInternalOrderBlocksInput
drawOrderBlocks(true)
if showSwingOrderBlocksInput
drawOrderBlocks()
lastBarIndex := currentBarIndex
currentBarIndex := bar_index
newBar = currentBarIndex != lastBarIndex
if barstate.islastconfirmedhistory or (barstate.isrealtime and newBar)
if showDailyLevelsInput and not higherTimeframe('D')
drawLevels('D',timeframe.isdaily,dailyLevelsStyleInput,dailyLevelsColorInput)
if showWeeklyLevelsInput and not higherTimeframe('W')
drawLevels('W',timeframe.isweekly,weeklyLevelsStyleInput,weeklyLevelsColorInput)
if showMonthlyLevelsInput and not higherTimeframe('M')
drawLevels('M',timeframe.ismonthly,monthlyLevelsStyleInput,monthlyLevelsColorInput)
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = barmerge.lookahead_off) : close
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop , 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop , 0) and src < nz(xATRTrailingStop , 0) ? math.min(nz(xATRTrailingStop ), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop , 0) and src > nz(xATRTrailingStop , 0) ? math.max(nz(xATRTrailingStop ), src - nLoss) : iff_2
pos = 0
iff_3 = src > nz(xATRTrailingStop , 0) and src < nz(xATRTrailingStop , 0) ? -1 : nz(pos , 0)
pos := src < nz(xATRTrailingStop , 0) and src > nz(xATRTrailingStop , 0) ? 1 : iff_3
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
//---------------------------------------------------------------------------------------------------------------------}
//ALERTS
//---------------------------------------------------------------------------------------------------------------------{
alertcondition(currentAlerts.internalBullishBOS, 'Internal Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(currentAlerts.internalBullishCHoCH, 'Internal Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(currentAlerts.internalBearishBOS, 'Internal Bearish BOS', 'Internal Bearish BOS formed')
alertcondition(currentAlerts.internalBearishCHoCH, 'Internal Bearish CHoCH', 'Internal Bearish CHoCH formed')
alertcondition(currentAlerts.swingBullishBOS, 'Bullish BOS', 'Internal Bullish BOS formed')
alertcondition(currentAlerts.swingBullishCHoCH, 'Bullish CHoCH', 'Internal Bullish CHoCH formed')
alertcondition(currentAlerts.swingBearishBOS, 'Bearish BOS', 'Bearish BOS formed')
alertcondition(currentAlerts.swingBearishCHoCH, 'Bearish CHoCH', 'Bearish CHoCH formed')
alertcondition(currentAlerts.internalBullishOrderBlock, 'Bullish Internal OB Breakout', 'Price broke bullish internal OB')
alertcondition(currentAlerts.internalBearishOrderBlock, 'Bearish Internal OB Breakout', 'Price broke bearish internal OB')
alertcondition(currentAlerts.swingBullishOrderBlock, 'Bullish Swing OB Breakout', 'Price broke bullish swing OB')
alertcondition(currentAlerts.swingBearishOrderBlock, 'Bearish Swing OB Breakout', 'Price broke bearish swing OB')
alertcondition(currentAlerts.equalHighs, 'Equal Highs', 'Equal highs detected')
alertcondition(currentAlerts.equalLows, 'Equal Lows', 'Equal lows detected')
alertcondition(currentAlerts.bullishFairValueGap, 'Bullish FVG', 'Bullish FVG formed')
alertcondition(currentAlerts.bearishFairValueGap, 'Bearish FVG', 'Bearish FVG formed')
alertcondition(buy, 'UT Long', 'UT Long')
alertcondition(sell, 'UT Short', 'UT Short')
plotshape(buy, title = 'Buy', text = 'Buy', style = shape.labelup, location = location.belowbar, color = color.new(color.green, 0), textcolor = color.new(color.white, 0), size = size.tiny)
plotshape(sell, title = 'Sell', text = 'Sell', style = shape.labeldown, location = location.abovebar, color = color.new(color.red, 0), textcolor = color.new(color.white, 0), size = size.tiny)
//--------------------------------------------------------------------------------------
// EMA ADDITIONS (Editable)
//--------------------------------------------------------------------------------------
ema5Len = input.int(5, "5 EMA Length", minval = 1)
ema9Len = input.int(9, "9 EMA Length", minval = 1)
ema5 = ta.ema(src, ema5Len)
ema9 = ta.ema(src, ema9Len)
plot(ema5, "EMA 5", color = color.red, linewidth = 2)
plot(ema9, "EMA 9", color = color.blue, linewidth = 2)
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)
Etwas31 Precision zones and trendTitle: Etwas31 Precision zones and trend
Overview: Get a complete market overview at a single glance. This script combines a comprehensive trend/volatility dashboard with automated, high-precision supply and demand zones. It filters out noise and highlights key market structures to improve your trading accuracy.
Key Features:
1. 📊 Advanced MTF Dashboard (5m - 1W)
Trend Monitor: Uses EMA 20 & 50 alignment to accurately detect Bullish, Bearish, or Neutral (Choppy) markets. No more guessing the trend.
Volatility Scanner: Utilizing ATR logic, it signals whether the market is active (High ⚡) or dormant (Low 💤) for each timeframe.
2. 🎯 Precision Support & Resistance Zones
Real Structure: Unlike simple lines, zones are drawn based on candle wicks (High to Body / Low to Body) to reflect the actual "thickness" of market interest.
Visual Hierarchy:
Weak Zones (15m, 30m): Displayed as Hollow/Dashed boxes. Ideal for scalping or short-term targets.
Strong Zones (1H, 4H, 1D, 1W): Displayed as Solid/Filled boxes. These are key levels for reversals and major trend continuation.
Auto-Extension: Zones automatically extend to the current price action for easy tracking.
3. ⚙️ Customizable & Clean
Fully customizable colors and visibility settings.
Optimized to prevent chart clutter while providing maximum information.
How to Use:
Use the Dashboard to align your trades with the higher timeframe trend (e.g., trade with the 4H trend).
Wait for Volatility (⚡) to confirm momentum.
Enter trades when price reacts at Solid Zones (Strong S/R) or use Hollow Zones for intraday scalp targets.
Advanced Linear Regression Pro [PointAlgo]Advanced Linear Regression Pro is an open-source tool designed to visualize market structure using linear regression, volatility bands, and optional volume-weighted calculations.
The indicator expands the concept of regression channels by adding higher-timeframe confluence, slope analysis, imbalance detection, and breakout highlighting.
Key Features
• Volume-Weighted Regression
Weights the regression curve based on volume to highlight periods of strong participation.
• Dynamic Standard-Deviation Bands
Upper and lower bands are derived from volatility to help visualize potential expansion or contraction zones.
• Multi-Timeframe (MTF) Regression
Plots higher-timeframe regression lines and bands for additional trend context.
• Slope Strength Analysis
Helps identify whether the current regression slope is trending upward, downward, or in a neutral range.
• Order Flow Imbalance Detection
Highlights bars where price and volume move unusually fast, which may indicate liquidity voids or imbalance zones.
• Breakout Markers
Shows simple visual markers when the price closes beyond volatility bands with volume confirmation.
These are visual signals only, not trading signals.
How to Use
This indicator is meant for visual market analysis, such as:
Observing trend direction through regression slope
Spotting volatility expansions
Comparing price against higher-timeframe regression structure
Identifying areas where price moves rapidly with volume
It can be used on any market or timeframe.
No part of this script is intended as financial advice or a complete trading system.
90D High % Pullback Lines (Hybrid 10 Lines)90D High % Pullback Lines (Hybrid 10 Lines) visualizes drawdown levels from the 90-day high, with up to 10 fully customizable percentage-based lines.
This tool makes it easy to identify pullbacks, dip-buy zones, trend continuation points, and discount regions in any market.
🔍 Features
✅ Up to 10 customizable pullback levels
Each line has its own % drop setting
Turn any line ON/OFF individually
Example presets: −10%, −20%, −30%, … −95%
✅ Two rendering modes
1. Hybrid Fixed Line Mode (Stable / Anti-Shift)
Prevents line drift caused by chart updates
Keeps horizontal levels synchronized on every bar
Best stability for intraday & real-time use
2. Lightweight plot (stepline) Mode
Ideal for backtesting
Fully compatible with alerts
Clean and fast rendering
✅ Supports daily-based 90-day high
Even on lower timeframes, the indicator can use the daily 90-day high
Ideal for MTF (multi-timeframe) analysis
🎯 Use Cases
Instantly see how far price has pulled back (%) from the 90-day high
Build systematic dip-buy / trend-follow setups
Identify discount zones during volatility
Monitor recovery signals after strong sell-offs
Works great for crypto, FX, indices, and stocks
🚨 Alerts Included
Alerts trigger when closing price crosses any selected pullback line
Useful for automated dip-buy alerts, breakout alerts, etc.
📌 Notes
Due to internal TradingView behavior, public indicators may behave slightly differently from real-time script editing mode.
The Hybrid Line Mode is designed to provide the most stable and drift-free line display.
EMA Trend Alignment (10/20/50) with MTF & SignalsBullish Crossovers 10>20>50 and Bearish Crossover 10<20<50
BG Trix Trend signalovides dynamic long and short signals based on a multi-timeframe candle averaging method. It calculates a four-step average of recent candles to determine the trend and changes candle color accordingly (green for upward, red for downward).
Features:
Multi-Timeframe Candle Analysis: Combines current and previous candle data to smooth price action.
Optional TRIX Filter: Adds a TRIX-based trend filter from a separate timeframe. Only triggers signals when TRIX confirms the trend.
Optional Keltner Channel Filter: Prevents signals when the price is inside the Keltner channel. Long signals only trigger above the upper band; short signals only trigger below the lower band. Separate MTF and MA type can be selected for the channel.
Visual Signals: Long and short signals are displayed as arrows on the chart. Candle color reflects trend direction.
Fully Customizable: Users can enable/disable TRIX and Keltner filters and select MA types and timeframes independently.
This indicator is ideal for traders who want clear trend signals while filtering out trades inside key price channels. No exit management is included—signals are purely for entry visualization.
Multitime ATRMulti-Timeframe Supertrend (Multitime ATR) Indicator Description
This indicator, written in Pine Script v5, is a Multi-Timeframe (MTF) Supertrend tool. It provides a multi-faceted market analysis by simultaneously displaying the Supertrend lines from the current chart timeframe and three higher timeframes: the 1-Hour (1H), 4-Hour (4H), and 1-Day (1D).
📌 Key Features and Characteristics
Multi-Timeframe Display:
It overlays the Supertrend lines from the current timeframe, 1H, 4H, and 1D onto a single chart, totaling four timeframes.
By visualizing the higher timeframe trend lines (uptrends as support, downtrends as resistance), traders can determine where the price action on the current chart stands within the context of the larger, dominant trends.
Supertrend Logic:
The Supertrend calculation utilizes the Average True Range (ATR), based on a user-specified ATR Period and ATR Multiplier.
The Change ATR Calculation Method? input allows switching the ATR calculation between the standard ta.atr (EMA-based/smoothed) and ta.sma(ta.tr, Periods) (SMA-based) methods.
Visual Aids:
Trend Lines: Uptrend lines (support) and downtrend lines (resistance) for each timeframe are plotted with different colors and line weights (e.g., Main: Green/Red, 1H: Blue tones, 4H: Purple tones, 1D: Green/Dark Red tones).
Highlighter: A background coloring feature visually highlights the area between the price and the Supertrend lines according to the trend direction for each timeframe, making the trend immediately obvious. This can be controlled collectively by the Master Highlighter setting.
Trend Change Marks: Small circle plots (●) indicate the exact points of trend reversal for each higher timeframe, clearly signaling a shift.
Warning and Break Signals:
The indicator plots signal labels on the chart when the current price breaks (or nearly breaks) a higher timeframe trend line.
Warning (⚠️): Plotted when the price closes below an uptrend line.
Break (⚡): Plotted when the price closes above a downtrend line.
These signals are designed to reset after a certain period (coded as 3,600,000 milliseconds = 1 hour) to prevent continuous noise from repetitive breaks.
Alert Functionality:
In addition to the current timeframe's Buy/Sell signals, the indicator features robust alerts for the Warning/Break signals across the 1H, 4H, and 1D timeframes, ensuring that critical trend changes are not missed.
🛠️ Customization Options
The indicator's settings allow for detailed customization of the following parameters for each timeframe (Main, 1H, 4H, 1D) individually:
ATR Period (ATR Period)
ATR Multiplier (ATR Multiplier)
Visibility toggles for trend lines, signals, and highlighters.
Furthermore, the Master Control section enables simultaneous control over the display of the Highlighter, Signals, Up Trend Lines, and Down Trend Lines across all timeframes.
This indicator serves as a powerful tool for finding more reliable entry and exit points by integrating multi-timeframe trend analysis, which helps reduce false signals often encountered in single-timeframe trading.
Would you like me to elaborate on a specific section of the code, such as the request.security function or the signal logic?
Multitime ATRMulti-Timeframe Supertrend (Multitime ATR) Indicator Description
This indicator, written in Pine Script v5, is a Multi-Timeframe (MTF) Supertrend tool. It provides a multi-faceted market analysis by simultaneously displaying the Supertrend lines from the current chart timeframe and three higher timeframes: the 1-Hour (1H), 4-Hour (4H), and 1-Day (1D).
📌 Key Features and Characteristics
Multi-Timeframe Display:
It overlays the Supertrend lines from the current timeframe, 1H, 4H, and 1D onto a single chart, totaling four timeframes.
By visualizing the higher timeframe trend lines (uptrends as support, downtrends as resistance), traders can determine where the price action on the current chart stands within the context of the larger, dominant trends.
Supertrend Logic:
The Supertrend calculation utilizes the Average True Range (ATR), based on a user-specified ATR Period and ATR Multiplier.
The Change ATR Calculation Method? input allows switching the ATR calculation between the standard ta.atr (EMA-based/smoothed) and ta.sma(ta.tr, Periods) (SMA-based) methods.
Visual Aids:
Trend Lines: Uptrend lines (support) and downtrend lines (resistance) for each timeframe are plotted with different colors and line weights (e.g., Main: Green/Red, 1H: Blue tones, 4H: Purple tones, 1D: Green/Dark Red tones).
Highlighter: A background coloring feature visually highlights the area between the price and the Supertrend lines according to the trend direction for each timeframe, making the trend immediately obvious. This can be controlled collectively by the Master Highlighter setting.
Trend Change Marks: Small circle plots (●) indicate the exact points of trend reversal for each higher timeframe, clearly signaling a shift.
Warning and Break Signals:
The indicator plots signal labels on the chart when the current price breaks (or nearly breaks) a higher timeframe trend line.
Warning (⚠️): Plotted when the price closes below an uptrend line.
Break (⚡): Plotted when the price closes above a downtrend line.
These signals are designed to reset after a certain period (coded as 3,600,000 milliseconds = 1 hour) to prevent continuous noise from repetitive breaks.
Alert Functionality:
In addition to the current timeframe's Buy/Sell signals, the indicator features robust alerts for the Warning/Break signals across the 1H, 4H, and 1D timeframes, ensuring that critical trend changes are not missed.
🛠️ Customization Options
The indicator's settings allow for detailed customization of the following parameters for each timeframe (Main, 1H, 4H, 1D) individually:
ATR Period (ATR Period)
ATR Multiplier (ATR Multiplier)
Visibility toggles for trend lines, signals, and highlighters.
Furthermore, the Master Control section enables simultaneous control over the display of the Highlighter, Signals, Up Trend Lines, and Down Trend Lines across all timeframes.
This indicator serves as a powerful tool for finding more reliable entry and exit points by integrating multi-timeframe trend analysis, which helps reduce false signals often encountered in single-timeframe trading.
Would you like me to elaborate on a specific section of the code, such as the request.security function or the signal logic?
Buy/Sell/SL/TP + MTF + Candle-close (v6)This indicator provides clean Buy/Sell signals with automatic Stop-Loss and Take-Profit levels, multi-timeframe filtering, and confirmed candle-close alerts to avoid false signals. SL/TP can be calculated using percentage or ATR.
It includes full alertconditions for Buy, Sell, SL hit, and TP hit, plus optional JSON webhook alerts for automation (WhatsApp, Telegram, bots, etc.).
Ideal for intraday and swing traders who want simple entries, clear risk management, and fast automated notifications.
Volume Climax Reversal (VCR) — Catch Exhaustion Tops & BottomsNew! VCR spots exhaustion spikes at highs/lows using volume extremes + price action + VWAP context.
If you trade parabolic runners, indices, or mean-reversion edges, VCR helps you time the backside (shorts) and fade capitulation (longs) with clean, rule-based signals.
What it does
Detects volume climax: current volume > SMA(len) × multiplier and a new volume high in the lookback.
Confirms price context: makes a higher high (for tops) or lower low (for bottoms).
Filters with VWAP (optional): bearish signals only below VWAP, bullish signals only above VWAP.
Optional wick filter: requires an exhaustion wick > body to reduce chop.
Why traders like it
Clear entries: “VCR↓” (bearish) at exhaustion tops, “VCR↑” (bullish) at washout lows.
Fewer false signals: VWAP gating + wick filter focus on true climaxes.
Built-in alerts: set once, get notified on your phone/desktop when a setup appears.
How I trade it (simple playbook)
Bearish reversal (short / puts)
Wait for VCR↓ (exhaustion at/near HH).
Look for a lower high that fails to reclaim the signal candle high.
Enter on the break of that lower-high candle low.
Stop above the signal wick high.
Covers/targets: VWAP first; then 20–30% fade from the local top / prior demand.
Bullish reversal (long / calls)
Wait for VCR↑ (capitulation at/near LL).
Look for a higher low that holds above the signal candle low.
Enter on the break of the HL candle high.
Stop below the signal wick low.
Targets: VWAP first; then prior supply/MA bands.
Tip for small-cap/“Dux” style: VCR pairs perfectly with a gap + high USD-rotation scan. Let them blow off, then use VCR for the timing.
Inputs (tune to your market)
Volume SMA Length (default 20)
Volume Spike Multiplier (default 2.0)
Lookback High / Low (default 10 / 10)
Require VWAP confirmation? (on)
Use wick filter? (on)
Works on stocks, indices, futures, crypto.
Timeframes: 1–15m for day trading; 1h–4h–D for swing.
Alerts
Set one (or both) alerts and forget it:
Bearish Volume Climax — VCR↓
Bullish Volume Climax — VCR↑
You’ll get instant notifications when a qualified top/bottom prints.
Best practices
Don’t countertrend the first front-side ramp—wait for the VCR and a lower-high/higher-low.
Respect VWAP: it’s your first profit-taking and a bias filter.
Size small into volatility; widen stops in fast markets.
Combine with your watchlist filters (gap %, float/O/S, USD rotation, session timing).
What’s included
Clean visual signals (triangles + subtle background shading)
Session-anchored VWAP
Alert conditions that appear in TradingView’s alert menu
Sensible defaults + clear docs (this post)
FAQ
Q: Does it repaint?
No. VCR uses completed-bar data; signals print end-of-bar.
Q: Which markets?
Anything with volume: US equities, futures, crypto, indices.
Q: Can I use it for scalps?
Yes—1–5m with wick filter on and VWAP required works well.
Get more / upgrades
I’m iterating fast (MTF filter, heatmap panel, combined “one-alert” mode).
Want the pro template with dashboard & combined alerts? Message me on TV or DM / email you@domain.com
.
Risk Notice
This is educational research, not financial advice. Markets carry risk—always manage position size and use stops.
If this helped you, smash the 👍 and ⭐ — it really helps!
#volume #vwap #reversal #exhaustion #trendreversal #smallcaps #scalping #daytrading #swingtrading #stocks #futures #crypto #indicator
DAO - Demand Advanced Oscillator# DAO - Demand Advanced Oscillator
## 📊 Overview
DAO (Demand Advanced Oscillator) is a powerful momentum oscillator that measures buying and selling pressure by analyzing consecutive high-low relationships. It helps identify market extremes, divergences, and potential trend reversals.
**Values range from 0 to 1:**
- **Above 0.70** = Overbought (potential reversal down)
- **Below 0.30** = Oversold (potential reversal up)
- **0.30 - 0.70** = Neutral zone
---
## ✨ Key Features
✅ **Automatic Divergence Detection**
- Bullish divergences (price lower low + DAO higher low)
- Bearish divergences (price higher high + DAO lower high)
- Visual lines connecting divergence points
✅ **Multi-Timeframe Analysis**
- View higher timeframe DAO on current chart
- Perfect for trend alignment strategies
✅ **Signal Line (EMA)**
- Customizable EMA for trend confirmation
- Crossover signals for momentum shifts
✅ **Real-Time Statistics Dashboard**
- Current DAO value
- Market status (Overbought/Oversold/Neutral)
- Trend direction indicator
✅ **Complete Alert System**
- Overbought/Oversold signals
- Bullish/Bearish divergences
- Signal line crosses
- Level crosses
✅ **Fully Customizable**
- Adjustable periods and levels
- Customizable colors and zones
- Toggle features on/off
---
## 📈 Trading Signals
### 1. Divergences (Most Powerful)
**Bullish Divergence:**
- Price makes lower low
- DAO makes higher low
- Signal: Strong reversal up likely
**Bearish Divergence:**
- Price makes higher high
- DAO makes lower high
- Signal: Strong reversal down likely
### 2. Overbought/Oversold
**Overbought (>0.70):**
- Market may be overextended
- Consider taking profits or looking for shorts
- Can remain overbought in strong trends
**Oversold (<0.30):**
- Market may be oversold
- Consider buying opportunities
- Can remain oversold in strong downtrends
### 3. Signal Line Crossovers
**Bullish Cross:**
- DAO crosses above signal line
- Momentum turning positive
**Bearish Cross:**
- DAO crosses below signal line
- Momentum turning negative
### 4. Level Crosses
**Cross Above 0.30:** Exiting oversold zone (potential uptrend)
**Cross Below 0.70:** Exiting overbought zone (potential downtrend)
---
## ⚙️ Default Settings
📊 Oscillator Period: 14
Number of bars for calculation
📈 Signal Line Period: 9
EMA period for signal line
🔴 Overbought Level: 0.70
Upper threshold
🟢 Oversold Level: 0.30
Lower threshold
🎯 Divergence Detection: ON
Auto divergence identification
⏰ Multi-Timeframe: OFF
Higher TF overlay (optional)
All parameters are fully customizable!
---
## 🔔 Alerts
Six pre-configured alerts available:
1. DAO Overbought
2. DAO Oversold
3. DAO Bullish Divergence
4. DAO Bearish Divergence
5. DAO Signal Cross Up
6. DAO Signal Cross Down
**Setup:** Right-click indicator → Add Alert → Choose condition
---
## 💡 How to Use
### Best Practices:
✅ Focus on divergences (strongest signals)
✅ Combine with support/resistance levels
✅ Use multiple timeframes for confirmation
✅ Wait for price action confirmation
✅ Practice proper risk management
### Avoid:
❌ Trading on indicator alone
❌ Fighting strong trends
❌ Ignoring market context
❌ Overtrading
### Recommended Settings by Trading Style:
**Day Trading:** Period 7-10, All alerts ON
**Swing Trading:** Period 14-21, Divergence alerts
**Scalping:** Period 5-7, Signal crosses
**Position Trading:** Period 21-30, Weekly/Daily TF
---
## 🌍 Markets & Timeframes
**Works on all markets:**
- Forex (all pairs)
- Stocks (all exchanges)
- Cryptocurrencies
- Commodities
- Indices
- Futures
**Works on all timeframes:** 1m to Monthly
---
## 📊 How It Works
DAO calculates the ratio of buying pressure to total market pressure:
1. **Calculate Buying Pressure (DemandMax):**
- If current high > previous high: DemandMax = difference
- Otherwise: DemandMax = 0
2. **Calculate Selling Pressure (DemandMin):**
- If previous low > current low: DemandMin = difference
- Otherwise: DemandMin = 0
3. **Apply Smoothing:**
- Calculate SMA of DemandMax over N periods
- Calculate SMA of DemandMin over N periods
4. **Final Formula:**
```
DAO = SMA(DemandMax) / (SMA(DemandMax) + SMA(DemandMin))
```
This produces a normalized value (0-1) representing market demand strength.
---
## 🎯 Trading Strategies
### Strategy 1: Divergence Trading
- Wait for divergence label
- Confirm at support/resistance
- Enter on confirming candle
- Stop loss beyond recent swing
- Target: opposite level or 0.50
### Strategy 2: Overbought/Oversold
- Best for ranging markets
- Wait for extreme readings
- Enter on reversal from extremes
- Target: middle line (0.50)
### Strategy 3: Trend Following
- Identify trend direction first
- Use DAO to time entries in trend direction only
- Enter on pullbacks to oversold (uptrend) or overbought (downtrend)
- Trade with the trend
### Strategy 4: Multi-Timeframe
- Enable MTF feature
- Trade only when both timeframes align
- Higher TF = trend direction
- Lower TF = precise entry
---
## 📂 Category
**Primary:** Oscillators
**Secondary:** Statistics, Volatility, Momentum
---
## 🏷️ Tags
dao, oscillator, momentum, overbought-oversold, divergence, reversal, demand-indicator, price-exhaustion, statistics, volatility, forex, stocks, crypto, multi-timeframe, technical-analysis
---
## ⚠️ Disclaimer
**This indicator is for educational purposes only.** It does not constitute financial advice. Trading involves substantial risk of loss. Always conduct your own research, use proper risk management, and consult with financial professionals before making trading decisions. Past performance does not guarantee future results.
---
## 📄 License
Open source - Free to use for personal trading, modify as needed, and share with attribution.
---
**Version:** 1.0
**Status:** Production Ready ✅
**Pine Script:** v5
**Trademark-Free:** 100% Safe to Publish
---
*Made with 💙 for traders worldwide*
Exponential Moving Average + ATR MTF [YSFX]Description:
This indicator is a reupload of a previously published EMA + ATR tool, updated and enhanced after a house rule violation to provide additional features and a cleaner, more versatile experience for traders.
It combines trend analysis and volatility measurement into one intuitive tool, allowing traders to visualize market direction, dynamic support and resistance, and adaptive risk levels—all in a clean, minimal interface.
The indicator calculates a customizable moving average (MA) type—EMA, SMA, WMA, HMA, RMA, DEMA, TEMA, VWMA, LSMA, or KAMA—and surrounds it with ATR-based bands that expand and contract with market volatility. This creates a dynamic envelope around price, helping traders identify potential breakouts, pullbacks, or high-probability entry/exit zones.
Advanced Features:
Multiple MA types: Supports all major moving averages, including advanced options like KAMA, DEMA, and TEMA.
KAMA customization: Adjustable fast and slow lengths for precise tuning.
Dual timeframe support: Optionally use separate timeframes for the MA and ATR, or a global timeframe for both.
Dynamic ATR bands: Automatically adjust to market volatility, useful for setting adaptive stop-loss levels.
Optional fill: Shade the area between upper and lower ATR bands for a clear visual representation of volatility.
Flexible for all markets: Works across any timeframe or asset class.
Who It’s For:
This indicator is ideal for trend-following traders, swing traders, and volatility-focused analysts who want to:
Confirm trend direction while accounting for volatility
Identify high-probability trade entries and exits
Implement dynamic, ATR-based stop-loss strategies
Keep charts clean and uncluttered while still capturing key market information
This reuploaded version ensures compliance with platform rules while offering enhanced flexibility and clarity for modern trading workflows.
Quantum Trend Guardian MTF📊 Descripción de Indicador: “Momentum Clarity”
Resumen:
Momentum Clarity es un indicador diseñado para identificar zonas de alta probabilidad de reversión o continuación de tendencia, combinando análisis de volumen, volatilidad y fuerza relativa. Ideal para traders que buscan claridad en momentos de indecisión del mercado.
Características principales:
• 🔍 Detecta divergencias entre precio y momentum.
• 📈 Señala zonas de sobrecompra y sobreventa con mayor precisión que el RSI tradicional.
• 🟢 Incluye alertas visuales para entradas y salidas potenciales.
• 🧠 Compatible con estrategias de scalping, swing y position trading.
Cómo usarlo:
• Utiliza las señales verdes para considerar entradas en largo y las rojas para cortos.
• Confirma con acción del precio y volumen antes de ejecutar.
• Ajusta la sensibilidad según el marco temporal y tu estilo de trading.
Ventajas:
• Reduce el ruido en mercados laterales.
• Mejora la toma de decisiones en zonas de congestión.
• Aumenta la confianza en escenarios de alta volatilidad
Absolutely! Here's the English version of the indicator description:
📊 Indicator Description: “Momentum Clarity”
Overview:
Momentum Clarity is a custom indicator designed to highlight high-probability zones for trend reversals or continuations by combining volume, volatility, and relative strength analysis. It’s ideal for traders seeking clarity during market indecision.
Key Features:
• 🔍 Detects divergences between price and momentum.
• 📈 Identifies overbought and oversold zones with greater precision than traditional RSI.
• 🟢 Includes visual alerts for potential entry and exit points.
• 🧠 Compatible with scalping, swing trading, and long-term strategies.
How to Use:
• Use green signals to consider long entries and red signals for short positions.
• Confirm with price action and volume before executing trades.
• Adjust sensitivity based on your timeframe and trading style.
Benefits:
• Reduces noise in sideways markets.
• Enhances decision-making in consolidation zones.
• Builds confidence in volatile environments.
If you’d like, I can tailor this description to match your specific indicator’s logic, name, and purpose. Just share a few details and I’ll refine it for publication.
RSI MTF Table - 12 Pairs (1,5,15)
The relative strength index measures the speed and magnitude of an asset's recent price changes. Therefore, it is considered a momentum indicator in technical analysis. Essentially, the RSI is the ratio of the days an asset's value increases to decreases over a given period.
Generally speaking, if the RSI is around 50, we do not expect strong movements. RSI above 65 or below 35 are areas we expect. In this context, this chart and the general momentum in 1-5-15 minutes allow us to quickly determine the parity we will trade. It is useful for intraday trading and scalping.
Final Scalping Strategy - RELAXED ENTRY, jangan gopoh braderEMA Scalping System (MTF) Guide (1HR direction, 15 min entry)
Objective
To capture small, consistent profits by entering trades when 15-minute momentum aligns with the 1-hour trend.
Trades are executed only during high-liquidity London and New York sessions to increase the probability of execution and success.
Strategy Setup
Chart Timeframe (Execution): 15-Minute (M15).
Trend Filter (HTF): 1-Hour (H1) chart data is used for the long-term EMA.
Long-Term Trend Filter: 50-Period EMA (based on H1 data).
Short-Term Momentum Signal: 20-Period EMA (based on M15 data).
Risk
Metric: 14-period ATR for dynamic Stop Loss calculation.
✅ Trading Rules🟢
Long (Buy) Entry Conditions
Session: Must be within the London (0800-1700 GMT) or New York (1300-2200 GMT) sessions.
HTF Trend: Current price must be above the 1-Hour EMA 50.
Momentum Signal: Price crosses above the 15-Minute EMA 20.
Confirmation: The bar immediately following the crossover must close above the 15-Minute EMA 20.
Ent
ry: A market order is executed on the close of the confirmation candle.
🔴 Short (Sell) Entry Conditions
Session: Must be within the London (0800-1700 GMT) or New York (1300-2200 GMT) sessions.
HTF Trend: Current price must be below the 1-Hour EMA 50.
Momentum Signal: Price crosses below the 15-Minute EMA 20.
Confirmation: The bar immediately following the crossover must close below the 15-Minute EMA 20.
Entry: A market order is executed on the close of the confirmation candle.
🛑 Trade Management & Exits
Stop Loss (SL): Placed dynamically at 2.0 times the 14-period ATR distance from the entry candle's low (for Buys) or high (for Sells).
Take Profit (TP): Placed dynamically to achieve a 1.5 Risk-Reward Ratio (RR) (TP distance = 1.5 x SL d
istance).
📊 On-Chart Visuals
Detailed Labels: A box appears on the entry bar showing the action, SL/TP prices, Risk/Reward in Pips, and the exact R:R ratio.
Horizontal Lines: Dashed lines display the calculated SL (Red) and TP (Green) levels while the trade is active.
Background: The chart background is shaded to highlight the active London and New York tradi
ng sessions.






















