K線虛擬幣// This source code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © dear.simpson
//@version=5
indicator("月季線視覺操盤", "", true)
// Getting inputs
length = input(5, "操盤線週期")
// Calculating
ma = ta.sma(close, length)
spread = close-ma
// Plotcandle
plotcandle(open, high, low, close, title='操盤K線', editable = false , display =display.pane+display.price_scale , color = (spread>=0 ? #ef5350 : #26a69a) , bordercolor= (spread>=0 ? #ef5350 : #26a69a) , wickcolor = #5d606b)
// Getting inputs
maPeriods1 = input( 5 , "MA 1" , group="移動平均線")
maPeriods2 = input(20 , "MA 2" , group="移動平均線")
maPeriods3 = input(60 , "MA 3" , group="移動平均線")
line0 = ta.sma(close, 2)
line1 = ta.sma(close, maPeriods1)
line2 = ta.sma(close, maPeriods2)
line3 = ta.sma(close, maPeriods3)
// Plot Moving Average Line
p0PlotID = plot(line0 ,"MA 0" , color.new(color.black ,100), display = display.none , editable = false)
p1PlotID = plot(line1 ,"MA 1" , color.new(#787b86, 50), display = display.pane+display.price_scale )
p2PlotID = plot(line2 ,"MA 2" , color.new(#787b86, 0), display = display.pane+display.price_scale )
p3PlotID = plot(line3 ,"MA 3" , color.new(color.blue , 30), display = display.pane+display.price_scale )
// Plot Zone Color
fill(p0PlotID, p2PlotID, close > line2 ? color.new(#ef5350, 70) : color.new(#26a69a, 90), '高/低於月線區域顏色')
fill(p0PlotID, p3PlotID, close > line3 ? color.new(#ef5350, 70) : color.new(#26a69a, 90), '高/低於季線區域顏色' , display = display.none )
المؤشرات والاستراتيجيات
[GrandAlgo] Moving Averages Cross LevelsMoving Averages Cross Levels
Many traders watch for moving average crossovers – such as the golden cross (50 MA crossing above 200 MA) or death cross – as signals of changing trends. However, once a crossover happens, the exact price level where it occurred often fades from view, even though that level can be an important reference point. Moving Averages Cross Levels is an indicator that keeps those crossover price levels visible on your chart, helping you track where momentum shifts occurred and how price behaves relative to those key levels.
This tool plots horizontal line segments at the price where each pair of selected moving averages crossed within a recent window of bars. Each level is labeled with the moving average lengths (for example, “21×50” for a 21/50 MA cross) and is color-coded – green for bullish crossovers (short-term MA crossing above long-term MA) and red for bearish crossunders (short-term crossing below). By visualizing these crossover levels, you can quickly identify past trend change points and use them as potential support/resistance or decision levels in your trading. Importantly, this indicator is non-repainting – once a crossover level is plotted, it remains fixed at the historical price where the cross occurred, allowing you to continually monitor that level going forward. (As with any moving average-based analysis, crossover signals are lagging, so use these levels in conjunction with other tools for confirmation.)
Key Features:
✅ Multiple Moving Averages: Track up to 7 different MAs (e.g. 5, 8, 21, 50, 64, 83, 200 by default) simultaneously. You can enable/disable each MA and set its length, allowing flexible combinations of short-term and long-term averages.
✅ Selectable MA Type: Each average can be calculated as a Simple (SMA), Exponential (EMA), Volume-Weighted (VWMA), or Smoothed (RMA) moving average, giving you flexibility to match your preferred method.
✅ Auto Crossover Detection: The script automatically detects all crosses between any enabled MA pairs, so you don’t have to specify pairs manually. Whether it’s a fast cross (5×8) or a long-term cross (50×200), every crossover within the lookback period will be identified and marked.
✅ Horizontal Level Markers: For each detected crossover, a horizontal line segment is drawn at the exact price where the crossover occurred. This makes it easy to glance at your chart and see precisely where two moving averages intersected in the recent past.
✅ Labeled and Color-Coded: Each crossover line is labeled with the two MA lengths that crossed (e.g. “50×200”) for clear identification. Colors indicate crossover direction – by default green for bullish (positive) crossovers and red for bearish (negative) crossovers – so you can tell at a glance which way the trend shifted. (You can customize these colors in the settings.)
✅ Adjustable Lookback: A “Crosses with X candles” input lets you control how far back the script looks for crossovers to plot. This prevents your chart from getting cluttered with too many old levels – for example, set X = 100 to show crossovers from roughly the last 100 bars. Older crossover lines beyond this lookback window will automatically clear off the chart.
✅ Optional MA Plots: You can toggle the display of each moving average line on the chart. This means you can either view just the crossover levels alone for a clean look, or also overlay the MA curves themselves for additional context (to see how price and MAs were moving around the crossover).
✅ No Repainting or Hindsight Bias: Once a crossover level is plotted, it stays at that fixed price. The indicator doesn’t move levels around after the fact – each line is a true historical event marker. This allows you to backtest visually: see how price acted after the crossover by observing if it retested or respected that level later.
How It Works:
1️⃣ Add to Chart & Configure – Simply add the indicator to your chart. In the settings, choose which moving averages you want to include and set their lengths. For example, you might enable 21, 50, 200 to focus on medium and long-term crosses (including the golden cross), or turn on shorter MAs like 5 and 8 for quick momentum shifts. Adjust the lookback (number of bars to scan for crosses) if needed.
2️⃣ Visualization – The script continuously checks the latest X bars for any points where one MA crossed above or below another. Whenever a crossover is found, it calculates the exact price level at which the two moving averages intersected. On the last bar of your chart, it will draw a horizontal line segment extending from the crossover bar to the current bar at that price level, and place a label to the right of the line with the MA lengths. Green lines/labels signify bullish crossovers (where the first MA crossed above the second), and red lines indicate bearish crossunders.
3️⃣ On Your Chart – You will see these labeled levels aligned with the price scale. For example, if a 50 MA crossed above a 200 MA (bullish) 50 bars ago at price $100, there will be a green “50×200” line at $100 extending to the present, showing you exactly where that golden cross happened. You might notice price pulling back near that level and bouncing, or if price falls back through it, it could signal a failed crossover. The indicator updates in real-time: if a new crossover happens on the latest bar, a new line and label will instantly appear, and if any old cross moves out of the lookback range, its line is removed to keep the chart focused.
4️⃣ Customization – You can fine-tune the appearance: toggle any MA’s visibility, change line colors or label styles, and modify the lookback length to suit different timeframes. For instance, on a 1-hour chart you might use a lookback of 500 bars to see a few weeks of cross history, whereas on a daily chart 100 bars (about 4–5 months) may be sufficient. Adjust these settings based on how many crossover levels you find useful to display.
Ideal for Traders Who:
Use MA Crossovers in Strategy: If your strategy involves moving average crossovers (for trend confirmation or entry/exit signals), this indicator provides an extra layer of insight by keeping the price of those crossover events in sight. For example, trend-followers can watch if price stays above a bullish crossover level as a sign of trend strength, or falls below it as a sign of weakness.
Identify Support/Resistance from MA Events: Crossover levels often coincide with pivot points in market sentiment. A crossover can act like a regime change – the level where it happened may turn into support or resistance. This tool helps you mark those potential S/R levels automatically. Rather than manually noting where a golden cross occurred, you’ll have it highlighted, which can be useful for setting stop-losses (e.g. below the crossover price in a bullish scenario) or profit targets.
Track Multiple Averages at Once: Instead of focusing on just one pair of moving averages, you might be interested in the interaction of several (short, medium, and long-term trends). This indicator caters to that by plotting all relevant crossovers among your chosen MAs. It’s great for multi-timeframe thinkers as well – e.g. you could apply it on a higher timeframe chart to mark major cross levels, then drill down to lower timeframes knowing those key prices.
Value Clean Visualization: There are no flashing signals or arrows – just simple lines and labels that enhance your chart’s storytelling. It’s ideal if you prefer to make trading decisions based on understanding price interaction with technical levels rather than following automatic trade calls. Moving Averages Cross Levels gives you information to act on, without imposing any bias or strategy – you interpret the crossover levels in the context of your own trading system.
5m Exit AlertsThese can help a lot with Daytrading if you don't have a price target in mind when there's no clear resistance / support nearby, and you don't trust the market enough to hold it as a swing trade.
Keep in mind that its main purpose is to give you a "warning" that it might be good to look at your screen, instead of guaranteeing you "now is the best time to exit". You won't reach high winning stats by blindly following this alert.
"A Exit LONG":
(I'm using letters instead of numbers for all Exit alerts to make sure I don't accidentally confuse Enter and Exit alerts).
There are 4 conditions that might trigger it. The reasons show up in the exit alert message (unfortunately only as a number, since alert messages can't have "dynamic text" in TradingView), and can also be displayed as symbols in the chart (see image above - make sure to enable "Show Signals" in the indicator settings first though).
Here are the conditions sorted from best to worst:
Technical reversal: Bearish Hammer candle with Volume > 2 * avg volume (of last 30 candles), when 5m candle closed. Reversal very likely. This is usually the best time to take your gains for the rest of the day.
EMA 3/8 cross: standard 5m EMA 3/8 cross, indicating a trend reversal, or at least a pullback. Can also be helpful to detect double tops / double bottoms.
Trailing Stop Loss: Crossed below 30m EMA 8, 5m candle closed. This is a "fallback" alert in case EMA 3 was already below EMA 8 before you set up the alert. It's not unlikely that the stock might go further down to VWAP, so depending on the chart and market this might be a good opportunity to save the gains you have left.
"Final" Stop Loss: Crossed below VWAP. Usually not a good sign. If you entered around VWAP your losses shouldn't be big yet, but if you plan on holding the stock the Daily chart and market outlook should better be quite convincing, and you wouldn't have needed to use this alert in the first place.
Keep in mind these work of course best if you picked a "good" stock: clear movement, tidy price action, high volume. Otherwise alerts are more likely to be triggered redundantly.
Always consider how the market and stock looks like, then decide whether to exit or not! Usually it makes sense to wait a bit to see f. e. whether the stock bounces off the 30m EMA 8, and it's just a pullback.
"B Enter SHORT":
Similar, but for shorts...
"C 1m Scalp LONG" + "D 1m Scalp SHORT":
Simple Scalping alert for EMA 3/8 cross on a 1m chart - but without needing to use a 1m chart to set it up!
Unfortunately it's not as accurate as manually setting this alert up on a 1m chart. It might be an advantage though that it sometimes is triggered 1-2 min later, since this means there are less redundant triggerings.
It can be useful esp. on high momentum trades, but I honestly haven't used it in a looong while.
"X Candle Close":
same as in 5m Entry indicator: triggered when 5m candle is confirmed
"Z Trend Change: UP" + "Z Trend Change: DOWN":
This one is meant to be used only on SPY: It alerts you when SPY is changing its trending direction, which might mean entering or closing existing trades.
I have therefore set it up to never end (by setting it to "Once Per Bar Close" in the alert settings).
It's based on DMI positive or negative being > 25. I had it based on VWAP at the beginning, but there were days where it was triggered every 5 minutes...
More infos: www.reddit.com
Distance from 50 SMA in ADR TermsIndicator produces a multiple of ADR% from the 50-day simple moving average to determine is a stock or etf is extended.
gfg//@version=5
indicator("Lux Gainz Style Algo", overlay=true)
// User Inputs
fastLen = input.int(12, "Fast MA Length", minval=1)
slowLen = input.int(26, "Slow MA Length", minval=1)
rsiLen = input.int(14, "RSI Length", minval=1)
rsiOverbought = input.float(70, "RSI Overbought Level")
rsiOversold = input.float(30, "RSI Oversold Level")
sensitivity = input.float(1.5, "Signal Sensitivity", minval=0.1, step=0.1)
// Moving Averages for Trend
fastMA = ta.ema(close, fastLen)
slowMA = ta.ema(close, slowLen)
// RSI for Momentum
rsi = ta.rsi(close, rsiLen)
// Trend Conditions
bullTrend = fastMA > slowMA
bearTrend = fastMA < slowMA
// Confirmation Signals
longSignal = ta.crossover(fastMA, slowMA) and rsi < rsiOversold * sensitivity
shortSignal = ta.crossunder(fastMA, slowMA) and rsi > rsiOverbought / sensitivity
// Plot Moving Averages
plot(fastMA, color=color.new(color.green, 0), title="Fast EMA")
plot(slowMA, color=color.new(color.red, 0), title="Slow EMA")
// Candle Coloring for Trend Strength
barcolor(bullTrend ? color.new(color.green, 70) : bearTrend ? color.new(color.red, 70) : color.gray)
// Plot Buy/Sell Signals
plotshape(longSignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, size=size.small)
plotshape(shortSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, size=size.small)
// Alerts
alertcondition(longSignal, title="Long Entry", message="Lux Gainz Algo: Long Entry Signal")
alertcondition(shortSignal, title="Short Entry", message="Lux Gainz Algo: Short Entry Signal")
Molina Prob-Score + FVG + S/R (v1.2)it computes a weighted bull/bear score (0–100%), highlights ICT-style FVGs, marks pivot S/R, and gives simple entry flags. tune the weights to your style.
Student wyckoff rs symbol/moexRelative Strength Indicator
Student wyckoff rs symbol/market v.2
Description
The Relative Strength (RS) Indicator compares the price performance of the current financial instrument (e.g., a stock) against another instrument (e.g., an index or another stock). It is calculated by dividing the closing price of the first instrument by the closing price of the second, then multiplying by 100. This provides a percentage ratio that shows how one instrument outperforms or underperforms another. The indicator helps traders identify strong or weak assets, spot market leaders, or evaluate an asset’s performance relative to a benchmark.
Key Features
Relative Strength Calculation: Divides the closing price of the current instrument by the closing price of the second instrument and multiplies by 100 to express the ratio as a percentage.
Simple Moving Average (SMA): Applies a customizable Simple Moving Average (default period: 14) to smooth the data and highlight trends.
Visualization: Displays the Relative Strength as a blue line, the SMA as an orange line, and colors bars (blue for rising, red for falling) to indicate changes in relative strength.
Flexibility: Allows users to select the second instrument via an input field and adjust the SMA period.
Applications
Market Comparison: Assess whether a stock is outperforming an index (e.g., S&P 500 or MOEX) to identify strong assets for investment.
Sector Analysis: Compare stocks within a sector or against a sector ETF to pinpoint leaders.
Trend Analysis: Use the rise or fall of the RS line and its SMA to gauge the strength of an asset’s trend relative to another instrument.
Trade Timing: Bar coloring helps quickly identify changes in relative strength, aiding short-term trading decisions.
Interpretation
Rising RS: Indicates the first instrument is outperforming the second (e.g., a stock growing faster than an index).
Falling RS: Suggests the first instrument is underperforming.
SMA as a Trend Filter: If the RS line is above the SMA, it may signal strengthening performance; if below, weakening performance.
Settings
Instrument 2: Ticker of the second instrument (default: QQQ).
SMA Period: Period for the Simple Moving Average (default: 14).
Notes
The indicator works on any timeframe but requires accurate ticker input for the second instrument.
Ensure data for both instruments is available on the selected timeframe for precise analysis.
B@dshah Indicator🚀 Advanced Multi-Indicator Trading System
A comprehensive trading indicator that combines multiple technical analysis tools for high-probability signal generation:
📊 CORE FEATURES:
- EMA Trend Analysis (Fast/Slow crossovers)
- RSI Momentum Detection
- MACD Signal Confirmation
- Bollinger Bands (Squeeze & Mean Reversion)
- Fibonacci Retracement Levels
- Volume & ATR Filtering
- Multi-Confluence Scoring System (0-10 scale)
🎯 SIGNAL QUALITY:
- Non-repainting signals (confirmed at bar close)
- Minimum 60% strength threshold for trades
- Dynamic TP/SL based on market structure
- Real-time win rate tracking
- Signal strength percentage display
⚙️ UNIQUE FEATURES:
- BB Squeeze detection for volatility breakouts
- Fibonacci level confluence analysis
- Smart position sizing recommendations
- Visual TP/SL lines with outcome tracking
- Comprehensive statistics table
🔔 ALERTS INCLUDED:
- Buy/Sell signals with strength ratings
- TP/SL hit notifications
- BB squeeze/expansion alerts
- Fibonacci level touches
Best used on 1H+ timeframes for optimal results.
Perfect for swing trading and position entries.
VXN EMA BandThis indicator is based on other open source scripts. It's designed for Nasdaq futures (NQ or MNQ). It plots an EMA Band consisting of three exponential moving averages (EMAs) with a period of 96, each using a different price source: low, (high + low + close)/3, and high. The EMAs are colored to indicate their source: darkest turquoise for the low-based EMA, medium turquoise for the (high + low + close)/3-based EMA, and lightest turquoise for the high-based EMA. This visual distinction helps traders identify price trends relative to these key levels.
The indicator also includes background coloring based on the VXN index direction (using CBOE:VXN) to highlight bullish or bearish market conditions. A bullish trend is suggested when the EMAs are aligned (EMA-High above EMA-Mid above EMA-Low) and the VXN EMA is below its SMA, indicated by a green background. A bearish trend is suggested when the EMAs are aligned (EMA-High below EMA-Mid below EMA-Low) and the VXN EMA is above its SMA, indicated by a red background.
Market Pulse Dip RadarThis indicator is designed to help traders spot meaningful dips in price and then evaluate whether those dips are worth trading or not. It doesn’t just mark a dip; it also helps with risk management, trade planning, and filtering out weak signals.
Here’s how it works:
First, it looks at the recent high price and checks how much the market has dropped from that high. If the drop is larger than the minimum percentage you set, it marks it as a potential dip.
Next, it checks the trend structure by using two moving averages (a fast one and a slow one). If the fast average is below the slow average, it means the market is in a weaker structure, and that dip is considered more valid.
On top of that, you can enable a multi-timeframe filter. For example, if you are trading on the 15-minute chart, you can ask the indicator to confirm that the 1-hour trend is also supportive before showing you a dip. This helps avoid trading against the bigger trend.
Risk management is built in. The indicator automatically suggests a stop-loss by combining volatility (ATR) and recent swing lows. It then draws three profit target levels (1x risk, 2x risk, and 3x risk). This makes it easier to plan where to exit if the trade works.
A key part of this tool is the confidence score. Each dip signal is rated from 0 to 100. The score depends on how deep the dip is, how far apart the moving averages are, how healthy volatility is, and whether the higher timeframe supports the trade. The score is then labeled as High, Medium, Low, or Wait. This helps traders focus only on the stronger setups.
On the chart, dip signals are marked with a diamond shape under the bars. The color of the diamond tells you if it’s high, medium, or low quality. When a signal appears, the indicator also plots horizontal lines for the entry, stop, and targets.
To make it easier to read, there is also a dashboard box that shows the current score, quality, dip percentage, and suggested stop-loss. This means you don’t have to calculate or check different things yourself – everything is visible in one place.
Finally, it comes with alerts. You can set alerts for when a dip signal happens, or when it’s medium or high confidence. This way, you don’t need to stare at charts all day; TradingView can notify you.
So in short, this tool:
• Finds dips based on your rules.
• Filters them using structure, volatility, and higher timeframe trend.
• Suggests stop-loss and profit targets.
• Rates each dip with a confidence score.
• Shows all this info in a clean dashboard and alerts you when it happens.
👉 Do you want me to now explain how a trader would actually use it in practice (step by step, from signal to trade)?
1D Enter AlertsThis is only a remaining of an experiment. I had real swing enter alerts, but it just made more sense to use classic TradingView alerts for horizontal / trendline / SMA breaks.
(Btw you can set up a horizontal alert in TradingView just by hovering the mouse on the chart so it's at the price point you aim for, and pressing "Alt + A").
Once this horizontal alert triggered I would usually wait for confirmation of the move on the 5m. If it's f. e. a break of an SMA and I'm not convinced yet, I might wait until end of the day. For exactly that purpose the following alert comes in handy:
"X Candle Close":
Is triggered 15m before market close - good reminder to check a stock again to see whether a resistance / support break was valid - and the stock should be entered as a swing, or maybe whether it should be closed as a loss.
"Z Trend Change: UP" + "Z Trend Change: DOWN":
Same as on 5m Exit Alert: meant to be only applied on SPY, and to have it set up to never end!
Criteria:
SPY broke through daily EMA 8 or daily SMA today, indicating an important short-term change on the daily chart.
Is triggered 15m before market close
More infos: www.reddit.com
MACD Aspray Hybrid Bars (teal/red) = raw momentum (Aspray Histogram).
Teal line = smooth curve of the histogram (Aspray Line).
Orange line = 9-EMA of that line (new signal).
Zero line for reference.
Dani u nedelji + midnight open @mladja123This indicator breaks the weekly timeframe into cycles and marks the midnight open for each day. It helps traders visualize weekly structure, identify key daily openings, and track market rhythm within the week. Perfect for analyzing trend patterns, swing setups, and session-based strategies.
20W EMA & SMA (no minute-level timeframe)You can check the 20-week EMA and SMA across various timeframes, from 1 hour to 1 week. Minute-level timeframes are not available due to data limitations.
Stock Health - 5mWarns if you are about to trade before 45 min passed since market open.
Good reminder if you are impatient / have ADHD...
Meant to be used on a 5m chart.
More infos: www.reddit.com
RSI Cross Alerts with Vertical Lines (9:30 AM - 2:45 PM)RSI Cross Alerts - Indicates Vertical Lines on previous times the RSI Indicator Crosses Overbought or Oversold parameters set by user.
Balance & Reversal Indicator [SYNC & TRADE]ndicator Description: "Balance & Reversal Indicator "
Purpose of the Indicator
The "Balance & Reversal Indicator " indicator is designed for analyzing market activity in cryptocurrency and other financial markets. It assists traders in identifying potential trend reversal points, detecting market equilibrium zones, and evaluating the balance between buying and selling volumes. The indicator is suitable for both short-term and long-term trading, offering flexible settings to adapt to various trading styles and timeframes.
What Does the Indicator Provide?
Volume Analysis: Calculates buy and sell volumes, along with the Long/Short Ratio, to assess current market dynamics.
Reversal Signals: Generates signals for potential Long (buy) and Short (sell) reversals based on customizable levels, ranging from "Potential Reversal" to "Maximum Signal."
Equilibrium Zones: Identifies zones where the market is in balance, useful for recognizing neutral market conditions.
Flexible Calculation Methods: Supports four volume calculation methods (Tick Based, Candle Based, Delta Based, Price Movement) to suit different trading approaches.
Auto and Manual Sensitivity: Offers "Auto" mode for timeframe-based sensitivity or "Manual" mode for custom sensitivity settings.
Data Visualization: Displays key metrics (total volume, buy/sell volumes, ratio, and percentages) via a comparison table and on-chart labels for easy interpretation.
Volume Unit Customization: Allows volume display in USDT, Active contracts, or other units for enhanced flexibility.
How to Use the Indicator?
Adding to the Chart:
Find "Balance & Reversal Indicator " in the TradingView library and add it to your chart.
The indicator appears in a separate panel below the chart, keeping price data unobstructed (overlay=false).
Configuring Settings:
Calculation Method: Choose one of four volume analysis methods:
Tick Based: Analyzes price movement within a candle.
Candle Based: Evaluates candle direction (up/down).
Delta Based: Considers the difference between open and close prices.
Price Movement: Assesses movement strength based on candle body and wick sizes.
Sensitivity Mode:
In "Auto" mode, sensitivity adjusts automatically based on the timeframe (e.g., higher for minute charts, lower for daily charts).
In "Manual" mode, set sensitivity manually (from 0.1 to 1.0).
Reversal Levels (Long/Short): Configure levels for Long and Short signals with associated ranges. For example, Long Reversal Level 1 = -30% with a 5% range triggers signals between -35% and -30%.
Equilibrium Levels: Set levels for neutral market zones (e.g., ±7% for Equilibrium Level 1).
Messages: Customize signal messages to align with your trading style.
Analysis Period (Start/End Time): Define the time range for volume calculations.
Volume Unit: Select USDT, Active (active contracts), or Contracts for volume display.
Interpreting Signals:
Comparison Table (Top-Right Corner): Displays analysis results for all four calculation methods (Long/Short Ratio, Buy %, Sell %, Signal), enabling method comparison.
On-Chart Labels: Show total volume, buy/sell volumes, Long/Short Ratio, buy/sell percentages, current method, and sensitivity.
Color-Coded Signals:
Green: Potential Long (buy) opportunity.
Red: Potential Short (sell) opportunity.
Yellow: Market in equilibrium zone.
Chart Levels: Horizontal lines indicate reversal levels (green for Long, red for Short, yellow for equilibrium) with a transparency gradient for clarity.
Applying in Trading:
Use reversal signals to enter positions. For example, a "Maximum Long Signal" may indicate a strong buying opportunity.
Equilibrium zones help avoid trading during low-volatility periods.
Compare methods in the table to confirm signals.
Adjust settings to match your timeframe and asset. For instance, use "Tick Based" with high sensitivity for scalping on minute charts or "Price Movement" with low sensitivity for long-term trading.
Recommendations:
Test the indicator on historical data to optimize settings for your asset and strategy.
Combine indicator signals with other technical analysis tools (e.g., support/resistance levels or trend indicators) for greater accuracy.
Regularly update the time range (Start/End Time) to ensure relevant data analysis.
Who Is This Indicator For?
"Balance & Reversal Indicator " is ideal for traders who:
Trade on cryptocurrency exchanges and want to analyze trading volumes.
Seek reversal points for entering Long or Short positions.
Prefer customizable settings and the ability to compare different analysis methods.
Operate across various timeframes, from minutes to months.
Note: This indicator is not financial advice. Always conduct your own analysis and consider risks before making trading decisions.
© TradingStrategyCourses, 2025. All rights reserved.
Up/Down Days, Volume & Price Change SummaryThis scripts helps you to see the up days and down days over the look back period defined by you .
One of the most important concept in judging the strength of the stock.
Use it
How to avoid repainting when using security() - viewing optionsHow to avoid repainting when using the security() - Edited PineCoders FAQ with more viewing options
This may be of value to a limited few, but I've introduced a set of Boolean inputs to PineCoders' original script because viewing all the various security lines at once was giving me a brain cramp. I wanted to study each behavior one-by-one. This version (also updated to PineScript v6) will allow users to selectively display each, or any combination, of the security plots. Each plot was updated to include a condition tied to its corresponding input, ensuring it only appears when explicitly enabled. The label-rendering logic only displays when its related plot is active; however, I've also added an input that allows you to remove all labels, enabling you to see the price action more clearly (the labels can sometimes obscure what you want to see). Run this script in replay mode to view the nuanced differences between the 12 methods while selecting/deselecting the desired plots (selecting all at once can be overcrowded and confusing).
All thanks and credit to PineCoders--these changes I made only provide more control over what’s shown on the chart without altering the core structure or intent of the original script. It helped me, so I thought I should share it. If I inadvertently messed something up, please let me know, and I will try to fix it.
I set the defaults for viewing monthly security functions on the daily timeframe. Only the first 2 security functions plot with the default settings, so change the settings as needed. Be sure to read the original notes and detailed explanations in the PineCoders posting "How to avoid repainting when using security() - PineCoders FAQ."
Bottom line, you should use one of the two functions: f_secureSecurity or f_security, depending on what you are trying to do. Hopefully, this script will make it a little easier for the visual learner to understand why (use replay mode or watch live price action on a lower timeframe).
HSM KILLZONE//@version=5
indicator('HSM KILLZONE', 'HSM KILLZONE', overlay=true, max_bars_back=500, explicit_plot_zorder=true)
import boitoki/AwesomeColor/4 as ac
import boitoki/Utilities/3 as util
///////////////
// Groups
///////////////
g0 = 'GENERAL'
g1_01 = '♯1 SESSION'
g1_02 = '♯2 SESSION'
g1_03 = '♯3 SESSION'
g1_04 = '♯4 SESSION'
g4 = 'BOX'
g6 = 'LABELS'
g5 = 'OPENING RANGE'
g7 = 'FIBONACCI LEVELS'
g8 = 'OPTIONS'
g11 = 'CANDLE'
g10 = 'Alerts visualized'
///////////////
// Defined
///////////////
max_bars = 500
option_yes = 'Yes'
option_no = '× No'
option_extend1 = 'Yes'
option_hide = '× Hide'
option_border_style1 = '────'
option_border_style2 = '- - - - - -'
option_border_style3 = '•••••••••'
option_chart_x = '× No'
option_chart_1 = 'Bar color'
option_chart_2 = 'Candles'
fmt_price = '{0,number,#.#####}'
fmt_pips = '{0,number,#.#}'
icon_separator = ' • '
color_none = color.new(color.black, 100)
color_text = color.new(color.white, 0)
///////////////
// Functions
///////////////
f_get_time_by_bar(bar_count) => timeframe.multiplier * bar_count * 60 * 1000
f_border_style (_style) =>
switch _style
option_border_style1 => line.style_solid
option_border_style2 => line.style_dashed
option_border_style3 => line.style_dotted
=> _style
f_get_period (_session, _start, _lookback) =>
result = math.max(_start, 1)
for i = result to _lookback
if na(_session ) and _session
result := i+1
break
result
f_get_label_position (_y, _side) =>
switch _y
'top' => _side == 'outside' ? label.style_label_lower_left : label.style_label_upper_left
'bottom' => _side == 'outside' ? label.style_label_upper_left : label.style_label_lower_left
f_get_started (_session) => na(_session ) and _session
f_get_ended (_session) => na(_session) and _session
f_message_limit_bars (_v) => '⚠️ This box\'s right position exceeds 500 bars(' + str.tostring(_v) + '). This box is not displayed correctly.'
f_set_line_x1 (_line, _x) =>
if (line.get_x1(_line) != _x)
line.set_x1(_line, _x)
f_set_line_x2 (_line, _x) =>
if (line.get_x2(_line) != _x)
line.set_x2(_line, _x)
f_set_box_right (_box, _x) =>
if box.get_right(_box) != _x
box.set_right(_box, _x)
///////////////
// Inputs
///////////////
// Timezone
i_tz = input.string('GMT-4', title='Timezone', options= , tooltip='e.g. \'America/New_York\', \'Asia/Tokyo\', \'GMT-4\', \'GMT+9\'...', group=g0)
i_history_period = input.int(10, 'History', minval=0, group=g0)
i_show = i_history_period > 0
i_lookback = 12 * 60
// Sessions
i_show_sess1 = input.bool(true, 'Session 1 ', group=g1_01, inline='session1_1') and i_show
i_sess1_label = input.string('New York AM', '', group=g1_01, inline='session1_1')
i_sess1_color = input.color(#0a0a0a, '', group=g1_01, inline='session1_1')
i_sess1_barcolor1 = input.color(#0a0a0a, '•', group=g1_01, inline='session1_1')
i_sess1_barcolor2 = input.color(#0a0a0a, '', group=g1_01, inline='session1_1')
i_sess1 = input.session('0700-1100', 'Time', group=g1_01)
i_sess1_extend = input.string(option_no, 'Extend', options= , group=g1_01)
i_sess1_fib = input.string(option_no, 'Fibonacci levels', group=g1_01, options= ) != option_no
i_sess1_op = input.string(option_no, 'Opening range', group=g1_01, options= ) != option_no and i_show
i_sess1_chart = input.string(option_chart_x, 'Bar', options= , group=g1_01)
i_sess1_barcolor = i_sess1_chart == option_chart_1
i_sess1_plotcandle = i_sess1_chart == option_chart_2
i_show_sess2 = input.bool(true, 'Session 2 ', group=g1_02, inline='session2_1') and i_show
i_sess2_label = input.string('New York PM', '', group=g1_02, inline='session2_1')
i_sess2_color = input.color(#0a0a0a, '', group=g1_02, inline='session2_1')
i_sess2_barcolor1 = input.color(#0a0a0a, '•', group=g1_02, inline='session2_1')
i_sess2_barcolor2 = input.color(#0a0a0a, '', group=g1_02, inline='session2_1')
i_sess2 = input.session('1300-1600', 'Time', group=g1_02)
i_sess2_extend = input.string(option_no, 'Extend', options= , group=g1_02)
i_sess2_fib = input.string(option_no, 'Fibonacci levels', group=g1_02, options= ) != option_no
i_sess2_op = input.string(option_no, 'Opening range', group=g1_02, options= ) != option_no and i_show
i_sess2_chart = input.string(option_chart_x, 'Bar', options= , group=g1_02)
i_sess2_barcolor = i_sess2_chart == option_chart_1
i_sess2_plotcandle = i_sess2_chart == option_chart_2
i_show_sess3 = input.bool(true, 'Session 3 ', group=g1_03, inline='session3_1') and i_show
i_sess3_label = input.string('Asian Sesh', '', group=g1_03, inline='session3_1')
i_sess3_color = input.color(#0a0a0a, '', group=g1_03, inline='session3_1')
i_sess3_barcolor1 = input.color(#0a0a0a, '•', group=g1_03, inline='session3_1')
i_sess3_barcolor2 = input.color(#0a0a0a, '', group=g1_03, inline='session3_1')
i_sess3 = input.session('2000-0000', 'Time', group=g1_03)
i_sess3_extend = input.string(option_no, 'Extend', options= , group=g1_03)
i_sess3_fib = input.string(option_no, 'Fibonacci levels', group=g1_03, options= ) != option_no
i_sess3_op = input.string(option_no, 'Opening range', group=g1_03, options= ) != option_no and i_show
i_sess3_chart = input.string(option_chart_x, 'Bar', options= , group=g1_03)
i_sess3_barcolor = i_sess3_chart == option_chart_1
i_sess3_plotcandle = i_sess3_chart == option_chart_2
i_show_sess4 = input.bool(true, 'Session 4 ', group=g1_04, inline='session4_1') and i_show
i_sess4_label = input.string('London', '', group=g1_04, inline='session4_1')
i_sess4_color = input.color(#0a0a0a, '', group=g1_04, inline='session4_1')
i_sess4_barcolor1 = input.color(#0a0a0a, '•', group=g1_04, inline='session4_1')
i_sess4_barcolor2 = input.color(#0a0a0a, '', group=g1_04, inline='session4_1')
i_sess4 = input.session('0200-0500', 'Time', group=g1_04)
i_sess4_extend = input.string(option_no, 'Extend', options= , group=g1_04)
i_sess4_fib = input.string(option_no, 'Fibonacci levels', group=g1_04, options= ) != option_no
i_sess4_op = input.string(option_no, 'Opening range', group=g1_04, options= ) != option_no and i_show
i_sess4_chart = input.string(option_chart_x, 'Bar', options= , group=g1_04)
i_sess4_barcolor = i_sess4_chart == option_chart_1
i_sess4_plotcandle = i_sess4_chart == option_chart_2
// Show & Styles
i_sess_box_style = input.string('Box', 'Style', options= , group=g4)
i_sess_border_style = f_border_style(input.string(option_border_style2, 'Line style', options= , group=g4))
i_sess_border_width = input.int(1, 'Thickness', minval=0, group=g4)
i_sess_bgopacity = input.int(94, 'Transp', minval=0, maxval=100, step=1, group=g4, tooltip='Setting the 100 is no background color')
// Candle
option_candle_body = 'OC'
option_candle_wick = 'OHLC'
i_candle = input.string(option_hide, 'Display', options= , group=g11)
i_candle_border_width = input.int(2, 'Thickness', minval=0, group=g11)
i_show_candle = (i_candle != option_hide) and (i_candle_border_width > 0)
i_show_candle_wick = i_candle == option_candle_wick
option_candle_color1 = 'Session\'s'
option_candle_color2 = 'Red • Green'
i_candle_color = input.string(option_candle_color2, 'Color ', options= , group=g11, inline='candle_color')
i_candle_color_g = input.color(#A6E22E, '', group=g11, inline='candle_color')
i_candle_color_r = input.color(#F92672, '', group=g11, inline='candle_color')
// Labels
i_label_show = input.bool(true, 'Labels', inline='label_show', group=g6) and i_show
i_label_size = str.lower(input.string('Small', '', options= , inline='label_show', group=g6))
i_label_position_y = str.lower(input.string('Top', '', options= , inline='label_show', group=g6))
i_label_position_s = str.lower(input.string('Outside', '', options= , inline='label_show', group=g6))
i_label_position = f_get_label_position(i_label_position_y, i_label_position_s)
i_label_format_name = input.bool(true, 'Name', inline='label_format', group=g6)
i_label_format_day = input.bool(false, 'Day', inline='label_format', group=g6)
i_label_format_price = input.bool(false, 'Price', inline='label_format', group=g6)
i_label_format_pips = input.bool(false, 'Pips', inline='label_format', group=g6)
// Fibonacci levels
i_f_linestyle = f_border_style(input.string(option_border_style1, title="Style", options= , group=g7))
i_f_linewidth = input.int(1, title="Thickness", minval=1, group=g7)
// Opening range
i_o_minutes = input.int(15, title='Periods (minutes)', minval=1, step=1, group=g5)
i_o_minutes := math.max(i_o_minutes, timeframe.multiplier + 1)
i_o_transp = input.int(88, title='Transp', minval=0, maxval=100, step=1, group=g5)
// Alerts
i_alert1_show = input.bool(false, 'Alerts - Sessions stard/end', group=g10)
i_alert2_show = input.bool(false, 'Alerts - Opening range breakouts', group=g10)
i_alert3_show = input.bool(false, 'Alerts - Price crossed session\'s High/Low after session closed', group=g10)
// ------------------------
// Drawing labels
// ------------------------
f_render_label (_show, _session, _is_started, _color, _top, _bottom, _text, _labels) =>
var label my_label = na
var int start_time = na
v_position_y = (i_label_position_y == 'top') ? _top : _bottom
v_label = array.new_string()
v_chg = _top - _bottom
if _is_started
start_time := time
if i_label_format_name and not na(_text)
array.push(v_label, _text)
if i_label_format_day
array.push(v_label, util.get_day(dayofweek(start_time, i_tz)))
if i_label_format_price
array.push(v_label, str.format(fmt_price, v_chg))
if i_label_format_pips
array.push(v_label, str.format(fmt_pips, util.toPips(v_chg)) + ' pips')
if _show
if _is_started
my_label := label.new(bar_index, v_position_y, array.join(v_label, icon_separator), textcolor=_color, color=color_none, size=i_label_size, style=i_label_position)
array.push(_labels, my_label)
util.clear_labels(_labels, i_history_period)
else if _session
label.set_y(my_label, v_position_y)
label.set_text(my_label, array.join(v_label, icon_separator))
// ------------------------
// Drawing Fibonacci levels
// ------------------------
f_render_fibonacci (_show, _session, _is_started, _x1, _x2, _color, _top, _bottom, _level, _width, _style, _is_extend, _lines) =>
var line my_line = na
if _show
y = (_top - _bottom) * _level + _bottom
if _is_started
my_line := line.new(_x1, y, _x2, y, width=_width, color=color.new(_color, 30), style=_style)
array.push(_lines, my_line)
if _is_extend
line.set_extend(my_line, extend.right)
else if _session
line.set_y1(my_line, y)
line.set_y2(my_line, y)
f_set_line_x2(my_line, _x2)
// ------------------------
// Drawing Opening range
// ------------------------
f_render_oprange (_show, _session, _is_started, _x1, _x2, _color, _max, _is_extend, _boxes) =>
var int start_time = na
var box my_box = na
top = ta.highest(high, _max)
bottom = ta.lowest(low, _max)
is_crossover = ta.crossover(close, box.get_top(my_box))
is_crossunder = ta.crossunder(close, box.get_bottom(my_box))
if _show
if _is_started
util.clear_boxes(_boxes, math.max(0, i_history_period - 1))
start_time := time
my_box := na
else if _session
time_op = start_time + (i_o_minutes * 60 * 1000)
time_op_delay = time_op - f_get_time_by_bar(1)
if time <= time_op and time > time_op_delay
my_box := box.new(_x1, top, _x2, bottom, border_width=0, bgcolor=color.new(_color, i_o_transp))
array.push(_boxes, my_box)
if _is_extend
box.set_extend(my_box, extend.right)
my_box
else
f_set_box_right(my_box, _x2)
if is_crossover
alert('Price crossed over the opening range', alert.freq_once_per_bar)
if i_alert2_show
label.new(bar_index, box.get_top(my_box), "×", color=color.blue, textcolor=ac.tradingview('blue'), style=label.style_none, size=size.large)
if is_crossunder
alert('Price crossed under the opening range', alert.freq_once_per_bar)
if i_alert2_show
label.new(bar_index, box.get_bottom(my_box), "×", color=color.red, textcolor=ac.tradingview('red'), style=label.style_none, size=size.large)
my_box
// ------------------------
// Drawing candle
// ------------------------
f_render_candle (_show, _session, _is_started, _is_ended, _color, _top, _bottom, _open, _x1, _x2, _boxes, _lines) =>
var box body = na
var line wick1 = na
var line wick2 = na
border_width = i_candle_border_width
cx = math.round(math.avg(_x2, _x1)) - math.round(border_width / 2)
body_color = i_candle_color == option_candle_color2 ? close > _open ? i_candle_color_g : i_candle_color_r : _color
if _show
if _is_started
body := box.new(_x1, _top, _x2, _bottom, body_color, border_width, line.style_solid, bgcolor=color.new(color.black, 100))
wick1 := i_show_candle_wick ? line.new(cx, _top, cx, _top, color=_color, width=border_width, style=line.style_solid) : na
wick2 := i_show_candle_wick ? line.new(cx, _bottom, cx, _bottom, color=_color, width=border_width, style=line.style_solid) : na
array.push(_boxes, body)
array.push(_lines, wick1)
array.push(_lines, wick2)
util.clear_boxes(_boxes, i_history_period)
util.clear_lines(_lines, i_history_period * 2)
else if _session
top = math.max(_open, close)
bottom = math.min(_open, close)
box.set_top(body, top)
box.set_bottom(body, bottom)
box.set_right(body, _x2)
box.set_border_color(body, body_color)
line.set_y1(wick1, _top)
line.set_y2(wick1, top)
f_set_line_x1(wick1, cx)
f_set_line_x2(wick1, cx)
line.set_color(wick1, body_color)
line.set_y1(wick2, _bottom)
line.set_y2(wick2, bottom)
f_set_line_x1(wick2, cx)
f_set_line_x2(wick2, cx)
line.set_color(wick2, body_color)
else if _is_ended
box.set_right(body, bar_index)
// ------------------------
// Rendering limit message
// ------------------------
f_render_limitmessage (_show, _session, _is_started, _is_ended, _x, _y, _rightbars) =>
var label my_note = na
if _show
if _is_started
if _rightbars > max_bars
my_note := label.new(_x, _y, f_message_limit_bars(_rightbars), style=label.style_label_upper_left, color=color.yellow, textalign=text.align_left, yloc=yloc.price)
else if _session
if _rightbars > max_bars
label.set_y(my_note, _y)
label.set_text(my_note, f_message_limit_bars(_rightbars))
else
label.delete(my_note)
else if _is_ended
label.delete(my_note)
true
// Rendering session
//
f_render_sessionrange (_show, _session, _is_started, _is_ended, _color, _top, _bottom, _x1, _x2, _is_extend, _lines) =>
var line above_line = na
var line below_line = na
if _show
if _is_started
above_line := line.new(_x1, _top, _x2, _top, width=i_sess_border_width, style=i_sess_border_style, color=_color)
below_line := line.new(_x1, _bottom, _x2, _bottom, width=i_sess_border_width, style=i_sess_border_style, color=_color)
linefill.new(above_line, below_line, color.new(_color, i_sess_bgopacity))
array.push(_lines, above_line)
array.push(_lines, below_line)
util.clear_lines(_lines, i_history_period * 2)
if _is_extend
line.set_extend(above_line, extend.right)
line.set_extend(below_line, extend.right)
else if _session
line.set_y1(above_line, _top)
line.set_y2(above_line, _top)
line.set_x2(above_line, _x2)
line.set_y1(below_line, _bottom)
line.set_y2(below_line, _bottom)
line.set_x2(below_line, _x2)
true
else if _is_ended
true
true
// ------------------------
// Rendering session box
// ------------------------
f_render_session (_show, _session, _is_started, _is_ended, _color, _top, _bottom, _x1, _x2, _is_extend, _boxes) =>
var box my_box = na
if _show
if _is_started
my_box := box.new(_x1, _top, _x2, _bottom, _color, i_sess_border_width, i_sess_border_style, bgcolor=color.new(_color, i_sess_bgopacity))
array.push(_boxes, my_box)
util.clear_boxes(_boxes, i_history_period)
if _is_extend
box.set_extend(my_box, extend.right)
else if _session
box.set_top(my_box, _top)
box.set_bottom(my_box, _bottom)
f_set_box_right(my_box, _x2)
else if _is_ended
box.set_right(my_box, bar_index)
my_box
// ------------------------
// Drawing market
// ------------------------
f_render_main (_show, _session, _is_started, _is_ended, _color, _top, _bottom) =>
var box my_box = na
var label my_note = na
var x1 = 0
var x2 = 0
var session_open = 0.0
var session_high = 0.0
var session_low = 0.0
x0_1 = ta.valuewhen(na(_session ) and _session, bar_index, 1)
x0_2 = ta.valuewhen(na(_session) and _session , bar_index, 0)
x0_d = math.abs(x0_2 - x0_1)
limit_bars = max_bars
rightbars = x0_d
if _show
if _is_started
x1 := bar_index
x2 := bar_index + (math.min(x0_d, limit_bars))
session_open := open
session_high := _top
session_low := _bottom
else if _session
true_x2 = x1 + x0_d
rightbars := true_x2 - bar_index
limit_bars := bar_index + max_bars
x2 := math.min(true_x2, limit_bars)
session_high := _top
session_low := _bottom
else if _is_ended
session_open := na
// ------------------------
// Drawing
// ------------------------
draw (_show, _session, _color, _label, _extend, _show_fib, _show_op, _lookback, _boxes_session, _lines_session, _boxes_candle_body, _lines_candle_wick, _boxes_op, _lines_fib, _labels) =>
max = f_get_period(_session, 1, _lookback)
top = ta.highest(high, max)
bottom = ta.lowest(low, max)
is_started = f_get_started(_session)
is_ended = f_get_ended(_session)
is_extend = _extend != option_no
= f_render_main(_show, _session, is_started, is_ended, _color, top, bottom)
if i_sess_box_style == 'Box'
f_render_session(_show, _session, is_started, is_ended, _color, top, bottom, x1, x2, is_extend, _boxes_session)
if i_sess_box_style == 'Sandwich'
f_render_sessionrange(_show, _session, is_started, is_ended, _color, top, bottom, x1, x2, is_extend, _lines_session)
if i_show_candle
f_render_candle(_show, _session, is_started, is_ended, _color, top, bottom, _open, x1, x2, _boxes_candle_body, _lines_candle_wick)
if i_label_show
f_render_label(_show, _session, is_started, _color, top, bottom, _label, _labels)
if _show_op
f_render_oprange(_show, _session, is_started, x1, x2, _color, max, is_extend, _boxes_op)
if _show_fib
f_render_fibonacci(_show, _session, is_started, x1, x2, _color, top, bottom, 0.500, 2, line.style_solid, is_extend, _lines_fib)
f_render_fibonacci(_show, _session, is_started, x1, x2, _color, top, bottom, 0.628, i_f_linewidth, i_f_linestyle, is_extend, _lines_fib)
f_render_fibonacci(_show, _session, is_started, x1, x2, _color, top, bottom, 0.382, i_f_linewidth, i_f_linestyle, is_extend, _lines_fib)
util.clear_lines(_lines_fib, i_history_period * 3)
f_render_limitmessage(_show, _session, is_started, is_ended, x1, bottom, _rightbars)
///////////////////
// Calculating
///////////////////
string tz = (i_tz == option_no or i_tz == '') ? na : i_tz
int sess1 = time(timeframe.period, i_sess1, tz)
int sess2 = time(timeframe.period, i_sess2, tz)
int sess3 = time(timeframe.period, i_sess3, tz)
int sess4 = time(timeframe.period, i_sess4, tz)
///////////////////
// Plotting
///////////////////
var sess1_box = array.new()
var sess2_box = array.new()
var sess3_box = array.new()
var sess4_box = array.new()
var sess1_line = array.new()
var sess2_line = array.new()
var sess3_line = array.new()
var sess4_line = array.new()
var sess1_op = array.new()
var sess2_op = array.new()
var sess3_op = array.new()
var sess4_op = array.new()
var sess1_fib = array.new()
var sess2_fib = array.new()
var sess3_fib = array.new()
var sess4_fib = array.new()
var sess1_candle_body = array.new()
var sess2_candle_body = array.new()
var sess3_candle_body = array.new()
var sess4_candle_body = array.new()
var sess1_candle_wick = array.new()
var sess2_candle_wick = array.new()
var sess3_candle_wick = array.new()
var sess4_candle_wick = array.new()
var sess1_labels = array.new()
var sess2_labels = array.new()
var sess3_labels = array.new()
var sess4_labels = array.new()
= draw(i_show_sess1, sess1, i_sess1_color, i_sess1_label, i_sess1_extend, i_sess1_fib, i_sess1_op, i_lookback, sess1_box, sess1_line, sess1_candle_body, sess1_candle_wick, sess1_op, sess1_fib, sess1_labels)
= draw(i_show_sess2, sess2, i_sess2_color, i_sess2_label, i_sess2_extend, i_sess2_fib, i_sess2_op, i_lookback, sess2_box, sess2_line, sess2_candle_body, sess2_candle_wick, sess2_op, sess2_fib, sess2_labels)
= draw(i_show_sess3, sess3, i_sess3_color, i_sess3_label, i_sess3_extend, i_sess3_fib, i_sess3_op, i_lookback, sess3_box, sess3_line, sess3_candle_body, sess3_candle_wick, sess3_op, sess3_fib, sess3_labels)
= draw(i_show_sess4, sess4, i_sess4_color, i_sess4_label, i_sess4_extend, i_sess4_fib, i_sess4_op, i_lookback, sess4_box, sess4_line, sess4_candle_body, sess4_candle_wick, sess4_op, sess4_fib, sess4_labels)
is_positive_bar = close > open
color c_barcolor = na
color c_plotcandle = na
c_sess1_barcolor = (is_sess1) ? (is_positive_bar ? i_sess1_barcolor1 : i_sess1_barcolor2) : na
c_sess2_barcolor = (is_sess2) ? (is_positive_bar ? i_sess2_barcolor1 : i_sess2_barcolor2) : na
c_sess3_barcolor = (is_sess3) ? (is_positive_bar ? i_sess3_barcolor1 : i_sess3_barcolor2) : na
c_sess4_barcolor = (is_sess4) ? (is_positive_bar ? i_sess4_barcolor1 : i_sess4_barcolor2) : na
if (i_sess1_chart != option_chart_x) and is_sess1
c_barcolor := i_sess1_barcolor ? c_sess1_barcolor : na
c_plotcandle := i_sess1_plotcandle ? c_sess1_barcolor : na
if (i_sess2_chart != option_chart_x) and is_sess2
c_barcolor := i_sess2_barcolor ? c_sess2_barcolor : na
c_plotcandle := i_sess2_plotcandle ? c_sess2_barcolor : na
if (i_sess3_chart != option_chart_x) and is_sess3
c_barcolor := i_sess3_barcolor ? c_sess3_barcolor : na
c_plotcandle := i_sess3_plotcandle ? c_sess3_barcolor : na
if (i_sess4_chart != option_chart_x) and is_sess4
c_barcolor := i_sess4_barcolor ? c_sess4_barcolor : na
c_plotcandle := i_sess4_plotcandle ? c_sess4_barcolor : na
barcolor(c_barcolor)
plotcandle(open, high, low, close, color=is_positive_bar ? color_none : c_plotcandle, bordercolor=c_plotcandle, wickcolor=c_plotcandle)
////////////////////
// Alerts
////////////////////
// Session alerts
sess1_started = is_sess1 and not is_sess1 , sess1_ended = not is_sess1 and is_sess1
sess2_started = is_sess2 and not is_sess2 , sess2_ended = not is_sess2 and is_sess2
sess3_started = is_sess3 and not is_sess3 , sess3_ended = not is_sess3 and is_sess3
sess4_started = is_sess4 and not is_sess4 , sess4_ended = not is_sess4 and is_sess4
alertcondition(sess1_started, 'Session #1 started')
alertcondition(sess1_ended, 'Session #1 ended')
alertcondition(sess2_started, 'Session #2 started')
alertcondition(sess2_ended, 'Session #2 ended')
alertcondition(sess3_started, 'Session #3 started')
alertcondition(sess3_ended, 'Session #3 ended')
alertcondition(sess4_started, 'Session #4 started')
alertcondition(sess4_ended, 'Session #4 ended')
alertcondition((not is_sess1) and ta.crossover(close, sess1_high), 'Session #1 High crossed (after session closed)')
alertcondition((not is_sess1) and ta.crossunder(close, sess1_low), 'Session #1 Low crossed (after session closed)')
alertcondition((not is_sess2) and ta.crossover(close, sess2_high), 'Session #2 High crossed (after session closed)')
alertcondition((not is_sess2) and ta.crossunder(close, sess2_low), 'Session #2 Low crossed (after session closed)')
alertcondition((not is_sess3) and ta.crossover(close, sess3_high), 'Session #3 High crossed (after session closed)')
alertcondition((not is_sess3) and ta.crossunder(close, sess3_low), 'Session #3 Low crossed (after session closed)')
alertcondition((not is_sess4) and ta.crossover(close, sess4_high), 'Session #4 High crossed (after session closed)')
alertcondition((not is_sess4) and ta.crossunder(close, sess4_low), 'Session #4 Low crossed (after session closed)')
// Alerts visualized
if i_alert1_show
if i_show_sess1
if sess1_started
label.new(bar_index, close, 'Start', yloc=yloc.abovebar, color=i_sess1_color, textcolor=color_text, size=size.small, style=label.style_label_down)
if sess1_ended
label.new(bar_index, close, 'End' , yloc=yloc.abovebar, color=i_sess1_color, textcolor=color_text, size=size.small, style=label.style_label_down)
if i_show_sess2
if sess2_started
label.new(bar_index, close, 'Start', yloc=yloc.abovebar, color=i_sess2_color, textcolor=color_text, size=size.small, style=label.style_label_down)
if sess2_ended
label.new(bar_index, close, 'End' , yloc=yloc.abovebar, color=i_sess2_color, textcolor=color_text, size=size.small, style=label.style_label_down)
if i_show_sess3
if sess3_started
label.new(bar_index, close, 'Start', yloc=yloc.abovebar, color=i_sess3_color, textcolor=color_text, size=size.small, style=label.style_label_down)
if sess3_ended
label.new(bar_index, close, 'End' , yloc=yloc.abovebar, color=i_sess3_color, textcolor=color_text, size=size.small, style=label.style_label_down)
if i_show_sess4
if sess4_started
label.new(bar_index, close, 'Start', yloc=yloc.abovebar, color=i_sess4_color, textcolor=color_text, size=size.small, style=label.style_label_down)
if sess4_ended
label.new(bar_index, close, 'End' , yloc=yloc.abovebar, color=i_sess4_color, textcolor=color_text, size=size.small, style=label.style_label_down)
plot(i_alert3_show ? sess1_high : na, 'sess1_high', style=plot.style_linebr, color=i_sess1_color)
plot(i_alert3_show ? sess1_low : na, 'sess1_low' , style=plot.style_linebr, color=i_sess1_color, linewidth=2)
plot(i_alert3_show ? sess2_high : na, 'sess2_high', style=plot.style_linebr, color=i_sess2_color)
plot(i_alert3_show ? sess2_low : na, 'sess2_low' , style=plot.style_linebr, color=i_sess2_color, linewidth=2)
plot(i_alert3_show ? sess3_high : na, 'sess3_high', style=plot.style_linebr, color=i_sess3_color)
plot(i_alert3_show ? sess3_low : na, 'sess3_low' , style=plot.style_linebr, color=i_sess3_color, linewidth=2)
plot(i_alert3_show ? sess4_high : na, 'sess4_high', style=plot.style_linebr, color=i_sess4_color)
plot(i_alert3_show ? sess4_low : na, 'sess4_low' , style=plot.style_linebr, color=i_sess4_color, linewidth=2)
plotshape(i_alert3_show and (not is_sess1) and ta.crossover(close, sess1_high) ? sess1_high : na, 'cross sess1_high', color=i_sess1_color, style=shape.triangleup, location=location.absolute, size=size.tiny)
plotshape(i_alert3_show and (not is_sess1) and ta.crossunder(close, sess1_low) ? sess1_low : na, 'cross sess1_low', color=i_sess1_color, style=shape.triangledown, location=location.absolute, size=size.tiny)
plotshape(i_alert3_show and (not is_sess2) and ta.crossover(close, sess2_high) ? sess2_high : na, 'cross sess2_high', color=i_sess2_color, style=shape.triangleup, location=location.absolute, size=size.tiny)
plotshape(i_alert3_show and (not is_sess2) and ta.crossunder(close, sess2_low) ? sess2_low : na, 'cross sess2_low', color=i_sess2_color, style=shape.triangledown, location=location.absolute, size=size.tiny)
plotshape(i_alert3_show and (not is_sess3) and ta.crossover(close, sess3_high) ? sess3_high : na, 'cross sess3_high', color=i_sess3_color, style=shape.triangleup, location=location.absolute, size=size.tiny)
plotshape(i_alert3_show and (not is_sess3) and ta.crossunder(close, sess3_low) ? sess3_low : na, 'cross sess3_low', color=i_sess3_color, style=shape.triangledown, location=location.absolute, size=size.tiny)
plotshape(i_alert3_show and (not is_sess4) and ta.crossover(close, sess4_high) ? sess4_high : na, 'cross sess4_high', color=i_sess4_color, style=shape.triangleup, location=location.absolute, size=size.tiny)
plotshape(i_alert3_show and (not is_sess4) and ta.crossunder(close, sess4_low) ? sess4_low : na, 'cross sess4_low', color=i_sess4_color, style=shape.triangledown, location=location.absolute, size=size.tiny)
SMA Tail Reversal Signalrubber band trade possible trend reversal bottom and top tail bars a distance away from 200sma can very well start the reversal back toward the 200sma
Frank-Setup ✅ (RSI + RS only)Frank-Shorting Setup ✅ is an indicator designed to help traders spot weakness in a stock by combining RSI and Relative Strength (RS) analysis.
🔹 Key Features
RSI Weakness Signals
Marks when RSI falls below 50 (downside pressure begins).
Marks when RSI moves back above 50 (weakness ends).
Relative Strength (RS) vs Benchmark
Compares stock performance to a benchmark (e.g., NIFTY).
Signals when RS drops below 1 (stock underperforming).
Signals when RS moves back above 1 (strength resumes).
Clear Chart Markings
Circles for RSI signals.
Triangles for RS signals.
Optional labels for extra clarity.
Alerts Built-In
Get notified when RSI or RS weakness starts/ends.
No need to monitor charts all the time