iCS Backtest ToolThe **iCS Backtest Tool Indicator** is a powerful tool designed for traders to backtest their trading strategies using a wide range of indicators and parameters. Here are some key features:
1. **Strategy Builder**: Allows users to create and customize their trading strategies by selecting various entry and exit conditions.
2. **Indicator Support**: Supports over 70 indicators, including popular ones like RSI, MACD, Moving Averages, and more.
3. **Backtesting Capabilities**: Users can backtest their strategies on different timeframes, from intraday to end-of-day, to see how they would have performed historically.
4. **Visualization**: Provides visual representations of trades, including entry points, stop-loss levels, take-profit levels, and trailing stops.
5. **Optimization Tools**: Offers tools to optimize trading strategies by adjusting parameters such as stop-loss rules, take-profit rules, and entry timing.
6. **Comprehensive Results**: Displays detailed backtesting results, including expected profits and losses, time in trade, and other relevant statistics.
This tool is particularly useful for traders who want to test and refine their strategies without needing advanced coding skills.
Would you like to know more about how to use this tool or any specific feature?
Breadth Indicators
Multi-Strategy Profit SeekerOverview
The Multi-Strategy Profit Seeker is a versatile trading script designed for use on platforms like TradingView. It supports three trading styles—Scalping, Swing Trading, and Long-Term Investing—and leverages several technical indicators to identify trading opportunities across different market conditions. This script is customizable and suitable for traders seeking flexibility in their strategies.
Key Features
1. Multi-Strategy Support
Scalping: Focused on quick, frequent trades targeting small profits.
Swing Trading: Designed to capture larger price movements over days or weeks.
Long-Term Investing: Identifies and follows trends lasting for months or longer.
2. Integrated Indicators
Each indicator serves a specific purpose and is optimized for the selected trading style:
ADX (Average Directional Index):
What: Measures trend strength.
Why: Ensures trades are made during strong trending markets, avoiding weak movements.
Parameters:
Scalping: Length 14, Threshold 20
Swing: Length 14, Threshold 25
Long-Term: Length 14, Threshold 20
RSI (Relative Strength Index):
What: Indicates overbought or oversold conditions by measuring price movement speed.
Why: Helps identify potential reversal points in the market.
Parameters:
Scalping: Length 7, Overbought 65, Oversold 35
Swing: Length 14, Overbought 70, Oversold 30
Long-Term: Length 14, Overbought 80, Oversold 40
EMA (Exponential Moving Averages):
What: Tracks price trends by giving more weight to recent data.
Why: Confirms trend direction via crossovers.
Parameters:
Scalping: Fast EMA 9, Slow EMA 21
Swing: Fast EMA 12, Slow EMA 26
Long-Term: Fast EMA 50, Slow EMA 100
Bollinger Bands:
What: Measures volatility and identifies price levels relative to the moving average.
Why: Detects overextensions and potential breakouts.
Parameters:
Scalping: Length 15, Multiplier 1.5
Swing/Long-Term: Length 20, Multiplier 2.0
Supertrend:
What: Confirms trend direction by combining price and volatility.
Why: Filters out noise and strengthens signal accuracy.
Parameters:
Scalping: Length 7, Multiplier 1.0
Swing: Length 10, Multiplier 1.5
Long-Term: Length 10, Multiplier 2.0
Session Filtering:
What: Limits signal generation to trader-defined market hours.
Why: Avoids signals during low liquidity periods or after-hours trading.
Debug Mode:
What: Displays intermediate indicator values for analysis and tuning.
Why: Helps traders refine script parameters.
How It Works
Scalping: Generates frequent signals based on fast indicators for short-term trades.
Swing Trading: Aligns momentum and trend confirmation for mid-term trades.
Long-Term Investing: Focuses on significant trend changes for long-term positions.
Signals
Buy Signal:
Triggered when:
RSI exits oversold levels.
Fast EMA crosses above Slow EMA.
Price aligns with Bollinger Bands.
ADX and Supertrend confirm a strong bullish trend.
Sell Signal:
Triggered when:
RSI exits overbought levels.
Fast EMA crosses below Slow EMA.
Price aligns with Bollinger Bands.
ADX and Supertrend confirm a strong bearish trend.
Usage
Setup:
Add the script to your TradingView chart.
Select your preferred trading style: Scalping, Swing Trading, or Long-Term Investing.
Define active trading hours using the Session Filter.
Optionally enable Debug Mode for detailed insights.
Signal Interpretation:
Look for green labels (Buy) or red labels (Sell) on your chart.
Alerts:
Configure alerts to notify you when a Buy or Sell signal is generated.
Purpose of Calculations
Trend Analysis (ADX): Ensures trades are executed in strong trending markets.
Momentum (RSI, EMA): Aligns trades with market direction and momentum.
Volatility (Bollinger Bands): Filters out unsustainable trades during high volatility.
Trend Confirmation (Supertrend): Reduces false signals by verifying the primary trend.
Disclaimer
This script is for educational purposes only and does not constitute financial advice. Past performance is not indicative of future results. Trading involves significant risk, and you may lose more than your initial investment. Always perform your own research and use proper risk management strategies.
This script is flexible and customizable. You can adjust its parameters to match your trading style, preferences, or market conditions. However, backtesting is essential to evaluate its performance and reliability before using it in live trading scenarios.
Planetary Degrees by GannStiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno! Stiamo realizzando un sogno!
5 EMAs, Bollinger Bands, Supertrend, and Parabolic SAR4 indicadores en uno, excelente indicador para determinar una tendencia y ademas que podras usar otro indicado para complementar su uso
Jahul SirA trend indicator is a tool used in technical analysis to identify the direction and strength of a market trend. Here are some common features and descriptions of trend indicators:
1. **Moving Averages**: This smooths out price data to create a single flowing line, making it easier to identify the direction of the trend. The two most common types are Simple Moving Average (SMA) and Exponential Moving Average (EMA).
2. **Average Directional Index (ADX)**: This measures the strength of a trend. It ranges from 0 to 100, where a higher value indicates a stronger trend.
3. **Moving Average Convergence Divergence (MACD)**: This is a trend-following momentum indicator that shows the relationship between two moving averages of a security’s price.
4. **Bollinger Bands**: This uses standard deviation to create bands above and below a moving average. The width of the bands changes based on market volatility and helps to identify trend direction and strength.
5. **Relative Strength Index (RSI)**: While primarily a momentum oscillator, RSI can also give insight into trend strength. It ranges from 0 to 100 and helps identify overbought or oversold conditions.
6. **Ichimoku Cloud**: This is a comprehensive indicator that defines support and resistance, identifies trend direction, gauges momentum, and provides trading signals.
These indicators are widely used by traders and analysts to make informed decisions about buying or selling assets.
Would you like to dive deeper into any specific trend indicator? 📈
Abbiamo fattoE' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro E' tutto nostro
MY moving//@version=5
indicator("Candlestick Patterns with Moving Averages & Time Sessions", overlay=true)
// Input lengths for moving averages
length14 = input.int(14, minval=1, title="MA 14 Length")
length21 = input.int(21, minval=1, title="MA 21 Length")
length50 = input.int(50, minval=1, title="MA 50 Length")
length200 = input.int(200, minval=1, title="MA 200 Length")
// Calculate moving averages
ma14 = ta.sma(close, length14)
ma21 = ta.sma(close, length21)
ma50 = ta.sma(close, length50)
ma200 = ta.sma(close, length200)
// Plot moving averages
plot(ma14, color=color.red, linewidth=2, title="MA 14")
plot(ma21, color=color.blue, linewidth=2, title="MA 21")
plot(ma50, color=color.green, linewidth=2, title="MA 50")
plot(ma200, color=color.orange, linewidth=2, title="MA 200")
// Get the current date and time
currentDate = dayofweek == 1 ? "Sun" : dayofweek == 2 ? "Mon" : dayofweek == 3 ? "Tue" :
dayofweek == 4 ? "Wed" : dayofweek == 5 ? "Thu" : dayofweek == 6 ? "Fri" : "Sat"
currentHour = str.tostring(hour)
currentMinute = str.tostring(minute)
// Define the four trading session times
tradingTimes = array.new_int(4)
array.set(tradingTimes, 0, timestamp(year, month, dayofmonth, 9, 0)) // 9 AM
array.set(tradingTimes, 1, timestamp(year, month, dayofmonth, 12, 0)) // 12 PM
array.set(tradingTimes, 2, timestamp(year, month, dayofmonth, 15, 0)) // 3 PM
array.set(tradingTimes, 3, timestamp(year, month, dayofmonth, 18, 0)) // 6 PM
// Determine the current trading session and background color
sessionColor = time >= array.get(tradingTimes, 0) and time < array.get(tradingTimes, 1) ? color.new(color.green, 90) :
time >= array.get(tradingTimes, 1) and time < array.get(tradingTimes, 2) ? color.new(color.blue, 90) :
time >= array.get(tradingTimes, 2) and time < array.get(tradingTimes, 3) ? color.new(color.orange, 90) :
color.new(color.red, 90)
bgcolor(sessionColor)
// Create a dynamic label showing the current day and time
var label dayTimeLabel = na
if na(dayTimeLabel)
Stundenkerzen Breakout AlarmJedes mal, wenn der Stundenchart unter- oder überschritten wird, löst der Indikator einen Alarm aus.
Нуряй *****************
//@version=5
indicator("RICH SHORT LONG IND", overlay=true)
// Параметры скользящих средних
shortSMA_length = input(14, title="Short SMA Length")
longSMA_length = input(28, title="Long SMA Length")
// Вычисление скользящих средних
shortSMA = ta.sma(close, shortSMA_length)
longSMA = ta.sma(close, longSMA_length)
// Условия для сигналов
longCondition = ta.crossover(shortSMA, longSMA)
shortCondition = ta.crossunder(shortSMA, longSMA)
// Отображение сигналов на графике
plotshape(longCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal", text="BUY")
plotshape(shortCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal", text="SELL")
// Отображение скользящих средних на графике
plot(shortSMA, color=color.green, title="Short SMA")
plot(longSMA, color=color.red, title="Long SMA")
*****************************
//@version=5
indicator('RICH SM', overlay = true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500)
//---------------------------------------------------------------------------------------------------------------------}
//CONSTANTS & STRINGS & INPUTS
//---------------------------------------------------------------------------------------------------------------------{
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 Number of internal order blocks to display on the chart'
showSwingOrderBlocksTooltip = 'Display swing order blocks on the chart Number of internal swing blocks to display on the chart'
orderBlockFilterTooltip = 'Method used to filter out volatile order blocks It 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 Lower 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( true, '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( true, '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( true, '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( false, '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(#3179f5, 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(#1848cc, 80), 'Bullish OB', group = BLOCKS_GROUP)
swingBearishOrderBlockColor = input.color(color.new(#b22833, 80), 'Bearish OB', group = BLOCKS_GROUP)
showEqualHighsLowsInput = input( true, '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)
//---------------------------------------------------------------------------------------------------------------------}
//DATA STRUCTURES & VARIABLES
//---------------------------------------------------------------------------------------------------------------------{
// @type UDT representing alerts as bool fields
// @field internalBullishBOS internal structure custom alert
// @field internalBearishBOS internal structure custom alert
// @field internalBullishCHoCH internal structure custom alert
// @field internalBearishCHoCH internal structure custom alert
// @field swingBullishBOS swing structure custom alert
// @field swingBearishBOS swing structure custom alert
// @field swingBullishCHoCH swing structure custom alert
// @field swingBearishCHoCH swing structure custom alert
// @field internalBullishOrderBlock internal order block custom alert
// @field internalBearishOrderBlock internal order block custom alert
// @field swingBullishOrderBlock swing order block custom alert
// @field swingBearishOrderBlock swing order block custom alert
// @field equalHighs equal high low custom alert
// @field equalLows equal high low custom alert
// @field bullishFairValueGap fair value gap custom alert
// @field bearishFairValueGap fair value gap custom alert
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 UDT representing last swing extremes (top & bottom)
// @field top last top swing price
// @field bottom last bottom swing price
// @field barTime last swing bar time
// @field barIndex last swing bar index
// @field lastTopTime last top swing time
// @field lastBottomTime last bottom swing time
type trailingExtremes
float top
float bottom
int barTime
int barIndex
int lastTopTime
int lastBottomTime
// @type UDT representing Fair Value Gaps
// @field top top price
// @field bottom bottom price
// @field bias bias (BULLISH or BEARISH)
// @field topBox top box
// @field bottomBox bottom box
type fairValueGap
float top
float bottom
int bias
box topBox
box bottomBox
// @type UDT representing trend bias
// @field bias BULLISH or BEARISH
type trend
int bias
// @type UDT representing Equal Highs Lows display
// @field l_ine displayed line
// @field l_abel displayed label
type equalDisplay
line l_ine = na
label l_abel = na
// @type UDT representing a pivot point (swing point)
// @field currentLevel current price level
// @field lastLevel last price level
// @field crossed true if price level is crossed
// @field barTime bar time
// @field barIndex bar index
type pivot
float currentLevel
float lastLevel
bool crossed
int barTime = time
int barIndex = bar_index
// @type UDT representing an order block
// @field barHigh bar high
// @field barLow bar low
// @field barTime bar time
// @field bias BULLISH or BEARISH
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)
//---------------------------------------------------------------------------------------------------------------------}
//USER-DEFINED FUNCTIONS
//---------------------------------------------------------------------------------------------------------------------{
// @function Get the value of the current leg, it can be 0 (bearish) or 1 (bullish)
// @returns int
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
// @function Identify whether the current value is the start of a new leg (swing)
// @param leg (int) Current leg value
// @returns bool
startOfNewLeg(int leg) => ta.change(leg) != 0
// @function Identify whether the current level is the start of a new bearish leg (swing)
// @param leg (int) Current leg value
// @returns bool
startOfBearishLeg(int leg) => ta.change(leg) == -1
// @function Identify whether the current level is the start of a new bullish leg (swing)
// @param leg (int) Current leg value
// @returns bool
startOfBullishLeg(int leg) => ta.change(leg) == +1
// @function create a new label
// @param labelTime bar time coordinate
// @param labelPrice price coordinate
// @param tag text to display
// @param labelColor text color
// @param labelStyle label style
// @returns label ID
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)
// @function create a new line and label representing an EQH or EQL
// @param p_ivot starting pivot
// @param level price level of current pivot
// @param size how many bars ago was the current pivot detected
// @param equalHigh true for EQH, false for EQL
// @returns label ID
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)
// @function store current structure and trailing swing points, and also display swing points and equal highs/lows
// @param size (int) structure size
// @param equalHighLow (bool) true for displaying current highs/lows
// @param internal (bool) true for getting internal structures
// @returns label ID
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)
// @function draw line and label representing a structure
// @param p_ivot base pivot point
// @param tag test to display
// @param structureColor base color
// @param lineStyle line style
// @param labelStyle label style
// @param labelSize text size
// @returns label ID
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)
// @function delete order blocks
// @param internal true for internal order blocks
// @returns orderBlock ID
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)
// @function fetch and store order blocks
// @param p_ivot base pivot point
// @param internal true for internal order blocks
// @param bias BULLISH or BEARISH
// @returns void
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)
// @function draw order blocks as boxes
// @param internal true for internal order blocks
// @returns void
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)
// @function detect and draw structures, also detect and store order blocks
// @param internal true for internal structures or order blocks
// @returns void
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)
// @function draw one fair value gap box (each fair value gap has two boxes)
// @param leftTime left time coordinate
// @param rightTime right time coordinate
// @param topPrice top price level
// @param bottomPrice bottom price level
// @param boxColor box color
// @returns box ID
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)
// @function delete fair value gaps
// @returns fairValueGap ID
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)))
// @function get line style from string
// @param style line style
// @returns string
getStyle(string style) =>
switch style
SOLID => line.style_solid
DASHED => line.style_dashed
DOTTED => line.style_dotted
// @function draw MultiTimeFrame levels
// @param timeframe base timeframe
// @param sameTimeframe true if chart timeframe is same as base timeframe
// @param style line style
// @param levelColor line and text color
// @returns void
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))
// @function true if chart timeframe is higher than provided timeframe
// @param timeframe timeframe to check
// @returns bool
higherTimeframe(string timeframe) => timeframe.in_seconds() > timeframe.in_seconds(timeframe)
// @function update trailing swing points
// @returns int
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
// @function draw trailing swing points
// @returns void
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')
// @function draw a zone with a label and a box
// @param labelLevel price level for label
// @param labelIndex bar index for label
// @param top top price level for box
// @param bottom bottom price level for box
// @param tag text to display
// @param zoneColor base color
// @param style label style
// @returns void
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)
//---------------------------------------------------------------------------------------------------------------------}
//MUTABLE VARIABLES & EXECUTION
//---------------------------------------------------------------------------------------------------------------------{
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)
//---------------------------------------------------------------------------------------------------------------------}
//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')
//---------------------------------------------------------------------------------------------------------------------}
VWAP + EMA + ORB with Alerts and LabelsDescription:
This all-in-one indicator combines the Volume Weighted Average Price (VWAP) and Exponential Moving Average (EMA), along with advanced alert functionality and optional smoothing options. Designed to cater to traders of all levels, this tool is ideal for tracking trendlines, price interactions with key levels, and volatility management in dynamic markets.
Key Features:
1. VWAP (Volume Weighted Average Price):
• Real-Time Alerts:
• Alerts when the price crosses above, crosses below, or touches the VWAP line.
• Visual Markers:
• Green triangle: Price crossed above VWAP.
• Red triangle: Price crossed below VWAP.
• Blue circle: Price touched VWAP.
• Fully customizable with adjustable inputs for the anchor period, source price, and offset.
2. EMA (Exponential Moving Average):
• Adjustable EMA settings, including length, source, and offset.
• Seamlessly integrated into the same chart as VWAP for simultaneous analysis of trend strength and momentum.
3. Optional Smoothing for EMA:
• Add additional smoothing to the EMA using one of the following moving average types:
• Simple Moving Average (SMA)
• EMA
• Weighted Moving Average (WMA)
• Smoothed Moving Average (SMMA/RMA)
• Volume Weighted Moving Average (VWMA)
• Optional Bollinger Bands for EMA-based smoothing, with adjustable standard deviation multipliers and background fill.
Why Use This Indicator?
1. Actionable Alerts: Stay informed with real-time notifications when price interacts with VWAP—ideal for scalping, intraday trading, or trend-following strategies.
2. Multi-Purpose: Combine VWAP’s volume-weighted trend analysis with EMA’s momentum tracking to identify key support, resistance, and breakout levels.
3. Customization: Adapt the indicator to suit your unique trading style by customizing VWAP’s anchor settings or EMA’s smoothing and Bollinger Bands parameters.
How to Use:
1. Add the indicator to your TradingView chart.
2. Set up custom alerts for VWAP events using the “Alerts” tab:
• “Price Crossed Above VWAP”
• “Price Crossed Below VWAP”
• “Price Touched VWAP”
3. Adjust EMA length and smoothing settings to match your strategy.
4. Enable Bollinger Bands to visualize price volatility around the EMA.
4. ORB:
• Automatically plots the opening range high and low for a given session time.
• Adjust the session start and total time for flexibility.
• Highlights ORB levels to identify breakout opportunities.
This indicator is perfect for traders looking for a comprehensive tool to monitor key price levels, trends, and volatility. Whether you’re a scalper, day trader, or swing trader, the VWAP + EMA Indicator empowers you to make informed trading decisions with confidence!
Estrategia Combinada: EMA, RSI y Bollinger BandsCálculo de indicadores:
EMA (10 y 50): Para identificar la tendencia.
RSI (14): Para confirmar fuerza de la tendencia (>50 es alcista).
Bollinger Bands (20, 2): Para medir volatilidad y puntos de ruptura.
Condiciones de señales:
Compra:
EMA 10 cruza por encima de EMA 50.
RSI > 50 (tendencia alcista).
Precio rompe la banda superior de Bollinger.
Venta:
EMA 10 cruza por debajo de EMA 50.
RSI < 50 (tendencia bajista).
Precio rompe la banda inferior de Bollinger.
Visualización:
Las señales de compra y venta aparecen como flechas en el gráfico.
Se colorea el fondo del gráfico para resaltar las señales.
Relative Strength Index (Anpi)Relative Strength Index (modernized)
Nothing special - just a little modernized the indicator
Improved Swing High/Low Buy/Sell Signals-royalif any candle break and close the signal candle take entry.. To get a better signal,adjust the value for your need.
RSI-CCI-Stochastic Hybrid (0-100 Scale) with Timeframe//@version=5
indicator("RSI-CCI-Stochastic Hybrid (0-100 Scale) with Timeframe", overlay=false)
// Zaman çerçevesi seçimi
tf = input.timeframe("D", title="Timeframe") // Varsayılan günlük
// RSI hesaplama (seçili zaman çerçevesinde)
rsiPeriod = input.int(14, title="RSI Period")
rsi = request.security(syminfo.tickerid, tf, ta.rsi(close, rsiPeriod))
// CCI hesaplama (seçili zaman çerçevesinde)
cciPeriod = input.int(20, title="CCI Period")
cci = request.security(syminfo.tickerid, tf, ta.cci(close, cciPeriod))
// Stokastik hesaplama (seçili zaman çerçevesinde)
stochKPeriod = input.int(14, title="Stochastic K Period")
stochK = request.security(syminfo.tickerid, tf, ta.stoch(close, high, low, stochKPeriod))
// clamp fonksiyonunu manuel olarak tanımlama
clamp(value, minValue, maxValue) =>
value < minValue ? minValue : value > maxValue ? maxValue : value
// Normalize işlemi ve ölçekleme
normalizedRsi = rsi // RSI zaten 0-100 arasında
scaledCci = clamp((cci + 100) / 2, 0, 100) // CCI'yi 0-100 ölçeğine getir ve sınırla
normalizedStoch = stochK // Stokastik K zaten 0-100 arasında
// Hibrit indikatör hesaplama
hybrid = (normalizedRsi + scaledCci + normalizedStoch) / 3
// Hibrit indikatör çizimi
plot(hybrid, "RSI-CCI-Stochastic Hybrid", color=color.purple, linewidth=2)
hline(70, "Aşırı Alım", color=color.red, linestyle=hline.style_dashed)
hline(30, "Aşırı Satım", color=color.green, linestyle=hline.style_dashed)
hline(50, "Orta Seviye", color=color.gray)
// Sinyal koşulları
buySignal = ta.crossover(hybrid, 30)
sellSignal = ta.crossunder(hybrid, 70)
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
Swing High/Low Buy/Sell Signals-royalif any candle break and close the signal candle take the entry.
buy sell money king (Talha)Fast EMA (9) এবং Slow EMA (21) এর উপর ভিত্তি করে সিগন্যাল তৈরি হবে।
Buy Signal: যখন Fast EMA, Slow EMA কে উপরে ক্রস করবে, তখন Buy Signal দেখাবে।
Sell Signal: যখন Fast EMA, Slow EMA কে নিচে ক্রস করবে, তখন Sell Signal দেখাবে।
EMA প্লট করা হবে চার্টে, এবং সিগন্যাল দেখা যাবে যদি উপরের শর্ত পূর্ণ হয়।
Reverse Level & Volume (Flat Line)Reverse Level Seviyeleri
1dk
1s
1g
Psikolojik destek seviyelerini stop-loss kayıplarını aza indirgemek adına ..küçük çaplı kontrol.
Moving Average Crossover StrategyMoving Average Crossover Strategy
This strategy involves using two moving averages (MAs) with different timeframes to identify potential entry and exit points.
How it works:
Choose your moving averages:
Short-term MA: A faster-moving MA, such as a 9-period Exponential Moving Average (EMA)
Long-term MA: A slower-moving MA, such as a 21-period EMA
Identify the trend:
Bullish trend: When the short-term MA crosses above the long-term MA.
Bearish trend: When the short-term MA crosses below the long-term MA.
Enter the trade:
Buy signal: When the short-term MA crosses above the long-term MA, it's a potential buy signal.
Sell signal: When the short-term MA crosses below the long-term MA, it's a potential sell signal.
Set stop-loss and take-profit orders:
Stop-loss: Place your stop-loss order below a recent swing low (for buy trades) or above a recent swing high (for sell trades).
Take-profit: Set your take-profit order at a predetermined price target or based on a specific profit goal.
Additional Tips:
Timeframe: Use a 1-hour or 4-hour timeframe for better trend identification.
Risk management: Always use a stop-loss order to limit potential losses.
Fundamental analysis: Consider economic news and geopolitical events that may impact gold prices.
Backtesting: Test your strategy on historical data to evaluate its performance.
Practice: Practice your strategy on a demo account before risking real money.
Remember:
No strategy is foolproof. Intraday trading involves significant risk, and it's crucial to manage your risk effectively.
Continuous learning: Stay updated on market trends, economic indicators, and technical analysis techniques.
Emotional control: Avoid impulsive decisions based on fear or greed. Stick to your trading plan.
By combining technical analysis with fundamental knowledge and disciplined risk management, you can increase your chances of success in intraday XAUUSD trading