Clean Industry DataClean Industry Data – Overview
Clean Industry Data is a utility tool designed to give traders an instant, structured view of key fundamental and volatility metrics directly on the chart. The script displays a compact, customizable information panel containing:
Industry & Sector
Market Cap and Free-Float Market Cap
Free-Float Percentage
Average Daily Rupee Volume
Relative Volume (R.Vol) based on daily volume
% from 10 / 21 / 50 EMAs (calculated on daily closes)
ADR (14-day) with threshold-based indicators
ATR (current timeframe) with colour-coded risk cues
All volume-based statistics are anchored to daily data, ensuring the values remain consistent across all timeframes. The display table supports flexible positioning, custom background/text colours, and adjustable text size.
This script is ideal for traders who want a quick, accurate snapshot of a stock’s liquidity, volatility, and broader classification — without digging through multiple menus or external sources.
อินดิเคเตอร์และกลยุทธ์
Turtle Unit CalculatorTurtle Unit Calculator
This Pine Script indicator calculates the exact quantity of an asset you should buy (your Unit Size) to ensure you risk a fixed amount of capital (e.g., 1%) per trade.
Daily Oversold Swing ScreenerThat script is a **Pine Script Indicator** designed to identify potential **swing trade entry points** on a daily timeframe by looking for stocks that are **oversold** but still in a **healthy long-term uptrend**.
It screens for a high-probability reversal setup by combining four specific technical conditions.
Here is a detailed breakdown of the script's purpose and logic:
---
## 📝 Script Description: Daily Oversold Swing Screener
This Pine Script indicator serves as a **momentum and trend confirmation tool** for active traders seeking short-to-intermediate-term long entries. It uses data calculated on the **Daily** timeframe to generate signals, regardless of the chart resolution you are currently viewing.
The indicator is designed to filter out stocks that are in a strong downtrend ("falling knives") and only signal pullbacks within an established uptrend, which significantly increases the probability of a successful swing trade bounce.
### 🔑 Key Conditions for a Signal:
The indicator generates a buy signal when **all four** of the following conditions are met on the Daily timeframe:
#### 1. Oversold Momentum
* **Condition:** `rsiD < rsiOS` (Daily RSI is below the oversold level, typically **30**).
* **Purpose:** Confirms that the selling pressure has been extreme and the stock is temporarily out of favor, setting up a potential bounce.
#### 2. Momentum Turning Up
* **Condition:** `rsiD > rsiPrev` (Current Daily RSI value is greater than the previous day's Daily RSI value).
* **Purpose:** This is the most crucial filter. It confirms that the momentum has **just started to shift upward**, indicating that the low may be in and the stock is turning away from the oversold region.
#### 3. Established Uptrend (No Falling Knives)
* **Condition:** `sma50 > sma200 and closeD > sma50` (50-day SMA is above the 200-day SMA, AND the current daily close is above the 50-day SMA).
* **Purpose:** This is a **long-term trend filter**. It ensures that the current oversold condition is just a **pullback** within a larger, structurally bullish market (50 > 200), and that the price is still holding above the short-term trend line (Close > 50 SMA). This effectively screens out weak stocks in continuous downtrends.
#### 4. Price at Support (Bollinger Bands)
* **Condition:** `closeD <= lowerBB` (Daily Close is less than or equal to the lower Bollinger Band).
* **Purpose:** Provides a secondary measure of extreme price deviation. When the price touches or breaches the lower band, it suggests a significant move away from the mean (basis), often signaling strong statistical support where price is likely to revert.
### 📌 Summary of Signal
The final signal (`signal`) is triggered only when the market is confirmed to be **in a healthy long-term trend (Condition 3)**, the price is at an **extreme support level (Condition 4)**, the momentum is **oversold (Condition 1)**, and most importantly, the **momentum has begun to reverse (Condition 2)**.
VWAP + Scaled VIX OverlayVWAP-VIX Fusion Overlay helps traders interpret volatility in real time by placing VIX and VWAP where they belong: side-by-side with price action.
It turns the invisible (fear, volatility pressure, momentum shifts) into something clearly visible — making entries, exits, and trend evaluation easier and more accurate.
Shock Wave EMA Ribbon with adjustable time period9 ema and 21 ema script, with background plot. All colors, and settings toggle on and off. Simple but effective. This one has selectable time periods so the ribbon can stay fixed on your desired time scale.
Market Regime Flip (Dunk)This indicator is a trend regime flip tool built on top of MACD. Instead of reacting to every little wiggle, it waits for several bars in a row where the MACD stays either above or below zero (by default, 3 consecutive bars). When the MACD has been above zero for 3 bars, it declares a bull regime and marks that bar on the price chart with a green “BULL” triangle above the candle. When the MACD has been below zero for 3 bars, it declares a bear regime and marks that bar with a red “BEAR” triangle below the candle. It also lightly colors the chart background green in bull regimes and red in bear regimes, so you can see at a glance which side of the market you’re in.
In other words, it turns the MACD’s usual “above/below zero” behavior into a clean, slower-changing on/off regime switch. Instead of giving you constant signals, it focuses on the moments where momentum truly shifts and sticks around for a few bars, helping you avoid getting faked out by single-bar noise. The alerts are wired to those flip moments, so you can get notified when the market transitions from bearish to bullish (or vice versa) according to this MACD-based regime logic.
SPY EMA + VWAP Day Trading Strategy (Market Hours Only)//@version=5
indicator("SPY EMA + VWAP Day Trading Strategy (Market Hours Only)", overlay=true)
// === Market Hours Filter (EST / New York Time) ===
nySession = input.session("0930-1600", "Market Session (NY Time)")
inSession = time(timeframe.period, "America/New_York") >= time(nySession, "America/New_York")
// EMAs
ema9 = ta.ema(close, 9)
ema21 = ta.ema(close, 21)
// VWAP
vwap = ta.vwap(close)
// Plot EMAs & VWAP
plot(ema9, "EMA 9", color=color.green, linewidth=2)
plot(ema21, "EMA 21", color=color.orange, linewidth=2)
plot(vwap, "VWAP", color=color.blue, linewidth=2)
// ----------- Signals -----------
long_raw = close > ema9 and ema9 > ema21 and close > vwap and ta.crossover(ema9, ema21)
short_raw = close < ema9 and ema9 < ema21 and close < vwap and ta.crossunder(ema9, ema21)
// Apply Market Hours Filter
long_signal = long_raw and inSession
short_signal = short_raw and inSession
// Plot Signals
plotshape(long_signal,
title="BUY",
style=shape.labelup,
location=location.belowbar,
color=color.green,
size=size.small,
text="BUY")
plotshape(short_signal,
title="SELL",
style=shape.labeldown,
location=location.abovebar,
color=color.red,
size=size.small,
text="SELL")
// Alerts
alertcondition(long_signal, title="BUY Alert", message="BUY Signal (Market Hours Only)")
alertcondition(short_signal, title="SELL Alert", message="SELL Signal (Market Hours Only)")
RSI < 25 + Price Below 200 SMA (4H) - Text Signal
Price below 200MA on 4hr chart
RSI is below 25 ovsersold
Start buying small positions at every signal
Eventually price will capture the 200MA on 4hr
This will work great for NVDA, AAPL, MSFT, NFLX, PANW, AMZN, PLTR, CRWD and META.
Good for swing trading based on price action, RSI oversold and reversal
Add more on the Pin bar candles on 4hr time frame once the price is oversold.
TrapMap Pro — Saël LabTrapMap PRO — Saël Lab
TrapMap PRO — Saël Lab
TrapMap PRO is an extended visual version of TrapMap Basic,
built on the same concept of imbalance between movement energy
and the actual price result.
The logic is fully identical to the Basic version.
TrapMap PRO does not change the algorithm — only the presentation.
Main Difference in PRO
PRO uses a cloud-based visualization that:
• highlights traps softly and minimally,
• avoids clutter from labels and text,
• makes imbalance zones visible “from the corner of your eye” and intuitively readable,
• keeps the chart clean and calm even during active market phases.
Two Types of Traps
1) EnergyTrap — strong internal effort, weak price result
Appears when the market shows internal activity:
• accelerated impulse,
• rising pressure,
• a sequence of “live” bars,
• many small-sized trades.
…but the price barely reacts.
Often signals:
• absorbed liquidity,
• blocked breakout attempts,
• false internal strength,
• presence of a larger participant holding the move.
2) PriceTrap — large price move with weak internal structure
Price travels far beyond the norm:
• sharp push,
• long candles,
• movement above expected ATR.
…but the internal structure is weak:
• few trades but large in size,
• low acceleration,
• insufficient pressure for a true impulse.
Typical cases:
• trend exhaustion,
• manipulative spikes,
• stop-runs,
• momentum “on empty”, without actual support.
Where TrapMap PRO is Useful
• early detection of manipulation,
• separating genuine impulses from fake ones,
• more precise recognition of false breakouts,
• identifying structural weakness zones.
Works on all markets and timeframes.
© Saël Lab
Created through the dialogue of analysis and intelligence.
Digs Special : Straddle Plot Plots a straddle candle stick chart with opening price and vwap . Please z score and break down signals
GLOBAL M2 (USD)Global M2 Liquidity Index
This script calculates and visualizes the total M2 Money Supply of the world's four largest economies to provide a comprehensive view of global liquidity.
Features:
Data Sources: Aggregates M2 data from the United States (USD), China (CNY), Eurozone (EUR), and Japan (JPY).
Currency Conversion: Automatically converts all non-USD data into USD using real-time exchange rates (USDCNY, EURUSD, USDJPY).
Raw Data Output: Unlike standard indicators that abbreviate values (e.g., "96T"), this script outputs the full raw integer value. This ensures maximum precision for traders who need exact figures for correlation analysis or custom formulas.
Main Chart Overlay: Designed to be displayed on the main chart.
Usage Tip: Since the raw value is huge (approx. $96 Trillion USD), it is highly recommended to "Pin to Left Scale" or move it to a "New Pane Below" to avoid compressing your price action candles.
Pct Diff sUSDE Redemption Rate/Market PriceUsing data from Pyth SUSDE contract oracle and SUSDE/USDT uniswap v3 pool.
BTC – VERI - Valuation & Entity Ratio IndexVERI: Valuation & Entity Ratio IndexObservation-only.
Data: IntoTheBlock.
Overview & Philosophy
The name VERI is derived from the Latin Veritas (Truth). In a crypto market often driven by deceptive speculative noise, this indicator seeks to establish the "On-Chain Truth" of a price trend.
It operates on the thesis that price action is only sustainable when verified by high-conviction capital flows.VERI is a fundamental composite oscillator that fuses Entity Behavior (Who is holding?) with Network Valuation (Is the price fair?) to identify Bitcoin market cycle extremes.
The "Alpha"
Why this Composite stands out: on-chain metrics often tell only half the story.
MVRV tells you if the price is cheap, but not if anyone is actually buying.
Whale Activity tells you if large players are moving, but not if they are accumulating at a value discount.
VERI fuses these two dimensions into a single Z-Score. It identifies the rare, high-probability moments where Smart Money Conviction intersects with Deep Value.
Methodology
The Mathematics of VERI: The indicator constructs a composite index using three fundamental metrics from IntoTheBlock:
The "Who" (Entity Ratio) : We calculate the flow ratio between Whales (>1% supply holders) and Retail (<0.1% supply holders). A rising ratio indicates supply is transferring from weak hands to strong hands.
The "Why" (Valuation Multiplier) : We utilize the MVRV (Market Value to Realized Value) ratio. To isolate value opportunities, we use the inverse (1 / MVRV).
The Fusion : These factors are multiplied to create the raw VERI index.
Normalization & Inversion
We apply a rolling Z-Score (standard deviation from the mean) and invert the result.
How to Interpret the Indicator
Because the output is inverted, the visual logic matches price action intuitively:
🟥 Distribution Zone (High Values > 1.5):
The Signal: "Low Conviction Overvaluation."
Context: The price is historically expensive relative to the cost basis (High MVRV), and Whales are distributing coins to Retail.Implication: Historically precedes macro tops or deep corrections.
🟩 Accumulation Zone (Low Values < -1.5):
The Signal: "High Conviction Undervaluation."Context: The price is historically cheap (Low MVRV), and Whales are aggressively accumulating relative to Retail.
Implication: Historically precedes macro bottoms and generational entry points.
Zero Line : Represents the historical baseline. A crossover of the zero line often confirms a regime shift (e.g., from Bear to Bull).
Visual Guide & Features
Dynamic Coloring: The line turns Red in the Distribution Zone, Blue in the Accumulation Zone, and Orange during neutral trends.
Zone Labels: Static labels are pinned to the left side of the chart for immediate context.
The "Data Check" Monitor (Status Table): Since this indicator relies on third-party fundamental data, we have included a diagnostic table in the bottom-right corner.
Data Check Monitor Guide
STATUS: LIVE (Green): The indicator is functioning correctly. All data feeds (Whales, Retail, MVRV) are being retrieved successfully.
STATUS: WAIT (Red): The indicator cannot retrieve data. This might happen for some reasons, e.g. your TradingView plan may not support IntoTheBlock integration.
Settings
Lookback Period (Default: 365): The window used for Z-Score normalization. We use a full year to smooth out seasonal volatility.
Smoothing (Default: 7): A 7-day smoothing is applied to the signal to filter out daily noise.
Zone Thresholds: Users can customize the specific Z-Score levels for the Distribution and Accumulation bands.
Disclaimer
This script is for research and educational purposes only. It uses historical on-chain data to visualize market structure and does not constitute financial advice. Past performance of whale entities does not guarantee future results.
Tags
bitcoin, btc, on-chain, mvrv, whales, valuation, fundamentals, cycle, oscillator, veri
ROC Alarm v2.0 — Saël LabROC Alarm — Saël Lab
ROC Alarm is a momentum-trigger indicator that detects the very beginning of strong price movement.
It analyzes the rate of change (ROC) and fires when acceleration becomes significant.
You can adjust the sensitivity for any instrument and choose what level of impulse is considered a “signal”.
When the market starts moving, ROC Alarm notifies you in time to return to the chart.
The panel displays the current impulse and its direction — without the need to stare at candles or switch to lower timeframes.
Works on all markets and all timeframes.
© Saël Lab
Created through the dialogue of analysis and intelligence.
UTC-5 - 00:00 / 18:00 Candle This indicator automatically detects the 00:00 (midnight) and 18:00 (6 PM) candles based on Eastern Time (ET) and colors them differently on any intraday timeframe.
It is useful for traders who follow:
Daily session resets
Midnight price behavior
Premium/discount shifts
Market structure changes around 18:00 ET rollover
ICT concepts involving daily opens
The indicator works perfectly on:
M5, M10, M15, M30, H1, and all other intraday charts.
Nexural ORB Nexural ORB - Multi-Timeframe Opening Range Breakout Indicator
Introduction
This indicator was built out of frustration. After testing dozens of ORB tools, both free and paid, I found that most of them either did too little or cluttered the chart with unnecessary information. The Opening Range Breakout is one of the oldest and most reliable intraday strategies, yet most indicators treat it as an afterthought - just a box on the chart with no context.
This is not that kind of indicator.
The Nexural Ultimate ORB tracks the Opening Range across three timeframes simultaneously, provides quality scoring to help you identify high-probability setups, detects when multiple levels align for confluence, and now includes historical ORB data so you can scroll back and review previous sessions. It does not tell you when to buy or sell. It does not promise profits. What it does is give you clean, accurate levels with the context you need to make informed decisions.
I am going to be completely transparent about what this indicator does, how it works, what it does well, and where it falls short. If you are looking for a magic solution that prints money, this is not it. If you are looking for a professional-grade tool that will become a permanent part of your charting setup, keep reading.
What Is The Opening Range Breakout
Before diving into the indicator itself, let me explain the strategy it is built around.
The Opening Range is simply the high and low price established during the first portion of the trading session. For US equities and futures, this typically begins at 9:30 AM Eastern Time. The theory behind trading the Opening Range is straightforward: the first 15, 30, or 60 minutes of trade often sets the tone for the rest of the day. Institutional traders, algorithms, and market makers are all actively positioning during this window, and the levels they establish become reference points for the remainder of the session.
When price breaks above the Opening Range High, it suggests bullish momentum and the potential for continuation higher. When price breaks below the Opening Range Low, it suggests bearish momentum and the potential for continuation lower. The strategy has been used by floor traders for decades and remains relevant today because the underlying market dynamics have not changed - the open is when the most information gets priced in, and the levels established during that period matter.
This indicator does not trade the ORB for you. It identifies the levels, tracks multiple timeframes, and provides context. The actual trading decisions are yours.
How The Opening Range Is Calculated
The indicator calculates the Opening Range for three timeframes:
The 15-Minute ORB captures the high and low from 9:30 AM to 9:45 AM. This is the shortest timeframe and typically produces the tightest range. Breakouts from the 15-minute ORB tend to occur earliest in the session and can provide early directional signals, though they are also more prone to false breakouts due to the narrow range.
The 30-Minute ORB captures the high and low from 9:30 AM to 10:00 AM. This is considered by many institutional traders to be the most significant timeframe. The 30-minute window allows enough time for the initial volatility to settle while still capturing the core opening activity. Many professional trading desks reference the 30-minute ORB as their primary intraday framework.
The 60-Minute ORB captures the high and low from 9:30 AM to 10:30 AM. This is the widest range and produces fewer signals, but those signals tend to be more reliable. The 60-minute ORB is particularly useful on high-volatility days when the 15 and 30-minute ranges get quickly violated.
The calculation itself is simple. As each bar completes during the opening period, the indicator compares the current high and low to the stored values and updates them if new extremes are reached. Once the timeframe completes, the levels lock in and do not change for the rest of the session.
I want to be absolutely clear about one thing: there is no repainting. The ORB levels are calculated in real-time as the opening period develops. Once a timeframe completes, those levels are final. You will not look back at your chart and see different levels than what appeared in real-time. This is critically important for any indicator you use for actual trading decisions.
Visual Hierarchy and Line Styles
One of the main problems with multi-timeframe indicators is visual clutter. When you have six lines on the chart representing three different ORBs, it becomes difficult to quickly identify which level belongs to which timeframe.
This indicator solves that problem through a clear visual hierarchy. Each timeframe has its own color, line width, and line style, all of which are fully customizable.
By default, the 15-Minute ORB uses solid lines with the heaviest weight. This makes it the most prominent on the chart because it is typically the first level to be tested and often the most actively traded.
The 30-Minute ORB uses dashed lines with a medium weight. This keeps it visible but clearly secondary to the 15-minute levels.
The 60-Minute ORB uses dotted lines with a medium weight. This places it in the background as a reference level rather than an active trading zone.
You can change any of these settings. If you prefer to trade the 30-minute ORB exclusively, you can make it solid and bold while keeping the others subtle. If you only want to see the 60-minute ORB, you can disable the other two entirely. The flexibility is there because every trader has different preferences.
The dashboard in the top right corner of the chart displays the corresponding line style next to each timeframe, so you always know which line on the chart matches which row in the dashboard.
The Quality Scoring System
Not every Opening Range is worth trading. Some days produce tight, clean ranges with strong follow-through. Other days produce wide, choppy ranges that lead to multiple false breakouts. One of the most valuable features of this indicator is the Quality Score, which grades each session from A-plus down to C.
The Quality Score is calculated based on several factors:
Range Size is the most important factor. The indicator compares the current ORB range to the average daily range over the past 20 sessions. A tight range, defined as less than 40 percent of the average daily range, receives the highest score. The logic here is simple: tight ranges indicate consolidation, and consolidation often precedes expansion. When the ORB is tight, a breakout has more room to run.
A normal range, between 40 and 80 percent of the average daily range, receives a moderate score. These are typical trading days without any particular edge from a range perspective.
A wide range, greater than 80 percent of the average daily range, receives the lowest score. When the ORB is already wide, much of the day's move may have already occurred during the opening period, leaving less opportunity for breakout continuation.
Volume is the second factor. Above-average volume during the opening period indicates genuine institutional participation. The indicator compares the current volume to the 20-bar average. Significantly elevated volume adds to the quality score, while below-average volume does not penalize the score but does not help it either.
Day of Week matters more than most traders realize. Statistical studies of market behavior consistently show that Tuesday, Wednesday, and Thursday produce cleaner trending days than Monday or Friday. Monday mornings often see erratic price action as the market digests weekend news and repositions. Friday afternoons often see reduced participation as traders close out positions before the weekend. The quality score reflects these tendencies by adding points for mid-week sessions and subtracting points for Monday mornings and Friday afternoons.
Overnight Activity is relevant primarily for futures traders. If the overnight session produced a significant range, defined as greater than half of the average true range, it suggests that institutions were active during the overnight hours. This often leads to more directional behavior during the regular session.
The quality score is displayed in the dashboard as a letter grade. A-plus indicates excellent conditions across multiple factors. A indicates good conditions. B indicates average conditions. C indicates below-average conditions that warrant caution.
I want to be honest about the limitations of this system. The quality score is a guideline, not a guarantee. A C-rated day can still produce a profitable breakout. An A-plus day can still result in a failed breakout that reverses. The score helps you calibrate your expectations and position sizing, but it does not predict the future.
Confluence Detection
Confluence occurs when multiple significant price levels cluster together within a tight range. When the 15-minute ORB high aligns with the overnight high, or when the ORB low sits right at the session opening price, you have confluence. These zones tend to produce stronger reactions because multiple types of traders are watching the same level.
The indicator automatically detects confluence using a tolerance-based system. By default, the tolerance is set to 0.15 percent of price. This means that if two levels are within 0.15 percent of each other, they are considered confluent.
The levels that are checked for confluence include the Session Opening Price, which is the exact price at 9:30 AM. This level matters because it represents the point where the market transitioned from overnight to regular session trading. Many traders reference the opening print throughout the day.
The Overnight High and Low are also checked. For futures markets, this includes all trading from 6:00 PM the previous evening through 9:29 AM. For stocks, this includes extended hours trading. These levels represent the extremes established before the regular session began.
Finally, the indicator checks whether the ORB levels from different timeframes align with each other. When the 15-minute high matches the 30-minute high, that level gains additional significance.
When confluence is detected, two things happen on the chart. First, the affected ORB line changes color to gold, making it visually obvious that this level has additional significance. Second, the dashboard displays a Confluence row at the bottom, alerting you to the condition.
The Confluence label also appears directly on the chart, positioned within the ORB zone so you can immediately see where the confluence exists.
Smart Label System
A common problem with indicators that display multiple price levels is label overlap. When you have six ORB levels plus auxiliary levels like the session open and overnight high and low, the right side of the chart can become a cluttered mess of overlapping text.
This indicator solves that problem with a smart labeling system that combines matching levels. If the 15-minute low, 30-minute low, and 60-minute low are all at the same price, instead of displaying three separate labels, the indicator displays a single label that reads 15L/30L/60L followed by the price.
The system uses a tolerance of 2 percent of the ORB range to determine whether levels are close enough to combine. This keeps the labels clean while still displaying separate labels when levels are meaningfully different.
The labels are positioned to the right of the current price action, extending beyond the last bar so they remain visible as new bars form. Each label includes the level identifier and the exact price value.
Historical ORB Display
This feature addresses one of the most common limitations of ORB indicators: the inability to see previous sessions when scrolling back through your chart.
With the history feature enabled, the indicator stores ORB data for up to 20 previous sessions. When you scroll back in time, you will see the ORB levels for each historical session, drawn from the session start to the session end.
Historical ORBs are displayed with slightly faded colors, using 50 percent transparency compared to the current session. This creates a clear visual distinction between current and historical levels while still allowing you to analyze past price action relative to those levels.
The history depth is configurable. You can set it anywhere from 1 to 20 days depending on your needs. If you primarily care about the current session and the previous day for context, set it to 1 or 2. If you want to analyze an entire week or more of ORB behavior, increase the setting.
You can also disable the history feature entirely by enabling Current Session Only mode. This returns the indicator to showing only the active session, which some traders prefer for a cleaner chart during live trading.
Breakout Detection and Filters
The indicator marks breakouts with triangle signals. A green triangle below the bar indicates a bullish breakout above the ORB high. A red triangle above the bar indicates a bearish breakout below the ORB low.
However, not every crossing of an ORB level represents a valid breakout worth acting on. The indicator includes several filters to reduce false signals.
The Volume Filter requires that volume on the breakout bar be at least 1.2 times the 20-bar average volume. You can adjust this multiplier in the settings. The logic is straightforward: breakouts on weak volume are more likely to fail. A genuine breakout that is going to follow through should be accompanied by above-average participation.
The Time Filter prevents breakout signals after a specified hour. The default is 2:00 PM Eastern. The rationale is that late-session breakouts often lack follow-through because there is not enough trading time remaining for the move to develop. You can adjust or disable this filter based on your trading style.
The Single Trigger mechanism ensures that each breakout fires exactly once per session. If price crosses above the ORB high, you will see one bullish signal on the bar where the crossing occurred. If price subsequently pulls back and crosses above again, you will not see a second signal. This prevents signal spam and keeps your chart clean.
The indicator also includes Reclaim Detection. If price breaks out and then returns back inside the ORB zone, you will see a warning signal marked with an X. This condition often indicates a failed breakout and potential reversal. It is not a trade signal, but rather information that the breakout you just witnessed may not be valid.
Range Extensions
Once the ORB is established, many traders look for profit targets based on the range itself. The indicator includes extension levels that project multiples of the ORB range above and below the extremes.
By default, two extension levels are shown: 1.0 times the range and 1.5 times the range. If the 15-minute ORB is 50 points, the 1.0 extension above the high would be 50 points above the high, and the 1.5 extension would be 75 points above the high.
These extensions serve as potential profit targets for breakout trades. The 1.0 extension represents a measured move equal to the ORB itself. The 1.5 extension represents a slightly more ambitious target.
You can adjust the extension multipliers in the settings. Some traders prefer 0.5 and 1.0. Others prefer 1.0 and 2.0. The flexibility is there to match your trading approach.
The extension lines are displayed as faint dotted lines so they do not compete visually with the ORB levels themselves. The labels show the multiplier value along with the exact price.
## The Midline
The 50 percent level of the ORB, known as the midline, is displayed as a dashed line within the ORB zone. This level matters because it often acts as short-term support or resistance during consolidation periods within the range.
When price is trading inside the ORB and approaches the midline, you may see a reaction. The midline can also serve as a reference for whether price is showing strength or weakness within the range. If price is spending most of its time above the midline, that suggests a bullish bias even before a breakout occurs. If price is spending most of its time below the midline, that suggests a bearish bias.
The midline can be disabled in the settings if you prefer a cleaner chart.
The Dashboard
The dashboard is positioned in the top right corner of the chart and provides all relevant ORB information at a glance.
The header row displays the indicator name, the current Quality Score grade, the Range Classification, and the Session Status.
The Range Classification shows whether the current 15-minute ORB is Tight, Normal, or Wide compared to the 20-day average. This gives you immediate context about whether the range is unusual in either direction.
The Session Status shows whether the market is currently in session or closed. A green Live indicator means the session is active. A red Closed indicator means the session has ended.
Below the header, each timeframe row displays the following information:
The Timeframe column shows 15m, 30m, or 60m along with a visual indicator of the line style you have selected for that timeframe.
The High column displays the ORB high price for that timeframe.
The Low column displays the ORB low price for that timeframe.
The Range column displays the distance between high and low.
The Status column shows the current state. Before the ORB completes, this shows a countdown of minutes remaining. After completion, it shows whether the price has broken out bullish, broken out bearish, or remains in range.
Below the timeframe rows, the Distance row shows how far the current price is from the nearest ORB level. This helps you gauge whether price is approaching a potential breakout zone.
If confluence is detected, a highlighted row appears at the bottom of the dashboard indicating that significant level alignment exists.
Supported Markets and Sessions
The indicator supports multiple market types with appropriate session times:
US Stocks use a session from 9:30 AM to 4:00 PM Eastern.
US Futures use a session from 9:30 AM to 4:00 PM Eastern, with overnight tracking from 6:00 PM the previous evening.
Forex uses a 24-hour session since the market trades continuously.
Crypto uses a 24-hour session since the market trades continuously.
Custom allows you to define your own session times for markets not covered by the presets.
The timezone is configurable. The default is America/New_York, but you can change it to Chicago, Los Angeles, London, Tokyo, or UTC depending on your location and preference.
Settings Overview
The settings are organized into logical groups:
General settings include the market type, current session only toggle, and history days.
Session settings include custom session times and timezone selection.
ORB Timeframes settings include individual toggles for showing or hiding each timeframe, color selection, line width, and line style. This is where you customize the visual appearance of each ORB level.
Quality Scoring settings include the ATR period and range comparison lookback. These affect how the quality score is calculated.
Confluence Detection settings include the tolerance percentage and toggles for the session open and overnight high and low levels.
Breakout Settings include the volume filter toggle and multiplier, time filter toggle and cutoff hour, and reclaim detection toggle.
Visuals settings include toggles for the fill zone, labels, dashboard, distance display, and midline.
Extensions settings include toggles for showing extensions and the multiplier values for each extension level.
How I Use This Indicator
I will share my personal approach, though you should adapt it to your own style.
First, I wait for the ORB to complete. I do not trade during the first 15 to 30 minutes of the session. The levels are still forming, and the price action during this window is often erratic. I let the dust settle and the range establish itself.
Second, I check the Quality Score. If it is an A or A-plus day with a tight range and good volume, I am more aggressive. If it is a C day with a wide range on a Friday afternoon, I am either sitting on my hands or trading with reduced size.
Third, I look for confluence. If the 15-minute high is sitting right at the overnight high, that level has additional significance. Breakouts through confluence zones tend to be more decisive.
Fourth, I confirm with volume. Even though the indicator filters for volume, I still glance at the volume bars. I want to see that breakout candle have conviction.
Fifth, I manage expectations based on range type. If the ORB is tight, I expect an explosive move and give the trade room to develop. If the ORB is wide, I expect choppier action and tighten my parameters.
Sixth, I use the distance reading. If price is already 50 points beyond the ORB high and the range was only 40 points, I have missed the move. Chasing extended price is not smart trading.
Honest Pros and Cons
What this indicator does well:
It provides clean, accurate ORB levels that do not repaint. This is the foundation, and it is done correctly.
It offers multi-timeframe tracking with clear visual differentiation. You can see all three ORBs at once without confusion.
The quality scoring system helps you avoid low-probability setups. It is not perfect, but it adds valuable context.
The confluence detection highlights significant level alignment automatically. This saves you from manually checking multiple levels.
The smart label system prevents visual clutter. Labels combine when appropriate and remain readable.
The historical ORB display allows you to scroll back and review previous sessions. This is valuable for analysis and pattern recognition.
The customization is extensive. Every visual element can be adjusted to match your preferences.
It works across stocks, futures, forex, and crypto with appropriate session handling.
What this indicator does not do:
It does not give you buy and sell signals with entries and exits. This is a levels and analysis tool, not a trading system.
It does not include backtesting or performance tracking. You need a separate strategy tester for that.
It does not guarantee that breakouts will follow through. The filters help, but failed breakouts still occur.
The quality score is a guideline, not a prediction. Low-quality days can still produce good trades. High-quality days can still produce losing trades.
The confluence detection is proximity-based. It identifies when levels are near each other but does not know if those levels are actually significant to other traders.
Technical limitations to be aware of:
On chart timeframes larger than 15 minutes, the ORB calculation becomes less precise because you have fewer bars in the opening period. This indicator works best on 1 to 15 minute charts.
The overnight high and low tracking works best on futures. Stocks do not have true overnight sessions in the same way.
If your chart does not have volume data, the volume filter will not function properly.
Risk Management
This section is not about the indicator. It is about trading.
No indicator, no matter how well designed, can protect you from poor risk management. Before you trade any ORB breakout, you need to define your risk.
Where is your stop? A common approach is to place the stop on the opposite side of the ORB zone. If you are taking a bullish breakout above the high, your stop goes below the low. This means your risk is the full ORB range plus any slippage.
Is that risk acceptable? If the ORB range is 100 points and you are trading a 50 dollar per point contract, your risk is 5000 dollars plus commissions. Can you afford that loss? If not, either reduce your size or skip the trade.
Where is your target? The extensions provide potential targets, but you need to decide in advance where you will take profits. Hoping for an unlimited run while watching your profits evaporate is not a strategy.
What is your win rate? ORB breakouts do not work every time. Depending on the market and conditions, you might win 50 to 60 percent of the time. That means you will have losing trades. Are you prepared for a string of three or four losers in a row? It will happen.
None of this is specific to this indicator. It applies to all trading. But I include it here because I see too many traders focus on the indicator while ignoring the fundamentals of risk management. The indicator can help you identify setups. It cannot manage your risk for you.
Final Thoughts
I built this indicator for my own trading, then refined it to the point where I felt comfortable sharing it. It is not a holy grail. It will not make you profitable if you do not already have a trading process. What it will do is give you clean, accurate ORB levels with context that most indicators do not provide.
The Opening Range Breakout works because institutions and algorithms reference these same levels. When the first 30 or 60 minutes of trading establishes a range, that becomes a reference point for the rest of the session. This indicator makes those levels visible and adds intelligence around when they are worth paying attention to.
Use it as a tool, not a crutch. Combine it with your own analysis. Manage your risk properly. And please, do not trade with money you cannot afford to lose.
If you have questions or feedback, I am actively maintaining this indicator and will consider feature requests for future updates.
Trade well.
Tags
ORB, Opening Range Breakout, Intraday, Day Trading, Futures, Stocks, Multi-Timeframe, Breakout, Support Resistance, Session, NQ, ES, SPY, QQQ, Opening Range, Institutional Levels
Recommended Timeframes
This indicator works best on 1-minute, 2-minute, 3-minute, 5-minute, 10-minute, and 15-minute charts. It can be used on higher timeframes, but the ORB calculation becomes less precise.
Recommended Markets
US Stock Indices and Futures including ES, NQ, YM, RTY, SPY, QQQ, DIA, IWM. Individual stocks with sufficient liquidity. Forex major pairs. Cryptocurrency with defined trading sessions.
Flow BTC/USDFlow BTC spots high probability Bitcoin entries on 15min. - 4hr charts using Heikin-Ashi candles and a 13/34 EMA ribbon.
A big LONG or SHORT triangle only fires when price is above/below daily VWAP, momentum is strong, volume surges, and price crosses the fast EMA with the trend.
Small green/red circles mark early ribbon flips, while the purple line is the daily VWAP that resets at UTC midnight.
EMA + Sessions + RSI This is a simple on-demand indicator. It includes 3 customizable exponential moving averages, three customizable market sessions, and a table showing the status of the RSI
-3 Custom EMAs
-3 Custom Sessions
-1 RSI Table
IntraDay ROCKET v2//{ HEADING
//@version=5
indicator(title='IntraDay ROCKET v2'
, shorttitle='IntraDay ROCKET v2'
, overlay=true
, max_bars_back=1000
, max_labels_count=500
, max_lines_count=500)
//}
//{ INPUTS
BarColorControl=input(title
='IntraDay Rocket Bar Colors ?',defval=true)
BGColorControl=input(title
='IntraDay Rocket Background Colors ?',defval=false)
TrailingControl=input(title
='IntraDay Rocket Guided StopLoss Lines ?',defval=true)
//}
//{ COLORS
RayBGGreen = color.rgb(69, 250, 0, 90)
RayBGRed = color.rgb(255, 58, 58, 90)
RayGreen = color.rgb(69, 250, 0)
RayRed = color.rgb(255, 58, 58)
RayOrange = color.rgb(176, 69, 0, 0)
RayBlue = color.rgb(5, 77, 231, 37)
RayBlack = color.rgb(0, 0, 0, 0)
RayWhite = color.rgb(255, 255, 255, 75)
RayWhite2 = color.rgb(255, 255, 255, 0)
RayFuscia = color.rgb(217, 23, 198, 50)
RayBG = color.rgb(150, 150, 150, 90)
BlankColor = color.rgb(150, 150, 150, 100)
//}
//{ PARAMS
Periods = 30
SRC = hl2
Multiplier = 2.0
ChangeATR = true
atr2 = ta.sma(ta.tr, Periods)
atr = ChangeATR ? ta.atr(Periods) : atr2
up = SRC - Multiplier * atr
up1 = nz(up , up)
up := close > up1 ? math.max(up, up1) : up
dn = SRC + Multiplier * atr
dn1 = nz(dn , dn)
dn := close < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend , trend)
//}
//{ STRATEGY
trend := trend == -1 and close > dn1 ? 1
: trend == 1 and close < up1 ? -1 : trend
buySignal = trend == 1 and trend == -1
upPlot = plot(trend == 1
? up : na, title='Intra Day Rocket Up Trend'
, style=plot.style_linebr
, linewidth=2
, color= TrailingControl ? RayGreen : BlankColor)
dnPlot = plot(trend == 1
? na : dn, title='Intra Day Rocket Down Trend'
, style=plot.style_linebr
, linewidth=2
, color= TrailingControl ? RayRed : BlankColor)
sellSignal = trend == -1 and trend == 1
colorthing=
BarColorControl and trend == 1 ? RayGreen
: BarColorControl and trend == -1 ? RayRed : na
plotcandle(open, high, low, close
, "Intra Day Rocket Candle Color"
, colorthing, wickcolor=colorthing)
bgcolor(
BGColorControl and trend == 1 ? RayBGGreen
: BGColorControl and trend == -1 ? RayBGRed
: BlankColor
, title="Intra Day Rocket Background Color")
//}
//{ TABLE
TableColors=
trend == 1 ? RayGreen : RayRed
var RayTable =
table.new(
position.top_right
, columns = 1
, rows = 1
, frame_width = 2
, border_width = 1)
////////////////////////
yyy =
trend == 1
? "LONG POSITION ONLY !"
: trend == -1
? "SHORT POSITION ONLY !" : na
////////////////////////
table.cell(
table_id = RayTable
, column = 0
, row = 0
, text = yyy
, text_color = RayBlack
, bgcolor = TableColors)
//}
//{ ALERTS
alertcondition(buySignal
, title='Enter Long Position'
, message='Enter Long Position!')
alertcondition(sellSignal
, title='Enter Short Position'
, message='Enter Short Position!')
changeCond = trend != trend
alertcondition(changeCond
, title='Direction Change'
, message='Changed Direction!')
//}
Price Velocity TachometerA visual gauge that breaks price action into a tachometer-style display, showing how fast price is moving up or down in real time. It measures price velocity in ticks per second and converts that momentum into an easy-to-read, center-zero meter—green when price accelerates upward, red when it accelerates downward. Ideal for spotting microbursts of momentum, shifts in pressure, and real-time strength behind each move.
Disclaimer:
This indicator is provided for informational and educational purposes only. Trading involves risk, and the user assumes all responsibility for any decisions or outcomes resulting from its use. Use at your own risk.
Fresh Algo | Signals & Overlays™ v25//@version=5
indicator("Fresh Algo | Signals & Overlays™ v25", overlay=true, max_lines_count=500, max_labels_count=500, max_boxes_count=350)
// Telegram Join Us >> t.me
//...................../´¯¯/)
//...................,/¯.../
//.................../..../
//.............../´¯/'..'/´¯¯`·¸
//.........../'/.../..../....../¨¯\
//..........('(....´...´... ¯~/'..')
//...........\..............'...../
//............\....\.........._.·´
//.............\..............(
//..............\..............\
//----
//---------
// Telegram Join Us >> t.me
bullcolor = #00dbff
bearcolor = #b2b5be
ema150 = ta.ema(close, 150)
ema250 = ta.ema(close, 250)
gr_customalert = "Custom Alerts"
gr_signal = "General Configurations"
gr_PullBacksignal = "Trading Assistants"
gr_RiskManage = "Risk Management"
gr_dash = "Dashboard Configurations"
//symbol info
symInfoCheck = false
symInfo = syminfo.ticker + ' | ' + timeframe.period + (timeframe.isminutes ? 'M' : na)
date = str.tostring(dayofmonth(time_close)) + '/' + str.tostring(month(time_close)) + '/' + str.tostring(year(time_close))
//text positioning
textVPosition = 'middle'
textHPosition = 'center'
//symbol info positioning
symVPosition = 'top'
symHPosition = 'left'
//cell size
width = 0
height = 0
//title settings
c_title = #b2b5be80
s_title = 'large'
a_title = 'center'
//subtitle settings
c_subtitle = #b2b5be80
s_subtitle = 'normal'
a_subtitle = 'center'
c_bg = color.new(color.blue, 100)
// Get user input
showSignals = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input(true, "Show Signal's", group=gr_signal) : na
//showSignals = true
sensitivity = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.float(2.4, "Sensitivity", 0.1, step=0.1, group=gr_signal): na
STuner = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.int(10, "Signal Tuner(1-25)", minval = 1, maxval = 25, group=gr_signal): na
Presets = "All Signals"
//Presets = input.string("All Signals", "Presets", , group=gr_signal)
filterstyle = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.string("Trending Signals ", "Signal Mode / Filters", ["Trending Signals ", "Contrarian Signals ", "High Volume ", "Strong ", "Swing ", "Smooth ", "Scalping ", "Scalping+ "], group=gr_signal): na
//TextStyle = input.string("Minimal", "Signal Style", , group=gr_signal)
//periodTrendCloud = input.string("Smooth", "Trend Cloud Style", , group=gr_Other_Settings)
TextStyle = "Minimal"
consSignalsFilter = filterstyle == "Trending Signals " ? true : false
StrongSignalsOnly = filterstyle == "Strong " ? true : false
highVolSignals = filterstyle == "High Volume " ? true : false
signalsTrendCloud = (filterstyle == "Smooth ") ? true : (filterstyle == "Scalping ") ? true : (filterstyle == "Scalping+ ") ? true : (filterstyle == "Swing ") ? true : false
ContrarianOnly = filterstyle == "Contrarian Signals " ? true : false
TrendMap = 'Trend Gradient'
momentumCandles = false
assistantenable = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input(true,'', group=gr_PullBacksignal, inline = 'sexyshit'): na
assistantmode = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.string('Trend Assistant', 'Assistant | Mode', , group = gr_PullBacksignal, inline = 'sexyshit'): na
Show_PR = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.bool(true, title="", group = gr_PullBacksignal , inline = "Features1"): na
MSTuner = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.int(8, "Reversal Dot | Tuner(2-30)", minval = 2, maxval = 30, group=gr_PullBacksignal, inline = "Features1"): na
LongTrendAverage = assistantmode == 'Trend Tracker' and assistantenable == true ? true : false
analyscloud = assistantmode == 'Trend Assistant' and assistantenable == true ? true : false
showTrendCloud = (filterstyle == "Smooth ") ? true : (filterstyle == "Scalping ") ? true : (filterstyle == "Scalping+ ") ? true : (filterstyle == "Swing ") ? true : false
periodTrendCloud = (filterstyle == "Smooth ") ? "Smooth" : (filterstyle == "Scalping ") ? "Scalping" : (filterstyle == "Scalping+ ") ? "Scalping+" : (filterstyle == "Swing ") ? "Swing" : na
//ScalpingPlus = input(false, "Fast trend cloud", group=gr_Other_Settings)
//fastTrendCloudLen = input.int(55, "Fast trend cloud", 2, group=gr_Other_Settings)
fill(plot(showTrendCloud and periodTrendCloud == "Smooth" ? na : assistantenable == true and assistantmode == 'Trend Tracker' ? ema150 : na, "", na, editable=false), plot(showTrendCloud and periodTrendCloud == "Smooth" ? na : assistantenable == true and assistantmode == 'Trend Tracker' ? ema250 : na, "", na, editable=false), ema150 > ema250 ? color.new(bullcolor, 70) : ema150 < ema250 ? color.new(bearcolor, 70) : na)
showDashboard = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input(true, "Smart Panel", group = gr_dash , inline = "Features1"): na
locationDashboard = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.string("Bottom Right", "Dashboard Location", , group = gr_dash , tooltip="Smart Panel"): na
sizeDashboard = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.string("Small", "Dashboard Size", , group = gr_dash , tooltip="Smart Panel"): na
tpLabels = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input(true, "Dynamic Take Profit Lables", group=gr_RiskManage): na
ShowTpSlAreas = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input(true, "Show take Profit/Stop-loss Area", group=gr_RiskManage): na
ShowTrailingSL = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input(false, "Show trailing Stop-loss", group=gr_RiskManage): na
usePercSL = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input(false, "SL/TRAILING", inline="1", group=gr_RiskManage): na
percTrailingSL = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.float(1, "", 0, step=0.1, inline="1", group=gr_RiskManage): na
useTP1 = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input(true, "", inline="1", group=gr_RiskManage): na
multTP1 = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.float(1, "TP 1", 0, inline="1", group=gr_RiskManage): na
useTP2 = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input(true, "", inline="4", group=gr_RiskManage): na
multTP2 = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.float(2, "TP 2 ", 0, inline="4", group=gr_RiskManage): na
useTP3 = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input(true, "", inline="4", group=gr_RiskManage): na
multTP3 = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.float(3, "TP 3", 0, inline="4", group=gr_RiskManage): na
ShowSwings = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input(false, "Show Market Structure ", inline="3", group=gr_RiskManage): na
periodSwings = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.int(10, " ", 2, inline="3", group=gr_RiskManage): na
//showTS = input(title='Show Trend Shifter', defval=false, group='Contrarian SIGNALS')
// showsignals = input(title='Show Signals', defval=false, group='Contrarian SIGNALS')
// Alerts Managemnt
Normalbuy_alert = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.bool(title='Buy Signal ', defval=false, inline = "NB", group=gr_customalert): na
Strongbuy_alert = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.bool(title='Strong Buy', defval=false, inline = "NB", group=gr_customalert): na
Normalsell_alert = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.bool(title='Sell Signal ', defval=false , inline = "NS", group=gr_customalert): na
Strongsell_alert = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.bool(title='Strong Sell', defval=false , inline = "NS", group=gr_customalert): na
slalert = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.bool(title='Stop-Loss ', defval=false , inline = "SLTP1", group=gr_customalert): na
tp1alert = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.bool(title='Target 1', defval=false , inline = "SLTP1", group=gr_customalert): na
tp2alert = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.bool(title='Target 2 ', defval=false , inline = "TP2TP3", group=gr_customalert): na
tp3alert = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.bool(title='Target 3', defval=false , inline = "TP2TP3", group=gr_customalert): na
bullcrosscloud_alert = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.bool(title='Bullish Cloud', defval=false, inline = "CD", group=gr_customalert): na
bearcrosscloud_alert = textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' ? input.bool(title='Bearish Cloud', defval=false, inline = "CD", group=gr_customalert): na
showCons = false
paintCons = false
// Signal Text
SimpleBuy = "Buy"
StrongB = "Strong Buy"
SimpleSell = "Sell"
StrongS = "Strong Sell"
if TextStyle == "Normal"
SimpleBuy := "Buy"
StrongB := "Strong Buy"
SimpleSell:= "Sell"
StrongS := "Strong Sell"
if TextStyle == "Minimal"
SimpleBuy := "▲"
StrongB := "▲+"
SimpleSell:= "▼"
StrongS := "▼+"
// Signal Text Color
// bullsignalcolor = #000000
// bearsignalcolor = color.rgb(0, 0, 0)
// if TextStyle == "Normal"
// bullsignalcolor := color.rgb(0, 0, 0)
// bearsignalcolor := color.rgb(0, 0, 0)
// if TextStyle == "Minimal"
// bullsignalcolor := color.rgb(0, 0, 0)
// bearsignalcolor := color.rgb(0, 0, 0)
src = close
RSII = ta.ema(ta.rsi(src, 50), 30)
TR = math.abs(RSII - RSII )
wwalpha = 1 / 50
WWMA = 0.0
WWMA := wwalpha * TR + (1 - wwalpha) * nz(WWMA )
ATRRSI = 0.0
ATRRSI := wwalpha * WWMA + (1 - wwalpha) * nz(ATRRSI )
TsFast = ta.ema(ta.rsi(src, 50), 30)
TsUP = TsFast + ATRRSI * 4.236
TsDN = TsFast - ATRRSI * 4.236
textWatermark = table.new(textVPosition + '_' + textHPosition, 1, 3)
TsSlow = 0.0
TsSlow := TsUP < nz(TsSlow ) ? TsUP : TsFast > nz(TsSlow ) and TsFast < nz(TsSlow ) ? TsDN : TsDN > nz(TsSlow ) ? TsDN : TsFast < nz(TsSlow ) and TsFast > nz(TsSlow ) ? TsUP : nz(TsSlow )
Colorh = TsFast > 55 ? color.rgb(255, 0, 0) : TsFast < 45 ? color.rgb(0, 255, 8) : #ffffff
//QQF = plot(TsFast, 'TS FAST', color=color.new(color.maroon, 100), linewidth=2, display=display.none, editable = false)
//QQS = plot(TsSlow, 'TS SLOW', color=color.new(color.white, 100), linewidth=2, display=display.none , editable = false)
//plot(TsFast, color=Colorh, linewidth=2, style=plot.style_area, histbase=50)
//BearLimit = hline(60, color=color.gray, linestyle=hline.style_dashed)
//BullLimt = hline(40, color=color.gray, linestyle=hline.style_dashed)
bulllim = 45
bearlim = 55
BullSignalr = ta.crossover(TsFast, TsSlow) and TsFast < bulllim
BearSignallr = ta.crossunder(TsFast, TsSlow) and TsFast > bearlim
/////////////////////////////////////////////////////////
// Trap Detector
////////////////////////////////////////////////////////
// Functions
wavetrend(src, chlLen, avgLen) =>
esa = ta.ema(src, chlLen)
d = ta.ema(math.abs(src - esa), chlLen)
ci = (src - esa) / (0.015 * d)
wt1 = ta.ema(ci, avgLen)
wt2 = ta.sma(wt1, 3)
f_top_fractal(src) => src < src and src < src and src > src and src > src
f_bot_fractal(src) => src > src and src > src and src < src and src < src
f_fractalize (src) => f_top_fractal(src) ? 1 : f_bot_fractal(src) ? -1 : 0
f_findDivs(src, topLimit, botLimit) =>
fractalTop = f_fractalize(src) > 0 and src >= topLimit ? src : na
fractalBot = f_fractalize(src) < 0 and src <= botLimit ? src : na
highPrev = ta.valuewhen(fractalTop, src , 0)
highPrice = ta.valuewhen(fractalTop, high , 0)
lowPrev = ta.valuewhen(fractalBot, src , 0)
lowPrice = ta.valuewhen(fractalBot, low , 0)
bearSignal = fractalTop and high > highPrice and src < highPrev
bullSignal = fractalBot and low < lowPrice and src > lowPrev
// Get components
= wavetrend(close, 5*MSTuner, 10*MSTuner)
= f_findDivs(wt2, 10, -35)
= f_findDivs(wt2, 40, -70)
wtDivBull = wtDivBull1 or wtDivBull2
wtDivBear = wtDivBear1 or wtDivBear2
plotshape(ta.crossover(wt1, wt2) and Show_PR and wt2 <= -60 and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center', "Reversal Dot Buy" , shape.circle, location.belowbar, color.new(bullcolor,60), size=size.tiny)
plotshape(ta.crossunder(wt1, wt2) and Show_PR and wt2 >= 60 and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center', "Reversal Dot Sell", shape.circle, location.abovebar, color.new(bearcolor,60), size=size.tiny)
rsi = ta.rsi(close ,14)
// Functions
f_chartTfInMinutes() =>
float _resInMinutes = timeframe.multiplier * (
timeframe.isseconds ? 1. / 60 :
timeframe.isminutes ? 1. :
timeframe.isdaily ? 60. * 24 :
timeframe.isweekly ? 60. * 24 * 7 :
timeframe.ismonthly ? 60. * 24 * 30.4375 : na)
atr(len) =>
tr = ta.tr
atr = 0.0
atr := nz(atr + (tr - atr ) / len, tr)
supertrend(src, factor, len) =>
atr = ta.atr(len)
upperBand = src + factor * atr
lowerBand = src - factor * atr
prevLowerBand = nz(lowerBand )
prevUpperBand = nz(upperBand )
lowerBand := lowerBand > prevLowerBand or close < prevLowerBand ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or close > prevUpperBand ? upperBand : prevUpperBand
int direction = na
float superTrend = na
prevSuperTrend = superTrend
if prevSuperTrend == prevUpperBand
direction := close > upperBand ? 1 : -1
else
direction := close < lowerBand ? -1 : 1
superTrend := direction == 1 ? lowerBand : direction == -1 ? upperBand : na
dchannel(len)=>
hh = ta.highest(len)
ll = ta.lowest (len)
trend = 0
trend := close > hh ? 1 : close < ll ? -1 : nz(trend )
trendScalper(show, len1, len2, len3, colorBull, colorBear, colorBarBull, colorBarBear) =>
avgOC = math.avg(open, close)
ha_o = 0.0, ha_o := na(ha_o ) ? avgOC : (ha_o + ohlc4 ) / 2
ema1 = ta.ema(ha_o, len1), ema2 = ta.ema(ha_o, len2), ema3 = ta.ema(ha_o, len3)
ris1 = ema1 > ema1 , ris2 = ema2 > ema2 , ris3 = ema3 > ema3
fal1 = ema1 < ema1 , fal2 = ema2 < ema2 , fal3 = ema3 < ema3
colorEma1 = ris1 ? colorBull : fal1 ? colorBear : na, colorEma2 = ris2 ? colorBull : fal2 ? colorBear : na, colorEma3 = ris3 ? colorBull : fal3 ? colorBear : na
fillEma1 = avgOC > ema1 ? colorBull : avgOC < ema1 ? colorBear : na, fillEma2 = ema1 > ema2 ? colorBull : ema1 < ema2 ? colorBear : na, fillEma3 = ema2 > ema3 ? colorBull : ema2 < ema3 ? colorBear : na
colorBar = close < ema1 and close < ema2 ? colorBarBear : colorBarBull
candlesMom() =>
= ta.macd(close, 2, 4, 3)
(macd > 10 and macd > macd ) or (macd < 10 and macd < macd )
trailingSL(buy, sell, factor, len, usePerc, perc) =>
atr = atr(len)
upperBand = high + (usePerc ? high * (perc / 100) : factor * atr)
lowerBand = low - (usePerc ? low * (perc / 100) : factor * atr)
prevLowerBand = nz(lowerBand )
prevUpperBand = nz(upperBand )
lowerBand := lowerBand > prevLowerBand or buy ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or sell ? upperBand : prevUpperBand
int direction = na
float stop = na
prevSuperTrend = stop
if prevSuperTrend == prevUpperBand
direction := buy ? 1 : -1
else
direction := sell ? -1 : 1
stop := direction == 1 ? lowerBand : direction == -1 ? upperBand : na
add_to_zz(zz, val, bi) =>
array.unshift(zz, bi)
array.unshift(zz, val)
if array.size(zz) > 12
array.pop(zz)
update_zz(zz, val, bi, dir) =>
if array.size(zz) == 0
add_to_zz(zz, val, bi)
else
if dir == 1 and val > array.get(zz, 0) or dir == -1 and val < array.get(zz, 0)
array.set(zz, 0, val)
array.set(zz, 1, bi)
0
// Get components
vosc = ta.obv - ta.ema(ta.obv, 20)
bs = ta.ema(nz(math.abs((open - close) / (high - low) * 100)), 3)
ema = ta.ema(close, 200)
emaBull = close > ema
equal_tf(res) => str.tonumber(res) == f_chartTfInMinutes()
higher_tf(res) => str.tonumber(res) > f_chartTfInMinutes()
too_small_tf(res) => (timeframe.isweekly and res=="1") or (timeframe.ismonthly and str.tonumber(res) < 10)
securityNoRep(sym, res, src) =>
bool bull = na
bull := equal_tf(res) ? src : bull
bull := higher_tf(res) ? request.security(sym, res, src, barmerge.gaps_off, barmerge.lookahead_on) : bull
bull_array = request.security_lower_tf(syminfo.tickerid, higher_tf(res) ? str.tostring(f_chartTfInMinutes()) : too_small_tf(res) ? (timeframe.isweekly ? "3" : "10") : res, src)
if array.size(bull_array) > 1 and not equal_tf(res) and not higher_tf(res)
bull := array.pop(bull_array)
array.clear(bull_array)
bull
//TF1Bull = securityNoRep(syminfo.tickerid, "1" , emaBull)
//TF3Bull = securityNoRep(syminfo.tickerid, "3" , emaBull)
TF5Bull = securityNoRep(syminfo.tickerid, "5" , emaBull)
//TF10Bull = securityNoRep(syminfo.tickerid, "10" , emaBull)
TF15Bull = securityNoRep(syminfo.tickerid, "15" , emaBull)
TF30Bull = securityNoRep(syminfo.tickerid, "30" , emaBull)
TF60Bull = securityNoRep(syminfo.tickerid, "60" , emaBull)
//TF120Bull = securityNoRep(syminfo.tickerid, "120" , emaBull)
TF240Bull = securityNoRep(syminfo.tickerid, "240" , emaBull)
//TF720Bull = securityNoRep(syminfo.tickerid, "720" , emaBull)
//TFDBull = securityNoRep(syminfo.tickerid, "1440", emaBull)
hma55 = ta.hma(close, 55 )
= ta.macd(close, 12, 26, 9)
supertrend = supertrend(close, sensitivity, STuner)
maintrend = dchannel(30)
confBull = (ta.crossover (close, supertrend) or (ta.crossover (close, supertrend) and maintrend < 0)) and macd > 0 and macd > macd and ema150 > ema250 and hma55 > hma55 and maintrend > 0 and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center'
confBear = (ta.crossunder(close, supertrend) or (ta.crossunder(close, supertrend) and maintrend > 0)) and macd < 0 and macd < macd and ema150 < ema250 and hma55 < hma55 and maintrend < 0 and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center'
trendcloud = supertrend(ohlc4, periodTrendCloud == "Swing" ? 7 : 4, 10)
hma = periodTrendCloud == "Scalping+" ? ta.hma(close, 55) : na
none = close > 0
= ta.dmi(14, 14)
consFilter = adx > 20
ContBear = TsFast > 65
ContBull = TsFast < 35
StrongFilter = ta.ema(close, 200)
//volFilter = (ta.ema(volume, 25) - ta.ema(volume, 26)) / ta.ema(volume, 26) > 0
volFilter = (ta.ema(volume, 15) - ta.ema(volume, 20)) / ta.ema(volume, 25) > 0
trendFilter = trendcloud
bull = (Presets == "All Signals" ? ta.crossover (close, supertrend) : confBull and not confBull ) and Presets != "Trend Scalper" and (StrongSignalsOnly ? close > StrongFilter : none) and (ContrarianOnly ? ContBull : none) and (consSignalsFilter ? consFilter : none) and (highVolSignals ? volFilter : none) and (signalsTrendCloud ? (periodTrendCloud == "Smooth" ? ema150 > ema250 : close > trendFilter) : none)
bear = (Presets == "All Signals" ? ta.crossunder(close, supertrend) : confBear and not confBear ) and Presets != "Trend Scalper" and (StrongSignalsOnly ? close < StrongFilter : none) and (ContrarianOnly ? ContBear : none) and (consSignalsFilter ? consFilter : none) and (highVolSignals ? volFilter : none) and (signalsTrendCloud ? (periodTrendCloud == "Smooth" ? ema150 < ema250 : close < trendFilter) : none)
countBull = ta.barssince(bull)
countBear = ta.barssince(bear)
trigger = nz(countBull, bar_index) < nz(countBear, bar_index) ? 1 : 0
= trendScalper(Presets == "Trend Scalper" ? true : false, 5, 9, 21, bullcolor, bearcolor, bullcolor, bearcolor)
trailingStop = trailingSL(bull, bear, 2.2, 14, usePercSL, percTrailingSL)
float _ph = ta.highestbars(high, periodSwings) == 0 ? high : na
float _pl = ta.lowestbars (low, periodSwings) == 0 ? low : na
var _dir = 0, dir_ = _pl and na(_ph) ? -1 : _dir, _dir := _ph and na(_pl) ? 1 : dir_, dirChg = ta.change(_dir)
var zz = array.new_float(0), zzOld = array.copy(zz)
float zzLive = _ph or _pl ? (dirChg ? add_to_zz(zz, _dir == 1 ? _ph : _pl, bar_index) : update_zz(zz, _dir == 1 ? _ph : _pl, bar_index, _dir)) : na
float hb_ = ta.highestbars(10) == 0 ? high : na
float lb_ = ta.lowestbars (10) == 0 ? low : na
var int dir = 0
float zz_ = na
float pp = na
var int consCnt = 0
var float condHi = na
var float condLo = na
float H_ = ta.highest(5)
float L_ = ta.lowest (5)
var line lineUp = na
var line lineDn = na
bool breakUp = false
bool breakDn = false
var float pvh1_price = array.new_float(1000, na)
var int pvh1_time = array.new_int (1000, na)
var float pvl1_price = array.new_float(1000, na)
var int pvl1_time = array.new_int (1000, na)
var float pvh2_price = array.new_float(1000, na)
var int pvh2_time = array.new_int (1000, na)
var float pvl2_price = array.new_float(1000, na)
var int pvl2_time = array.new_int (1000, na)
var float htcmrll_price = na
var int htcmrll_time = na
var float ltcmrhh_price = na
var int ltcmrhh_time = na
var box long_boxes = array.new_box()
var box short_boxes = array.new_box()
var float temp_pv_0 = na
var float temp_pv_1 = na
var float temp_pv_2 = na
bool pvh = high < high and high > high
bool pvl = low > low and low < low
int pv1_time = bar_index
float pv1_high = high
float pv1_low = low
var buyBars = array.new_box(365, na)
for i = 0 to 364
box.delete(array.get(buyBars, i))
var sellBars = array.new_box(365, na)
for i = 0 to 364
box.delete(array.get(sellBars, i))
// Colors
green = bullcolor, green50 = color.new(green, 50), green20 = color.new(green, 80)
red = bearcolor, red50 = color.new(red, 50), red20 = color.new(red, 80)
silver = #B2B5BE, silver50 = color.new(silver, 50), silver20 = color.new(silver, 80)
// Plots
atrBand = usePercSL ? (trigger ? low : high) * (percTrailingSL / 100) : ta.atr(14) * 2.2
atrStop = trigger ? low - atrBand : high + atrBand
lastTrade(src) => ta.valuewhen(bull or bear, src, 0)
entry_y = lastTrade(close)
stop_y = lastTrade(atrStop)
tp1_y = (entry_y-lastTrade(atrStop))*multTP1 + entry_y
tp2_y = (entry_y-lastTrade(atrStop))*multTP2 + entry_y
tp3_y = (entry_y-lastTrade(atrStop))*multTP3 + entry_y
labelTpSl(cond, y, txt, color) =>
label labelTpSl = ShowTpSlAreas and cond ? label.new(bar_index + 1, y, txt, xloc.bar_index, yloc.price, color, label.style_label_left, color.white, size.normal) : na
label.delete(labelTpSl )
labelTpSl(none, entry_y, "Entry : " + str.tostring(math.round_to_mintick(entry_y)), color.orange)
labelTpSl(none, stop_y , "Stop loss : " + str.tostring(math.round_to_mintick(atrStop)), bearcolor)
labelTpSl(useTP1 and multTP1 != 0, tp1_y, "TP 1 : " + str.tostring(math.round_to_mintick(tp1_y)), bullcolor)
labelTpSl(useTP2 and multTP2 != 0, tp2_y, "TP 2 : " + str.tostring(math.round_to_mintick(tp2_y)), bullcolor)
labelTpSl(useTP3 and multTP3 != 0, tp3_y, "TP 3 : " + str.tostring(math.round_to_mintick(tp3_y)), bullcolor)
lineTpSl(cond, y, color, style) =>
line lineTpSl = ShowTpSlAreas and cond ? line.new(bar_index - (trigger ? countBull : countBear), y, bar_index + 1, y, xloc.bar_index, extend.none, color, style) : na
line.delete(lineTpSl )
lineTpSl(none, entry_y, color.orange, line.style_dashed)
lineTpSl(none, stop_y , bearcolor , line.style_solid )
lineTpSl(useTP1 and multTP1 != 0, tp1_y, bullcolor, line.style_dotted)
lineTpSl(useTP2 and multTP2 != 0, tp2_y, bullcolor, line.style_dotted)
lineTpSl(useTP3 and multTP3 != 0, tp3_y, bullcolor, line.style_dotted)
buy = showSignals and bull ? label.new(bar_index, low , close > StrongFilter ? StrongB : SimpleBuy , xloc.bar_index, yloc.belowbar, bullcolor, label.style_label_up , #000000, size.normal) : na
sell = showSignals and bear ? label.new(bar_index, high, close < StrongFilter ? StrongS : SimpleSell , xloc.bar_index, yloc.abovebar, bearcolor , label.style_label_down, #000000, size.normal) : na
tpLabels(tp) =>
tp1Bull = ta.crossover (rsi, 70), tp2Bull = ta.crossover (rsi, 75), tp3Bull = ta.crossover (rsi, 80)
tp1Bear = ta.crossunder(rsi, 30), tp2Bear = ta.crossunder(rsi, 25), tp3Bear = ta.crossunder(rsi, 20)
tp1Bull := tp1Bull and (nz(ta.barssince(tp1Bull) , 9999) > countBull), tp2Bull := tp2Bull and (ta.barssince(tp1Bull) <= countBull), tp2Bull := tp2Bull and (nz(ta.barssince(tp2Bull) , 9999) > countBull), tp3Bull := tp3Bull and (ta.barssince(tp2Bull) <= countBull), tp3Bull := tp3Bull and (nz(ta.barssince(tp3Bull) , 9999) > countBull)
tp1Bear := tp1Bear and (nz(ta.barssince(tp1Bear) , 9999) > countBear), tp2Bear := tp2Bear and (ta.barssince(tp1Bear) <= countBear), tp2Bear := tp2Bear and (nz(ta.barssince(tp2Bear) , 9999) > countBear), tp3Bear := tp3Bear and (ta.barssince(tp2Bear) <= countBear), tp3Bear := tp3Bear and (nz(ta.barssince(tp3Bear) , 9999) > countBear)
if Presets != "Trend Scalper" and tpLabels
trigger ? (tp == 1 ? tp1Bull : tp == 2 ? tp2Bull : tp3Bull) : (tp == 1 ? tp1Bear : tp == 2 ? tp2Bear : tp3Bear)
plotshape(tpLabels(1), "", shape.xcross, location.abovebar, trigger ? green : na , 0, "TP 1", trigger ? green : na , false)
plotshape(tpLabels(2), "", shape.xcross, location.abovebar, trigger ? green : na , 0, "TP 2", trigger ? green : na , false)
plotshape(tpLabels(3), "", shape.xcross, location.abovebar, trigger ? green : na , 0, "TP 3", trigger ? green : na , false)
plotshape(tpLabels(1), "", shape.xcross, location.belowbar, trigger ? na : red, 0, "TP 1", trigger ? na : red, false)
plotshape(tpLabels(2), "", shape.xcross, location.belowbar, trigger ? na : red, 0, "TP 2", trigger ? na : red, false)
plotshape(tpLabels(3), "", shape.xcross, location.belowbar, trigger ? na : red, 0, "TP 3", trigger ? na : red, false)
var label zzLabel = na
if array.size(zz) > 12 and ShowSwings
if array.get(zz, 0) != array.get(zzOld, 0) or array.get(zz, 1) != array.get(zzOld, 1)
if array.get(zz, 2) == array.get(zzOld, 2) and array.get(zz, 3) == array.get(zzOld, 3)
label.delete(zzLabel)
zzLabel := label.new(math.round(array.get(zz, 1)), array.get(zz, 0), _dir == 1 ? array.get(zz, 0) > array.get(zz, 4) ? ((array.get(zz, 4) < array.get(zz, 8)) ? "High" : "HH") : "LH" : array.get(zz, 0) < array.get(zz, 4) ? ((array.get(zz, 4) > array.get(zz, 8)) ? "Low" : "LL") : "HL", xloc.bar_index, yloc.price, color.new(color.white, 100), _dir == 1 ? label.style_label_down : label.style_label_up, _dir == 1 ? bullcolor : bearcolor)
if showCons and barstate.isconfirmed
dir := hb_ and na(lb_) ? 1 : lb_ and na(hb_) ? -1 : dir
if hb_ and lb_
if dir == 1
zz_ := hb_
else
zz_ := lb_
else
zz_ := hb_ ? hb_ : lb_ ? lb_ : na
for x = 0 to 1000
if na(close) or dir != dir
break
if zz_
if na(pp)
pp := zz_
else
if dir == 1 and zz_ > pp
pp := zz_
if dir == -1 and zz_ < pp
pp := zz_
if pp != pp
if consCnt > 5
if pp > condHi
breakUp := true
if pp < condLo
breakDn := true
if consCnt > 0 and pp <= condHi and pp >= condLo
consCnt += 1
else
consCnt := 0
else
consCnt += 1
if consCnt >= 5
if consCnt == 5
condHi := H_
condLo := L_
else
line.delete(lineUp)
line.delete(lineDn)
condHi := math.max(condHi, high)
condLo := math.min(condLo, low )
lineUp := line.new(bar_index, condHi , bar_index - consCnt, condHi , color=bearcolor , style=line.style_dashed)
lineDn := line.new(bar_index, condLo , bar_index - consCnt, condLo , color=color.lime, style=line.style_dashed)
fill(plot(condHi, "", na, 1, plot.style_stepline, editable=false), plot(condLo, "", na, 1, plot.style_stepline, editable=false), paintCons and consCnt > 5 ? color.white : na, "", false)
//buy_col = color.new(#0ac20a,0)
//sell_col = color.new(#fd1605,0)
//text_col = color.new(#FFFFFF,0)
// -------- Bearish trend (blue) color selection --------
// getSellColor(count) =>
// if count == 1
// color.new(#11e7f2,0)
// else
// if count == 2
// color.new(#11d9f2,0)
// else
// if count == 3
// color.new(#11cbf2,0)
// else
// if count == 4
// color.new(#11aff2,0)
// else
// if count == 5
// color.new(#1193f2,0)
// else
// if count == 6
// color.new(#1176f2,0)
// else
// if count == 7
// color.new(#105df4,0)
// else
// if count == 8
// color.new(#1051f5,0)
// else
// if count == 9
// color.new(#0f44f5,0)
// else
// if count == 10
// color.new(#0c3de0,0)
// else
// if count == 11
// color.new(#0935ca,0)
// else
// if count == 12
// color.new(#062eb4,0)
// else
// if count == 13
// color.new(#02269e,0)
// -------- Bullish trend (blue) color selection --------
// getBuyColor(count) =>
// if count == 1
// color.new(#eef211,0)
// else
// if count == 2
// color.new(#efdc11,0)
// else
// if count == 3
// color.new(#f0c511,0)
// else
// if count == 4
// color.new(#f1af11,0)
// else
// if count == 5
// color.new(#f29811,0)
// else
// if count == 6
// color.new(#f28811,0)
// else
// if count == 7
// color.new(#f27811,0)
// else
// if count == 8
// color.new(#f26811,0)
// else
// if count == 9
// color.new(#f25811,0)
// else
// if count == 10
// color.new(#ea420d,0)
// else
// if count == 11
// color.new(#e12c09,0)
// else
// if count == 12
// color.new(#d81605,0)
// else
// if count == 13
// color.new(#cf0000,0)
// -------- Calculate bearish trend sequence --------
buySetup = 0
buySetup := close < close ? buySetup == 13 ? 1 : buySetup + 1 : 0
// -------- Calculate bullish trend sequence --------
sellSetup = 0
sellSetup := close > close ? sellSetup == 13 ? 1 : sellSetup + 1 : 0
// -------- Paint bars --------
//barColour = buySetup >= 1 ? getBuyColor(buySetup) : sellSetup >= 1 ? getSellColor(sellSetup) : na
// Candle Coloring
// Input
FastteyLength = 12
SjlowLeyLength = 26
srrrc = close
signalXLength = 9
// Data reference
= ta.macd(srrrc, FastteyLength, SjlowLeyLength, signalXLength)
// 4 level of green
// greenHigh = #eeff00
// greenMidHigh = #c7ca00
// greenMidLow = #ddb500
// greenLow = #8635ff
// // Yellow
// yellowLow = #8635ff
// // 4 level of red
// redHigh = #ffffff
// redMidHigh = #cecece
// redMidLow = #dbdbdb
// redLow = #8635ff
// // Default color
// candleBody = yellowLow
// // Ranging trend
// if histX > 0
// if histX > histX and histX > 0
// candleBody := greenLow
// if histX < 0
// if histX < histX and histX < 0
// candleBody := redLow
// // Bullish trend
// if MacdX > 0 and histX > 0
// candleBody := greenMidLow
// if histX > histX and MacdX > 0 and histX > 0
// candleBody := greenMidHigh
// if histX > histX and MacdX > 0 and histX > 0
// candleBody := greenHigh
// // Bearish trend
// if MacdX < 0 and histX < 0
// candleBody := redMidLow
// if histX < histX and MacdX < 0 and histX < 0
// candleBody := redMidHigh
// if histX < histX and MacdX < 0 and histX < 0
// candleBody := redHigh
//barcolor(candleBody)
//barcolor(TrendMap == 'RSI Gradient' ? barColour : na, title='Bar colors (heatmap)',editable=false)
//barcolor(momentumCandles and candlesMom() ? color.rgb(187, 187, 187) : TrendMap == 'Signal Based' ? (Presets == "Trend Scalper" ? colorBar : na(countBull) and na(countBear) ? color.gray : trigger ? bullcolor : bearcolor) : TrendMap == 'RSI Gradient' ? barColour : TrendMap == 'Trend Gradient' ? candleBody : na , editable=false)
//plotcandle(open, high, low, close , color = momentumCandles and candlesMom() ? color.rgb(187, 187, 187) : TrendMap == 'Signal Based' ? (Presets == "Trend Scalper" ? colorBar : na(countBull) and na(countBear) ? color.gray : trigger ? bullcolor : bearcolor) : TrendMap == 'RSI Gradient' ? barColour : TrendMap == 'Trend Gradient' ? candleBody : na , editable=false , wickcolor = momentumCandles and candlesMom() ? color.rgb(187, 187, 187) : TrendMap == 'Signal Based' ? (Presets == "Trend Scalper" ? colorBar : na(countBull) and na(countBear) ? color.gray : trigger ? bullcolor : bearcolor) : TrendMap == 'RSI Gradient' ? barColour : TrendMap == 'Trend Gradient' ? candleBody : na , editable=false , bordercolor = momentumCandles and candlesMom() ? color.rgb(187, 187, 187) : TrendMap == 'Signal Based' ? (Presets == "Trend Scalper" ? colorBar : na(countBull) and na(countBear) ? color.gray : trigger ? bullcolor : bearcolor) : TrendMap == 'RSI Gradient' ? barColour : TrendMap == 'Trend Gradient' ? candleBody : na , editable=false , editable = false)
fill(plot(showTrendCloud and periodTrendCloud == "Smooth" ? ema150 : na, "", na, editable=false), plot(showTrendCloud and periodTrendCloud == "Smooth" ? ema250 : na, "", na, editable=false), ema150 > ema250 ? color.new(bullcolor, 70) : ema150 < ema250 ? color.new(bearcolor, 70) : na)
plot(ShowTrailingSL and trigger and nz(ta.barssince(low < trailingStop), bar_index) > countBull ? trailingStop : na, "", green, 1, plot.style_linebr, editable=false)
plot(ShowTrailingSL and not trigger and nz(ta.barssince(high > trailingStop), bar_index) > countBear ? trailingStop : na, "", red , 1, plot.style_linebr, editable=false)
p0 = plot(avgOC, "", na , editable=false)
p1 = plot(ema5 , "", colorEma5 , editable=false)
p2 = plot(ema9 , "", colorEma9 , editable=false)
p3 = plot(ema21, "", colorEma21, editable=false)
plot(LongTrendAverage ? ta.ema(close, 250) : na, 'Trend Tracer', linewidth=2, color=close > ta.ema(close, 250) ? color.new(bullcolor, 45) : color.new(bearcolor, 45))
fill(p0, p1, fillEma5 )
fill(p1, p2, fillEma9 )
fill(p2, p3, fillEma21)
fill(plot(showTrendCloud and periodTrendCloud != "Smooth" and periodTrendCloud != "Scalping+" and trendcloud != 0 and close > trendcloud ? trendcloud : na, "", bullcolor, 1, plot.style_linebr, editable=false), p0, color.new(bullcolor, 90))
fill(plot(showTrendCloud and periodTrendCloud != "Smooth" and periodTrendCloud != "Scalping+" and trendcloud != 0 and close < trendcloud ? trendcloud : na, "", bearcolor , 1, plot.style_linebr, editable=false), p0, color.new(bearcolor , 90))
//fill(plot(hma, "", hma > hma ? green : hma < hma ? red : na, editable=false), plot(hma , "", hma > hma ? green : hma < hma ? red : na, editable=false), hma > hma ? green : hma < hma ? red : na)
////////////////////////////////////////////////////////////////////////////////////////////////
// Get user input
indicatorTF = "Chart"
// Functions
sqz(bbLen, bbMult, kcLen, kcMult, source) =>
upperBB = ta.sma(source, bbLen) + ta.stdev(source, bbLen) * bbMult
lowerBB = ta.sma(source, bbLen) - ta.stdev(source, bbLen) * bbMult
upperKC = ta.sma(source, kcLen) + ta.sma(ta.tr, kcLen) * kcMult
lowerKC = ta.sma(source, kcLen) - ta.sma(ta.tr, kcLen) * kcMult
sqzOn = lowerBB > lowerKC and upperBB < upperKC
sqzOff = lowerBB < lowerKC and upperBB > upperKC
qqe(rsiLen, rsiSmooth, factor, source, bbLen, bbMult) =>
rsiMa = ta.ema(ta.rsi(source, rsiLen), rsiSmooth)
delta = ta.ema(ta.ema(math.abs(ta.mom(rsiMa, 1)), rsiLen * 2 - 1), rsiLen * 2 - 1) * factor
longBand = 0.0, longBand := rsiMa > longBand and rsiMa > longBand ? math.max(longBand , rsiMa - delta) : rsiMa - delta
shortBand = 0.0, shortBand := rsiMa < shortBand and rsiMa < shortBand ? math.min(shortBand , rsiMa + delta) : rsiMa + delta
cross1 = ta.cross(rsiMa, shortBand )
cross2 = ta.cross(rsiMa, longBand )
trend = 0.0, trend := cross1 ? 1 : cross2 ? -1 : nz(trend , 1)
fastDelta = trend == 1 ? longBand : shortBand
_hist = rsiMa - 50
_line = fastDelta - 50
= ta.bb(_line, bbLen, bbMult)
// Get components
cond(_offset) =>
top = ta.highest(high, 10)
bot = ta.lowest(low, 10)
osc = ta.ema(hlc3, 5) - ta.ema(ohlc4, 20)
oscRis = osc > osc
oscFal = osc < osc
oscA0 = osc > 0
oscB0 = osc < 0
oscTop = oscFal and oscRis
oscBot = oscRis and oscFal
bullR = oscB0 and oscBot and ((osc > ta.valuewhen(oscB0 and oscBot, osc, 1) and bot < ta.valuewhen(oscB0 and oscBot, bot, 1)))
bearR = oscA0 and oscTop and ((osc < ta.valuewhen(oscA0 and oscTop, osc, 1) and top > ta.valuewhen(oscA0 and oscTop, top, 1)))
bullH = oscB0 and oscBot and ((osc < ta.valuewhen(oscB0 and oscBot, osc, 1) and bot > ta.valuewhen(oscB0 and oscBot, bot, 1)))
bearH = oscA0 and oscTop and ((osc > ta.valuewhen(oscA0 and oscTop, osc, 1) and top < ta.valuewhen(oscA0 and oscTop, top, 1)))
= sqz(20, 2, 20, 2, close)
= qqe(6, 6, 3, close, 50, 0.001)
= qqe(6, 5, 1.618, close, 50, 1)
= ta.dmi(14, 14)
[osc , oscRis , oscFal , oscA0 , oscB0 , oscTop , oscBot , bullR , bearR , bullH , bearH , sqzOn , sqzOff , _hist1 , upper1 , lower1 , _hist2 , _line2 , tvr ]
tf = indicatorTF == "Chart" ? timeframe.period : indicatorTF == "1 minute" ? "1" : indicatorTF == "3 minutes" ? "3" : indicatorTF == "5 minutes" ? "5" : indicatorTF == "10 minutes" ? "10" : indicatorTF == "15 minutes" ? "15" : indicatorTF == "30 minutes" ? "30" : indicatorTF == "45 minutes" ? "45" : indicatorTF == "1 hour" ? "60" : indicatorTF == "2 hours" ? "120" : indicatorTF == "3 hours" ? "180" : indicatorTF == "4 hours" ? "240" : indicatorTF == "12 hours" ? "720" : indicatorTF == "1 day" ? "1D" : indicatorTF == "1 week" ? "1W" : indicatorTF == "1 month" ? "1M" : na
= request.security(syminfo.tickerid, tf, cond(indicatorTF != "Chart" and barstate.isrealtime ? 1 : 0))
//colorTVR = tvr < 15 ? #F6525F : tvr > 15 and tvr < 25 ? #B2B5BE : #66BB6A
// Plots
//plot(Presets == "Money Moves TrendVR" ? tvr : na, "", colorTVR, editable=false)
TrendText = "Trending"
if tvr < 15 and tvr < 25
TrendText := "No trend"
if tvr > 15 and tvr < 25
TrendText := "Ranging"
//------------------------------------------------------------------------------------------------------- Volatitiry
//Calculates Volatility for Dashboard
atrr = 3 * ta.atr(10)
stdAtr = 2 * ta.stdev(atrr, 20)
smaAtr = ta.sma(atrr, 20)
topAtrDev = smaAtr + stdAtr
bottomAtrDev = smaAtr - stdAtr
calcDev = (atrr - bottomAtrDev) / (topAtrDev - bottomAtrDev)
percentVol = 40 * calcDev + 30
AvrLength = 21
PercentFilter = 144
xAavrVolume = ta.rma(volume, AvrLength)
nResLess = volume * 100 / xAavrVolume < PercentFilter ? 0 : volume
nRes = nResLess
clr = close < open ? #b2b5be : #00dbff
//plot(nRes, color=clr, style=plot.style_columns, title='Volume Filter', transp=20)
VolitiText = "Inactive"
if nRes
VolitiText := "Active"
//////////////////////////////////////////
ema69 = ta.ema(close, 9)
totalSentTxt = ema69 > ema69 ? 'Bullish' : ema69 < ema69 ? 'Bearish' : 'Flat'
// INputs
//Timezones
tz_incr = 0
use_exchange = false
//------------------------------------------------------------------------------
//Settings
//-----------------------------------------------------------------------------{
//Session A
NYSes = true
NYTxt = 'New York'
NYTime = '1300-2200'
//Session B
LDSes = true
sesb_txt = 'London'
sesb_ses = '0700-1600'
//Session C
show_sesc = true
sesc_txt = 'Tokyo'
sesc_ses = '0000-0900'
//Session D
show_sesd = true
sesd_txt = 'Sydney'
sesd_ses = '2100-0600'
//-----------------------------------------------------------------------------}
//Sessions
//-----------------------------------------------------------------------------{
tff = timeframe.period
var tz = use_exchange ? syminfo.timezone :
str.format('UTC{0}{1}', tz_incr >= 0 ? '+' : '-', math.abs(tz_incr))
is_sesa = math.sign(nz(time(tff, NYTime, tz)))
is_sesb = math.sign(nz(time(tff, sesb_ses, tz)))
is_sesc = math.sign(nz(time(tff, sesc_ses, tz)))
is_sesd = math.sign(nz(time(tff, sesd_ses, tz)))
////////////////////////////////////////////
SessionText = "Default"
if is_sesd
SessionText := sesd_txt
if is_sesc
SessionText := sesc_txt
if is_sesb
SessionText := sesb_txt
if is_sesa
SessionText := NYTxt
if is_sesd and is_sesc
SessionText := "Sydney/Tokyo"
if is_sesb and is_sesc
SessionText := "Tokyo/London"
if is_sesb and is_sesa
SessionText := "London/Newyork"
if is_sesa and is_sesd
SessionText := "Newyork/Sydney"
//-----------------------------------------------------------------------------}
//Overlays color.green : color.red
//
var dashboard_loc = locationDashboard == "Top Right" ? position.top_right : locationDashboard == "Middle Right" ? position.middle_right : locationDashboard == "Bottom Right" ? position.bottom_right : locationDashboard == "Top Center" ? position.top_center : locationDashboard == "Middle Center" ? position.middle_center : locationDashboard == "Bottom Center" ? position.bottom_center : locationDashboard == "Top Left" ? position.top_left : locationDashboard == "Middle Left" ? position.middle_left : position.bottom_left
var dashboard_size = sizeDashboard == "Large" ? size.large : sizeDashboard == "Normal" ? size.normal : sizeDashboard == "Small" ? size.small : size.tiny
var dashboard = showDashboard ? table.new(dashboard_loc, 3, 7, color.rgb(30, 34, 45 , 60), #3d384300, 2, color.rgb(30, 34, 45 , 60), 1) : na
dashboard_cell(column, row, txt, signal=false) => table.cell(dashboard, column, row, txt, 0, 0, signal ? #000000 : color.white, text_size=dashboard_size)
dashboard_cell_bg(column, row, col) => table.cell_set_bgcolor(dashboard, column, row, col)
if barstate.islast and showDashboard
// MTF Trend
dashboard_cell(0, 0 , "MTF")
dashboard_cell(0, 2 , "M5") , dashboard_cell_bg(0, 2 , TF5Bull ? #00dbff : #b2b5be)
dashboard_cell(0, 3 , "M15") , dashboard_cell_bg(0, 3 , TF15Bull ? #00dbff : #b2b5be)
dashboard_cell(0, 4 , "M30") , dashboard_cell_bg(0, 4 , TF30Bull ? #00dbff : #b2b5be)
dashboard_cell(0, 5 , "1H") , dashboard_cell_bg(0, 5 , TF60Bull ? #00dbff : #b2b5be)
dashboard_cell(0, 6 , "4H") , dashboard_cell_bg(0, 6 , TF240Bull ? #00dbff : #b2b5be)
// Middel part
dashboard_cell(1, 0 , "Fresh Algo | Signals & Overlays™")
dashboard_cell(1, 2 , "🔥 Market State ")
dashboard_cell(1, 3 , "⚠️ Volatility ")
dashboard_cell(1, 4 , "🏦 Institutional Activity ")
dashboard_cell(1, 5 , "🕒 Current Session (UTC) ")
dashboard_cell(1, 6 , "🌊 Trend Pressure ")
// End part
dashboard_cell(2, 0 , "")
dashboard_cell(2, 2 , TrendText)
dashboard_cell(2, 3 , str.tostring(percentVol, '##.##') + '%')
dashboard_cell(2, 4 , VolitiText)
dashboard_cell(2, 5 , SessionText)
dashboard_cell(2, 6 , totalSentTxt)
// Alerts
f_sl_crossed() =>
ret = false
stop = ShowTrailingSL ? trailingStop : stop_y
crossBull = low >= stop and low < stop and ta.barssince(low >= stop and low < stop ) >= countBull - 1
crossBear = high <= stop and high > stop and ta.barssince(high <= stop and high > stop ) >= countBear - 1
ret := trigger ? crossBull : crossBear
f_tp_crossed(tp) =>
ret = false
profit = tp
crossBull = high <= profit and high > profit and ta.barssince(high <= profit and high > profit ) >= countBull - 1
crossBear = low >= profit and low < profit and ta.barssince(low >= profit and low < profit ) >= countBear - 1
ret := trigger ? crossBull : crossBear
alert01 = (bull and close <= StrongFilter) or (bear and close >= StrongFilter)
alert02 = bull or bear
alert03 = (bull and close > StrongFilter) or (bear and close < StrongFilter)
alert04 = bull and close <= StrongFilter
alert06 = bear and close >= StrongFilter
alert07 = bull and close > StrongFilter
alert08 = bear and close < StrongFilter
alert09 = f_sl_crossed()
alert11 = f_tp_crossed(tp1_y)
alert12 = f_tp_crossed(tp2_y)
alert13 = f_tp_crossed(tp3_y)
alert14 = periodTrendCloud == "Smooth" ? ta.crossunder(ema150, ema250) : (close < trendcloud) and (close > trendcloud)
alert15 = periodTrendCloud == "Smooth" ? ta.crossover (ema150, ema250) : (close > trendcloud) and (close < trendcloud)
// Signal Alerts
if alert04 and Normalbuy_alert
alert('Buy Signal Alert !!!' , alert.freq_once_per_bar_close)
alert(syminfo.tickerid)
if alert07 and Strongbuy_alert
alert('Strong Buy Signal Alert !!!', alert.freq_once_per_bar_close)
alert(syminfo.tickerid)
if (bear and close >= StrongFilter) and Normalsell_alert
alert('Sell Signal Alert !!!', alert.freq_once_per_bar_close)
alert(syminfo.tickerid)
if (bear and close < StrongFilter) and Strongsell_alert
alert('Strong Sell Signal Alert !!!', alert.freq_once_per_bar_close)
alert(syminfo.tickerid)
// Risk Management Alerts
if alert09 and slalert
alert('SL Alert !!!', alert.freq_once_per_bar_close)
alert(syminfo.tickerid)
if alert11 and tp1alert
alert('Target 1 Alert !!!', alert.freq_once_per_bar_close)
alert(syminfo.tickerid)
if alert12 and tp2alert
alert('Target 2 Alert !!!', alert.freq_once_per_bar_close)
alert(syminfo.tickerid)
if alert13 and tp3alert
alert('Target 3 Alert !!!', alert.freq_once_per_bar_close)
alert(syminfo.tickerid)
// Cloud Alert
if alert15 and bullcrosscloud_alert
alert('Cloud Turned Bullish !!!', alert.freq_once_per_bar_close)
alert(syminfo.tickerid)
if alert14 and bearcrosscloud_alert
alert('Cloud Turned Bearish !!!', alert.freq_once_per_bar_close)
alert(syminfo.tickerid)
alertcondition(alert01, "Any Signal Contrarian Buy / Contrarian sell", "Buy or Sell")
alertcondition(alert04, "Contrarian Buy alert", "Buy")
alertcondition(alert06, "Contrarian Sell alert", "Sell")
// Bar Coloring
// Input
fastLength = 12
slowLength = 26
srcceed = close
signalLength = 9
// Data reference
= ta.macd(srcceed, fastLength, slowLength, signalLength)
// 4 level of green
greenHighh = #00dbff
greenMidHighh = #61eaff
greenMidLowh = #40e6ff
greenLowh = #61eaff
// Yellow
yellowLowh = #80eeff
// 4 level of red
redHighh = #a1f3ff
redMidHighh = #c0f7ff
redMidLowh = #e0fbff
redLowh = #FFFFFF
// Default color
candleBodyd = yellowLowh
// Ranging trend
if hist > 0
if hist > hist and hist > 0
candleBodyd := greenLowh
if hist < 0
if hist < hist and hist < 0
candleBodyd := redLowh
// Bullish trend
if macdda > 0 and hist > 0
candleBodyd := greenMidLowh
if hist > hist and macd > 0 and hist > 0
candleBodyd := greenMidHighh
if hist > hist and macd > 0 and hist > 0
candleBodyd := greenHighh
// Bearish trend
if macdda < 0 and hist < 0
candleBodyd := redMidLowh
if hist < hist and macd < 0 and hist < 0
candleBodyd := redMidHighh
if hist < hist and macd < 0 and hist < 0
candleBodyd := redHighh
barcolor(candleBodyd) // Include suggestion by Shaheen204
//
tenkan_len = 365
tenkan_mult = 3
kijun_len = 365
kijun_mult = 7
spanB_len = 365
spanB_mult = 10
offset = 1
//------------------------------------------------------------------------------
avg(src,length,mult)=>
atr = ta.atr(50)*mult
up = hl2 + atr
dn = hl2 - atr
upper = 0.,lower = 0.
upper := src < upper ? math.min(up,upper ) : up
lower := src > lower ? math.max(dn,lower ) : dn
os = 0,max = 0.,min = 0.
os := src > upper ? 1 : src < lower ? 0 : os
spt = os == 1 ? lower : upper
max := ta.cross(src,spt) ? math.max(src,max ) : os == 1 ? math.max(src,max ) : spt
min := ta.cross(src,spt) ? math.min(src,min ) : os == 0 ? math.min(src,min ) : spt
math.avg(max,min)
//------------------------------------------------------------------------------
tenkan = avg(close,tenkan_len,tenkan_mult)
kijun = avg(close,kijun_len,kijun_mult)
senkouA = math.avg(kijun,tenkan)
senkouB = avg(close,spanB_len,spanB_mult)
//------------------------------------------------------------------------------
cloud_a = color.new(#00dbff, 80)
cloud_b = color.new(#b2b5be, 80)
A = plot(senkouA,'Senkou Span A',na,offset=offset-1, editable = false)
B = plot(senkouB,'Senkou Span B',na,offset=offset-1, editable = false)
fill(A,B,senkouA > senkouB and textVPosition == 'middle' and textHPosition == 'center' and c_title == #b2b5be80 and s_title == 'large' and a_title == 'center' and c_subtitle == #b2b5be80 and s_subtitle == 'normal' and a_subtitle == 'center' and analyscloud == true ? cloud_a : analyscloud == true ? cloud_b : na)
// Telegram Join Us >> t.me
//...................../´¯¯/)
//...................,/¯.../
//.................../..../
//.............../´¯/'..'/´¯¯`·¸
//.........../'/.../..../....../¨¯\
//..........('(....´...´... ¯~/'..')
//...........\..............'...../
//............\....\.........._.·´
//.............\..............(
//..............\..............\
//----
//---------
// Telegram Join Us >> t.me





















