Trend Score with Dynamic Stop Loss HTF
How the Trend Score System Works
This indicator uses a Trend Score (TS) to measure price momentum over time. It tracks whether price is breaking higher or lower, then sums these moves into a cumulative score to define trend direction.
⸻
1. Trend Score (+1 / -1 Mechanism)
On each new bar:
• +1 point: if the current bar breaks the previous bar’s high.
• −1 point: if the current bar breaks the previous bar’s low.
• If both happen in the same bar, they cancel each other out.
• If neither happens, the score does not change.
This creates a simple running measure of bullish vs bearish pressure.
⸻
2. Cumulative Trend Score
The Trend Score is cumulative, meaning each new +1 or -1 is added to the total score, building a continuous count.
• Rising scores = buyers are consistently pushing price to higher highs.
• Falling scores = sellers are consistently pushing price to lower lows.
This smooths out noise and helps identify persistent momentum rather than single-bar spikes.
⸻
3. Trend Flip Trigger (default = 3)
A trend flip occurs when the cumulative Trend Score changes by 3 points (default setting) in the opposite direction of the current trend.
• Bullish Flip:
• Cumulative TS rises 3 points from its most recent low pivot.
• Marks a potential start of a new uptrend.
• A bullish stop-loss (SL) is set at the most recent swing low.
• Bearish Flip:
• Cumulative TS falls 3 points from its most recent high pivot.
• Marks a potential start of a new downtrend.
• A bearish SL is set at the most recent swing high.
Example:
• TS is at -2, then climbs to +1.
• That’s a +3 change, triggering a bullish flip.
⸻
4. Visual Summary
• Green background: Active bullish trend.
• Red background: Active bearish trend.
• ▲ Triangle Up: A bullish flip occurred this bar.
• Stop Loss Line: Shows the structural low used for risk management.
⸻
Why This Matters
The Trend Score measures trend pressure simply and objectively:
• +1 / -1 mechanics track real price behavior (breakouts of highs and lows).
• Cumulative changes of 3 points act like a momentum filter, ignoring small reversals.
• This helps you see true regime shifts on higher timeframes, which is especially useful for swing trades and investing decisions.
⸻
Key Takeaways
• Only flips after meaningful swings: prevents overreacting to single-bar noise.
• SL shows invalidation point: helps you know where a trend thesis fails.
• Works best on Daily or Weekly charts: for smoother, more reliable signals. Using Trend Score for Long-Term Investing
This indicator is designed to support decision-making for higher timeframe investing, such as swing trades, multi-month positions, or even multi-year holds.
It helps you:
• Identify major bullish regimes.
• Decide when to add to winning positions (DCA up).
• Know when to pause buying or consider trimming during weak periods.
• Stay disciplined while holding long-term winners.
Important Note:
These are suggestions for context. Always combine them with your own analysis, portfolio allocation rules, and risk tolerance.
⸻
1. Start With the Higher Timeframe
• Use Weekly charts for a broad investing view.
• Use Daily charts only for fine-tuning entry points or deciding when to add.
• A Bullish Flip on Weekly suggests the market may be entering a major uptrend.
• If Weekly is bullish and Daily also turns bullish, it’s extra confirmation of strength.
⸻
2. Building a Position with DCA
Goal: Grow your position gradually during strong bullish regimes while staying aware of risk.
A. Initial Buy
• Start with a small initial allocation when a Bullish Flip appears on Weekly or Daily.
• This is just a starter position to get exposure while the new trend develops.
B. Adding Through Strength (DCA Up)
• Consider adding during pullbacks, as long as price stays above the active SL line.
• Each add should be smaller or equal to your first buy.
• Spread out adds over time or price levels, instead of going all-in at once.
C. Pause Buying When:
• Price approaches or touches the SL level (trend invalidation).
• A Bearish Flip appears on Weekly or Daily — this signals potential weakness.
• Your total position size reaches your maximum allocation limit for that asset.
⸻
3. Holding Winners
When a position grows in profit:
• Stay in the trend as long as the Weekly regime remains bullish.
• The indicator’s green background acts as a reminder to hold, not panic sell.
• Use the SL bubble to monitor where the trend could potentially break.
• Avoid selling just because of small pullbacks — focus on big-picture trend health.
⸻
4. Taking Partial Profits
While this tool is designed to help hold long-term winners, there may be times to lighten risk:
• After large, rapid moves far above the SL, consider trimming a small portion of your position.
• When MFE (Maximum Favorable Excursion) in the table reaches unusually high levels, it may signal overextension.
• If the Weekly chart turns Neutral or Bearish, you can gradually reduce exposure while waiting for the next Bullish Flip.
⸻
5. Using the Stop Loss Line for Awareness
The Dynamic SL line represents a structural level that, if broken, may suggest the bullish trend is weakening.
How to think about it:
• Above SL: Market remains structurally healthy — continue holding or adding gradually.
• Close to SL: Pause adds. Be cautious and consider tightening your risk.
• Below SL: Treat this as a potential signal to reassess your position, especially if the break is confirmed on Weekly.
The SL is not a hard stop — it’s a visual guide to help you manage expectations.
⸻
6. Example Use Case
Imagine you are investing in a growth stock:
• Weekly Bullish Flip: You open a small starter position.
• Price pulls back slightly but stays above SL: You add a second, smaller tranche.
• Trend continues up for months: You hold and stop adding once your desired allocation is reached.
• Price doubles: You trim 10–20% to lock some profits, but continue holding the majority.
• Price later dips below SL: You slow down, reassess, and decide whether to reduce exposure.
This keeps you:
• Participating in major uptrends.
• Avoiding overcommitment during weak phases.
• Making adjustments gradually, not emotionally.
⸻
7. Suggested Workflow
1. Check Weekly chart → is it Bullish?
2. If yes, review Daily chart to fine-tune entry or adds.
3. Build exposure gradually while Weekly remains bullish.
4. Watch SL bubbles as awareness points for risk management.
5. Use partial trims during big rallies, but avoid exiting entirely too soon.
6. Reassess if Weekly turns Neutral or Bearish.
⸻
Key Takeaways
• Use this as a compass, not a command system.
• Weekly flips = big picture direction.
• Daily flips = timing and precision.
• Add gradually (DCA) while above SL, pause near SL, reassess below SL.
• Hold winners as long as Weekly remains bullish.
Wyszukaj w skryptach "weekly"
Highs & Lows - Multi TimeFrame### **📌 HL-MWD (Highs & Lows - Multi Timeframe Indicator) – Community Release**
#### **🔹 Overview**
The **HL-MWD Indicator** is a **multi-timeframe support & resistance tool** that plots **historical highs and lows** from **daily, weekly, and monthly timeframes** onto an intraday chart. It helps traders **identify key levels of support and resistance** that have influenced price action over different timeframes.
This indicator is useful for **day traders, swing traders, and position traders** who rely on **multi-timeframe analysis** to spot critical price levels.
---
### **🔥 Key Features**
✅ **Plots Highs & Lows for Daily, Weekly, and Monthly Timeframes**
✅ **Customizable Lookback Periods for Each Timeframe**
✅ **Adjustable Line Colors, Styles (Solid, Dotted, Dashed), and Widths**
✅ **Extend Lines into the Future to Identify Key Price Levels**
✅ **Option to Display Price Labels for Each Level**
✅ **Gradient Option to Highlight Recent Highs & Lows (Disabled by Default)**
✅ **Compatible with Intraday, Daily, and Weekly Charts**
---
### **📈 How It Works**
- **Daily Highs & Lows:** Captures the **highest and lowest prices** within the selected lookback period (default: **14 bars**).
- **Weekly Highs & Lows:** Marks the **highest and lowest prices** within the chosen weekly lookback (default: **52 bars**).
- **Monthly Highs & Lows:** Displays the **high and low points** from the monthly timeframe (default: **36 bars**).
- **Extended Lines:** Project past highs and lows **into the future** to help identify **potential support & resistance zones**.
---
### **⚠️ TradingView Lookback Limitations**
🔹 **TradingView has a limit on how many historical bars can be accessed per timeframe**, which affects how far back the indicator can retrieve data.
🔹 **Intraday charts (e.g., 5m, 15m) have a limited number of past bars**, meaning:
- **You won’t be able to view 36 months' worth of monthly levels** on a **5-minute chart**, because TradingView doesn’t store that much data in lower timeframes.
- **If multiple timeframes (e.g., weekly + monthly) are enabled at the same time**, some historical data may **not be available on shorter timeframes**.
🔹 **Recommendation:**
- If using **monthly lookbacks (36 months+), view them on a daily or higher timeframe**.
- If using **weekly lookbacks (52 weeks+), higher intraday timeframes (e.g., 1-hour, 4-hour) are better suited**.
- **Lower timeframes (1m, 5m, 15m) may miss some levels** if TradingView's bar limit is exceeded.
---
### **⚙️ Customization Options**
| **Setting** | **Default Value** | **Description** |
|------------------|----------------|----------------|
| **Daily Lookback** | `14` | Number of bars used to calculate daily highs/lows. |
| **Weekly Lookback** | `52` | Number of bars used to calculate weekly highs/lows. |
| **Monthly Lookback** | `36` | Number of bars used to calculate monthly highs/lows. |
| **Line Colors** | Daily: `Blue` Weekly: `Green` Monthly: `Red` | Customizable colors for each timeframe. |
| **Line Style** | `Solid` | Options: Solid, Dashed, Dotted. |
| **Line Width** | `1` | Thickness of the plotted lines. |
| **Extend Line** | `1` | Controls how far the highs/lows extend into the future. |
| **Display Price Labels** | `Enabled` | Shows price labels on each level. |
---
### **🛠️ How to Use It**
- **Enable/disable different timeframes** based on your strategy.
- **Customize colors, line styles, and widths** to match your charting style.
- **Use extended lines to identify support & resistance zones.**
- **Watch price reactions at these levels** for potential entries, exits, and stop-loss placements.
---
### **🚀 Final Thoughts**
The **HL-MWD Indicator** is a **powerful multi-timeframe tool** that helps traders **visualize key support & resistance levels** from higher timeframes on an intraday chart.
⚠️ **However, TradingView’s lookback limits apply—so for longer-term levels, higher timeframes are recommended.**
📌 **Now published for the community!** Let me know if you need any last-minute tweaks! 🔥
TrendPredator PROThe TrendPredator PRO
Stacey Burke, a seasoned trader and mentor, developed his trading system over the years, drawing insights from influential figures such as George Douglas Taylor, Tony Crabel, Steve Mauro, and Robert Schabacker. His popular system integrates select concepts from these experts into a consistent framework. While powerful, it remains highly discretionary, requiring significant real-time analysis, which can be challenging for novice traders.
The TrendPredator indicators support this approach by automating the essential analysis required to trade the system effectively and incorporating mechanical bias and a multi-timeframe concept. They provide value to traders by significantly reducing the time needed for session preparation, offering all relevant chart analysis and signals for live trading in real-time.
The PRO version offers an advanced pattern identification logic that highlights developing context as well as setups related to the constellation of the signals provided. It provides real-time interpretation of the multi-timeframe analysis table, following an extensive underlying logic with more than 150 different setup variations specifically developed for the system and indicator. These setups are constantly back- and forward-tested and updated according to the results. This version is tailored to traders primarily trading this system and following the related setups in detail.
The former TrendPredator ES version does not provide that option. It is significantly leaner and is designed for traders who want to use the multi-timeframe logic as additional confluence for their trading style. It is very well suited to support many other trading styles, including SMC and ICT.
The Multi-timeframe Master Pattern
Inspired by Taylor’s 3-day cycle and Steve Mauro’s work with “Beat the Market Maker,” Burke’s system views markets as cyclical, driven by the manipulative patterns of market makers. These patterns often trap traders at the extremes of moves above or below significant levels with peak formations, then reverse to utilize their liquidity, initiating the next phase. Breakouts away from these traps often lead to range expansions, as described by Tony Crabel and Robert Schabacker. After multiple consecutive breakouts, especially after the psychological number three, overextension might develop. A break in structure may then lead to reversals or pullbacks. The TrendPredator Indicator and the related multi-timeframe trading system are designed to track these cycles on the daily timeframe and provide signals and trade setups to navigate them.
Bias Logic and Multi-Timeframe Concept
The indicator covers the basic signals of Stacey Burke's system:
- First Red Day (FRD): Bearish break in structure, signalling weak longs in the market.
- First Green Day (FGD): Bullish break in structure signalling weak shorts in the markt.
- Three Days of Longs (3DL): Overextension signalling potential weak longs in the market.
- Three Days of Shorts (3DS): Overextension signalling potential weak shorts in the market.
- Inside Day (ID): Contraction, signalling potential impulsive reversal or range expansion move.
It enhances the original system by introducing:
Structured Bias Logic:
Tracks bias by following how price trades concerning the last previous candle high or low that was hit. For example if the high was hit, we are bullish above and bearish below.
- Bullish state: Breakout (BO), Fakeout Low (FOL)
- Bearish state: Breakdown (BD), Fakeout High (FOH)
Multi-Timeframe Perspective:
- Tracks all signals across H4, H8, D, W, and M timeframes, to look for alignment and follow trends and momentum in a mechanical way.
Developing Context:
- Identifies specific predefined context states based on the monthly, weekly and daily bias.
Developing Setups:
- Identifies specific predefined setups based on context and H8 bias as well as SB signals.
The indicator monitors the bias and signals of the system across all relevant timeframes and automates the related graphical chart analysis as well as context and setup zone identification. In addition to the master pattern, the system helps to identify the higher timeframe situation and follow the moves driven by other timeframe traders to then identify favourable context and setup situations for the trader.
Example: Full Bullish Cycle on the Daily Timeframe with Multi-Timeframe Signals
- The Trap/Peak Formation
The market breaks down from a previous day’s and maybe week’s low—potentially after multiple breakdowns—but fails to move lower and pulls back up to form a peak formation low and closes as a first green day.
MTF Signals: Bullish daily and weekly fakeout low; three consecutive breakdown days (1W Curr FOL, 1D Curr FOL, BO 3S).
Context: Reversal (REV)
Setup: Fakeout low continuation low of day (FOL Cont LOD)
- Pullback and Consolidation
The next day pulls further up after first green day signal, potentially consolidates inside the previous day’s range.
MTF Signals: Fakeout low and first green day closing as an inside day (1D Curr IS, Prev FOL, First G).
Context: Reversal continuation (REV Cont)
Setup: Previous fakeout low continuation low handing fruit (Prev FOL Cont LHF)
- Range Expansion/Trend
The following day breaks up through the previous day’s high, launching a range expansion away from the trap.
MTF Signals: Bullish daily breakout of an inside day (1D Curr BO, Prev IS).
Context: Uptrend healthy (UT)
Setup: Breakout continuation low hanging fruit (BO Cont LHF)
- Overextension
After multiple consecutive breakouts, the market reaches a state of overextension, signalling a possible reversal or pullback.
MTF Signals: Three days of breakout longs (1D Curr BO, Prev BO, BO 3L).
Context: Uptrend extended (UT)
- Reversal
After a breakout of previous days high that fails, price pulls away from the high showing a rollover of momentum across all timeframes and a potential short setup.
MTF Signals: Three days of breakout longs, daily fakeout high (1D 3L, FOH)
Context: Reversal countertrend (REV)
Setup: Fakeout high continuation high of day (FOH Cont HOD)
Note: This is only one possible illustrative scenario; there are many variations and combinations.
Example Chart: Full Bullish Cycle with Correlated Signals
Multi-Timeframe Signals examples:
Context and Setups examples:
Note: The signals shown along the move are manually added illustrations. The indicator shows these in realtime in the table at top and bottom right. This is only one possible scenario; there are many variations and combinations.
Due to the fractal nature of markets, this cycle can be observed across all timeframes. The strongest setups occur when there is multi-timeframe alignment. For example, a peak formation and potential reversal on the daily timeframe have higher probability and follow-through when they align with bearish signals on higher timeframes (e.g., weekly/monthly BD/FOH) and confirmation on lower timeframes (H4/H8 FOH/BD). With this perspective, the system enables the trader to follow the trend and momentum while identifying rollover points in a highly differentiated and precise way.
Using the Indicator for Trading
The automated analysis provided by the indicator can be used for thesis generation in preparation for a session as well as for live trading, leveraging the real-time updates as well as the context and setup indicated or alerted. It is recommended to customize the settings deeply, such as hiding the lower timeframes for thesis generation or the specific alert time window and settings to the specific trading schedule and playbook of the trader.
1. Context Assessment:
Evaluate alignment of higher timeframes (e.g., Month/Week, Week/Day). More alignment → Stronger setups.
- The context table offers an interpretation of the higher timeframe automatically. See below for further details.
2. Setup Identification:
Follow the bias of daily and H8 timeframes. A setup mostly requires alignment of these.
Setup Types:
- Trend Trade: Trade in alignment with the previous day’s trend.
Example: Price above the previous day’s high → Focus on long setups (dBO, H8 FOL) until overextension or reversal signs appear (H8 BO 3L, First R).
- Reversal Trade: Identify reversal setups when lower timeframes show rollovers after higher timeframe weakness.
Example: Price below the previous day’s high → Look for reversal signals at the current high of day (H8 FOH, BO 3L, First R).
- The setup table shows potential setups for the specific price zone in the table automatically. See below for further details.
3. Entry Confirmation:
Confirm entries based on H8 and H4 alignment, candle closes and lower timeframe fakeouts.
- H8 and H4 should always align for a final confirmation, meaning the breach lines should be both in the back of a potential trade setup.
- M15/ 5 candle close can be seen as acceptance beyond a level or within the setup zone.
- M15/5 FOH/ FOL signals lower timeframe traps potentially indicating further confirmation.
Example Chart Reversal Trade:
Context: REV (yellow), Reversal counter trend, Month in FOL with bearish First R, Week in BO but bearishly overextended with BO 3L, Day in Fakeout high reversing bearishly.
Setup: FOH Cont HOD (red), Day in Fakeout high after BO 3L overextension, confirmed by H8 FOH high of day, First R as further confluence. Two star quality and countertrend.
Entry: H4 BD, M15 close below followed by M15 FOH.
Detailed Features and Options
1. Context and Setup table
The Context and Setup Table is the core feature of the TrendPredator PRO indicator. It delivers real-time interpretation of the multi-timeframe analysis based on an extensive underlying logic table with over 150 variations, specifically developed for this system and indicator. This logic is continuously updated and optimized to ensure accuracy and performance.
1.1. Developing Context
States for developing higher timeframe context are determined based on signals from the monthly, weekly, and daily timeframes.
- Green and Red indicate alignment and potentially interesting developing setups.
- Yellow signals a mixed or conflicting bias, suggesting caution when taking trades.
The specific states are:
- UT (yellow): Uptrend extended
- UT (green): Uptrend healthy
- REV (yellow): Reversal day counter trend
- REV (green): Reversal day mixed trend
- REV Cont (green): Reversal continuation mixed trend
- REV Cont (yellow): Reversal continuation counter trend
- REV into UT (green): Reversal day into uptrend
- REV Cont into UT (green): Reversal continuation into uptrend
- UT Pullback (yellow): Counter uptrend breakdown day
- Conflicting (yellow): Conflicting signals
- Consolidating (yellow): Consolidating sideways
- Inside (yellow): Trading inside after an inside week
- DT Pullback (yellow): Counter downtrend breakout day
- REV Cont into DT (red): Reversal continuation into downtrend
- REV into DT (red): Reversal day into downtrend
- REV Cont (yellow): Reversal continuation counter trend
- REV Cont (red): Reversal continuation mixed trend
- REV (red): Reversal day mixed trend
- REV (yellow): Reversal day countertrend
- DT (red): Downtrend healthy
- DT (yellow): Downtrend extended
Example: Uptrend
The Uptrend Context (UT, green) indicates a healthy uptrend with all timeframes aligning bullishly. In this case, the monthly is in a Fakeout Low (FOL) and currently inside the range, while the weekly and daily are both in Breakout (BO) states. This context is favorable for developing long setups in the direction of the trend.
Example: Uptrend pullback
The Uptrend Pullback Context (UT Pullback, yellow) indicates a Breakdown (BD) on the daily timeframe against a higher timeframe uptrend. In this case, the monthly is in a Fakeout Low (FOL) and currently inside its range, the weekly is in Breakout (BO) and also currently inside, while the daily is in Breakdown (BD). This context reflects a conflicting situation—potentially signaling either an early reversal back into the uptrend or, if the breakdown extends, the beginning of a possible trend change.
Example: Reversal into Uptrend
The Reversal into Uptrend Context (REV into UT, green) indicates a lower timeframe reversal aligning with a higher timeframe uptrend. In this case, the monthly is in Breakout (BO), the weekly is in Breakout (BO) and currently inside its range, while the daily is showing a bullish Fakeout Low (FOL) reversal. This context is potentially very favorable for long setups, as it signals a strong continuation of the uptrend supported across multiple timeframes.
Example: Reversal
The Bearish Reversal Context indicates a lower timeframe rollover within an ongoing higher timeframe uptrend. In this case, the monthly remains in Breakout (BO), the weekly has shifted into a Fakeout High (FOH) after three weeks of breakout longs, and the daily is already in Breakdown (BD). This context suggests a potentially favorable developing short setup, as early signs of weakness appear across timeframes.
1.2. Developing Setup
The states for specific setups are based on the context and the signals from the daily timeframe and H8, indicating that price is in the zone of alignment. The setup description refers to the state of the daily timeframe, while the suffix relates to the H8 timeframe. For example, "prev FOH Cont LHF" means that the previous day is in FOH (Fakeout High) relative to yesterday's breakout level, currently trading inside, and we are in an H8 breakdown, indicating a potential LHF (Lower High Formation) short trade if the entry confirms. The suffix HOD means that H8 is in FOH or BO (Breakout).
The specific states are:
- REV HOD (red): Reversal high of day
- REV Cont LHF (red): Reversal continuation low hanging fruit
- BO Cont LHF (green): Breakout continuation low hanging fruit
- BO Cont LOD (green): Breakout continuation low of day
- FOH Cont HOD (red): Fakeout high continuation high of day
- FOH Cont LHF ((red): Fakeout high continuation low hanging fruit
- prev BD Cont HOD (red): Previous breakdown continuation high of day
- prev BD Cont LHF (red): Previous breakdown continuation low hanging fruit
- prev FOH Cont HOD (red): Previous fakeout high continuation high of day
- prev FOH Cont LHF (red): Previous fakeout high continuation low hanging fruit
- prev FOL Cont LOD (green): Previous fakeout low continuation low of day
- prev FOL Cont LHF (green): Previous fakeout low continuation low hanging fruit
- prev BO Cont LOD (green): Previous breakout continuation low of day
- prev BO Cont LHF (green): Previous breakout continuation low hanging fruit
- FOL Cont LHF (green): Fakeout low continuation low hanging fruit
- FOL Cont LOD (green): Fakeout low continuation low of day
- BD Cont LHF (red): BD continuation low hanging fruit
- BD Cont LOD (red): Breakdown continuation low of day
- REV Cont LHF (green): Reversal continuation low hanging fruit
- REV LOD (green): Reversal low of day
- Inside: Trading inside after an inside day
Type: Indicates the situation of the indicated setup concerning:
- Trend: Following higher timeframe trend
- Mixed: Mixed higher timeframe signals
- Counter: Against higher timeframe bias
Quality: Indicates the quality of the indicated setup according to the specified logic table
No star: Very low quality
* One star: Low quality
** Two star: Medium quality
*** Three star: High quality
Example: Breakout Continuation Trend Setup
This setup highlights a healthy uptrend where the month is in a breakout, the week is in a fakeout low, and the day is in a breakout after a first green day. As the H8 breaks out to the upside, a long setup zone is triggered, presenting a breakout continuation low-hanging fruit trade. This is a trend trade in an overextended situation on the H8, with an H8 3L, resulting in an overall quality rating of one star.
Example: Fakeout Low Continuation Trend Setup
This setup shows a reversal into uptrend, with the month in a breakout, the week in a breakout, and the day in a fakeout low after breaking down the previous day and now reversing back up. As H8 breaks out to the upside, a long setup zone is triggered, presenting a previous fakeout low continuation, low-hanging fruit trade. This is a medium-quality trend trade.
Example: Reversal Setup - Mixed Trend
This setup shows a reversal setup in line with the weekly trend, with the month in a fakeout low, the week in a fakeout high, and the day in a fakeout high after breaking out earlier in the day and now reversing back down. As H8 loses the previous breakout level after 3 breakouts (with H8 3L), a short setup zone is triggered, presenting a fakeout high continuation at the high of the day. This is a high-quality trade in a mixed trend situation.
Setup Alerts:
Alerts can be activated for setups freshly triggered on the chart within your trading window.
Detailed filter logic for setup alerts:
- Setup quality: 1-3 star
- Setup type: Counter, Mixed and Trend
- Setup category: e.g. Reversal Bearish, Breakout, Previous Fakeout High
- 1D BO and First signals: 3DS, 3DL, FRD, FGD, ID
Options:
- Alerts on/ off
- Alert time window (from/ to)
- Alert filter customization
Note: To activate alerts from a script in TradingView, some settings need to be adjusted. Open the "Create Alert" dialog and select the option "Any alert() function call" in the "Condition" section. Choose "TrendPredator PRO" to ensure that alerts trigger properly from the code. Alerts can be activated for entire watchlists or individual pairs. Once activated, the alerts run in the background and notify the user whenever a setup is freshly triggered according to the filter settings.
2. Multi-Timeframe Table
Provides a real-time view of system signals, including:
Current Timeframe (Curr): Bias states.
- Breakout (green BO): Bullish after breaking above the previous high.
- Fakeout High (red FOH): Bearish after breaking above the previous high but pulling back down.
- Breakdown (red BD): Bearish after breaking below the previous low.
- Fakeout Low (green FOL): Bullish after breaking below the previous low but pulling back up.
- Inside (IS): Price trading neutral inside the previous range, taking the previous bias (color indicates the previous bias).
Previous Timeframe (Prev): Tracks last candle bias state and transitions dynamically.
- Bias for last candle: BO, FOH, BD, FOL in respective colors.
- Inside bar (yellow IS): Indicated as standalone signal.
Note: Also previous timeframes get constantly updated in real time to track the bias state in relation to the level that was hit. This means a BO can still lose the level and become a FOH, and vice versa, and a BD can still become a FOL, and vice versa. This is critical to see for example if traders that are trapped in that timeframe with a FOH or FOL are released. An inside bar stays fixed, though, since no level was hit in that timeframe.
Breakouts (BO): Breakout count 3 longs and 3 shorts.
- 3 Longs (red 3L): Bearish after three breakouts without hitting a previous low.
- 3 Shorts (green 3S): Bullish after three breakdowns without hitting a previous high.
First Countertrend Close (First): Tracks First Red or Green Day.
- First Green (G): After two consecutive red closes.
- First Red (R): After two consecutive green closes.
Options: Customizable font size and label colors.
3. Historic Highs and Lows
Displays historic highs and lows per timeframe for added context, enabling users to track sequences over time.
Timeframes: H4, H8, D, W, M
Options: Customize for timeframes shown, number of historic candles per timeframe, colors, formats, and labels.
4. Previous High and Low Extensions
Displays extended previous levels (high, low, and close) for each timeframe to assess how price trades relative to these levels.
H4: P4H, P4L, P4C
H8: P8H, P8L, P8C
Daily: PDH, PDL, PDC
Weekly: PWH, PWL, PWC
Monthly: PMH, PML, PMC
Options: Fully customizable for timeframes shown, colors, formats, and labels.
5. Breach Lines
Tracks live market reactions (e.g., breakouts or fakeouts) per timeframe for the last previous high or low that was hit, highlighting these levels originating at the breached candle to indicate bias (color-coded).
Red: Bearish below
Green: Bullish above
H4: 4FOL, 4FOH, 4BO, 4BD
H8: 8FOL, 8FOH, 8BO, 8BD
D: dFOL, dFOH, dBO, dBD
W: wFOL, wFOH, wBO, wBD
M: mFOL, mFOH, mBO, mBD
Options: Fully customizable for timeframes shown, colors, formats, and labels.
Overall Options:
Toggle single feature groups on/off.
Customize H8 open/close time as an offset to UTC to be provider independent.
Colour settings con be adjusted for dark or bright backgrounds.
Higher Timeframe Use Case Examples
Example Use Case: Weekly Template Analysis
The Weekly Template is a core concept in Stacey Burke’s trading style. The analysis is conducted on the daily timeframe, focusing on the higher timeframe bias and identifying overextended conditions within the week—such as multiple breakouts and peak formations signaling potential reversals.
In this example, the candles are colored by the TrendPredator FO indicator, which highlights the state of individual candles. This allows for precise evaluation of both the trend state and the developing weekly template. It is a valuable tool for thesis generation before a trading session and for backtesting purposes.
Example Use Case: High Timeframe 5-Star Setup Analysis (Stacey Burke "ain't coming back" ACB Template)
This analysis identifies high-probability trade opportunities when daily breakout or breakdown closes occur near key monthly levels mid-week, signaling overextensions and potentially large parabolic moves. The key signal to look for is a breakout or breakdown close on a Wednesday. This is useful for thesis generation before a session and also for backtesting.
In this example, the TrendPredator FO indicator colors the candles to highlight individual candle states, particularly those that close in breakout or breakdown. Additionally, an indicator is shown on the chart shading every Wednesday, making it easier to visually identify the signals.
5 Star Alerts:
Alerts can be activated for this potential 5-Star setup constellation. The alert is triggered when there is a breakout or breakdown close on a Wednesday.
Further recommendations:
- Higher timeframe context: TPO or volume profile indicators can be used to gain an even better overview.
- Late session trading: Entries later in the session, such as during the 3rd hour of the NY session, offer better analysis and follow-through on setups.
- Entry confirmation: Momentum indicators like VWAP, Supertrend, or EMA are helpful for increasing precision. Additionally, tracking lower timeframe fakeouts can provide powerful confluence. To track those the TrendPredator Fakeout Highlighter (FO), that has been specifically developed for this can be of great help:
Limitations:
Data availability using TradingView has its limitations. The indicator leverages only the real-time data available for the specific timeframe being used. This means it cannot access data from timeframes lower than the one displayed on the chart. For example, if you are on a daily chart, it cannot use H8 data. Additionally, on very low timeframes, the historical availability of data might be limited, making higher timeframe signals unreliable.
To address this, the indicator automatically hides the affected columns in these specific situations, preventing false signals.
Disclaimer
This indicator is for educational purposes only and does not guarantee profits.
None of the information provided shall be considered financial advice.
The indicator does not provide final buy or sell signals but highlights zones for potential setups.
Users are fully responsible for their trading decisions and outcomes.
Multiple Naked LevelsPURPOSE OF THE INDICATOR
This indicator autogenerates and displays naked levels and gaps of multiple types collected into one simple and easy to use indicator.
VALUE PROPOSITION OF THE INDICATOR AND HOW IT IS ORIGINAL AND USEFUL
1) CONVENIENCE : The purpose of this indicator is to offer traders with one coherent and robust indicator providing useful, valuable, and often used levels - in one place.
2) CLUSTERS OF CONFLUENCES : With this indicator it is easy to identify levels and zones on the chart with multiple confluences increasing the likelihood of a potential reversal zone.
THE TYPES OF LEVELS AND GAPS INCLUDED IN THE INDICATOR
The types of levels include the following:
1) PIVOT levels (Daily/Weekly/Monthly) depicted in the chart as: dnPIV, wnPIV, mnPIV.
2) POC (Point of Control) levels (Daily/Weekly/Monthly) depicted in the chart as: dnPoC, wnPoC, mnPoC.
3) VAH/VAL STD 1 levels (Value Area High/Low with 1 std) (Daily/Weekly/Monthly) depicted in the chart as: dnVAH1/dnVAL1, wnVAH1/wnVAL1, mnVAH1/mnVAL1
4) VAH/VAL STD 2 levels (Value Area High/Low with 2 std) (Daily/Weekly/Monthly) depicted in the chart as: dnVAH2/dnVAL2, wnVAH2/wnVAL2, mnVAH1/mnVAL2
5) FAIR VALUE GAPS (Daily/Weekly/Monthly) depicted in the chart as: dnFVG, wnFVG, mnFVG.
6) CME GAPS (Daily) depicted in the chart as: dnCME.
7) EQUILIBRIUM levels (Daily/Weekly/Monthly) depicted in the chart as dnEQ, wnEQ, mnEQ.
HOW-TO ACTIVATE LEVEL TYPES AND TIMEFRAMES AND HOW-TO USE THE INDICATOR
You can simply choose which of the levels to be activated and displayed by clicking on the desired radio button in the settings menu.
You can locate the settings menu by clicking into the Object Tree window, left-click on the Multiple Naked Levels and select Settings.
You will then get a menu of different level types and timeframes. Click the checkboxes for the level types and timeframes that you want to display on the chart.
You can then go into the chart and check out which naked levels that have appeared. You can then use those levels as part of your technical analysis.
The levels displayed on the chart can serve as additional confluences or as part of your overall technical analysis and indicators.
In order to back-test the impact of the different naked levels you can also enable tapped levels to be depicted on the chart. Do this by toggling the 'Show tapped levels' checkbox.
Keep in mind however that Trading View can not shom more than 500 lines and text boxes so the indocator will not be able to give you the complete history back to the start for long duration assets.
In order to clean up the charts a little bit there are two additional settings that can be used in the Settings menu:
- Selecting the price range (%) from the current price to be included in the chart. The default is 25%. That means that all levels below or above 20% will not be displayed. You can set this level yourself from 0 up to 100%.
- Selecting the minimum gap size to include on the chart. The default is 1%. That means that all gaps/ranges below 1% in price difference will not be displayed on the chart. You can set the minimum gap size yourself.
BASIC DESCRIPTION OF THE INNER WORKINGS OF THE INDICTATOR
The way the indicator works is that it calculates and identifies all levels from the list of levels type and timeframes above. The indicator then adds this level to a list of untapped levels.
Then for each bar after, it checks if the level has been tapped. If the level has been tapped or a gap/range completely filled, this level is removed from the list so that the levels displayed in the end are only naked/untapped levels.
Below is a descrition of each of the level types and how it is caluclated (algorithm):
PIVOT
Daily, Weekly and Monthly levels in trading refer to significant price points that traders monitor within the context of a single trading day. These levels can provide insights into market behavior and help traders make informed decisions regarding entry and exit points.
Traders often use D/W/M levels to set entry and exit points for trades. For example, entering long positions near support (daily close) or selling near resistance (daily close).
Daily levels are used to set stop-loss orders. Placing stops just below the daily close for long positions or above the daily close for short positions can help manage risk.
The relationship between price movement and daily levels provides insights into market sentiment. For instance, if the price fails to break above the daily high, it may signify bearish sentiment, while a strong breakout can indicate bullish sentiment.
The way these levels are calculated in this indicator is based on finding pivots in the chart on D/W/M timeframe. The level is then set to previous D/W/M close = current D/W/M open.
In addition, when price is going up previous D/W/M open must be smaller than previous D/W/M close and current D/W/M close must be smaller than the current D/W/M open. When price is going down the opposite.
POINT OF CONTROL
The Point of Control (POC) is a key concept in volume profile analysis, which is commonly used in trading.
It represents the price level at which the highest volume of trading occurred during a specific period.
The POC is derived from the volume traded at various price levels over a defined time frame. In this indicator the timeframes are Daily, Weekly, and Montly.
It identifies the price level where the most trades took place, indicating strong interest and activity from traders at that price.
The POC often acts as a significant support or resistance level. If the price approaches the POC from above, it may act as a support level, while if approached from below, it can serve as a resistance level. Traders monitor the POC to gauge potential reversals or breakouts.
The way the POC is calculated in this indicator is by an approximation by analysing intrabars for the respective timeperiod (D/W/M), assigning the volume for each intrabar into the price-bins that the intrabar covers and finally identifying the bin with the highest aggregated volume.
The POC is the price in the middle of this bin.
The indicator uses a sample space for intrabars on the Daily timeframe of 15 minutes, 35 minutes for the Weekly timeframe, and 140 minutes for the Monthly timeframe.
The indicator has predefined the size of the bins to 0.2% of the price at the range low. That implies that the precision of the calulated POC og VAH/VAL is within 0.2%.
This reduction of precision is a tradeoff for performance and speed of the indicator.
This also implies that the bigger the difference from range high prices to range low prices the more bins the algorithm will iterate over. This is typically the case when calculating the monthly volume profile levels and especially high volatility assets such as alt coins.
Sometimes the number of iterations becomes too big for Trading View to handle. In these cases the bin size will be increased even more to reduce the number of iterations.
In such cases the bin size might increase by a factor of 2-3 decreasing the accuracy of the Volume Profile levels.
Anyway, since these Volume Profile levels are approximations and since precision is traded for performance the user should consider the Volume profile levels(POC, VAH, VAL) as zones rather than pin point accurate levels.
VALUE AREA HIGH/LOW STD1/STD2
The Value Area High (VAH) and Value Area Low (VAL) are important concepts in volume profile analysis, helping traders understand price levels where the majority of trading activity occurs for a given period.
The Value Area High/Low is the upper/lower boundary of the value area, representing the highest price level at which a certain percentage of the total trading volume occurred within a specified period.
The VAH/VAL indicates the price point above/below which the majority of trading activity is considered less valuable. It can serve as a potential resistance/support level, as prices above/below this level may experience selling/buying pressure from traders who view the price as overvalued/undervalued
In this indicator the timeframes are Daily, Weekly, and Monthly. This indicator provides two boundaries that can be selected in the menu.
The first boundary is 70% of the total volume (=1 standard deviation from mean). The second boundary is 95% of the total volume (=2 standard deviation from mean).
The way VAH/VAL is calculated is based on the same algorithm as for the POC.
However instead of identifying the bin with the highest volume, we start from range low and sum up the volume for each bin until the aggregated volume = 30%/70% for VAL1/VAH1 and aggregated volume = 5%/95% for VAL2/VAH2.
Then we simply set the VAL/VAH equal to the low of the respective bin.
FAIR VALUE GAPS
Fair Value Gaps (FVG) is a concept primarily used in technical analysis and price action trading, particularly within the context of futures and forex markets. They refer to areas on a price chart where there is a noticeable lack of trading activity, often highlighted by a significant price movement away from a previous level without trading occurring in between.
FVGs represent price levels where the market has moved significantly without any meaningful trading occurring. This can be seen as a "gap" on the price chart, where the price jumps from one level to another, often due to a rapid market reaction to news, events, or other factors.
These gaps typically appear when prices rise or fall quickly, creating a space on the chart where no transactions have taken place. For example, if a stock opens sharply higher and there are no trades at the prices in between the two levels, it creates a gap. The areas within these gaps can be areas of liquidity that the market may return to “fill” later on.
FVGs highlight inefficiencies in pricing and can indicate areas where the market may correct itself. When the market moves rapidly, it may leave behind price levels that traders eventually revisit to establish fair value.
Traders often watch for these gaps as potential reversal or continuation points. Many traders believe that price will eventually “fill” the gap, meaning it will return to those price levels, providing potential entry or exit points.
This indicator calculate FVGs on three different timeframes, Daily, Weekly and Montly.
In this indicator the FVGs are identified by looking for a three-candle pattern on a chart, signalling a discrete imbalance in order volume that prompts a quick price adjustment. These gaps reflect moments where the market sentiment strongly leans towards buying or selling yet lacks the opposite orders to maintain price stability.
The indicator sets the gap to the difference from the high of the first bar to the low of the third bar when price is moving up or from the low of the first bar to the high of the third bar when price is moving down.
CME GAPS (BTC only)
CME gaps refer to price discrepancies that can occur in charts for futures contracts traded on the Chicago Mercantile Exchange (CME). These gaps typically arise from the fact that many futures markets, including those on the CME, operate nearly 24 hours a day but may have significant price movements during periods when the market is closed.
CME gaps occur when there is a difference between the closing price of a futures contract on one trading day and the opening price on the following trading day. This difference can create a "gap" on the price chart.
Opening Gaps: These usually happen when the market opens significantly higher or lower than the previous day's close, often influenced by news, economic data releases, or other market events occurring during non-trading hours.
Gaps can result from reactions to major announcements or developments, such as earnings reports, geopolitical events, or changes in economic indicators, leading to rapid price movements.
The importance of CME Gaps in Trading is the potential for Filling Gaps: Many traders believe that prices often "fill" gaps, meaning that prices may return to the gap area to establish fair value.
This can create potential trading opportunities based on the expectation of gap filling. Gaps can act as significant support or resistance levels. Traders monitor these levels to identify potential reversal points in price action.
The way the gap is identified in this indicator is by checking if current open is higher than previous bar close when price is moving up or if current open is lower than previous day close when price is moving down.
EQUILIBRIUM
Equilibrium in finance and trading refers to a state where supply and demand in a market balance each other, resulting in stable prices. It is a key concept in various economic and trading contexts. Here’s a concise description:
Market Equilibrium occurs when the quantity of a good or service supplied equals the quantity demanded at a specific price level. At this point, there is no inherent pressure for the price to change, as buyers and sellers are in agreement.
Equilibrium Price is the price at which the market is in equilibrium. It reflects the point where the supply curve intersects the demand curve on a graph. At the equilibrium price, the market clears, meaning there are no surplus goods or shortages.
In this indicator the equilibrium level is calculated simply by finding the midpoint of the Daily, Weekly, and Montly candles respectively.
NOTES
1) Performance. The algorithms are quite resource intensive and the time it takes the indicator to calculate all the levels could be 5 seconds or more, depending on the number of bars in the chart and especially if Montly Volume Profile levels are selected (POC, VAH or VAL).
2) Levels displayed vs the selected chart timeframe. On a timeframe smaller than the daily TF - both Daily, Weekly, and Monthly levels will be displayed. On a timeframe bigger than the daily TF but smaller than the weekly TF - the Weekly and Monthly levels will be display but not the Daily levels. On a timeframe bigger than the weekly TF but smaller than the monthly TF - only the Monthly levels will be displayed. Not Daily and Weekly.
CREDITS
The core algorithm for calculating the POC levels is based on the indicator "Naked Intrabar POC" developed by rumpypumpydumpy (https:www.tradingview.com/u/rumpypumpydumpy/).
The "Naked intrabar POC" indicator calculates the POC on the current chart timeframe.
This indicator (Multiple Naked Levels) adds two new features:
1) It calculates the POC on three specific timeframes, the Daily, Weekly, and Monthly timeframes - not only the current chart timeframe.
2) It adds functionaly by calculating the VAL and VAH of the volume profile on the Daily, Weekly, Monthly timeframes .
ICT Killzones & FVG// This source code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © Mutharasan12
//@version=5
indicator("ICT Killzones & FVG", "ICT Killzones & FVG", overlay = true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500)
// ---------------------------------------- Constant Functions --------------------------------------------------
get_line_type(_style) =>
result = switch _style
'Solid' => line.style_solid
'Dotted' => line.style_dotted
'Dashed' => line.style_dashed
result
get_size(x) =>
result = switch x
'Auto' => size.auto
'Tiny' => size.tiny
'Small' => size.small
'Normal' => size.normal
'Large' => size.large
'Huge' => size.huge
get_table_pos(pos) =>
result = switch pos
"Bottom Center" => position.bottom_center
"Bottom Left" => position.bottom_left
"Bottom Right" => position.bottom_right
"Middle Center" => position.middle_center
"Middle Left" => position.middle_left
"Middle Right" => position.middle_right
"Top Center" => position.top_center
"Top Left" => position.top_left
"Top Right" => position.top_right
get_font_style(s) =>
result = switch s
'Monospace' => font.family_monospace
'Default' => font.family_default
// ---------------------------------------- Constant Functions --------------------------------------------------
// ---------------------------------------- Inputs --------------------------------------------------
gmt_tz = input.string('America/New_York', "Timezone", options = , tooltip = "Note GMT is not adjusted to reflect Daylight Saving Time changes", group = 'Time Zone')
DWM_profile = input.bool(true,"Show All Profile",inline="Show",group = 'Profile')
D_profile = input.bool(true,"Show Daily",inline = "Show",group = 'Profile')
hide_lines_DO = input.timeframe("60","Daily:",inline = "Hide",group = 'Hide Above')
W_profile = input.bool(true,"Weekly",inline="Show",group = 'Profile')
hide_lines_WO = input.timeframe("240","Weekly:",inline="Hide",group = 'Hide Above')
M_profile = input.bool(true,"Monthly",inline="Show",group = 'Profile')
hide_lines_MO = input.timeframe("1D","Monthly:",inline="Hide",group = 'Hide Above')
show_kz = input.bool(false, "Show Killzone Boxes", inline = "skz", group = 'Hide KillZone')
var g_SETTINGS = "Settings"
max_days = input.int(60, "Drawing Limit", 1, inline = 'dl', tooltip = "Only this many drawings will be kept on the chart, for each selected drawing type (killzone boxes, pivot lines, open lines, etc.)", group = g_SETTINGS)
tf_limit = input.timeframe("30", "Timeframe Limit", inline = 'dl', tooltip = "Drawings will not appear on timeframes greater than or equal to this", group = g_SETTINGS)
lbl_size = get_size(input.string('Tiny', "Label Size", inline = 'sc', options = , tooltip = "The size of all labels", group = g_SETTINGS))
font_style = get_font_style(input.string('Monospace', "Font Style", inline = 'sc', group = g_SETTINGS, options = ))
txt_color = input.color(#000000, "Text Color", inline = 'sc', tooltip = "The color of all label and table text", group = g_SETTINGS)
use_cutoff = input.bool(true, "Drawing Cutoff Time", inline = "CO", tooltip = "When enabled, all pivots and open price lines will stop extending at this time", group = g_SETTINGS)
cutoff = input.session("1700-1701", "", inline = "CO", group = g_SETTINGS)
var g_KZ = "Killzones"
show_kz_text = input.bool(false, "Display Text", inline = "KZ", group = g_KZ)
box_transparency = input.int(85, "Box Transparency", 0, 100, group = g_KZ)
text_transparency = input.int(50, "Text Transparency", 0, 100, group = g_KZ)
use_asia = input.bool(true, "", inline = "ASIA", group = g_KZ)
as_txt = input.string("ASIA", "", inline = "ASIA", group = g_KZ)
asia = input.session("2000-0000", "", inline = "ASIA", group = g_KZ)
as_color = input.color(#9598a1, "", inline = "ASIA", group = g_KZ)
use_london = input.bool(true, "", inline = "LONDON", group = g_KZ)
lo_txt = input.string("OPEN", "", inline = "LONDON", group = g_KZ)
london = input.session("0200-0500", "", inline = "LONDON", group = g_KZ)
lo_color = input.color(#9598a1, "", inline = "LONDON", group = g_KZ)
use_nyam = input.bool(true, "", inline = "NYAM", group = g_KZ)
na_txt = input.string("NYAM", "", inline = "NYAM", group = g_KZ)
nyam = input.session("0700-1000", "", inline = "NYAM", group = g_KZ)
na_color = input.color(#9598a1, "", inline = "NYAM", group = g_KZ)
use_nylu = input.bool(false, "", inline = "NYLU", group = g_KZ)
nl_txt = input.string("Lunch", "", inline = "NYLU", group = g_KZ)
nylu = input.session("1200-1300", "", inline = "NYLU", group = g_KZ)
nl_color = input.color(#9598a1, "", inline = "NYLU", group = g_KZ)
use_nypm = input.bool(false, "", inline = "NYPM", group = g_KZ)
np_txt = input.string("NYPM", "", inline = "NYPM", group = g_KZ)
nypm = input.session("1300-1600", "", inline = "NYPM", group = g_KZ)
np_color = input.color(#9598a1, "", inline = "NYPM", group = g_KZ)
use_loop = input.bool(true, "", inline = "LOOP", group = g_KZ)
op_txt = input.string("CBDR", "", inline = "LOOP", group = g_KZ)
loop = input.session("1400-2000", "", inline = "LOOP", group = g_KZ)
op_color = input.color(#9598a1, "", inline = "LOOP", group = g_KZ)
use_locl = input.bool(true, "", inline = "LOCL", group = g_KZ)
cl_txt = input.string("CLOSE", "", inline = "LOCL", group = g_KZ)
locl = input.session("1000-1200", "", inline = "LOCL", group = g_KZ)
cl_color = input.color(#9598a1, "", inline = "LOCL", group = g_KZ)
use_sb1 = input.bool(false, "", inline = "SB1", group = g_KZ)
m1_txt = input.string("London SB", "", inline = "SB1", group = g_KZ)
sb1 = input.session("0300-0400", "", inline = "SB1", group = g_KZ)
m1_color = input.color(#9598a1, "", inline = "SB1", group = g_KZ)
use_sb2 = input.bool(false, "", inline = "SB2", group = g_KZ)
m2_txt = input.string("NewYork AM SB", "", inline = "SB2", group = g_KZ)
sb2 = input.session("1000-1100", "", inline = "SB2", group = g_KZ)
m2_color = input.color(#9598a1, "", inline = "SB2", group = g_KZ)
use_sb3 = input.bool(false, "", inline = "SB3", group = g_KZ)
m3_txt = input.string("NewYork PM SB", "", inline = "SB3", group = g_KZ)
sb3 = input.session("1400-1500", "", inline = "SB3", group = g_KZ)
m3_color = input.color(#9598a1, "", inline = "SB3", group = g_KZ)
var g_LABELS = "Killzone Pivots"
use_alerts = input.bool(false, "Alert Broken Pivots", inline = "PV", group = g_LABELS)
show_pivots = input.bool(false, "Show Pivots", inline = "SV", group = g_LABELS)
show_labels = input.bool(false, "Pivots Labels", inline = "SV", group = g_LABELS)
show_midpoints = input.bool(false, "Pivots Midpoints",inline = "SV", group = g_LABELS)
ext_pivots = input.string("Until Mitigated", "Extend Pivots...", options = , group = g_LABELS)
ext_which = input.string("Most Recent", "...From Which Sessions", options = , group = g_LABELS)
ash_str = input.string("AS.H", "Killzone 01 Labels", inline = "L_AS", group = g_LABELS)
asl_str = input.string("AS.L", "", inline = "L_AS", group = g_LABELS)
loh_str = input.string("LO.H", "Killzone 02 Labels", inline = "L_LO", group = g_LABELS)
lol_str = input.string("LO.L", "", inline = "L_LO", group = g_LABELS)
nah_str = input.string("NYAM.H", "Killzone 03 Labels", inline = "L_NA", group = g_LABELS)
nal_str = input.string("NYAM.L", "", inline = "L_NA", group = g_LABELS)
nlh_str = input.string("NYL.H", "Killzone 04 Labels", inline = "L_NL", group = g_LABELS)
nll_str = input.string("NYL.L", "", inline = "L_NL", group = g_LABELS)
nph_str = input.string("NYPM.H", "Killzone 05 Labels", inline = "L_NP", group = g_LABELS)
npl_str = input.string("NYPM.L", "", inline = "L_NP", group = g_LABELS)
oph_str = input.string("LOOP.H", "Killzone 06 Labels", inline = "L_OP", group = g_LABELS)
opl_str = input.string("LOOP.L", "", inline = "L_OP", group = g_LABELS)
clh_str = input.string("LOCL.H", "Killzone 07 Labels", inline = "L_CL", group = g_LABELS)
cll_str = input.string("LOCL.L", "", inline = "L_CL", group = g_LABELS)
m1h_str = input.string("SB1.H", "Killzone 08 Labels", inline = "L_M1", group = g_LABELS)
m1l_str = input.string("SB1.L", "", inline = "L_M1", group = g_LABELS)
m2h_str = input.string("SB2.H", "Killzone 09 Labels", inline = "L_M2", group = g_LABELS)
m2l_str = input.string("SB2.L", "", inline = "L_M2", group = g_LABELS)
m3h_str = input.string("SB3.H", "Killzone 10 Labels", inline = "L_M3", group = g_LABELS)
m3l_str = input.string("SB3.L", "", inline = "L_M3", group = g_LABELS)
kzp_style = get_line_type(input.string(defval = 'Solid', title = "Pivot Style", options = , inline = "KZP", group = g_LABELS))
kzp_width = input.int(1, "", inline = "KZP", group = g_LABELS)
kzm_style = get_line_type(input.string(defval = 'Dotted', title = "Midpoint Style", options = , inline = "KZM", group = g_LABELS))
kzm_width = input.int(1, "", inline = "KZM", group = g_LABELS)
var g_RNG = "Killzone Range"
show_range = input.bool(false, "Show Killzone Range", tooltip = "Show the most recent ranges of each selected killzone, from high to low", group = g_RNG)
show_range_avg = input.bool(true, "Show Average", tooltip = "Show the average range of each selected killzone", group = g_RNG)
range_avg = input.int(5, "Average Length", 0, tooltip = "This many previous sessions will be used to calculate the average. If there isn't enough data on the current chart, it will use as many sessions as possible", group = g_RNG)
range_pos = get_table_pos(input.string('Top Right', "Table Position", options = , group = g_RNG))
range_size = get_size(input.string('Normal', "Table Size", options = , group = g_RNG))
var g_DWM = "Day - Week - Month"
dow_labels = input.bool(false, "Day of Week Labels", inline = "DOW", group = g_DWM)
dow_yloc = input.string('Bottom', "", options = , inline = "DOW", group = g_DWM)
dow_xloc = input.string('Midnight', "", options = , inline = "DOW", group = g_DWM)
sep_unlimited = input.bool(true, "Unlimited", tooltip = "Unlimited will show as many of the selected lines as possible. Otherwise, the session drawing limit will be used", group = g_DWM)
show_d_open = input.bool(true, "D Open", inline = "DO", group = g_DWM)
dhl = input.bool(true, "High/Low", inline = "DO", tooltip = "", group = g_DWM)
ds = input.bool(true, "Separators", inline = "DO", tooltip = "Mark where a new day begins", group = g_DWM)
d_color = input.color(color.blue, "", inline = "DO", group = g_DWM)
show_w_open = input.bool(true, "W Open", inline = "WO", group = g_DWM)
whl = input.bool(true, "High/Low", inline = "WO", tooltip = "", group = g_DWM)
ws = input.bool(true, "Separators", inline = "WO", tooltip = "Mark where a new week begins", group = g_DWM)
w_color = input.color(#089981, "", inline = "WO", group = g_DWM)
show_m_open = input.bool(true, "M Open", inline = "MO", group = g_DWM)
mhl = input.bool(true, "High/Low", inline = "MO", tooltip = "", group = g_DWM)
ms = input.bool(true, "Separators", inline = "MO", tooltip = "Mark where a new month begins", group = g_DWM)
m_color = input.color(color.red, "", inline = "MO", group = g_DWM)
htf_style = get_line_type(input.string(defval = 'Dotted', title = "Style", options = , inline = "D0", group = g_DWM))
htf_width = input.int(1, "", inline = "D0", group = g_DWM)
var g_OPEN = "Opening Prices"
open_unlimited = input.bool(true, "Unlimited", tooltip = "Unlimited will show as many of the selected lines as possible. Otherwise, the session drawing limit will be used", group = g_OPEN)
hide_hline = input.bool(true,"Show Opening Price",group = g_OPEN)
hide_lines_h = input.timeframe("60","Hide Above Time Frame",group = g_OPEN)
use_h1 = input.bool(true, "", inline = "H1", group = g_OPEN)
h1_text = input.string("00:00", "", inline = "H1", group = g_OPEN)
h1 = input.session("0000-0001", "", inline = "H1", group = g_OPEN)
h1_color = input.color(#000000, "", inline = "H1", group = g_OPEN)
use_h2 = input.bool(true, "", inline = "H2", group = g_OPEN)
h2_text = input.string("08:30", "", inline = "H2", group = g_OPEN)
h2 = input.session("0830-0831", "", inline = "H2", group = g_OPEN)
h2_color = input.color(#000000, "", inline = "H2", group = g_OPEN)
use_h3 = input.bool(false, "", inline = "H3", group = g_OPEN)
h3_text = input.string("10:00", "", inline = "H3", group = g_OPEN)
h3 = input.session("1000-1001", "", inline = "H3", group = g_OPEN)
h3_color = input.color(#000000, "", inline = "H3", group = g_OPEN)
use_h4 = input.bool(false, "", inline = "H4", group = g_OPEN)
h4_text = input.string("14:00", "", inline = "H4", group = g_OPEN)
h4 = input.session("1400-1401", "", inline = "H4", group = g_OPEN)
h4_color = input.color(#000000, "", inline = "H4", group = g_OPEN)
hz_style = get_line_type(input.string(defval = 'Dotted', title = "Style", options = , inline = "H0", group = g_OPEN))
hz_width = input.int(1, "", inline = "H0", group = g_OPEN)
var g_VERTICAL = "Timestamps"
hide_vline = input.bool(true,"Show Timestamp",group = g_VERTICAL)
hide_lines_v = input.timeframe("60","Hide Above Time Frame",group = g_VERTICAL)
use_v1 = input.bool(true, "", inline = "V1", group = g_VERTICAL)
v1 = input.session("0000-0001", "", inline = "V1", group = g_VERTICAL)
v1_color = input.color(#000000, "", inline = "V1", group = g_VERTICAL)
use_v2 = input.bool(false, "", inline = "V2", group = g_VERTICAL)
v2 = input.session("0800-0801", "", inline = "V2", group = g_VERTICAL)
v2_color = input.color(#000000, "", inline = "V2", group = g_VERTICAL)
use_v3 = input.bool(false, "", inline = "V3", group = g_VERTICAL)
v3 = input.session("1000-1001", "", inline = "V3", group = g_VERTICAL)
v3_color = input.color(#000000, "", inline = "V3", group = g_VERTICAL)
use_v4 = input.bool(false, "", inline = "V4", group = g_VERTICAL)
v4 = input.session("1200-1201", "", inline = "V4", group = g_VERTICAL)
v4_color = input.color(#000000, "", inline = "V4", group = g_VERTICAL)
vl_style = get_line_type(input.string(defval = 'Dotted', title = "Style", options = , inline = "V0", group = g_VERTICAL))
vl_width = input.int(1, "", inline = "V0", group = g_VERTICAL)
// ---------------------------------------- Inputs --------------------------------------------------
// ---------------------------------------- Variables & Constants --------------------------------------------------
type kz
string _title
box _box
line _hi_line
line _md_line
line _lo_line
label _hi_label
label _lo_label
bool _hi_valid
bool _md_valid
bool _lo_valid
float _range_store
float _range_current
type hz
line LN
label LB
bool CO
type dwm_hl
line hi_line
line lo_line
label hi_label
label lo_label
type dwm_info
string tf
float o = na
float h = na
float l = na
float ph = na
float pl = na
var as_kz = kz.new(as_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float())
var lo_kz = kz.new(lo_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float())
var na_kz = kz.new(na_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float())
var nl_kz = kz.new(nl_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float())
var np_kz = kz.new(np_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float())
var op_kz = kz.new(op_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float())
var cl_kz = kz.new(cl_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float())
var m1_kz = kz.new(m1_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float())
var m2_kz = kz.new(m2_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float())
var m3_kz = kz.new(m3_txt, array.new_box(), array.new_line(), array.new_line(), array.new_line(), array.new_label(), array.new_label(), array.new_bool(), array.new_bool(), array.new_bool(), array.new_float())
var hz_1 = hz.new(array.new_line(), array.new_label(), array.new_bool())
var hz_2 = hz.new(array.new_line(), array.new_label(), array.new_bool())
var hz_3 = hz.new(array.new_line(), array.new_label(), array.new_bool())
var hz_4 = hz.new(array.new_line(), array.new_label(), array.new_bool())
var d_hl = dwm_hl.new(array.new_line(), array.new_line(), array.new_label(), array.new_label())
var w_hl = dwm_hl.new(array.new_line(), array.new_line(), array.new_label(), array.new_label())
var m_hl = dwm_hl.new(array.new_line(), array.new_line(), array.new_label(), array.new_label())
var d_info = dwm_info.new("D")
var w_info = dwm_info.new("W")
var m_info = dwm_info.new("M")
t_as = not na(time("", asia, gmt_tz))
t_lo = not na(time("", london, gmt_tz))
t_na = not na(time("", nyam, gmt_tz))
t_nl = not na(time("", nylu, gmt_tz))
t_np = not na(time("", nypm, gmt_tz))
t_op = not na(time("", loop, gmt_tz))
t_cl = not na(time("", locl, gmt_tz))
t_m1 = not na(time("", sb1, gmt_tz))
t_m2 = not na(time("", sb2, gmt_tz))
t_m3 = not na(time("", sb3, gmt_tz))
t_co = not na(time("", cutoff, gmt_tz))
t_h1 = not na(time("", h1, gmt_tz))
t_h2 = not na(time("", h2, gmt_tz))
t_h3 = not na(time("", h3, gmt_tz))
t_h4 = not na(time("", h4, gmt_tz))
t_v1 = not na(time("", v1, gmt_tz))
t_v2 = not na(time("", v2, gmt_tz))
t_v3 = not na(time("", v3, gmt_tz))
t_v4 = not na(time("", v4, gmt_tz))
var d_sep_line = array.new_line()
var w_sep_line = array.new_line()
var m_sep_line = array.new_line()
var d_line = array.new_line()
var w_line = array.new_line()
var m_line = array.new_line()
var d_label = array.new_label()
var w_label = array.new_label()
var m_label = array.new_label()
var v1_line = array.new_line()
var v2_line = array.new_line()
var v3_line = array.new_line()
var v4_line = array.new_line()
var transparent = #ffffff00
var ext_current = ext_which == 'Most Recent'
var ext_past = ext_pivots == 'Past Mitigation'
update_dwm_info(dwm_info n) =>
if timeframe.change(n.tf)
n.ph := n.h
n.pl := n.l
n.o := open
n.h := high
n.l := low
else
n.h := math.max(high, n.h)
n.l := math.min(low, n.l)
if dhl or show_d_open
update_dwm_info(d_info)
if whl or show_w_open
update_dwm_info(w_info)
if mhl or show_m_open
update_dwm_info(m_info)
// ---------------------------------------- Variables & Constants --------------------------------------------------
// ---------------------------------------- Functions --------------------------------------------------
get_box_color(color c) =>
result = color.new(c, box_transparency)
get_text_color(color c) =>
result = color.new(c, text_transparency)
// ---------------------------------------- Functions --------------------------------------------------
// ---------------------------------------- Core Logic --------------------------------------------------
dwm_sep(string tf, bool use, line arr, color col) =>
if use
if timeframe.change(tf)
arr.unshift(line.new(bar_index, high*1.0001, bar_index, low, style = htf_style, width = htf_width, extend = extend.both, color = col))
if not sep_unlimited and arr.size() > max_days
arr.pop().delete()
dwm_open(string tf, bool use, line lns, label lbls, dwm_info n, color col) =>
if use
if timeframe.change(tf)
lns.unshift(line.new(time, n.o, time, n.o, xloc = xloc.bar_time, style = htf_style, width = htf_width, color = col))
lbls.unshift(label.new(time, n.o, tf + " OPEN", xloc = xloc.bar_time, style = label.style_label_left, color = transparent, textcolor = txt_color, size = lbl_size, text_font_family = font_style))
if not sep_unlimited and lns.size() > max_days
lns.pop().delete()
lbls.pop().delete()
else if lns.size() > 0
lns.get(0).set_x2(time)
lbls.get(0).set_x(time)
dwm_hl(string tf, bool use, dwm_hl hl, dwm_info n, color col) =>
if use
if timeframe.change(tf)
hl.hi_line.unshift(line.new(time, n.ph, time, n.ph, xloc = xloc.bar_time, style = htf_style, width = htf_width, color = col))
hl.lo_line.unshift(line.new(time, n.pl, time, n.pl, xloc = xloc.bar_time, style = htf_style, width = htf_width, color = col))
hl.hi_label.unshift(label.new(time, n.ph, "P"+tf+"H", xloc = xloc.bar_time, style = label.style_label_left, color = transparent, textcolor = txt_color, size = lbl_size, text_font_family = font_style))
hl.lo_label.unshift(label.new(time, n.pl, "P"+tf+"L", xloc = xloc.bar_time, style = label.style_label_left, color = transparent, textcolor = txt_color, size = lbl_size, text_font_family = font_style))
if not sep_unlimited and hl.hi_line.size() > max_days
hl.hi_line.pop().delete()
hl.lo_line.pop().delete()
hl.hi_label.pop().delete()
hl.lo_label.pop().delete()
else if hl.hi_line.size() > 0
hl.hi_line.get(0).set_x2(time)
hl.lo_line.get(0).set_x2(time)
hl.hi_label.get(0).set_x(time)
hl.lo_label.get(0).set_x(time)
dwm() =>
//if timeframe.in_seconds() <= hide_lines_sessions *60
if DWM_profile
if D_profile and timeframe.in_seconds("") <= timeframe.in_seconds(hide_lines_DO)
// Draw Daily separators, open lines, and high/low lines
dwm_sep("D", ds, d_sep_line, d_color)
dwm_open("D", show_d_open, d_line, d_label, d_info, d_color)
dwm_hl("D", dhl, d_hl, d_info, d_color)
// Draw Weekly and Monthly only if Daily profile allows it
if W_profile and timeframe.in_seconds("") <= timeframe.in_seconds(hide_lines_WO)
dwm_sep("W", ws, w_sep_line, w_color)
dwm_open("W", show_w_open, w_line, w_label, w_info, w_color)
dwm_hl("W", whl, w_hl, w_info, w_color)
if M_profile and timeframe.in_seconds("") <= timeframe.in_seconds(hide_lines_MO)
dwm_sep("M", ms, m_sep_line, m_color)
dwm_open("M", show_m_open, m_line, m_label, m_info, m_color)
dwm_hl("M", mhl, m_hl, m_info, m_color)
else if W_profile and timeframe.in_seconds("") <= timeframe.in_seconds(hide_lines_WO)
// Draw Weekly separators, open lines, and high/low lines
dwm_sep("W", ws, w_sep_line, w_color)
dwm_open("W", show_w_open, w_line, w_label, w_info, w_color)
dwm_hl("W", whl, w_hl, w_info, w_color)
// Draw Monthly only if Weekly profile allows it
if M_profile and timeframe.in_seconds("") <= timeframe.in_seconds(hide_lines_MO)
dwm_sep("M", ms, m_sep_line, m_color)
dwm_open("M", show_m_open, m_line, m_label, m_info, m_color)
dwm_hl("M", mhl, m_hl, m_info, m_color)
else if M_profile and timeframe.in_seconds("") <= timeframe.in_seconds(hide_lines_MO)
// Draw Monthly separators, open lines, and high/low lines
dwm_sep("M", ms, m_sep_line, m_color)
dwm_open("M", show_m_open, m_line, m_label, m_info, m_color)
dwm_hl("M", mhl, m_hl, m_info, m_color)
vline(bool use, bool t, line arr, color col) =>
if use
if t and not t
arr.unshift(line.new(bar_index, high*1.0001, bar_index, low, style = vl_style, width = vl_width, extend = extend.both, color = col))
vlines() =>
if hide_vline
if timeframe.in_seconds("") <= timeframe.in_seconds(hide_lines_v)
vline(use_v1, t_v1, v1_line, v1_color)
vline(use_v2, t_v2, v2_line, v2_color)
vline(use_v3, t_v3, v3_line, v3_color)
vline(use_v4, t_v4, v4_line, v4_color)
hz_line(bool use, bool t, hz hz, string txt, color col) =>
if use
if t and not t
hz.LN.unshift(line.new(bar_index, open, bar_index, open, style = hz_style, width = hz_width, color = col))
hz.LB.unshift(label.new(bar_index, open, txt, style = label.style_label_left, color = transparent, textcolor = txt_color, size = lbl_size, text_font_family = font_style))
array.unshift(hz.CO, false)
if not open_unlimited and hz.LN.size() > max_days
hz.LN.pop().delete()
hz.LB.pop().delete()
hz.CO.pop()
if not t and hz.CO.size() > 0
if not hz.CO.get(0)
hz.LN.get(0).set_x2(bar_index)
hz.LB.get(0).set_x(bar_index)
if (use_cutoff ? t_co : false)
hz.CO.set(0, true)
hz_lines() =>
if hide_hline
if timeframe.in_seconds("") <= timeframe.in_seconds(hide_lines_h)
hz_line(use_h1, t_h1, hz_1, h1_text, h1_color)
hz_line(use_h2, t_h2, hz_2, h2_text, h2_color)
hz_line(use_h3, t_h3, hz_3, h3_text, h3_color)
hz_line(use_h4, t_h4, hz_4, h4_text, h4_color)
del_kz(kz k) =>
if k._box.size() > max_days
k._box.pop().delete()
if k._hi_line.size() > max_days
k._hi_line.pop().delete()
k._lo_line.pop().delete()
k._hi_valid.pop()
k._lo_valid.pop()
if show_midpoints
k._md_line.pop().delete()
k._md_valid.pop()
if k._hi_label.size() > max_days
k._hi_label.pop().delete()
k._lo_label.pop().delete()
adjust_in_kz(kz kz, bool t) =>
if t
kz._box.get(0).set_right(time)
kz._box.get(0).set_top(math.max(kz._box.get(0).get_top(), high))
kz._box.get(0).set_bottom(math.min(kz._box.get(0).get_bottom(), low))
kz._range_current := kz._box.get(0).get_top() - kz._box.get(0).get_bottom()
if show_pivots and kz._hi_line.size() > 0
if high > kz._hi_line.get(0).get_y1()
kz._hi_line.get(0).set_xy1(time, high)
kz._hi_line.get(0).set_xy2(time, high)
if low < kz._lo_line.get(0).get_y1()
kz._lo_line.get(0).set_xy1(time, low)
kz._lo_line.get(0).set_xy2(time, low)
if show_midpoints
kz._md_line.get(0).set_xy1(time, math.avg(kz._hi_line.get(0).get_y2(), kz._lo_line.get(0).get_y2()))
kz._md_line.get(0).set_xy2(time, math.avg(kz._hi_line.get(0).get_y2(), kz._lo_line.get(0).get_y2()))
if show_labels and kz._hi_label.size() > 0
if high > kz._hi_label.get(0).get_y()
kz._hi_label.get(0).set_xy(time, high)
if low < kz._lo_label.get(0).get_y()
kz._lo_label.get(0).set_xy(time, low)
adjust_out_kz(kz kz, bool t) =>
if not t and kz._box.size() > 0
if t
array.unshift(kz._range_store, kz._range_current)
if kz._range_store.size() > range_avg
kz._range_store.pop()
if kz._box.size() > 0 and show_pivots
for i = 0 to kz._box.size() - 1
if not ext_current or (ext_current and i == 0)
if ext_past ? true : (kz._hi_valid.get(i) == true)
kz._hi_line.get(i).set_x2(time)
if high > kz._hi_line.get(i).get_y1() and kz._hi_valid.get(i) == true
if use_alerts and i == 0
alert("Broke "+kz._title+" High", alert.freq_once_per_bar)
kz._hi_valid.set(i, false)
else if (use_cutoff ? t_co : false)
kz._hi_valid.set(i, false)
if ext_past ? true : (kz._lo_valid.get(i) == true)
kz._lo_line.get(i).set_x2(time)
if low < kz._lo_line.get(i).get_y1() and kz._lo_valid.get(i) == true
if use_alerts and i == 0
alert("Broke "+kz._title+" Low", alert.freq_once_per_bar)
kz._lo_valid.set(i, false)
else if (use_cutoff ? t_co : false)
kz._lo_valid.set(i, false)
if show_midpoints
kz._md_line.get(i).set_x2(time)
else
break
manage_kz(kz kz, bool use, bool t, color c, string box_txt, string hi_txt, string lo_txt) =>
if timeframe.in_seconds("") <= timeframe.in_seconds(tf_limit) and use
if t and not t
_c = get_box_color(c)
_t = get_text_color(c)
kz._box.unshift(box.new(time, high, time, low, xloc = xloc.bar_time, border_color = show_kz ? _c : na, bgcolor = show_kz ? _c : na, text = (show_kz and show_kz_text) ? box_txt : na, text_color = _t))
if show_pivots
kz._hi_line.unshift(line.new(time, high, time, high, xloc = xloc.bar_time, style = kzp_style, color = c, width = kzp_width))
kz._lo_line.unshift(line.new(time, low, time, low, xloc = xloc.bar_time, style = kzp_style, color = c, width = kzp_width))
if show_midpoints
kz._md_line.unshift(line.new(time, math.avg(high, low), time, math.avg(high, low), xloc = xloc.bar_time, style = kzm_style, color = c, width = kzm_width))
array.unshift(kz._md_valid, true)
array.unshift(kz._hi_valid, true)
array.unshift(kz._lo_valid, true)
if show_labels
kz._hi_label.unshift(label.new(time, high, hi_txt, xloc = xloc.bar_time, color = transparent, textcolor = txt_color, style = label.style_label_down, size = lbl_size))
kz._lo_label.unshift(label.new(time, low, lo_txt, xloc = xloc.bar_time, color = transparent, textcolor = txt_color, style = label.style_label_up, size = lbl_size))
del_kz(kz)
adjust_in_kz(kz, t)
adjust_out_kz(kz, t)
manage_kz(as_kz, use_asia, t_as, as_color, as_txt, ash_str, asl_str)
manage_kz(lo_kz, use_london, t_lo, lo_color, lo_txt, loh_str, lol_str)
manage_kz(na_kz, use_nyam, t_na, na_color, na_txt, nah_str, nal_str)
manage_kz(nl_kz, use_nylu, t_nl, nl_color, nl_txt, nlh_str, nll_str)
manage_kz(np_kz, use_nypm, t_np, np_color, np_txt, nph_str, npl_str)
manage_kz(op_kz, use_loop, t_op, op_color, op_txt, oph_str, opl_str)
manage_kz(cl_kz, use_locl, t_cl, cl_color, cl_txt, clh_str, cll_str)
manage_kz(m1_kz, use_sb1, t_m1, m1_color, m1_txt, m1h_str, m1l_str)
manage_kz(m2_kz, use_sb2, t_m2, m2_color, m2_txt, m2h_str, m2l_str)
manage_kz(m3_kz, use_sb3, t_m3, m3_color, m3_txt, m3h_str, m3l_str)
dwm()
vlines()
hz_lines()
new_dow_time = dow_xloc == 'Midday' ? time - timeframe.in_seconds("D") / 2 * 1000 : time
new_day = dayofweek(new_dow_time, gmt_tz) != dayofweek(new_dow_time, gmt_tz)
var dow_top = dow_yloc == 'Top'
var sunday = "SUNDAY"
var monday = "MONDAY"
var tuesday = "TUESDAY"
var wednesday = "WEDNESDAY"
var thursday = "THURSDAY"
var friday = "FRIDAY"
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 1 and new_day, location = dow_top ? location.top : location.bottom, char = "", textcolor = txt_color, text = sunday)
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 2 and new_day, location = dow_top ? location.top : location.bottom, char = "", textcolor = txt_color, text = monday)
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 3 and new_day, location = dow_top ? location.top : location.bottom, char = "", textcolor = txt_color, text = tuesday)
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 4 and new_day, location = dow_top ? location.top : location.bottom, char = "", textcolor = txt_color, text = wednesday)
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 5 and new_day, location = dow_top ? location.top : location.bottom, char = "", textcolor = txt_color, text = thursday)
plotchar(dow_labels and timeframe.isintraday and dayofweek(new_dow_time, gmt_tz) == 6 and new_day, location = dow_top ? location.top : location.bottom, char = "", textcolor = txt_color, text = friday)
get_min_days_stored() =>
store = array.new_int()
if as_kz._range_store.size() > 0
store.push(as_kz._range_store.size())
if lo_kz._range_store.size() > 0
store.push(lo_kz._range_store.size())
if na_kz._range_store.size() > 0
store.push(na_kz._range_store.size())
if nl_kz._range_store.size() > 0
store.push(nl_kz._range_store.size())
if np_kz._range_store.size() > 0
store.push(np_kz._range_store.size())
if op_kz._range_store.size() > 0
store.push(op_kz._range_store.size())
if cl_kz._range_store.size() > 0
store.push(cl_kz._range_store.size())
if m1_kz._range_store.size() > 0
store.push(m1_kz._range_store.size())
if m2_kz._range_store.size() > 0
store.push(m2_kz._range_store.size())
if m3_kz._range_store.size() > 0
store.push(m3_kz._range_store.size())
result = store.min()
set_table(table tbl, kz kz, int row, string txt, bool use, bool t, color col) =>
if use
table.cell(tbl, 0, row, txt, text_size = range_size, bgcolor = get_box_color(col), text_color = txt_color)
table.cell(tbl, 1, row, str.tostring(kz._range_current), text_size = range_size, bgcolor = t ? get_box_color(col) : na, text_color = txt_color)
if show_range_avg
table.cell(tbl, 2, row, str.tostring(kz._range_store.avg()), text_size = range_size, text_color = txt_color)
if show_range and barstate.islast
var tbl = table.new(range_pos, 10, 10, chart.bg_color, chart.fg_color, 2, chart.fg_color, 1)
table.cell(tbl, 0, 0, "Killzone", text_size = range_size, text_color = txt_color)
table.cell(tbl, 1, 0, "Range", text_size = range_size, text_color = txt_color)
if show_range_avg
table.cell(tbl, 2, 0, "Avg ("+str.tostring(get_min_days_stored())+")", text_size = range_size, text_color = txt_color)
set_table(tbl, as_kz, 1, as_txt, use_asia, t_as, as_color)
set_table(tbl, lo_kz, 2, lo_txt, use_london, t_lo, lo_color)
set_table(tbl, na_kz, 3, na_txt, use_nyam, t_na, na_color)
set_table(tbl, nl_kz, 4, nl_txt, use_nylu, t_nl, nl_color)
set_table(tbl, np_kz, 5, np_txt, use_nypm, t_np, np_color)
set_table(tbl, op_kz, 6, op_txt, use_loop, t_op, op_color)
set_table(tbl, cl_kz, 7, cl_txt, use_locl, t_cl, cl_color)
set_table(tbl, m1_kz, 8, m1_txt, use_sb1, t_m1, m1_color)
set_table(tbl, m2_kz, 9, m2_txt, use_sb2, t_m2, m2_color)
set_table(tbl, m3_kz, 10, m3_txt, use_sb3, t_m3, m3_color)
// ---------------------------------------- Core Logic --------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------------//
// This source code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// ©Mutharasan2
// Prev Published: 608
// Curr Published: 907
//@version=5
//2nd indicator("ICT HTF Candles (fadi)", overlay=true, max_boxes_count = 500, max_lines_count = 500, max_bars_back = 5000)
type Candle
float o
float c
float h
float l
int o_idx
int c_idx
int h_idx
int l_idx
box body
line wick_up
line wick_down
type Trace
line o
line c
line h
line l
label o_l
label c_l
label h_l
label l_l
type Imbalance
box b
int idx
type CandleSettings
bool show
string htf
int max_display
type Settings
int max_sets
color bull_body
color bull_border
color bull_wick
color bear_body
color bear_border
color bear_wick
int offset
int buffer
int htf_buffer
int width
bool trace_show
color trace_o_color
string trace_o_style
int trace_o_size
color trace_c_color
string trace_c_style
int trace_c_size
color trace_h_color
string trace_h_style
int trace_h_size
color trace_l_color
string trace_l_style
int trace_l_size
string trace_anchor
bool label_show
color label_color
string label_size
bool fvg_show
color fvg_color
bool vi_show
color vi_color
bool htf_label_show
color htf_label_color
string htf_label_size
bool htf_timer_show
color htf_timer_color
string htf_timer_size
string level
string liquidity_open_style
string liquidity_claimed_style
color liquidity_open_color
color liquidity_claimed_color
int liquidity_open_size
int liquidity_claimed_size
int max_lines
int extend
type CandleSet
Candle candles
Imbalance imbalances
CandleSettings settings
label tfName
label tfTimer
type Helper
string name = "Helper"
Settings settings = Settings.new()
var CandleSettings SettingsHTF1 = CandleSettings.new()
var CandleSettings SettingsHTF2 = CandleSettings.new()
var CandleSettings SettingsHTF3 = CandleSettings.new()
var CandleSettings SettingsHTF4 = CandleSettings.new()
var CandleSettings SettingsHTF5 = CandleSettings.new()
var CandleSettings SettingsHTF6 = CandleSettings.new()
var Candle candles_1 = array.new(0)
var Candle candles_2 = array.new(0)
var Candle candles_3 = array.new(0)
var Candle candles_4 = array.new(0)
var Candle candles_5 = array.new(0)
var Candle candles_6 = array.new(0)
var Imbalance imbalances_1 = array.new()
var Imbalance imbalances_2 = array.new()
var Imbalance imbalances_3 = array.new()
var Imbalance imbalances_4 = array.new()
var Imbalance imbalances_5 = array.new()
var Imbalance imbalances_6 = array.new()
var CandleSet htf1 = CandleSet.new()
htf1.settings := SettingsHTF1
htf1.candles := candles_1
htf1.imbalances := imbalances_1
var CandleSet htf2 = CandleSet.new()
htf2.settings := SettingsHTF2
htf2.candles := candles_2
htf2.imbalances := imbalances_2
var CandleSet htf3 = CandleSet.new()
htf3.settings := SettingsHTF3
htf3.candles := candles_3
htf3.imbalances := imbalances_3
var CandleSet htf4 = CandleSet.new()
htf4.settings := SettingsHTF4
htf4.candles := candles_4
htf4.imbalances := imbalances_4
var CandleSet htf5 = CandleSet.new()
htf5.settings := SettingsHTF5
htf5.candles := candles_5
htf5.imbalances := imbalances_5
var CandleSet htf6 = CandleSet.new()
htf6.settings := SettingsHTF6
htf6.candles := candles_6
htf6.imbalances := imbalances_6
//+------------------------------------------------------------------------------------------------------------+//
//+--- Settings ---+//
//+------------------------------------------------------------------------------------------------------------+//
htf1.settings.show := input.bool(false, "HTF 1 ", inline="htf1")
htf_1 = input.timeframe("60", "", inline="htf1")
htf1.settings.htf := htf_1
htf1.settings.max_display := input.int(1, "", inline="htf1")
htf2.settings.show := input.bool(false, "HTF 2 ", inline="htf2")
htf_2 = input.timeframe("240", "", inline="htf2")
htf2.settings.htf := htf_2
htf2.settings.max_display := input.int(1, "", inline="htf2")
htf3.settings.show := input.bool(true, "HTF 3 ", inline="htf3")
htf_3 = input.timeframe("1D", "", inline="htf3")
htf3.settings.htf := htf_3
htf3.settings.max_display := input.int(1, "", inline="htf3")
htf4.settings.show := input.bool(true, "HTF 4 ", inline="htf4")
htf_4 = input.timeframe("1W", "", inline="htf4")
htf4.settings.htf := htf_4
htf4.settings.max_display := input.int(1, "", inline="htf4")
htf5.settings.show := input.bool(true, "HTF 5 ", inline="htf5")
htf_5 = input.timeframe("1M", "", inline="htf5")
htf5.settings.htf := htf_5
htf5.settings.max_display := input.int(1, "", inline="htf5")
htf6.settings.show := input.bool(false, "HTF 6 ", inline="htf6")
htf_6 = input.timeframe("3M", "", inline="htf6")
htf6.settings.htf := htf_6
htf6.settings.max_display := input.int(1, "", inline="htf6")
settings.max_sets := input.int(6, "Limit to next HTFs only", minval=1, maxval=6)
settings.bull_body := input.color(color.rgb(76, 175, 80), "Body ", inline="body")
settings.bear_body := input.color(color.rgb(0, 0, 0), "", inline="body")
settings.bull_border := input.color(color.rgb(93, 96, 107), "Borders", inline="borders")
settings.bear_border := input.color(color.rgb(0, 0, 0), "", inline="borders")
settings.bull_wick := input.color(color.rgb(93, 96, 107), "Wick ", inline="wick")
settings.bear_wick := input.color(color.rgb(93, 96, 107), "", inline="wick")
settings.offset := input.int(10, "padding from current candles", minval = 1)
settings.buffer := input.int(1, "space between candles", minval = 1, maxval = 4)
settings.htf_buffer := input.int(10, "space between Higher Timeframes", minval = 1, maxval = 10)
settings.width := input.int(4, "Candle Width", minval = 1, maxval = 10)*2
settings.htf_label_show := input.bool(false, "HTF Label ", inline="HTFlabel")
settings.htf_label_color := input.color(color.rgb(0, 0, 0), "", inline='HTFlabel')
settings.htf_label_size := input.string(size.tiny, "", , inline="HTFlabel")
settings.htf_timer_show := input.bool(false, "Remaining time ", inline="timer")
settings.htf_timer_color := input.color(color.rgb(0, 0, 0), "", inline='timer')
settings.htf_timer_size := input.string(size.tiny, "", , inline="timer")
settings.fvg_show := input.bool(true, "Fair Value Gap ", group="Imbalance", inline="fvg")
settings.fvg_color := input.color(color.new(color.gray, 80), "", inline='fvg', group="Imbalance")
settings.vi_show := input.bool(true, "Volume Imbalance", group="Imbalance", inline="vi")
settings.vi_color := input.color(color.new(color.red, 50), "", inline='vi', group="Imbalance")
settings.trace_show := input.bool(false, "Trace lines", group="trace")
settings.trace_o_color := input.color(color.rgb(0, 0, 0), "Open ", inline='1', group="trace")
settings.trace_o_style := input.string('····', '', options = , inline='1', group="trace")
settings.trace_o_size := input.int(1, '', options = , inline='1', group="trace")
settings.trace_c_color := input.color(color.rgb(0, 0, 0), "Close ", inline='2', group="trace")
settings.trace_c_style := input.string('····', '', options = , inline='2', group="trace")
settings.trace_c_size := input.int(1, '', options = , inline='2', group="trace")
settings.trace_h_color := input.color(color.rgb(0, 0, 0), "High ", inline='3', group="trace")
settings.trace_h_style := input.string('····', '', options = , inline='3', group="trace")
settings.trace_h_size := input.int(1, '', options = , inline='3', group="trace")
settings.trace_l_color := input.color(color.rgb(0, 0, 0), "Low ", inline='4', group="trace")
settings.trace_l_style := input.string('····', '', options = , inline='4', group="trace")
settings.trace_l_size := input.int(1, '', options = , inline='4', group="trace")
settings.trace_anchor := input.string("First Timeframe", "Anchor to", options= , group="trace")
settings.label_show := input.bool(false, "Price Label ", inline="label")
settings.label_color := input.color(color.rgb(0, 0, 0), "", inline='label')
settings.label_size := input.string(size.small, "", , inline="label")
//+------------------------------------------------------------------------------------------------------------+//
//+--- Variables ---+//
//+------------------------------------------------------------------------------------------------------------+//
Helper helper = Helper.new()
var Trace trace = Trace.new()
color color_transparent = #ffffff00
//+------------------------------------------------------------------------------------------------------------+//
//+--- Internal Functions ---+//
//+------------------------------------------------------------------------------------------------------------+//
method LineStyle(Helper helper, string style) =>
helper.name := style
out = switch style
'----' => line.style_dashed
'····' => line.style_dotted
=> line.style_solid
method ValidTimeframe(Helper helper, string HTF) =>
helper.name := HTF
if timeframe.in_seconds(HTF) >= timeframe.in_seconds("D") and timeframe.in_seconds(HTF) > timeframe.in_seconds()
true
else
n1 = timeframe.in_seconds()
n2 = timeframe.in_seconds(HTF)
n3 = n1 % n2
(n1 < n2 and math.round(n2/n1) == n2/n1)
method RemainingTime(Helper helper, string HTF) =>
helper.name := HTF
if barstate.isrealtime
timeRemaining = (time_close(HTF) - timenow)/1000
days = math.floor(timeRemaining / 86400)
hours = math.floor((timeRemaining - (days*86400)) / 3600)
minutes = math.floor((timeRemaining - (days*86400) - (hours*3600))/ 60)
seconds = math.floor(timeRemaining - (days*86400) - (hours*3600) - (minutes*60))
r = str.tostring(seconds, "00")
if minutes > 0 or hours > 0 or days > 0
r := str.tostring(minutes, "00") + ":" + r
if hours > 0 or days > 0
r := str.tostring(hours, "00") + ":" + r
if days > 0
r := str.tostring(days) + "D " + r
r
else
"n/a"
method HTFName(Helper helper, string HTF) =>
helper.name := "HTFName"
formatted = HTF
seconds = timeframe.in_seconds(HTF)
if seconds < 60
formatted := str.tostring(seconds) + "s"
else if (seconds / 60) < 60
formatted := str.tostring((seconds/60)) + "m"
else if (seconds/60/60) < 24
formatted := str.tostring((seconds/60/60)) + "H"
formatted
method HTFEnabled(Helper helper) =>
helper.name := "HTFEnabled"
int enabled =0
enabled += htf1.settings.show ? 1 : 0
enabled += htf2.settings.show ? 1 : 0
enabled += htf3.settings.show ? 1 : 0
enabled += htf4.settings.show ? 1 : 0
enabled += htf5.settings.show ? 1 : 0
enabled += htf6.settings.show ? 1 : 0
int last = math.min(enabled, settings.max_sets)
last
method CandleSetHigh(Helper helper, Candle candles, float h) =>
helper.name := "CandlesSetHigh"
float _h = h
if array.size(candles) > 0
for i = 0 to array.size(candles)-1
Candle c = array.get(candles, i)
if c.h > _h
_h := c.h
_h
method CandlesHigh(Helper helper, Candle candles) =>
helper.name := "CandlesHigh"
h = 0.0
int cnt = 0
int last = helper.HTFEnabled()
if htf1.settings.show and helper.ValidTimeframe(htf1.settings.htf)
h := helper.CandleSetHigh(htf1.candles, h)
cnt += 1
if htf2.settings.show and helper.ValidTimeframe(htf2.settings.htf) and cnt < last
h := helper.CandleSetHigh(htf2.candles, h)
cnt +=1
if htf3.settings.show and helper.ValidTimeframe(htf3.settings.htf) and cnt < last
h := helper.CandleSetHigh(htf3.candles, h)
cnt += 1
if htf4.settings.show and helper.ValidTimeframe(htf4.settings.htf) and cnt < last
h := helper.CandleSetHigh(htf4.candles, h)
cnt += 1
if htf5.settings.show and helper.ValidTimeframe(htf5.settings.htf) and cnt < last
h := helper.CandleSetHigh(htf5.candles, h)
cnt += 1
if htf6.settings.show and helper.ValidTimeframe(htf6.settings.htf) and cnt < last
h := helper.CandleSetHigh(htf6.candles, h)
h
if array.size(candles) > 0
for i = 0 to array.size(candles)-1
Candle c = array.get(candles, i)
if c.h > h
h := c.h
h
method Reorder(CandleSet candleSet, int offset) =>
size = candleSet.candles.size()
if size > 0
for i = size-1 to 0
Candle candle = candleSet.candles.get(i)
t_buffer = offset + ((settings.width+settings.buffer)*(size-i-1))
box.set_left(candle.body, bar_index + t_buffer)
box.set_right(candle.body, bar_index + settings.width + t_buffer)
line.set_x1(candle.wick_up, bar_index+((settings.width)/2) + t_buffer)
line.set_x2(candle.wick_up, bar_index+((settings.width)/2) + t_buffer)
line.set_x1(candle.wick_down, bar_index+((settings.width)/2) + t_buffer)
line.set_x2(candle.wick_down, bar_index+((settings.width)/2) + t_buffer)
candleSet
top = helper.CandlesHigh(candleSet.candles)
left = bar_index + offset + ((settings.width+settings.buffer)*(size-1))/2
if settings.htf_label_show
var label l = candleSet.tfName
string lbl = helper.HTFName(candleSet.settings.htf)
if settings.htf_timer_show
lbl += "\n"
if not na(l)
label.set_xy(l, left, top)
else
l := label.new(left, top, lbl, color=color_transparent, textcolor = settings.htf_label_color, style=label.style_label_down, size = settings.htf_label_size)
if settings.htf_timer_show
var label t = candleSet.tfTimer
string tmr = "(" + helper.RemainingTime(candleSet.settings.htf) + ")"
if not na(t)
label.set_xy(t, left, top)
else
t := label.new(left, top, tmr, color=color_transparent, textcolor = settings.htf_timer_color, style=label.style_label_down, size = settings.htf_timer_size)
candleSet
method FindImbalance(CandleSet candleSet) =>
if barstate.isrealtime or barstate.islast
if candleSet.imbalances.size() > 0
for i = candleSet.imbalances.size()-1 to 0
Imbalance del = candleSet.imbalances.get(i)
box.delete(del.b)
candleSet.imbalances.pop()
if candleSet.candles.size() > 3 and settings.fvg_show
for i = 1 to candleSet.candles.size() -3
candle1 = candleSet.candles.get(i)
candle2 = candleSet.candles.get(i+2)
candle3 = candleSet.candles.get(i+1)
if (candle1.l > candle2.h and math.min(candle1.o, candle1.c) > math.max(candle2.o, candle2.c))
Imbalance imb = Imbalance.new()
imb.b := box.new(box.get_left(candle2.body), candle2.h, box.get_right(candle1.body), candle1.l, bgcolor=settings.fvg_color, border_color = color_transparent, xloc=xloc.bar_index)
candleSet.imbalances.push(imb)
if (candle1.h < candle2.l and math.max(candle1.o, candle1.c) < math.min(candle2.o, candle2.c))
Imbalance imb = Imbalance.new()
imb.b := box.new(box.get_right(candle1.body), candle1.h, box.get_left(candle2.body), candle2.l, bgcolor=settings.fvg_color, border_color = color_transparent)
candleSet.imbalances.push(imb)
box temp = box.copy(candle3.body)
box.delete(candle3.body)
candle3.body := temp
if candleSet.candles.size() > 2 and settings.vi_show
for i = 1 to candleSet.candles.size() -2
candle1 = candleSet.candles.get(i)
candle2 = candleSet.candles.get(i+1)
if (candle1.l < candle2.h and math.min(candle1.o, candle1.c) > math.max(candle2.o, candle2.c))
Imbalance imb = Imbalance.new()
imb.b := box.new(box.get_left(candle2.body), math.min(candle1.o, candle1.c), box.get_right(candle1.body), math.max(candle2.o, candle2.c), bgcolor=settings.vi_color, border_color = color_transparent)
candleSet.imbalances.push(imb)
if (candle1.h > candle2.l and math.max(candle1.o, candle1.c) < math.min(candle2.o, candle2.c))
Imbalance imb = Imbalance.new()
imb.b := box.new(box.get_right(candle1.body), math.min(candle2.o, candle2.c), box.get_left(candle2.body), math.max(candle1.o, candle1.c), bgcolor=settings.vi_color, border_color = color_transparent)
candleSet.imbalances.push(imb)
candleSet
method Monitor(CandleSet candleSet) =>
HTFBarTime = time(candleSet.settings.htf)
isNewHTFCandle = ta.change(HTFBarTime)
if isNewHTFCandle
Candle candle = Candle.new()
candle.o := open
candle.c := close
candle.h := high
candle.l := low
candle.o_idx := bar_index
candle.c_idx := bar_index
candle.h_idx := bar_index
candle.l_idx := bar_index
bull = candle.c > candle.o
candle.body := box.new(bar_index, math.max(candle.o, candle.c), bar_index+2, math.min(candle.o, candle.c), bull ? settings.bull_border : settings.bear_border, 1, bgcolor = bull ? settings.bull_body : settings.bear_body)
candle.wick_up := line.new(bar_index+1, candle.h, bar_index, math.max(candle.o, candle.c), color=bull ? settings.bull_wick : settings.bear_wick)
candle.wick_down := line.new(bar_index+1, math.min(candle.o, candle.c), bar_index, candle.l, color=bull ? settings.bull_wick : settings.bear_wick)
candleSet.candles.unshift(candle)
if candleSet.candles.size() > candleSet.settings.max_display
Candle delCandle = array.pop(candleSet.candles)
box.delete(delCandle.body)
line.delete(delCandle.wick_up)
line.delete(delCandle.wick_down)
candleSet
method Update(CandleSet candleSet, int offset, bool showTrace) =>
if candleSet.candles.size() > 0
Candle candle = candleSet.candles.first()
candle.h_idx := high > candle.h ? bar_index : candle.h_idx
candle.h := high > candle.h ? high : candle.h
candle.l_idx := low < candle.l ? bar_index : candle.l_idx
candle.l := low < candle.l ? low : candle.l
candle.c := close
candle.c_idx := bar_index
bull = candle.c > candle.o
box.set_top(candle.body, candle.o)
box.set_bottom(candle.body, candle.c)
box.set_bgcolor(candle.body, bull ? settings.bull_body : settings.bear_body)
box.set_border_color(candle.body, bull ? settings.bull_border : settings.bear_border)
line.set_color(candle.wick_up, bull ? settings.bull_wick : settings.bear_wick)
line.set_color(candle.wick_down, bull ? settings.bull_wick : settings.bear_wick)
line.set_y1(candle.wick_up, candle.h)
line.set_y2(candle.wick_up, math.max(candle.o, candle.c))
line.set_y1(candle.wick_down, candle.l)
line.set_y2(candle.wick_down, math.min(candle.o, candle.c))
if barstate.isrealtime or barstate.islast
candleSet.Reorder(offset)
if settings.trace_show and showTrace
if bar_index - candle.o_idx < 5000
if na(trace.o)
trace.o := line.new(candle.o_idx, candle.o, box.get_left(candle.body), candle.o, xloc= xloc.bar_index, color=settings.trace_o_color, style= helper.LineStyle(settings.trace_o_style), width=settings.trace_o_size)
else
line.set_xy1(trace.o, candle.o_idx, candle.o)
line.set_xy2(trace.o, box.get_left(candle.body), candle.o)
if settings.label_show
if na(trace.o_l)
trace.o_l := label.new(box.get_right(candle.body), candle.o, str.tostring(candle.o), textalign = text.align_center, style=label.style_label_left, size=settings.label_size, color=color_transparent, textcolor=settings.label_color)
else
label.set_xy(trace.o_l, box.get_right(candle.body), candle.o)
label.set_text(trace.o_l, str.tostring(candle.o))
if bar_index - candle.c_idx < 5000
if na(trace.c)
trace.c := line.new(candle.c_idx, candle.c, box.get_left(candle.body), candle.c, xloc= xloc.bar_index, color=settings.trace_c_color, style=helper.LineStyle(settings.trace_c_style), width=settings.trace_c_size)
else
line.set_xy1(trace.c, candle.c_idx, candle.c)
line.set_xy2(trace.c, box.get_left(candle.body), candle.c)
if settings.label_show
if na(trace.c_l)
trace.c_l := label.new(box.get_right(candle.body), candle.c, str.tostring(candle.c), textalign = text.align_center, style=label.style_label_left, size=settings.label_size, color=color_transparent, textcolor=settings.label_color)
else
label.set_xy(trace.c_l, box.get_right(candle.body), candle.c)
label.set_text(trace.c_l, str.tostring(candle.c))
if bar_index - candle.h_idx < 5000
if na(trace.h)
trace.h := line.new(candle.h_idx, candle.h, line.get_x1(candle.wick_up), candle.h, xloc= xloc.bar_index, color=settings.trace_h_color, style=helper.LineStyle(settings.trace_h_style), width=settings.trace_h_size)
else
line.set_xy1(trace.h, candle.h_idx, candle.h)
line.set_xy2(trace.h, line.get_x1(candle.wick_up), candle.h)
if settings.label_show
if na(trace.h_l)
trace.h_l := label.new(box.get_right(candle.body), candle.h, str.tostring(candle.h), textalign = text.align_center, style=label.style_label_left, size=settings.label_size, color=color_transparent, textcolor=settings.label_color)
else
label.set_xy(trace.h_l, box.get_right(candle.body), candle.h)
label.set_text(trace.h_l, str.tostring(candle.o))
if bar_index - candle.l_idx < 5000
if na(trace.l)
trace.l := line.new(candle.l_idx, candle.l, line.get_x1(candle.wick_down), candle.l, xloc= xloc.bar_index, color=settings.trace_l_color, style=helper.LineStyle(settings.trace_l_style), width=settings.trace_l_size)
else
line.set_xy1(trace.l, candle.l_idx, candle.l)
line.set_xy2(trace.l, line.get_x1(candle.wick_down), candle.l)
if settings.label_show
if na(trace.l_l)
trace.l_l := label.new(box.get_right(candle.body), candle.l, str.tostring(candle.l), textalign = text.align_center, style=label.style_label_left, size=settings.label_size, color=color_transparent, textcolor=settings.label_color)
else
label.set_xy(trace.l_l, box.get_right(candle.body), candle.l)
label.set_text(trace.l_l, str.tostring(candle.o))
candleSet
int cnt = 0
int last = helper.HTFEnabled()
int offset = settings.offset
if htf1.settings.show and helper.ValidTimeframe(htf1.settings.htf)
bool showTrace = false
if settings.trace_anchor == "First Timeframe"
showTrace := true
if settings.trace_anchor == "Last Timeframe" and settings.max_sets == 1
showTrace := true
htf1.Monitor().Update(offset, showTrace).FindImbalance()
cnt +=1
offset += cnt > 0 ? (htf1.candles.size() * settings.width) + (htf1.candles.size() > 0 ? htf1.candles.size()-1 * settings.buffer : 0) + settings.htf_buffer : 0
if htf2.settings.show and helper.ValidTimeframe(htf2.settings.htf) and cnt < last
bool showTrace = false
if settings.trace_anchor == "First Timeframe" and cnt == 0
showTrace := true
if settings.trace_anchor == "Last Timeframe" and cnt == last-1
showTrace := true
htf2.Monitor().Update(offset, showTrace).FindImbalance()
cnt+=1
offset += cnt > 0 ? (htf2.candles.size() * settings.width) + (htf2.candles.size() > 0 ? htf2.candles.size()-1 * settings.buffer : 0) + settings.htf_buffer : 0
if htf3.settings.show and helper.ValidTimeframe(htf3.settings.htf) and cnt < last
bool showTrace = false
if settings.trace_anchor == "First Timeframe" and cnt == 0
showTrace := true
if settings.trace_anchor == "Last Timeframe" and cnt == last-1
showTrace := true
htf3.Monitor().Update(offset, showTrace).FindImbalance()
cnt+=1
offset += cnt > 0 ? (htf3.candles.size() * settings.width) + (htf3.candles.size() > 0 ? htf3.candles.size()-1 * settings.buffer : 0) + settings.htf_buffer : 0
if htf4.settings.show and helper.ValidTimeframe(htf4.settings.htf) and cnt < last
bool showTrace = false
if settings.trace_anchor == "First Timeframe" and cnt == 0
showTrace := true
if settings.trace_anchor == "Last Timeframe" and cnt == last-1
showTrace := true
htf4.Monitor().Update(offset, showTrace).FindImbalance()
cnt+=1
offset += cnt > 0 ? (htf4.candles.size() * settings.width) + (htf4.candles.size() > 0 ? htf4.candles.size()-1 * settings.buffer : 0) + settings.htf_buffer : 0
if htf5.settings.show and helper.ValidTimeframe(htf5.settings.htf) and cnt < last
bool showTrace = false
if settings.trace_anchor == "First Timeframe" and cnt == 0
showTrace := true
if settings.trace_anchor == "Last Timeframe" and cnt == last-1
showTrace := true
htf5.Monitor().Update(offset, showTrace).FindImbalance()
cnt+=1
offset += cnt > 0 ? (htf5.candles.size() * settings.width) + (htf5.candles.size() > 0 ? htf5.candles.size()-1 * settings.buffer : 0) + settings.htf_buffer : 0
if htf6.settings.show and helper.ValidTimeframe(htf6.settings.htf) and cnt < last
bool showTrace = false
if settings.trace_anchor == "First Timeframe" and cnt == 0
showTrace := true
if settings.trace_anchor == "Last Timeframe"
showTrace := true
htf6.Monitor().Update(offset, showTrace).FindImbalance()
//------------------------------------------------------------------------------------------------//
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// ©Mutharasan12
//@version=5
//indicator("Notes, Watermark",overlay = true)
// STICKY NOTES #BEGIN --------------------------------------------------------------------------------------------------------------------------------------------------------//
var StickyNote_settings = "STICKY NOTES --------------------------------------------------"
showStickyNotes = input.bool(false, "Show Sticky Notes?", group = StickyNote_settings)
if showStickyNotes
stickynote01 = input.text_area("Your Note Here","NOTES",group = StickyNote_settings)
tl1 = input.string("top", title = "Sticky Note Position (Vertical)", options = , group = StickyNote_settings)
tl2 = input.string("right", title = "Sticky Note Position (Horizontal)", options = , group = StickyNote_settings)
font_size = input.string("Normal", title = "Sticky Note Text Size", options = , group = StickyNote_settings)
font_type = input.string("Default", title = "Font Type", options = , group = StickyNote_settings)
font_color = input.color(color.rgb(0,0,0,0), title = "Note Color", inline = 'nc', group = StickyNote_settings)
note_color = input.color(color (color.rgb(0,0,0,100)), title = "Note Background", inline='nc', group = StickyNote_settings)
selected_font = font_type == "Default" ? font.family_default : font.family_monospace
selected_size = font_size == "Auto" ? size.auto : font_size == "Huge" ? size.huge : font_size == "Large" ? size.large : font_size == "Normal" ? size.normal : font_size == "Small" ? size.small : font_size == "Tiny" ? size.tiny : na
var table t1 = table.new(tl1 + "_" + tl2, 1, 10)
if barstate.islast
if not na(stickynote01) and stickynote01 != ""
table.cell(t1,0,0, text = stickynote01 , bgcolor = note_color, text_color = font_color, text_halign = text.align_left, text_size = selected_size, text_font_family = selected_font)
// STICKY NOTES #END ----------------------------------------------------------------------------------------------------------------------------------------------------------//
// WATERMARK #BEGIN --
INDEX TRADING SecretWD Gann Indices Level Calculation with VWAP Confirmation for Intraday Trading
Overview
This Pine Script indicator unveils a powerful "secret" strategy inspired by WD Gann's principles for calculating support and resistance levels across multiple timeframes (daily, weekly, monthly, and yearly). It is designed specifically for intraday trading in Indian indices such as NIFTY, BANKNIFTY, FINNIFTY, and SENSEX. By leveraging Gann's Square of Nine methodology, the script derives key static support and resistance levels from significant highs and lows in each timeframe. These levels act as vibrational points where price is likely to react, based on Gann's geometric and mathematical insights into market cycles.
The script integrates Volume Weighted Average Price (VWAP) as a trend confirmation tool, helping traders filter signals and align with the prevailing market momentum. VWAP serves as a dynamic benchmark: prices above VWAP indicate bullish bias, while prices below suggest bearish conditions.
This approach combines Gann's time-price squaring with modern volume analysis, enabling precise entry/exit decisions in volatile intraday sessions. The levels are plotted as horizontal lines for easy visualization on lower timeframes (e.g., 5-min or 15-min charts), with options to toggle visibility for each timeframe to avoid clutter.
Key Features
Gann Level Calculation (Square of Nine Method):
For each timeframe (daily, weekly, monthly, yearly), the script identifies a pivot price, typically the square root of a key value like the previous period's high, low, or close.
Support levels are calculated by subtracting angular increments (e.g., 45°, 90°, 135°, 180°) from the square root of the pivot, then squaring the result:Support Level = (√Pivot - (Angle / 360))²
Resistance levels are calculated by adding the increments:Resistance Level = (√Pivot + (Angle / 360))²
Common angles used: 45° (0.125 increment), 90° (0.25), 135° (0.375), 180° (0.5), 225° (0.625), 270° (0.75), 315° (0.875), 360° (1.0).
Timeframe-specific pivots:
Daily: Based on previous day's high/low/close.
Weekly: Based on previous week's high/low/close (using security() function for higher timeframe data).
Monthly: Based on previous month's high/low/close.
Yearly: Based on previous year's high/low/close, ideal for long-term cycle analysis.
The script automatically fetches higher timeframe data via Pine's security() function, ensuring levels update in real-time on intraday charts.
VWAP Integration:
Plots the standard VWAP line (using ta.vwap for accuracy), resetting at session open for intraday focus.
VWAP acts as a trend filter: It confirms bullish conditions when price is above it and bearish when below.
Plotting and Customization:
Support levels plotted in green, resistance in red, with labels showing timeframe (e.g., "Daily S1", "Weekly R2").
User inputs for selecting which timeframes to display, line styles, and angular increments.
Alerts can be set for price crossing key levels or VWAP.
Trading Strategy: Intraday Rules Using Gann Levels and VWAP
This strategy focuses on confluence between Gann levels and VWAP for high-probability trades in Indian indices. Trade on intraday charts (e.g., 5-min) during market hours (9:15 AM - 3:30 PM IST). Always use risk management: Position size 1-2% of capital, with stops beyond the nearest Gann level.
Buy Signals:
Price above a Gann support level and above VWAP: Indicates upward momentum with support holding. Enter long, targeting the next resistance.
Price above a Gann resistance level and above VWAP: Suggests a breakout. Enter long for continuation, targeting higher timeframe resistance.
Sell Signals:
Price below a Gann support level and below VWAP: Indicates downward momentum with support broken. Enter short, targeting the next support.
Price below a Gann resistance level and below VWAP: Suggests rejection at resistance. Enter short for reversal, targeting lower support.
Alternative Use: Daily Levels as Stop Loss:
For simpler setups, ignore higher timeframes and use only daily Gann support/resistance as protective stops.
Example: In a long trade, place stop below daily support; in a short, above daily resistance. This minimizes risk while letting winners run with VWAP as the trailing guide.
Example Usage
On NIFTY 5-min chart: Daily support at 24,500 (calculated from prior day's low via Square of Nine). If price bounces above 24,500 and crosses VWAP upward, buy with target at weekly resistance (e.g., 24,800).
Risk: If price falls below support and VWAP, exit or reverse to short.
Backtesting and Notes
Backtest on historical Indian index data to validate. Gann levels work best in trending markets; combine with volume spikes or RSI for filters. Remember, markets are cyclical—yearly levels often define major turns, while daily/weekly handle intraday noise. This is not financial advice; test thoroughly
KI-StageSpot V1KI-StageSpot V1 – Stage & Base Structure Analysis
Concept & Purpose
KI-StageSpot identifies Stage 1 to Stage 3 transitions by quantifying weekly base structures instead of relying only on moving average crossovers. Each base is derived from confirmed weekly pivot highs and lows that meet predefined duration and depth criteria. When a new low undercuts the prior base, the logic automatically merges the bases to preserve structural continuity. This framework is designed for traders studying trend evolution and Stage 2 continuation patterns.
Why this combination matters:
The script integrates structural (base tracking) and momentum (EMA Cloud) signals within one visual system. Weekly pivots and SMA-based stage markers outline the long-term structure, while the Daily EMA(10/20) Cloud reveals shorter-term momentum shifts inside each base. This cross-timeframe alignment helps confirm whether a breakout is supported by real strength or not.
How it works (conceptual overview)
•Weekly logic isolates each confirmed pivot high as a Base High (BH) and tracks the Base Low (BL) dynamically.
•Once price breaks above a BH, a Breakout (BO) label is triggered, and the base statistics freeze.
•Base statistics include Depth % and Duration (weeks), with optional color alerts for extended or deep corrections.
•Stage arrows derive from SMA(50/150/200) interactions to signal ST–MT–LT trend transitions.
•Timeframe-aware plotting ensures EMA clouds appear only on Daily, while SMAs and base logic stay internally synchronized on Weekly.
Key Features
•Automatic detection of Base Highs / Breakouts
•Base depth % and duration (weeks) labels
•Merge logic for undercut bases
•Daily EMA(10/20) Cloud for momentum tracking
•SMA 50 / 150 / 200 with stage arrows
•Customizable labels, offsets, and alerts
•Clean multi-TF plotting (Daily + Weekly)
Usage
•Start / End Date: Define your back-test window (e.g., post Stage 1 lockout or pre-Stage 2 base).
•Base Stats: Enable Depth % + Weeks; use alert levels Depth ≥ 30 %, Weeks > 12.
•EMA Cloud: Show = ON, Fast = 10, Slow = 20.
•SMAs: Show = ON (50 / 150 / 200 Daily; auto ≈ 10 / 30 / 40 Weekly).
•Labels: Compact or Expanded View per preference.
Analyze the structural setup on the Weekly chart and confirm early momentum through the Daily EMA cloud. When a breakout forms above a validated base high with supportive momentum, it often marks a Stage 2 expansion.
Grandoc's MTF SeparatorsOverviewThis indicator, known as Grandoc's MTF Separators, draws vertical lines to mark key period boundaries across multiple timeframes (MTF—standing for "Multi-Timeframe," which allows visualization of higher-timeframe structures like daily or weekly pivots directly on lower-timeframe charts, such as 15-minute views). It helps traders align intraday decisions with broader market cycles. Additionally, it includes optional session open/close lines and closing price ranges for major forex sessions (Sydney, Tokyo, Frankfurt, London, New York). By combining customizable timeframe separators with session-specific visuals, it provides a comprehensive tool for multi-timeframe analysis without cluttering the chart. The script is optimized for efficiency, using arrays to manage drawings and respect TradingView's limits.© grandoc
Created: October 12, 2025
Last Modified: October 12, 2025
Version: 1.4 (Improved: Added Frankfurt session with independent toggles for open/close lines and closing range)Key FeaturesMulti-Timeframe (MTF) Separators: Configurable lines for up to four timeframes (e.g., daily, weekly, monthly), plotted as vertical lines extending across the chart. Supports periods from seconds to years—ideal for spotting MTF confluences, like a weekly open aligning with a London session start.
Session Management: Independent toggles for open/close lines and 30-minute closing ranges for five major sessions. Opens use dotted lines by default; closes use solid lines. Frankfurt session added for European traders.
Customization: Select reference points (session start or midnight day start), timezones, colors, line styles, and lookback limits to control visibility and performance.
Efficiency: Arrays limit drawings to user-defined lookback periods, preventing overload on historical data.
Originality and UsefulnessThis script extends standard timeframe detection by integrating session visuals with granular controls, including the new Frankfurt session for better European market coverage. Unlike generic separators, it uses a modular drawSeparator() function for consistent rendering across MTF and sessions, reducing code redundancy. Closing ranges highlight volatility in the final 30 minutes of each session, serving as dynamic support/resistance—unique for session-based strategies.Ideal for forex traders on instruments like EURUSD futures, where aligning intraday trades with higher-timeframe pivots and session transitions reduces noise. For instance, on a 15-minute EURUSD futures chart, daily separators mark session-aligned opens, while London closing ranges flag potential reversal zones before New York handover. The MTF aspect shines here: A weekly separator (orange solid line) crossing a NY open (blue dotted) signals a high-probability setup.How It WorksMulti-Timeframe SeparatorsDetection: Uses ta.change(time(tf, sess, tzz)) to identify period starts, where tf is the timeframe string (e.g., "1D"), sess is "0000-0000" for day-midnight or empty for session-start, and tzz is the timezone.
Drawing: On change, drawSeparator() creates a vertical line via line.new(x1=x_time, x2=x_time, y1=open, y2=open + syminfo.mintick, extend=extend.both). The mintick offset ensures it's a line, not a point. Lines extend both ways for full visibility.
Management: Pushed to dedicated arrays (e.g., sepArray1); excess trimmed with array.shift() and line.delete() based on lookback.
Visibility: Only plots if higher timeframe (timeframe.in_seconds(tf) > timeframe.in_seconds()).
Session Open and Close LinesDetection: For each session (e.g., Sydney: "2200-0700:1234567"), inSession = not na(time(timeframe.period, sessionStr, sessionTz)). Opens trigger on inSession and not inSession ; closes on not inSession and inSession .
Drawing Opens: Calls drawSeparator(true, sessionColor, sessionOpenWidth, sessionOpenStyle, sessionLookback, sessLinesArray) at time (bar open time). Uses global dotted style/width by default for easy identification of new sessions.
Drawing Closes: Similar call, but at time_close (previous bar close) for precise end-time alignment. Uses global solid style/width. All shared in one sessLinesArray for unified trimming.
Navigation Benefit: Dotted opens act as "entry gates" for session momentum; solid closes as "exit signals." Colors differentiate sessions (e.g., green for Sydney), enabling quick scans—e.g., spot Tokyo open overlaps on EURUSD futures for Asian bias.
Closing RangesDetection: For each closing window (e.g., London: "1630-1700:1234567"), inClose = not na(time(timeframe.period, closeStr, sessionTz)).
Tracking: On entry (inClose and not inClose ), initializes high/low at current bar's values and stores bar_index. During session, updates with math.max/min(nz(var, high/low), high/low).
Drawing: On exit (not inClose and inClose ), creates box.new(left=startBar, right=bar_index-1, top=high, bottom=low, border_color=sessionColor, bgcolor=color.new(sessionColor, 80)). 80% transparency for subtle shading; border matches session color.
Management: Pushed to rangeBoxesArray; trimmed like lines. Only draws if toggle enabled (defaults off to avoid clutter).
Navigation Benefit: Ranges visually encapsulate end-of-session volatility—e.g., on EURUSD futures, a tight NY range signals low-risk continuation, while wide ones warn of gaps. Ideal for range-break trades or as next-session S/R.
All session elements use the dedicated sessionTz for consistency, independent of separator timezone.Installation and UsageAdd via TradingView's Public Library (search "Grandoc's MTF Separators").
Settings Navigation: Separators (#1-4): Toggle/enable timeframes (e.g., D1 default); lookback hidden for simplicity.
Style: Per-separator colors/widths/styles (hidden widths); global open/close styles for sessions.
Preferences: "Session" vs. "Day" reference (tooltips explain EURUSD example); timezone (hidden, Day-only).
Session Settings: Unified timezone for all sessions.
Open Lines (g4): Per-session toggles (all on default).
Close Lines (g7): Per-session toggles (all on default).
Closing Ranges (g5): Per-session toggles (all off default—enable for S/R focus).
Session Times (g8): Edit strings (e.g., adjust for DST on EURUSD futures).
Colors & Lookback (g6): Session colors; shared lookback limits.
Apply to EURUSD futures (e.g., 15-min chart) with defaults: See green daily dots, orange weekly solids, session opens/closes in theme colors.
Pro Tip: On futures, set "Session" reference and exchange TZ for accurate rollover alignment; enable ranges for close-of-day liquidity plays. For MTF depth, layer #3 (monthly) over intraday for long-term bias.
LimitationsLines/ranges may cluster on low-timeframe charts; increase lookback or disable lower separators.
Session times are UTC defaults; manual DST tweaks needed for futures like EURUSD.
Time-based; avoid non-standard charts (e.g., Renko).
No built-in alerts—use TradingView's on line/box conditions.
Example Chart Open-source for community reuse (credit © grandoc). Published October 12, 2025. Questions? Comment below!
Fibonacci Seviyeleri - ÖzelleştirilebilirFibonacci Levels & Technical Analysis Dashboard
Overview
This Pine Script indicator combines comprehensive Fibonacci level analysis with a technical indicators scoring system, presenting all information in a clean, dual-table layout directly on your TradingView chart.
Key Features
1. Fibonacci Levels Analysis
Daily Fibonacci Levels: Calculates and displays key Fibonacci retracement and extension levels based on the previous day's price range
Weekly Fibonacci Levels: Provides weekly Fibonacci levels for longer-term analysis
Monday Plan Option: Alternative weekly calculation starting from Monday's data
Real-time Updates: All levels update automatically at the start of each new period
2. Technical Indicators Scoring System
The indicator analyzes 7 major technical indicators and provides buy/sell signals:
RSI (Relative Strength Index): Momentum oscillator for overbought/oversold conditions
MACD: Trend-following momentum indicator
Stochastic: Momentum indicator comparing closing price to price range
CCI (Commodity Channel Index): Measures deviation from average price
DMI (Directional Movement Index): Trend strength indicator
OBV (On Balance Volume): Volume-based momentum indicator
Momentum: Rate of price change indicator
3. Visual Components
Chart Lines and Labels
Horizontal lines drawn at each Fibonacci level
Optional price labels showing exact level values
Customizable line styles (solid, dashed, dotted)
Adjustable line thickness and colors
Lines extend to the right for easy tracking
Dual Table Display
Left Table: Fibonacci levels with prices
Right Table: Technical indicators with signals and scoring
Tables can be positioned (top/middle/bottom and left/center/right)
Clean, professional appearance with customizable colors
How to Use
Basic Setup
Add the indicator to your chart
The default settings work well for most trading scenarios
Two tables will appear showing Fibonacci levels and technical signals
Customization Options
Fibonacci Settings
Show Daily/Weekly: Toggle which Fibonacci levels to display
Monday Plan: Enable for weekly levels based on Monday's data
Show Labels: Toggle price labels on chart
Line Styles: Choose between solid, dashed, or dotted lines
Colors: Customize colors for different level types
Technical Indicators
Adjust period settings for each indicator (RSI, MACD, etc.)
Fine-tune sensitivity for better signals on your specific instrument
Display Options
Table Position: Place tables where convenient on your chart
Show/Hide Elements: Toggle individual components as needed
Trading Applications
Fibonacci Level Trading
Support/Resistance: Use Fibonacci levels as potential support and resistance zones
Entry Points: Look for price reactions at key levels (0.236, 0.382, 0.618)
Target Setting: Use extension levels (1.618, 2.618) for profit targets
Stop Loss Placement: Place stops beyond key Fibonacci levels
Signal Interpretation
Strong Buy Signal: Score ≥ 4 (majority of indicators bullish)
Buy Signal: Score between 1 and 3 (lean bullish)
Neutral/Wait: Score = 0 (mixed signals)
Sell Signal: Score between -1 and -3 (lean bearish)
Strong Sell Signal: Score ≤ -4 (majority of indicators bearish)
Combined Analysis
Confluence Trading: Look for technical signals at Fibonacci levels
Confirmation: Use indicator signals to confirm Fibonacci level breaks
Risk Management: Use both systems to validate trade entries and exits
Best Practices
Multiple Timeframes: Compare daily and weekly Fibonacci levels for stronger zones
Volume Confirmation: Pay attention to OBV signals at key levels
Trend Alignment: Use DMI to confirm trend direction before trading levels
Patience: Wait for clear signals rather than forcing trades
Risk Management: Always use stop losses, especially when trading against the signal score
Tips for Optimal Use
Clean Charts: Hide elements you don't need to reduce clutter
Color Coding: Use contrasting colors for better visibility
Regular Monitoring: Check both tables at market open for daily planning
Backtesting: Test the indicator's signals on historical data before live trading
Combine with Price Action: Use candlestick patterns at Fibonacci levels for confirmation
Technical Notes
The indicator updates in real-time with price movements
Fibonacci calculations use traditional ratios (0.236, 0.382, 0.5, 0.618, etc.)
All technical indicators use standard calculation methods
The scoring system weights each indicator equally (1 point per indicator)
Historical levels remain visible for reference until new periods begin
Conclusion
This indicator provides a comprehensive trading dashboard combining classical Fibonacci analysis with modern technical indicators. It's designed for traders who want quick, actionable insights without switching between multiple indicators or performing manual calculations. The dual-table format keeps all essential information visible while maintaining a clean chart appearance.
Whether you're a day trader using daily Fibonacci levels or a swing trader focusing on weekly levels, this indicator adapts to your trading style while providing consistent, reliable technical analysis signals.
Pristine Value Areas & MGIThe Pristine Value Areas indicator enables users to perform comprehensive technical analysis through the lens of the market profile in a fraction of the time! 🏆
A Market Profile is a charting technique devised by J. Peter Steidlmayer, a trader at the Chicago Board of Trade (CBOT), in the 1980's. He created it to gain a deeper understanding of market behavior and to analyze the auction process in financial markets. A market profile is used to analyze an auction using price, volume, and time to create a distribution-based view of trading activity. It organizes market data into a bell-curve-like structure, which reveals areas of value, balance, and imbalance.
💠 How is a Value Area Calculated?
A value area is a distribution of 68%-70% of the trading volume over a specific time interval, which represents one standard deviation above and below the point of control, which is the most highly traded level over that period.
The key reference points are as follows:
Value area low (VAL) - The lower boundary of a value area
Value area high (VAH) - The upper boundary of a value area
Point of Control (POC) - The price level at which the highest amount of a trading period's volume occurred
If we take the probability distribution of trading activity and flip it 90 degrees, the result is our Pristine Value Area!
Market Profile is our preferred method of technical analysis at Pristine Capital because it provides an objective and repeatable assessment of whether an asset is being accumulated or distributed by institutional investors. Market Profile levels work remarkably well for identifying areas of interest, because so many institutional trading algorithms have been programmed to use these levels since the 1980's!
The benefits of using Market Profile include better trade location, improved risk management, and enhanced market context. It helps traders differentiate between trending and consolidating markets, identify high-probability trade setups, and adjust their strategies based on whether the market is in balance (consolidation) or imbalance (trending). Unlike traditional indicators that rely on past price movements, Market Profile provides real-time insights into trader behavior, giving an edge to those who can interpret its nuances effectively.
Virgin Point of Control (VPOC) - A point of control from a previous time period that has not yet been revisited in subsequent periods. VPOCs are great for identifying prior supply or demand zones.
Below is a great example of price reversing lower after taking out an upside VPOC
💠 Are all POCs Created Equal?
If POCs are used to gauge supply & demand zones at key levels, then a POC with higher volume should be viewed as more significant than a POC that traded lower volume, right? We created Golden POCs as a tool to identify high volume POCs on all timeframes.
Golden POC (GPOC) - A POC that traded the highest volume compared to prior POCs (proprietary to Pristine Capital)
We calculate value areas for the following time intervals based on the user selected timeframe:
5 Minute and 15 Minute Timeframes -> Daily Value Area
The daily value area paints the distribution of the PRIOR session's trading activity. The "d" in the label references for VAHd, POCd and VALd is a visual cue that value area shown is daily.
1 Hour Timeframe -> Weekly Value Area
The weekly value area paints the distribution of the PRIOR week's trading activity. The "w" in the label references for VAHw, POCw and VALw is a visual cue that value area shown is weekly.
1 Day Timeframe -> Monthly Value Area
The monthly value area paints the distribution of the PRIOR month's trading activity. The "m" in the label references for VAHm, POCm and VALm is a visual cue that value area shown is monthly.
1 Week Timeframe -> Yearly Value Area
The yearly value area paints the distribution of the PRIOR year's trading activity. The "y" in the label references for VAHy, POCy and VALy is a visual cue that value area shown is yearly.
💠 What is a developing value area?
The developing value area provides insight into the upcoming value area while it is still forming! It appears when 80% of the way through the current value area. As the end of a trading period approaches, it can make sense to start trading off the developing value area. When the time period flips, the developing value area becomes the active value area!
💠 Value Areas Trading Setups
Two popular market profile concepts are the bullish and bearish 80% rules. The concept is that there is an 80% probability that the market will traverse the entire relevant value area.
Bullish 80% Rule - If a security opens a period below the value area low , and subsequently closes above it, the bullish 80% rule triggers, turning the value area green. One can trade for a move to the top of the value area, using a close below the value area low as a potential stop!
In the below example, HOOD triggered the bullish 80% rule after it reclaimed the monthly value area!
HOOD proceeded to rally through the monthly value area and beyond in subsequent trading sessions. Finding the first stocks to trigger the bullish 80% rule after a market correction is key for spotting the next market leaders!
Bearish 80% Rule - If a security opens a period above the value area high , and subsequently closes below it, the bearish 80% rule triggers, turning the value area red. One can trade for a move to the bottom of the value area, using a close above the value area high as a potential stop!
ES proceeded to follow through and test the value area low before trending below the weekly value area
Value Area Breakouts - When a security is inside of value, the auction is in balance. When it breaks out from a value area, it could be entering a period of price discovery. One can trade these breaks out of value with tight risk control by setting a stop inside the value area! These breakouts can be traded on all chart timeframes depending on the timeframe of the individual trader. Combining multiple timeframes can result in even more effective trading setups.
RBLX broke out from the monthly value area on 4/22/25👇
RBLX proceeded to rally +62.78% in 39 trading sessions following the monthly VAH breakout!
💠 Market Generated Information to Improve Your Situational Awareness!
In addition to the value areas, we've also included stat tables with useful market generated information. The stats displayed vary based on the timeframe the user has up on their screen. This incentivizes traders to check the chart on multiple timeframes before taking a trade!
Metrics Grouped By Use Case
Performance
▪ YTD α - YTD Alpha (α) measures the risk-adjusted, excess return of a security over its user defined benchmark, on a year-to-date basis.
▪ MTD α - MTD Alpha (α) measures the risk-adjusted, excess return of a security over its user defined benchmark, on a month-to-date basis.
▪ WTD α - WTD Alpha (α) measures the risk-adjusted, excess return of a security over its user defined benchmark, on a week-to-date basis.
▪ YTD %Δ - Year-to-date percent change in price
▪ MTD %Δ - Month-to-date percent change in price
▪ WTD %Δ - Week-to-date percent change in price
Volatility
▪ ATR % - The Average True Range (ATR) expressed as a percentage of an asset's price.
▪ Beta - Measures the price volatility of a security compared to the S&P 500 over the prior 5 years (since inception if 5 years of data is not available)
Risk Analysis
▪ LODx - Low-of-day extension - ATR % multiple from the low of day (measures how extended a stock is from its low of day)
▪ MAx - Moving average extension - ATR % multiple from the user-defined moving average (measures how extended a security is from its moving average). Default moving average = 50D SMA
Why does MAx matter?
MAx measures the number of ATR % multiples a security is trading away from a key moving average. The default moving average length is 50 days.
MAx can be used to identify mean reversion trades . When a security trends strongly in one direction and moves significantly above or below its moving average, the price often tends to revert back toward the average.
Example, if the ATR % of the security is 5%, and the stock is trading 50% higher than the 50D SMA, the MAx would be 50%/5% = 10. A user might opt to take a countertrend trade when the MAx exceeds a predetermined level.
The MAx can also be useful when trading breakouts above or below the key moving average of your choosing. The lower the MAx, the tighter stop loss one can take if trading against that level.
Identifying an extreme price extension using MAx 👇
Price mean reverted immediately following the high MAx 👇
💠 Trend Analysis
The Trend Analysis section consists of short-term and long-term stage analysis data as well as the value area timeframe and price in relation to the value area.
Stage Analysis
▪ ST ⇅ - Short-term stage analysis indicator
▪ LT ⇅ - Long-term stage analysis indicator
Short-term and long-term stage analysis data is provided in the two rightmost columns of each table. The columns are labeled ST ⇅ and LT ⇅.
Why is Stage Analysis important? Popularized by Stan Weinstein, stage analysis is a trend following system that classifies assets into four stages based on price-trend analysis.
The problem? The interpretation of stage analysis is highly subjective. Based on the methodology provided in Stan Weinstein’s books, five different traders could look at the same chart, and come to different conclusions as to which stage the security is in!
We solved for this by creating our own methodology for classifying stocks into stages using moving averages. This indicator automates that analysis, and produces short-term and long-term trend signals based on user-defined key moving averages. You won’t find this in any textbook or course, because it’s completely unique to the Pristine trading methodology.
Our indicator calculates a short-term trend signal using two moving averages; a fast moving average, and a slow moving average. We default to the 10D EMA as the fast moving average & the 20D SMA as the slow moving average. A trend signal is generated based on where price is currently trading with respect to the fast moving average and the slow moving average. We use the signal to guide shorter-term swing trades.
In general, we want to take long trades in stocks with strengthening trends, and short trades in stocks with weakening trends. The user is free to change the moving averages based on their own short-term timeframe. Every trader is unique!
The same process is applied to calculate the long-term trend signal. We default to the 50D SMA as our fast moving average, and the 200D SMA as the slow moving average for the LT ⇅ signal calculation, but users can change these to fit their own unique trading style.
What is Stage 1?
Stage 1 identifies stocks that transitioned from downtrends, into bottoming bases.
Stage 1A - Bottom Signal: Marks the first day a security shows initial signs of recovery after a downtrend, with early indications of strength emerging.👇
Stage 1B - Bottoming Process: Identifies the ongoing phase where the security continues to stabilize and strengthen, confirming the base-building process after the initial signal.👇
Stage 1R - Failed Uptrend: Detects when a security that had entered an early uptrend loses momentum and slips back into a bottoming phase, signaling a failed breakout.👇
What is Stage 2?
Stage 2 identifies stocks that transitioned from bottoming bases to uptrends.
Stage 2A - Breakout: Marks the first day a security decisively breaks out, signaling the start of a new uptrend.👇
Stage 2B - Uptrend: Identifies when the security continues to trade in an established uptrend following the initial breakout, with momentum building but not yet showing full strength.👇
Stage 2C - Strong Uptrend: Detects when the uptrend strengthens further, with the security displaying clear signs of accelerating strength and buying pressure.👇
Stage 2R - Failed Breakdown: Detects when a security that had recently entered a corrective phase reverses course and reclaims its upward trajectory, moving back into an uptrend.👇
What is Stage 3?
Stage 3 identifies stocks that transitioned from uptrends to topping bases.
Stage 3A - Top Signal: Marks the first day a security shows initial signs of weakness after an uptrend, indicating the start of a potential topping phase.👇
Stage 3B - Topping Process: Identifies the period following the initial signal when the security continues to show signs of distribution and potential trend exhaustion.👇
Stage 3R - Failed Breakdown: Detects when a security that had entered a deeper corrective phase reverses upward, recovering enough strength to re-enter the topping phase.👇
What is Stage 4?
Stage 4 identifies stocks that transitioned from topping bases to downtrends.
Stage 4A - Breakdown: Marks the first day a security decisively breaks below key support levels, signaling the start of a new downward trend.👇
Stage 4B - Downtrend: Identifies when the security continues to trend lower following the initial breakdown, with sustained bearish momentum, though not yet fully entrenched.👇
Stage 4C - Strong Downtrend: Detects when the downtrend intensifies, with the security displaying clear signs of accelerating weakness and selling pressure.👇
Stage 4R - Failed Bottom: Detects when a security that had begun to show early signs of bottoming reverses course and resumes its decline, falling back into a downtrend.👇
Stage N/A - Recent IPO: Applies to stocks that recently IPO’ed and don’t have enough data to calculate all necessary moving averages.
Value Area
In Trend Analysis, the value area information is helpful to gauge price in relation to the value area.
▪ VA(y) - Categorizes the security based on the relation of price to the yearly value area
▪ VA(m) - Categorizes the security based on the relation of price to the monthly value area
▪ VA(w) - Categorizes the security based on the relation of price to the weekly value area
Value area states:
▪ ABOVE = Price above the value area high
▪ BELOW = Price below the value area low
▪ INSIDE = Price inside the value area
▪ Bull 80% = Bullish 80% rule in effect
▪ Bear 80% rule = Bearish 80% rule in effect
For example, in the chart above, VA(m) - ABOVE indicates a monthly value area and price is above the VAH.
💠 What Makes This Indicator Unique
There are many value area indicators, however...
Value Area
▪ Golden POC (GPOC) - This is a proprietary concept.
▪ Unique Label Customization
Pristine value areas often comprehensive and unique label customizations. Styles include options to display any combination of the following on your labels:
• Price levels associated with market profile levels
• % distance of market profile levels from security price
• ATR% extension of market profile levels from security price
Multi-Timeframe Analysis
Based on the chart timeframe, unique market generated information is shown to facilitate multi-timeframe analysis.
▪ Weekly Timeframe
On the weekly timeframe the focus is the bigger picture and the metrics reflect this perspective. Performance data includes YTD Alpha and YTD percent change in price. Volatility is measured using ATR % and the industry standard beta. Trend analysis for this higher timeframe include the 52-week range, which measures where a security is trading in relation to its 52wk high and 52wk low. Also included is the where price is in relation to yearly value area.
▪ Daily Timeframe
As one drills down to the daily timeframe, the performance metrics include MTD alpha and MTD percent change in price.
Risk analysis includes the low-of-day extension (LODx), which is the ATR % multiple from the low of the day, to measures how extended a stock is from its low of day. In addition, the moving average extension (MAx) is the ATR % multiple from the user-defined moving average, measures how extended a security is from its
moving average. The default moving average is the 50D SMA, however this can be customized in Settings.
Trend Analysis on the daily timeframe includes the Pristine Capital methodology for classifying stocks into stages using moving averages. Both short-term and long-term stage analysis data is included. Finally, price in relation to monthly value area is shown.
▪ Hourly Timeframe
An the hourly timeframe, performance metrics include WTD alpha and WTD percent change in price. Trend analysis includes the daily closing range (DCR) and price in relation to weekly value area.
💠 Settings and Preferences
💠 Acknowledgements
We'd like to thank @dgtrd, a TradingView Pine Wizard, for his insight on the finer details when working with volume profiles.
Real-Time Open Levels with Labels + Info TableReal-Time Multi-Timeframe Open Levels with Labels & Info Panel
Overview
This indicator displays real-time opening price levels across multiple timeframes (Monthly, Weekly, Daily, 4H) directly on your chart. It features:
• Dynamic horizontal lines extending through each timeframe period
• Customizable labels with text/colors
• Special 4H line treatment for the last hour (5-min charts only)
• Integrated information panel showing symbol, timeframe, and price changes
! (www.tradingview.com)
*Example showing multiple timeframe levels with labels and info panel*
---
Features & Configuration
1. Monthly Settings
! (www.tradingview.com)
Show Monthly: Toggle visibility of monthly opening price
Color: Semi-transparent blue (#2196F3 at 70% opacity)
Width: 2px line thickness
Style: Solid/Dotted/Dashed
Label: Display "M-Open" text with white text on blue background
2. Weekly Settings
! (www.tradingview.com)
Show Weekly: Toggle weekly opening price visibility
Color: Semi-transparent red (#FF5252 at 70% opacity)
Width: 1px thickness
Style: Dotted by default
Label: "W-Open" text in white on red background
3. Daily Settings
! (www.tradingview.com)
Show Daily: Toggle daily opening price
Color: Amber (#FFA000 at 70% opacity)
Width: 2px thickness
Style: Solid
Label: "D-Open" in white on orange background
---
4. 4-Hour Settings (5-Minute Charts Only)
Special Features for 5-Min Timeframe:
1. Standard 4H Line
• First 3 hours: Green (#4CAF50) dashed line
• Last hour: Bright red solid line (configurable)
• Vertical divider between 3rd/4th hours
2. Configuration Options
• Main 4H Line:
◦ Color/Width/Style for initial 3 hours
◦ Toggle label ("H4-Open") visibility and styling
• Final Hour Enhancement:
*Last Hour Line*
◦ Unique red color and line style
◦ Separate width (1px) and style (Solid)
*Divider Line*
◦ Vertical red dotted line marking last hour
◦ Adjustable position/width/transparency
! (www.tradingview.com)
*4H levels showing 3-hour segment and final hour treatment*
---
5. Info Panel Settings
Positioning:
• Anchor to any chart corner (Top/Bottom + Left/Right combinations)
• Three text sizes: Title (Huge), Change % (Large), Signature (Small)
Display Elements:
• Symbol: Show exchange prefix (e.g., "NASDAQ:")
• Timeframe: Current chart period (e.g., "5m")
• Change %: 24-hour price movement ▲/▼ percentage
• Custom Signature: Add text/username in footer
Styling:
• Semi-transparent white text (#ffffff77)
• Currency pair formatting (e.g., BTC/USD vs BTC-USD)
! (www.tradingview.com)
*Sample info panel with all elements enabled*
---
Usage Tips
1. Multi-Timeframe Context: Use levels to identify key daily/weekly support/resistance
2. 4H Trading: On 5-min charts, watch for price reactions near final hour transition
3. Customization:
• Match line colors to your chart theme
• Use different labels for clarity (e.g., "Weekly Open")
• Disable unused elements to reduce clutter
4. Divider Lines: Helps identify institutional trading periods (hour closes)
---
*Created using Pine Script v6. For optimal performance, use on charts <1H timeframe. ()*
LDO Virgin Levels from Candle Patterns (Multi-Timeframe)User Guide: LDO Virgin Levels from Candle Patterns (Multi-Timeframe)
Overview
The "LDO Virgin Levels from Candle Patterns (Multi-Timeframe)" script is a TradingView indicator that identifies and plots "virgin levels" across multiple timeframes (15-minute, 4-hour, daily, weekly, and monthly). Virgin levels are price levels drawn at key reversal points based on candlestick patterns—specifically, the high or low of a candle preceding a bullish-to-bearish or bearish-to-bullish transition. These levels remain active ("virgin") until the price crosses them, at which point they are removed, and an alert can be triggered.
Key Features
Multi-Timeframe Support: Plots virgin levels on 15-minute, 4-hour, daily, weekly, and monthly timeframes.
Customizable Display: Enable/disable specific timeframes and customize line colors and width.
Alerts: Triggers alerts when the price crosses a virgin level on any enabled timeframe.
Version Tracking: Displays the script version on the chart for easy reference (current version: 1.1.0).
How It Works
Level Detection:
On each timeframe, the script detects candlestick pattern reversals:
Bullish-to-bearish: A bullish candle (close > open) followed by a bearish candle (close < open). A level is drawn at the high of the previous (bullish) candle.
Bearish-to-bullish: A bearish candle followed by a bullish candle. A level is drawn at the low of the previous (bearish) candle.
Levels are drawn as horizontal lines extending to the right, with a label showing the price.
Virgin Status:
A level remains "virgin" until the price closes across it on a new bar for that timeframe (e.g., a new 15-minute bar for 15m levels).
Once crossed, the level is removed from the chart.
Alerting:
When a virgin level is crossed, an alert is triggered for the corresponding timeframe (if enabled).
Setup Instructions
Add the Script to TradingView:
Open TradingView and go to the Pine Editor (bottom panel).
Copy and paste the script code into the editor.
Click "Add to Chart" to apply it to your active chart.
Configure Settings:
Timeframe Selection:
Toggle which timeframes to display levels for (default: all enabled):
Show Daily Levels
Show 4H Levels
Show 15M Levels
Show Weekly Levels
Show Monthly Levels
Disabling a timeframe clears its levels from the chart.
Line Settings:
Adjust the line width (default: 1).
Customize colors for each timeframe (default colors):
Daily: White
4H: Yellow
15M: Green
Weekly: Blue
Monthly: Red
Max Lines: Set the maximum number of lines to draw (default: 500, TradingView’s limit).
Verify Version:
The script version (e.g., "Version: 1.1.0") is displayed at the top of the chart for reference.
Using the Alerting Feature
The script includes the ability to set alerts when virgin levels are crossed, with separate alerts for each timeframe. Here’s how to set them up:
Enable Desired Timeframes:
Ensure the timeframe(s) you want alerts for are enabled in the settings (e.g., "Show 15M Levels").
Create an Alert:
Right-click on the chart and select "Create Alert" (or use the bell icon in TradingView).
In the alert dialog:
Condition: Select the script ("LDO Virgin Levels from Candle Patterns (Multi-Timeframe)").
Condition Dropdown: Choose the specific alert condition for the timeframe you want to monitor:
"15m Virgin Line Crossed"
"4h Virgin Line Crossed"
"Daily Virgin Line Crossed"
"Weekly Virgin Line Crossed"
"Monthly Virgin Line Crossed"
Message: The default message (e.g., "A virgin line on the 15m timeframe has been crossed.") will be sent, but you can customize it if needed.
Notifications: Choose your preferred notification method (e.g., email, SMS, popup, webhook).
Frequency: Set to "Once Per Bar Close" to avoid multiple triggers within the same bar.
Click "Create" to activate the alert.
Repeat for Other Timeframes:
You can create separate alerts for each timeframe by repeating the process and selecting the appropriate condition.
Behavior:
Alerts trigger when the price closes across a virgin level on a new bar for that timeframe (e.g., a new 15-minute bar for 15m levels).
If multiple levels are crossed on the same bar, only one alert per timeframe will fire.
Example Use Case
Scenario: You’re trading SUIUSDT on a 15-minute chart and want alerts for 15-minute and 4-hour virgin level crossings.
Setup:
Enable "Show 15M Levels" and "Show 4H Levels" in the script settings.
Create two alerts:
One with the condition "15m Virgin Line Crossed".
Another with the condition "4h Virgin Line Crossed".
Configure notifications (e.g., email or popup).
Result: When the price crosses a 15m virgin level (e.g., at 3.3901 USD), you’ll receive an alert. Similarly, a 4h level crossing will trigger its own alert.
Notes
Chart Timeframe: The script works on any chart timeframe because it uses request.security to fetch data for higher timeframes (e.g., 15m levels will work even on a 1m chart).
Line Limit: The script caps at 500 lines total (TradingView’s limit). Older levels may be overwritten if this limit is reached.
Version Updates: Check the version number on the chart and the changelog in the script comments for updates.
Troubleshooting
No Levels Visible: Ensure the desired timeframes are enabled and that price action has triggered reversal patterns.
Alerts Not Firing: Verify that alerts are set to "Once Per Bar Close" and that the timeframe is enabled in the script settings.
Too Many Lines: Adjust the "Max number of lines to draw" setting if levels are being overwritten.
This script provides a powerful tool for traders to identify key reversal levels across multiple timeframes, with the added benefit of customizable alerts to stay informed of significant price movements.
Fibonacci Extension Strt StrategyCore Logic and Steps:
Weekly Trend Identification:
Find the last significant Higher High (HH) and Lower Low (LL) or vice-versa on the Weekly timeframe.
Determine if it's an uptrend (HH followed by LL) or a downtrend (LL followed by HH).
Plot a Fibonacci Extension (or Retracement in reverse order) from the swing point determined to the other significant swing point.
Weekly Retracement Levels:
Display horizontal lines at the 0.236, 0.382, and 0.5 Fibonacci levels from the weekly extension.
Monitor price action on these levels.
Daily Confirmation:
When price hits the Fib levels, examine the Daily chart.
Look for a rejection wick (indicating the pull back is ending) on the identified weekly retracement levels.
Confirm that the price is indeed starting to continue in the direction of the original weekly trend.
Four-Hour Entry:
On the 4H timeframe, plot a new Fib Extension in the opposite direction of the weekly.
If it's an uptrend, the Fib is plotted from last swing low to its swing high. If the weekly trend was bearish the Fib will be plotted from last swing high to the swing low.
Generate an entry when price breaks the high of that candle.
Trade Management:
Entry is on the breakout of the current candle.
Stop Loss: Place the stop loss below the wick of the breakout candle.
Take Profit 1: Close 50% of the position at the 0.5 Fibonacci level. Move the stop loss to breakeven on this position.
Take Profit 2: Close another 25% of the position at the 0.236 Fib level.
Trailing Take Profit: Keep the last 25% open, using a trailing stop loss. (You'll need to define the logic for the trailing stop, e.g., trailing stop using the last high/low)
How to Use in TradingView:
Open a TradingView Chart.
Click on "Pine Editor" at the bottom.
Copy and paste the corrected Pine Script code.
Click "Add to Chart".
The indicator should now be displayed on your chart.
[TTI] Closing Range Indicator📜 ––––HISTORY & CREDITS––––
This Pine Script Utility indicator, titled " Closing Range Indicator," is designed and developed by TintinTrading but inspired by the teaching of Investor's Business Daily (IBD) and William O'Neil. It aims to help traders identify the closing range of a given timeframe, either daily or weekly.
🦄 –––UNIQUENESS–––
The unique feature of this indicator lies in its ability to simulate a functionality of Closing Range calculation based on hovering of the mouse over the close. It employs a conditional display that allows the user to set the indicator as 'invisible' without removing it from the chart and hence provides a numerical closing range value when hovering over the indicator.
🛠️ ––––WHAT IT DOES––––
The Closing Range Indicator calculates the closing range of a trading bar in terms of percentages. It computes the difference between the closing price and the low price of the bar, and then divides it by the range of the bar.
A stock that closes on the high would display 100%
A stock that closes on the low would display 0%
Generally, the higher the percentage the more bullish the close but there are exceptions to this rule.
The indicator can operate on two timeframes:
Daily : Computes the closing range based on the daily high, low, and closing prices.
Weekly : Computes the closing range based on the weekly high, low, and closing prices. If you enable the weekly it will show the weekly close on all daily timeframes. Meaning that if the week Closing range is 54.15% on Friday, it will show the value 54.15% for all days prior to Friday from the same week.
The indicator places a label at the close of each bar, with the label's tooltip showing the calculated closing range percentage. I generally hide the label and just reference the tooltip calculation with a a hoover on top of the bar.
💡 ––––HOW TO USE IT––––
Installation: Add the indicator to your TradingView chart by searching for " Closing Range Indicator" in the indicator library.
Reorder: Reorder the indicator so that it sits as the first indicator (even above the price) on the Pane. This will make sure that you always trigger the tooltip functionality.
Go to Settings:
Timeframe: Choose between daily ('D') and weekly ('W') timeframes from the settings.
Visibility: Enable the 'Make Invisible' option if you want the indicator to be hidden.
Interpretation:
A higher percentage indicates that the closing price is closer to the high of the range, signaling bullish sentiment.
A lower percentage indicates bearish sentiment.
Tooltip: Hover over the label to view the closing range in percentage terms.
[Rygel] Dual time frame Bollinger Bands with signals and alertsThis indicator displays two Bollinger Bands coming from two different time frames, chart's current one and a higher one.
It analyzes these two Bollinger Bands data and combines them with RSI, MFI and MACD divergences and SuperTrend to identify areas of opportunity where price is the most likely to be at a local top or bottom.
It uses probabilistic data, the Bollinger Bands, to identify convergence areas where the price is statistically overbought or oversold simultaneously at two different time frames, it then looks for signs of a trend exhaustion, using RSI, MFI and MACD divergences, and finally it looks for an early confirmation of a trend reversal, using SuperTrend data with aggressive settings.
This indicator does not produce buy and sell signals. You won't get a buy for every sell or a sell for every buy. In a bearish trend, you may get multiple consecutive bullish signals and in a bullish trend multiple bearish signals.
It is meant to help you to identify and to alert you about areas of opportunity where you could, for instance, consider taking some profits or opening a trade.
It is meant to support your investment or trading decisions, not to induce them.
SIGNALS
This indicator generated multiple types of signals. Diamonds are better than squares. Colored ones are better than grey ones.
Green square: a bullish signal confirmed by a regular divergence
Red square: a bearish signal confirmed by a regular divergence
Blue square: a bullish signal confirmed by a hidden divergence (disabled by default as these signals are less reliable)
Orange square: a bearish signal confirmed by a hidden divergence (disabled by default as these signals are less reliable)
Diamonds: same as the square signals but the signal is forming a divergence with a previous one. Diamond signals are always stronger (i.e. more reliable) than square signals.
Grey signals: same as the previous ones but for weaker signals. These signals appear when price in the current time frame is overbought or oversold but only close to be at the higher timeframe. (disabled by default as these signals are less reliable)
When a weak signal follows a strong one and creates a MACD divergence with it, it will be considered as a strong signal and displayed as a colored signal, even when weak signals are disabled.
When a strong signal follows a weak one, forming a MACD divergence, it will be shown as a diamond signal, even when weak signals are disabled.
Most reliable signals are green and red diamonds.
SETTINGS
Bollinger Bands
Source: the source used to calculate the Bollinger Bands ("close" by default)
Length: the moving-average length of the Bollinger Bands (20 by default)
You will most likely have no need to change these settings. If you're wondering what they actually do, you should most likely not touch them.
Main channel standard deviation: the standard deviation used to calculate the classical Bollinger Bands channel. (2.0 by default)
Outer bands standard deviation: additional channels outside the main one, using a larger standard deviation. (3.0 by default)
Theoretically, with a 1.0 standard deviation, around 68% of the price action should be contained within the Bollinger Bands.
With a 2.0 standard deviation, around 95%.
With a 3.0 standard deviation, around 99.7%.
With a 4.0 standard deviation, around 99.99%.
But as security prices returns have no actual statistical distribution, these probabilities don't strictly apply to Bollinger Bands. According to Wikipedia, studies have found that with a 2.0 standard deviation, only about 88% (85–90%) of the price data remain with the Bollinger Bands, instead of the theoretical 95%.
The higher you set the values, the less signals you'll get.
You should most likely keep the main channel standard deviation between 2 and 3 and add between +0.5 and +1 for the outer bands.
Most commonly used value for Bollinger Bands is 2.0.
Current time frame
Show current time frame Bollinger Bands: these are the Bollinger Bands you're used to. (enabled by default)
Show current time frame outer bands: add two additional bands outside the main channel using a larger standard deviation. (enabled by default)
Higher time frame
Show higher time frame Bollinger Bands: display secondary Bollinger Bands from a higher time frame. Time frames are configured in the below "Time frames" section. (enabled by default)
Show higher time frame outer bands: add two additional bands outside the main channel using a larger standard deviation (enabled by default)
Overbought and oversold
Show oversold and overbought background: add a background to the higher time Bollinger Bands whose color depends on the dual time frame Bollinger Bands oversold / overbought status. (enabled by default)
Asset is considered overbought/oversold when its price is outside of the Bollinger Bands' main channel.
Asset is considered strongly overbought/oversold when its price is outside of the Bollinger Bands' outer bands.
Dark red: both time frame are overbought (outside the main channel)
Red: one time frame is strongly overbought (outside the outer bands) and the other one is overbought (outside the main channel)
Bright red: both time frame are strongly overbought (outside the outer bands)
Dark green: both time frame are oversold (outside the main channel)
Green: one time frame is strongly oversold (outside the outer bands) and the other one is oversold (outside the main channel)
Bright green: both time frame are strongly oversold (outside the outer bands)
Signals
Show signals: display signals when an area of opportunity is detected. Read the introduction and the Signals section for more information. (enabled by default)
Show weak signals: display signals although at the higher time frame price is not yet overbought or oversold but close to be (disabled by default)
Divergences
Use MACD for divergences (enabled by default)
Use MFI for divergences (enabled by default)
Use RSI for divergences (enabled by default)
At least one source of divergences must be enabled for signals to work.
Enable hidden divergences: signals don't use hidden divergences by default as they generate more false positives than regular divergences. You can enable them to get more signals, it can be especially useful at high time frames (like weekly, monthly, etc.) where signals are rarer. (disabled by default)
Show divergences: draw MACD, MFI and RSI divergences on the chart. (disabled by default)
Green: regular bullish divergence
Red: regular bearish divergence
Blue: hidden bullish divergence
Orange: hidden bearish divergence
Confirmation
Confirmation speed: a faster confirmation speed will generate more false positive signals, a slower one will produce delayed but more reliable signals.
Fastest: don't wait for a SuperTrend confirmation, only wait for a divergence confirmation. Lot of false positives.
Fast: wait for a fast SuperTrend confirmation (SuperTrend factor = 1).
Medium: wait for a slower but more reliable SuperTrend confirmation (SuperTrend factor = 2). Fewer false positives but more lagging signals.
Slow: wait for an even slower but very reliable SuperTrend confirmation (SuperTrend factor = 3). Very few false positives but very late signals.
Time frames
You can define the higher time frames you wish to use here.
Default values try to adhere to a x6 to x8 ratio, x4 to x12 at maximum.
Some pairs are more significant than others, like 4 hour + daily, daily + weekly and weekly + monthly.
1 second: 10 seconds
5 seconds: 30 seconds
10 seconds: 1 minute
15 seconds: 2 minutes
30 seconds: 3 minutes
1 minute: 10 minutes
2 minutes: 15 minutes
3-4 minutes: 30 minutes
5-9 minutes: 45 minutes
10-11 minutes: 1 hour
12-14 minutes: 1 hour
15-29 minutes: 2 hours
30-44 minutes: 4 hours
45-59 minutes: 6 hours
1 hour: 8 hours
2 hours: 12 hours
3 hours: 1 day
4-5 hours: 1 day
6-7 hours: 2 days
8-11 hours: 3 days
12-23 hours: 4 days
1 day: 1 week
2 days: 2 weeks
3 days: 3 weeks
4 days: 1 month
5 days: 1 month
6 days: 1 month
1 week: 1 month
2 weeks: 2 months
3 weeks: 3 months
1 month: 6 months
2 months: 9 months
3 months: 12 months
4 months: 15 months
5 months: 21 months
6 months: 24 months
Time frames use the TradingView units:
s = seconds
h = hours
D = days
W = weeks
M = months
no unit = minutes
Time frame strings follow these rules:
They are composed of the multiplier and the time frame unit, e.g., “1S”, “30” (30 minutes), “1D” (one day), “3M” (three months).
The unit is represented by a single letter, with no letter used for minutes: “S” for seconds, “D” for days, “W” for weeks and “M” for months.
When no multiplier is used, 1 is assumed: “S” is equivalent to “1S”, “D” to “1D, etc. If only “1” is used, it is interpreted as “1min”, since no unit letter identifier is used for minutes.
There is no “hour” unit; “1H” is not valid. The correct format for one hour is “60” (remember no unit letter is specified for minutes).
The valid multipliers vary for each time frame unit:
- For seconds, only the discrete 1, 5, 10, 15 and 30 multipliers are valid.
- For minutes, 1 to 1440.
- For days, 1 to 365.
- For weeks, 1 to 52.
- For months, 1 to 12.
Styles
You can configure the appearance of the Bollinger Bands, the overbought / oversold background, the divergences and the signals here.
Advanced - MACD
Settings used for the MACD divergences. You most likely won't need to change these values, especially if you need them to be explained.
Advanced - MFI
Settings used for the MACD divergences. You most likely won't need to change these values, especially if you need them to be explained.
Advanced - RSI
Settings used for the MACD divergences. You most likely won't need to change these values, especially if you need them to be explained.
Advanced - SuperTrend
Settings used for the MACD divergences. You most likely won't need to change these values, especially if you need them to be explained.
ALERTS
Any signal: a bullish or bearish signal has been detected.
Bullish signal: a bullish signal has been detected.
Bullish signal with divergence: a bullish signal forming a divergence with a previous bullish signal has been detected.
Bearish signal: a bearish signal has been detected.
Bearish signal with divergence: a bearish signal forming a divergence with a previous bearish signal has been detected.
Overbought/oversold = asset price is outside of the Bollinger Bands' main channel.
Strongly overbought/oversold = asset price is outside of the Bollinger Bands' outer bands.
Current time frame - Entering overbought: asset is now overbought at the current time frame.
Current time frame - Exiting overbought: asset is not overbought anymore at the current time frame.
Current time frame - Entering strongly overbought: asset is now strongly overbought at the current time frame.
Current time frame - Exiting strongly overbought: asset is not strongly overbought anymore at the current time frame.
Current time frame - Entering oversold: asset is now oversold at the current time frame.
Current time frame - Exiting oversold: asset is not oversold anymore at the current time frame.
Current time frame - Entering strongly oversold: asset is now strongly oversold at the current time frame.
Current time frame - Exiting strongly oversold: asset is not strongly oversold anymore at the current time frame.
Higher time frame - Entering overbought: asset is now overbought at the higher time frame.
Higher time frame - Exiting overbought: asset is not overbought anymore at the higher time frame.
Higher time frame - Entering strongly overbought: asset is now strongly overbought at the higher time frame.
Higher time frame - Exiting strongly overbought: asset is not strongly overbought anymore at the higher time frame.
Higher time frame - Entering oversold: asset is now oversold at the higher time frame.
Higher time frame - Exiting oversold: asset is not oversold anymore at the higher time frame.
Higher time frame - Entering strongly oversold: asset is now strongly oversold at the higher time frame.
Higher time frame - Exiting strongly oversold: asset is not strongly oversold anymore at the higher time frame.
Dual time frame - Entering overbought: asset is now overbought at current and higher time frames.
Dual time frame - Exiting overbought: asset is not overbought anymore at current and higher time frames.
Dual time frame - Entering oversold: asset is now oversold at current and higher time frames.
Dual time frame - Exiting oversold: asset is not oversold anymore at current and higher time frames.
Dual time frame - Entering strongly overbought: asset is now strongly overbought at current and higher time frames.
Dual time frame - Exiting strongly overbought: asset is not strongly overbought anymore at current and higher time frames.
Dual time frame - Entering strongly oversold: asset is now strongly oversold at current and higher time frames.
Dual time frame - Exiting strongly oversold: asset is not strongly oversold anymore at current and higher time frames.
ABOUT THE HIGHER TIME FRAME BOLLINGER BANDS
Using a classical higher time frame Bollinger Bands would produce lagging data. For instance, if we are using a weekly BB at the daily time frame, we'll have to wait up to 7 days for the weekly bar to close to get the actual final weekly BB values. Instead, this indicator generates real time higher time frame Bollinger Bands by multiplying the moving average length of the Bollinger Bands by the higher time frame / current time frame ratio. For instance, a weekly BB in the daily time frame will use a x7 ratio (i.e. a 20 * 7 = 140 days MA BB).
It produces slightly different but very similar bands that are as meaningful and can be used in real time at lower time frames.
Alternatives would have been to wait up to seven days for signals to be finalized, which would have render them meaningless. Or to use previous week data, which would have made the signal inaccurrate.
To sum up, weekly Bollinger Bands use a 20 weeks moving average updated one time a week. In the daily time frame, this indicator also use a 20 weeks (140 days) moving average but updated daily instead of weekly.
A comparison between a traditional higher time frame Bollinger Bands vs the ones used by this indicator:
Blue and orange lines are the actual weekly BBs, grey ones are the daily updated ones.
ABOUT THE DIVERGENCES
This indicator uses the same divergences algorithm as my other indicators:
- RSI with divergences
- MACD with divergences
- Trend Reversal Indicator
You'll find more information about this algorithm on my RSI page.
DB ETHUSD MMA IndicatorDB ETHUSD MMA Indicator
What does the indicator do?
The DB ETHUSD MMA Indicator is explicitly designed for ETH crypto and works on multiple timeframes. However, the weekly+ timeframe is recommended. The indicator is specifically designed to detect trend changes for ETHUSD using a combination of TEMA, T3, EMA, Volume, and Wave A. The indicator is best used two days into the weekly as it repaints in real time. For additional safety, the indicator displays an orange warning light when the weekly timeframe is still very early and possible to repaint. The indicator is designed to live in its pane and will change the background color to indicator buy/sell periods for ETHUSD weekly.
How should this indicator be used?
The DB ETHUSD MMA Indicator should be used in combination with other indicators as a secondary visual indicator or market buy/sell periods for ETHUSD.
Does the indicator include any alerts?
However, they are very experimental and should not be used for real-time or production trading. Instead, they should be used for manual trading alerts. Please do not use a robot on these alerts as the indicator is finetuned to ETHUSD to change in real-time. For this reason, it may repaint quickly on the first or second day of the weekly period. As noted above, a warning light is displayed to let the user know it's early in the weekly period. With that being said, the alerts are very handy for manual trading when combined with another buy/sell signals.
DB MMA Buy Alert
DB MMA Wave A Warning (alerts when wave A is weak and bullish)
DB MMA Buy Repeat Alert
DB MMC Sell Repeat Alert
Enjoy!
*SSS 50% [Auto]** SSS 50% - Displays Outside Warning and Previous High/Low on Current chart timeframe or Custom Timeframe Selection **
Outside Warning and Previous high/low levels default is set to the current charts timeframe.
For all Custom Timeframes, select within Indicator settings. Note this indicator is a simple version of my previous SSS Rule Indicator and HTF as this is allows for ONE Timeframe only!
This indicator is based on Sara Strat Sniper's - 50% Rule for trading Outside Bars and helps you visual the method quickly.
** Indicator Setup Requirements **
For Indicator to correctly display the 50% price level you need to setup your chart correctly. Right-click your chart background, select Settings, select Scales and Tick “Indicator Last Value Label". Now your 50% Price level will be displayed.
Known Issues:
This indicator does not work when you try to view a lower timeframes levels on a higher timeframe chart.
Example 1: Selecting Daily Warning, High and Low Levels will not be displayed correctly on a Weekly timeframe and above etc. The Daily selection however will be displayed correctly on all lower timeframes from the 1 minute chart to the Daily.
Example 2: Selecting Weekly Warning, High and Low Levels will not be displayed correctly on a Monthly timeframe and above etc. The Weekly selection however will be displayed correctly on all lower timeframes from the 1 minute chart to the Weekly. Please apply these same rules for all other timeframe indicator selections.
Monthly Warning, High and Low levels will not work correctly on a Weekly chart when the current Weekly candlestick is forming between the end of a previous Month and start of new Month. Once the first Weekly candle of a new Month closes the Monthly levels will now be displayed correctly. Please note, selecting the Monthly levels when viewing a Monthly chart will work as normal and Monthly levels displayed on a Weekly chart will be corrected once the first Weeks candle has closed. I believe this error is caused by a pine script repainting issue when assessing historical price data which is out of my limited scripting brains control.
*SSS 50% HTF** SSS 50% - HTF (Higher Timeframe) -D/W/M/Q Edition **
This indicator is based on Sara Strat Sniper's - 50% Rule for trading Outside Bars and helps you visual the method quickly.
This indicator allows you to select: Outside: Day/Week/Month/Quarter Warning Levels with Previous High and Low Levels available within the indicators settings.
Please note - Daily warning and high/low levels are set to the indicators default. Feel free to change and save as required. Any issues let me know. See known issues below.
** Indicator Setup Requirements **
For Indicator to correctly display the 50% price level you need to setup your chart correctly. Right-click your chart background, select Settings, select Scales and Tick “Indicator Last Value Label". Now your 50% Price level will be displayed.
Known Issues:
This indicator does not work when you try to view a lower timeframes levels on a higher timeframe chart.
Example 1: Selecting Daily Warning, High and Low Levels will not be displayed correctly on a Weekly timeframe and above etc. The Daily selection however will be displayed correctly on all lower timeframes from the 1 minute chart to the Daily.
Example 2: Selecting Weekly Warning, High and Low Levels will not be displayed correctly on a Monthly timeframe and above etc. The Weekly selection however will be displayed correctly on all lower timeframes from the 1 minute chart to the Weekly. Please apply these same rules for all other timeframe indicator selections.
Monthly Warning, High and Low levels will not work correctly on a Weekly chart when the current Weekly candlestick is forming between the end of a previous Month and start of new Month. Once the first Weekly candle of a new Month closes the Monthly levels will now be displayed correctly. Please note, selecting the Monthly levels when viewing a Monthly chart will work as normal and Monthly levels displayed on a Weekly chart will be corrected once the first Weeks candle has closed. I believe this error is caused by a pine script repainting issue when assessing historical price data which is out of my limited scripting brains control.
HADES Timecycle SMTWhat this indicator tracks
1) Time‑cycles based on QT (Micro → 90‑minute → Daily → Weekly)
HADESSMT segments the trading day and week into recurring phases and paints them directly on your chart:
real time plotting of SSMTs for Micro cycles, when Q1 and Q2 highs or lows are different for correlated assets. same for the 90‑minute quarters , Daily cycles and Weekly cycles
2) SSMT : The script continuously compares your chart to a correlated instrument and highlights cycle‑scoped SMT divergences :
Scopes: Micro, 90m, Daily, Weekly.
The tool draws compact slanted segments between consecutive cycle highs/lows and places a small label with the scope tag (e.g., 90m, D, W, Mic.) and the comparison ticker.
Table summary: A docked panel logs Bullish/Bearish SMT currently active per scope.
In plain English: when two tightly related markets fail to confirm each other’s new extremes inside the same cycle window, HADESSMT calls that out visually and in the table.
3) PSP /scanner (👁️)
A compact scanner runs on 240m, 60m, and 15m composite views of your chosen inter‑market set and tags bars with an eye icon (👁️):
👁️ below price → a bullish turning‑point signature.
👁️ above price → a bearish turning‑point signature.
Events are logged in the table (e.g., “60m Bullish PSP 👁️”).
Treat PSP tags as context—they’re not trade signals by themselves. They often add confluence when they align with SSMT and cycle boundaries.
4) “True Open” levels
includes a daily open line that marks midnight open for the day.
Inter‑market sets (Triads & Dyads)
HADESSMT automatically picks a comparison instrument based on what you’re charting. Two mechanisms exist:
Triads (auto‑pairing):
FX: EUR + GBP ↔ inverse DXY
Metals: Gold + Silver
US Indices: NQ + YM + ES
You can show one or both comparison legs.
Tip: If you don’t see SMT labels, ensure your symbol belongs to one of the configured sets or customize the tickers in Triad inputs.
On‑chart visuals you’ll see
Thin slanted SMT markers between successive cycle extremes with a small scope/ticker tag.
👁️ PSP labels on higher‑timeframe bars.
True‑Open lines labeled 00:00 (daily) .
Summary table (right side by default) containing:
The comparison ticker currently in use,
Any active Bullish/Bearish SMT per scope,
Recent PSP 👁️ calls at 240/60/15 minutes.
How to use it (practical flow)
Pick your market & ensure a comparison exists (Triad ).
Important: HADESSMT is a context engine, not a trade system. Use your own risk management and confirmation.
Triad– enable one/both SMT comparisons; edit the default tickers if your broker symbols differ.
Timezone – UTC offset (default -4) to align cycle splits with your session.
Micro features appear on charts ≤ 5m.
90‑minute features are designed for charts ≤ 30m.
Daily features prefer charts ≤ 3h.
Weekly features render reliably on daily charts and below.
(If a layer doesn’t appear, you may be on a timeframe above its designed threshold.)
FAQs
Why don’t I see SMT on my market?
Ensure the symbol is in one of the configured Triad sets, or add your own correlated ticker(s).
What exactly is PSP?
A compact pressure/turn signature across your inter‑market set. It’s presented as an 👁️ tag and a table entry (bullish/bearish). The internal detection specifics are intentionally abstracted.
Gabriel's Squeeze Momentum📊 Gabriel’s Squeeze Momentum — Deluxe Volatility + Momentum Suite
An advanced, all-in-one squeeze & momentum framework that times volatility compression/expansion and trend shifts, with optional CVD (cumulative volume delta) momentum, ATR zone context, Discontinued Signal Lines (DSL) scalps, Colored DMI trend label, Williams VIX Fix (WVF) low-volatility exhaustion pings, Buff’s VTTI/VPCI volume confirmation, and real-time divergence detection.
What it does:
Discover Squeezes. They occur when volatility contracts, often preceding significant price moves.
Measures momentum with a fast, ATR-normalized linear regression—optionally on Price or CVD—so you see direction and “how hard it’s pushing.”
🧭 Signal Legend ~ Colors the squeeze so you instantly know regime:
🟡 / 🟣 (Tight/Very Tight): Coiled spring; prepare a plan.
🔴 / ⚫ = (Regular/Wide): Watch for Divergences between Price and Momentum.
🟢 (Fired): Expansion started; trade with momentum cross and bias.
Adds context bands at ±1/±2/±3 ATR (“trend / expansion / OB-OS”) to filter late or weak signals.
DSL (Discontinued Signal Lines) give early scalp flips on momentum vs. adaptive bands.
DMI label & triangles communicate trend strength and whether +DI / −DI is in control.
Williams VIX Fix flags capitulation/exhaustion style spikes (with optional VIX proxy).
VTTI/VPCI modules confirm when volume aligns with price trend or contradicts it.
Divergences (regular & hidden) auto-draw with optional live (may repaint) or on-close.
🎢 Squeeze Momentum — How the Logic Works 🎢
The Squeeze Momentum model is built on the principle of volatility compression and expansion. In markets, periods of low volatility are often followed by explosive moves, while high volatility eventually contracts. The “squeeze” seeks to identify these compression phases and prepare traders for the likely expansion that follows.
This indicator achieves that by comparing Bollinger Bands (BB) to Keltner Channels (KC).
Bands: Bollinger vs. Keltner
Bollinger Bands (BB): Calculated using a Simple Moving Average (SMA) of price and standard deviations (σ) of the closing price. The bands expand and contract depending on volatility.
Keltner Channels (KC): Built from an SMA plus/minus multiples of the Average True Range (ATR). Unlike some simplified squeeze indicators that approximate ATR, this implementation uses a true ATR-based KC, ensuring accuracy across different assets and timeframes.
By comparing whether the Bollinger Bands are inside or outside the Keltner Channels, the indicator identifies different squeeze regimes, each representing a distinct volatility environment.
📦 Regime Colors
The squeeze states are color-coded for quick interpretation:
🔹Wide Squeeze (⚫): BB inside KC with a high ATR multiplier. Extremely low volatility, often before major expansion.
🔹Normal Squeeze (🔴): BB inside KC with a moderate ATR multiplier (about 25% more sensitive than Wide). Typical compression setting.
🔹Narrow Squeeze (🟡): BB inside KC with a lower ATR multiplier (about 50% more sensitive than Wide). Signals tighter compression.
🔹Very Narrow Squeeze (🟣): BB inside KC with the lowest ATR multiplier (100% more sensitive than Wide). Indicates extreme coiling.
🔹Fired Squeeze (🟢): BB break outside KC. Marks the release of volatility and potential trend acceleration.
This multi-layered system improves upon classical SQZPRO by using precisely calculated Keltner Channels and multiple sensitivity levels, giving traders more granular information about volatility states.
🔒 Multi-Timeframe Support
The indicator automatically adjusts squeeze thresholds for different timeframes — hourly, 4-hour, daily, weekly, and monthly charts. Each regime has been manually tuned for its timeframe, allowing traders to use the same tool whether scalping, swing trading, or holding longer-term positions.
🎯 Momentum Core
Detecting a squeeze is only half the equation — the indicator also includes a momentum engine to determine direction and strength.
Price momentum is measured as the distance of Close from its Highest High and Lowest Low range, smoothed with a Simple Moving Average, and refined with Linear Regression.
This value is then divided by ATR, normalizing momentum relative to volatility.
Optionally, CVD Mode (Cumulative Volume Delta ÷ Volume) can replace price momentum for assets where order-flow and volume dynamics dominate (e.g., crypto).
🦆 Signal Line
Momentum is paired with a Simple Moving Average signal line:
🔹Bullish: Momentum > Signal.
🔹Bearish: Momentum < Signal.
This crossover logic provides directional bias and filters for false squeezes.
🚀 When to Use Price vs. CVD
CVD Mode (Crypto, FX with tick volume): Best for assets with strong volume/order-flow signals.
Price Mode (Equities, Commodities, Higher TFs): Best for assets with irregular or thin volume data.
🛢️ATR Zones (context filter) 🛢️
Its design is straightforward yet effective: it measures the difference between the current price from its highest highs, lowest lows, and a moving average over a chosen period, then expresses that difference in terms of the Average True Range (ATR) over the same period. By normalizing price deviations against volatility, ATR provides a clear sense of how far and how fast price is moving relative to its “normal” range.
Interpreting the Zone
Positive Values: When it is above zero, price is trading above its HH, LL, and moving average, suggesting bullish momentum. The higher the value, the stronger the momentum relative to volatility.
Negative Values: When the Momentum is below zero, price is trading below its HH, LL, and moving average, signaling bearish momentum. The deeper the reading, the stronger the downside pressure.
Magnitude Matters: Because the Momentum is expressed in ATR units, traders can immediately gauge whether the move is small (less than 1 ATR), moderate (1–2 ATRs), or extreme (3+ ATRs). This makes it especially useful for assessing overbought or oversold conditions in a normalized way.
Strengths:
🔹Volatility-Normalized: Unlike simple squeeze momentum oscillators that have different OB/OS levels, this Momentum adjusts for volatility. This makes signals more consistent across assets with different volatility profiles.
🔹Simplicity:
±1 ATR: trending zone (bulls above +1, bears below −1)
±2 ATR: expansion (keep, add, or trail). Stretch/risk of mean reversion.
±3 ATR: potential exhaustion/mean-revert zone.
🔹Momentum Clarity: By framing momentum in ATR terms, it is easier to distinguish between a small deviation from trend and a genuinely significant move. Sometimes it is a good sign that it trend to ±3/2 ATR, looks for similar directional moves.
Color: The script shades +2/+3 (OB) and −2/−3 (OS) areas and provides swing alerts at ±1 ATR.
💚 What Are Discontinued Signal Lines (DSL)? 💚
In technical analysis, one of the most common tools for smoothing out noisy data is the signal line. This concept appears in many indicators, such as the MACD or stochastic oscillator, where the raw value of an indicator is compared to a smoothed version of itself. The signal line acts as a lagging filter, making it easier to identify shifts in momentum, crossovers, and directional changes.
While useful, the classic signal line approach has limitations. By design, a single smoothed line introduces lag, which means traders may receive signals later than ideal. Additionally, a one-size-fits-all smoothing process often struggles to adapt to different levels of volatility or rapidly changing market conditions.
This is where Discontinued Signal Lines (DSL) come in. DSL is an advanced extension of the traditional signal line concept. Instead of relying on just one smoothed comparison, DSL employs multiple adaptive lines that adjust dynamically to the current state of the indicator. These adaptive lines effectively “discontinue” the dependence on a single, fixed smoothing method, producing a more flexible and nuanced representation of market conditions.
How DSL Works?
Traditional Signal Line: Compares an the Momentum against its own moving average. Provides crossover signals when the raw indicator value moves above or below the smoothed line.
Strength: reduces noise. Weakness: delayed signals and limited adaptability.
DSL Extension: Uses multiple adaptive lines that respond differently to the indicator’s current behavior. Instead of one static moving average, the DSL approach creates faster and slower “reaction lines.” These lines adapt dynamically, capturing acceleration or deceleration in the indicator’s state.
Result: Traders see how momentum is evolving across multiple adaptive thresholds. This reduces false signals and improves responsiveness in volatile conditions.
Benefits of Discontinued Signal Lines
🔹Nuanced Trend Detection
DSL doesn’t just flag when momentum changes direction—it shows the quality of that shift, highlighting whether it is gaining strength, losing steam, or consolidating.
🔹Adaptability Across Markets
Because DSL adjusts to the Momentum’s own dynamics, it works well across different asset classes and timeframes, from equities and futures to forex and crypto.
🔹Earlier Signal Recognition
Multiple adaptive lines allow traders to spot developing trends earlier than with a single smoothed signal line, without being overwhelmed by raw indicator noise.
🔹Better Confirmation
DSL is particularly useful for confirmation. If both adaptive lines agree then a fill is applied in the direction, confidence in the trend is higher as the color turns bull/bear.
🔹Practical Uses
Momentum Trading: Spot acceleration or deceleration in trend strength.
Trend Confirmation: Verify whether a breakout has momentum behind it.
Noise Filtering: Smooth out erratic moves while retaining adaptability.
⚖️ Colored Directional Movement Index (CDMI) ⚖️
The Directional Movement Index (DMI), created by J. Welles Wilder, is one of the most respected trend-following indicators in technical analysis. It is actually a family of three separate indicators combined into one: the +DI (Positive Directional Indicator), the –DI (Negative Directional Indicator), and the ADX (Average Directional Index). Together, they measure not only whether the market is trending but also the strength of that trend. Traders have used the DMI for decades to identify trend direction, gauge momentum, and filter out periods of market noise.
However, despite its reliability, the traditional DMI can be challenging to interpret. Reading three separate lines at once and extracting meaningful signals requires both experience and careful observation. This complexity often discourages newer traders from fully utilizing its power.
The Colored Directional Movement Index (CDMI) is a modern reinterpretation of Wilder’s classic tool. It condenses the same information into a single visual line while using color, shape, and density to communicate what’s happening beneath the surface. The goal is simple: make the DMI’s insights faster to read, easier to act upon, and more intuitive to integrate into trading decisions.
Key Features of CDMI
🔹Color Scale for Trend Strength
The main triangle changes its base color depending on the strength of the DI reading. Dark Red or Green, colors correspond to stronger trends, while faded Gray or lighter yellow tones signal weaker or fading trends. This makes it visually clear when the market is consolidating versus trending strongly.
🔹Color Density for Momentum
Beyond strength, the CDMI uses color density to represent momentum in the trend’s strength. If the ADX is rising (trend gaining momentum), the triangles grows more darker. If the ADX is falling (trend losing momentum), the triangle becomes paler. This provides an instant sense of whether a trend is accelerating or decelerating.
🔹Directional Triangles for Trend Direction
To replace the separate +DI and –DI lines, the CDMI plots small triangle shapes along the bottom axis. An upward-facing triangle indicates that +DI is dominant, confirming bullish direction. A downward-facing triangle signals –DI dominance, confirming bearish direction. This way, both strength and direction are shown without the clutter of multiple overlapping lines.
🔹Label Display for Detailed Values
For traders who want precise data alongside the visuals, CDMI includes a label that shows:
Current trend strength (ADX value).
Current +DI and –DI values.
Momentum status of the ADX (rising or falling).
Historical values of DMI readings, so traders can track how the indicator has evolved over time.
Tooltips are also available to explain “How to read the colored DMI line”, making this version more beginner-friendly.
Why CDMI Matters
The CDMI retains the proven reliability of Wilder’s DMI while solving its biggest drawback—interpretation difficulty. Instead of juggling three separate plots, traders get a single, information-rich line supplemented with intuitive shapes and labels. This streamlined format makes trend verification, momentum analysis, and signal confirmation much faster.
For trading applications, the CDMI can help:
Confirm Entries by showing whether the market is trending strongly enough to justify a position.
Avoid False Signals by filtering out periods of low ADX (weak trend).
Enhance Timing by tracking momentum shifts in trend strength.
By simplifying the complexity of the original DMI into an elegant, color-coded tool, the CDMI makes one of technical analysis’ most advanced indicators practical for everyday use.
😅 The VIX, the Williams Vix Fix, and Market Bottoms 😎
The VIX, formally known as the CBOE Volatility Index, has long been considered one of the most reliable indicators for spotting major market bottoms. Often referred to as the “fear gauge,” it measures the market’s expectation of volatility in the S&P 500 over the next 30 days. When fear grips investors and volatility spikes, the VIX rises sharply. Historically, these moments of extreme fear often coincide with powerful buying opportunities, as markets have a tendency to rebound once panic selling exhausts itself.
Larry Williams, a well-known trader and author, developed the Williams Vix Fix as a way to replicate the insights of the VIX across any tradable asset. While the VIX itself is tied specifically to S&P 500 options, Williams wanted a tool that could capture similar panic-driven dynamics in stocks, futures, forex, and other markets where the VIX is not directly applicable. His “fix” uses price action and volatility formulas to approximate the same emotional extremes reflected in the official VIX, creating almost identical results in practice. This makes the Williams Vix Fix a powerful addition to the trader’s toolbox, allowing the same principle that works on U.S. equities to be applied universally.
One of the most important characteristics of both the VIX and the Williams Vix Fix is that they are far more reliable at signaling market bottoms than market tops. The reason is psychological as much as it is mathematical. At market bottoms, fear and panic are widespread. Retail investors often capitulate, selling in a frenzy as prices drop. This panic drives volatility higher, producing the spikes we see in the VIX. At the same time, professional traders and institutions—those with larger capital and more disciplined strategies—tend to step in when volatility is stretched. They buy when others are fearful, using the panic of retail investors as an opportunity to acquire assets at discounted prices. This confluence of retail panic and institutional buying power is what makes the VIX such a strong bottom-finding tool.
In contrast, at market tops, the dynamic is very different. Tops tend not to be marked by panic or fear. Instead, they form quietly as enthusiasm fades, liquidity dries up, and buying interest wanes. Investors are often complacent, assuming prices will continue to rise, while professional money begins distributing their positions. Because there is no surge in fear, volatility remains muted, and the VIX does not offer a clear warning. This is why traders who rely on the VIX or the Williams Vix Fix must understand its limitations: it is exceptional for detecting bottoms but less useful for anticipating tops.
For traders, the lesson is straightforward. When you see the VIX or Williams Vix Fix spiking to extreme levels, it often indicates a high-probability environment for a rebound. These tools should not be used in isolation, but when combined with support levels, sentiment indicators, and market breadth, they can provide some of the most reliable bottom-fishing signals available. While no indicator is perfect, few have stood the test of time as consistently as the VIX—and thanks to Williams’ adaptation, its power can now be applied to nearly every market.
Indicator Signals (Great in risk-off charts):
🔹Flags spike events (tops/bottoms) with both original and filtered (AE/FE) criteria.
🔹Great as a risk overlay: tighten stops into AE/FE, or require “no spike” to enter.
🤯 Volume Comfirmation: VTTI & VPCI (Buff Dormeier) 🤯
Volume Trend Technical Indicator (VTTI)
The Volume Trend Technical Indicator (VTTI) is a momentum-style tool that analyzes how volume trends interact with price movement. Unlike basic volume measures that simply report how many shares or contracts were traded, the VTTI evaluates whether volume is expanding or contracting in the same direction as the prevailing price trend. The underlying logic is that healthy trends are supported by rising volume, while weakening trends often occur on shrinking volume.
At its core, VTTI looks at the rate of change in volume compared to price movements. By smoothing and normalizing these relationships, the indicator helps traders determine whether momentum is accelerating, decelerating, or diverging.
Rising VTTI: Suggests that volume is confirming the current price trend, strengthening the case for continuation. Flips BG Green after crossing it's signal.
Falling VTTI: Indicates that the trend may be losing participation, often a sign of possible consolidation or reversal. Flips BG Red after crossing it's signal.
Traders often use VTTI to filter entries and exits. For example, if price breaks out but VTTI does not rise above zero, the breakout may lack conviction. On the other hand, when both price and VTTI are aligned, probability of continuation improves.
Volume Price Confirmation Indicator (VPCI)
The Volume Price Confirmation Indicator (VPCI), developed by Buff Dormeier, takes the relationship between price and volume a step further. While traditional indicators like On-Balance Volume (OBV) or Chaikin Money Flow look at cumulative patterns, VPCI breaks price and volume into trend and volatility components and then recombines them to measure how well they confirm each other.
In essence, VPCI asks: “Does volume confirm what price is signaling?”
The formula integrates:
Price Trend Component – whether the market is trending upward or downward.
Volume Trend Component – whether trading activity supports that price trend.
Volatility Adjustments – to account for irregular swings.
The resulting oscillator fluctuates around a zero line:
Positive VPCI: Indicates that price and volume trends are in agreement (bullish confirmation).
Negative VPCI: Suggests that price and volume are diverging (bearish warning or false move).
Crossovers of Zero: Can serve as potential buy or sell signals, depending on context.
A key strength of VPCI is its sensitivity to divergence. When prices continue rising but VPCI begins falling, it often foreshadows a weakening rally. Conversely, a rising VPCI during a flat or down market can highlight early accumulation.
VTTI (Entry Signal) vs. VPCI (Exit Signal)
While both indicators study price-volume dynamics, their focus differs:
VTTI is simpler, emphasizing the trend of volume relative to price for momentum confirmation.
VPCI is more advanced, decomposing both price and volume into multiple components to produce a nuanced oscillator.
Used together, they provide complementary insights. VTTI helps quickly spot whether volume is supporting a move, while VPCI offers deeper confirmation and highlights subtle divergences.
Note: The Up/Down Volume Alert works better on the 4 HR, for Daily scalps or 30 minute for HR scalps. Intraday it's 2/10 minute.
🦅 Divergence toolkit 🦅
Divergences in Technical Analysis
Divergence occurs when the price action of an asset moves in one direction while a technical indicator, such as RSI, MACD, or Momentum, moves in the opposite direction. This disagreement between price and indicator often signals a shift in underlying market dynamics. Traders use divergences to anticipate either potential reversals or continuations in trends.
There are two main types of divergences: regular divergences, which typically precede reversals, and hidden divergences, which suggest continuation of the current trend.
Regular Divergence (Reversal Signals)
A regular divergence occurs when price and indicator disagree during a trend extension. These divergences signal that momentum is no longer fully supporting the current trend and that a reversal may be imminent.
🔹Regular Bullish Divergence
Price Action: Forms a lower low.
Indicator: Forms a higher low.
Interpretation: Price is making new lows, but the indicator is gaining strength. This suggests that selling pressure is weakening, and a reversal to the upside may occur.
Example: RSI rising while price dips to fresh lows.
🔹Regular Bearish Divergence
Price Action: Forms a higher high.
Indicator: Forms a lower high.
Interpretation: Price is reaching new highs, but the indicator shows weakening momentum. This implies that buying pressure is fading, warning of a potential downside reversal.
Example: MACD histogram falling while price makes higher highs.
Regular divergences are often spotted near the end of trends and are most powerful when aligned with key support/resistance levels or overbought/oversold conditions.
Hidden Divergence (Continuation Signals)
A hidden divergence occurs during retracements within a trend. Unlike regular divergences, hidden divergences suggest that the prevailing trend still has strength and is likely to continue.
🔹Hidden Bullish Divergence
Price Action: Forms a higher low.
Indicator: Forms a lower low.
Interpretation: Price is retracing within an uptrend, but the indicator is overshooting downward. This shows that momentum remains intact, supporting continuation upward.
🔹Hidden Bearish Divergence
Price Action: Forms a lower high.
Indicator: Forms a higher high.
Interpretation: Price is retracing within a downtrend, while the indicator overshoots upward. This indicates that bearish momentum remains strong, supporting continuation downward.
Hidden divergences often appear during pullbacks, helping traders time entries in the direction of the prevailing trend.
Practical Use of Divergences
🔹Trend Reversal Alerts – Regular divergences are early warnings that a trend may be ending.
🔹Trend Continuation Signals – Hidden divergences help confirm that retracements are simply pauses, not full reversals.
🔹Confluence with Other Tools – Divergences are more reliable when combined with support/resistance, candlestick patterns, or volume analysis.
🔹Multi-Timeframe Analysis – Spotting divergences on higher timeframes often produces stronger signals.
🕭🔔🛎️ Alert 🛎️🔔🕭
🔹Squeeze
🟢 Fired Squeeze
⚫ Low (Wide) Squeeze / 🔴 Normal / 🟡 Tight / 🟣 Very Tight
🔹Momentum
🐂 Bullish Trend Reversal (Crossover of Momentum and Signal from sub −2)
🐻 Bearish Trend Reversal (Crossover of Momentum and Signal from above +2)
📈 Bullish Swing (cross above +1 ATR) / 📉 Bearish Swing (cross below −1 ATR)
🔹DSL
💚 Bullish DSL Scalp / 💔 Bearish DSL Scalp
🔹Volume
🎯 Strong Up Volume (VPCI > 0 and VTTI up)
⏳ Strong Down Volume (VPCI < 0 and VTTI down)
🔹Divergences
🦅 Bullish, 🦆 Bearish, 🦅 Bullish Hidden, 🦆 Bearish Hidden
Management: Search Vanguard ETFs in your browser, look up full list of VOO holdings. Download it, or copy paste all the ticker symbols. Place that with a AI, just ask it to place , in between each ticker. NVDA, TSLA, AVGO, etc. Create a new watchlist, in the + add all tickers separated by commas. Place a watchlist alert ⚠️ only available for premium + subscribers.
Practical playbook
1) Classic Squeeze Break
Setup: 🔴(D)/🟡(2D)/🟣(3D) squeeze → wait for 🟢(1HR) Fired.
Confirm: Momentum > Signal and above +1 ATR (or DMI strong & rising).
Manage: add on pullbacks that hold +1 ATR; scale near +2 ATR or WVF AE/FE.
2) DSL Scalp in Trend
Setup: Clear trend (DMI strong) + DSL bull/bear trigger in the direction of trend.
Filter: avoid tight/very tight yellow/purple unless you want micro-scalps.
Exit: opposite DSL or ATR midline loss.
3) Mean-Reversion Fade
Setup: Momentum extended to ±3 ATR, WVF spike, and a regular divergence.
Entry: Counter signal only when mom crosses back through ±3 ATR toward mid. Exit early if squeeze ⚫/🔴, Momentum may extend to ±3/2 ATR in the same direction.
Risk: reduce size; this is a fade, not trend following.
4) Volume-Confirmed Breakout
Setup: Squeeze → 🟢 Fired + VPCI > 0 and VTTI up → trend continuation.
Manage: trail behind +1 ATR (long) or −1 ATR (short). 9 SMA works good.
Inputs at a glance (key ones)
Mode: Price or CVD momentum; Squeeze Sensitivity (σ); Momentum Length; Signal Length; ATR Smoothing.
🧮 Colors:
SQZMOM: per squeeze regime, momentum, ATR fills.
DSL: On/Off, Fast/Slow, Length.
ATR Zones: Bullish/Bearish levels (±1), ±2/±3 zone lines & fills.
DMI: Lengths, key & weak thresholds, label on/off.
WVF/VIX: Lookbacks, bands, AE/FE toggles, VIX proxy symbol.
VTTI/VPCI: Fast/slow/signal (VTTI), Short/Long (VPCI), and volume source (Tick/CVD/NVI/PVI/OBV/PVT/AccDist/VWAP).
Divergences: Regular/Hidden toggles, Sensitivity %, Lifetime, Live vs On-Close, Lines/Labels.
🔎 Suggested defaults (feel free to tweak)
Calibration: Size Momentum, so that when it's above zero the asset is trending up. For the signal, it can be kept the same or lower.
Intraday (60–240m): σ = 2.0, 18~20, 3~5, DSL Fast, DMI key 23, weak 17.
Daily/Weekly: keep σ = 2.0, consider DSL Slow, DMI key 25, weak 20, widen ATR filters; lean on VPCI/VTTI (4-HR).
CVD mode: use where tick/volume quality is high (index futures, liquid equities, crypto majors).
🪟 Tips & caveats
Swing Screener: Favor liquid underlyings (index futures/ETFs, large caps). Large-Cap, 2 M Vol, Mid-Cap, 500K Vol. Squeeze: BB( 20) upper < KC (20) upper, and BB (20) lower > KC (20) lower. Optional: Price above 9 SMA, 21 SMA, and 50 SMA, they are my SMA of choice. 200 SMA too, unless you are willing to fish in a bear market. Vice-versa for shorts. Optional: ADX 4 HR > 17, or 23 depending on what you are looking for.
Scalp Screener: Same as above, change the D 9 SMA to 5, and the BB/KC from D to 1 HR. Scalps may last 2~3 days.
Position Screener: Change all daily setting to W, aside from Volume. Optional: PEG < 1.5, FCF > 0, ROA > 8% or ROE > 6%.
Good with Moving averages (9/21/50) and low-volume zones.
Position size by IV, ATR, and account risk. Consider stop/hedge rules around ±2/±3 ATR.
Let alerts stage your watchlist; act only on combined squeeze + momentum signals.
Divergences in live mode can repaint (Real-Time); for algo or alerts, use on-close.
Tight/Very tight squeezes are great for scalps but choppy; combine with DMI rising + VPCI>0.
±3 ATR is exhaustion context, not an auto-fade—look for WVF/Div/DSL confirmation.
For alerts, pair “Fired Squeeze + Bullish Swing” (or bearish) to avoid false starts.
🎯 How to Trade Entry ~ Recap:
Tight/very tight squeeze → fires → momentum crosses up (or DSL bull).
Exit/Flip: Momentum crosses down into/after expansion or hits +2/+3 ATR with fade signs. Filter: Avoid fresh longs at +3 ATR; avoid fresh shorts at −3 ATR unless fading with confirmation.
📐 Options Integrations
✅ Risk Reversal/Modified Risk Reversal (Bullish: Short Put + Long Call)
Use when: Squeeze fires up from 🟡/🟣 and momentum crosses above signal (or zero/DSL).
Playbook Entry: On or just after the bullish fire and momentum upcross. DMI or Volume supports trend as well.
Structure: Sell a put at/just below the −2 ATR reference (or recent swing support). Buy a call at/above the breakout zone (prior high/mid-range +1 to +2 ATR).
A classic risk reversal is a long call plus a short put. That’s a very bullish structure—you gain if the price rallies (via the call), and you collect a premium by selling a put. But it has a naked downside risk. The modified risk reversal fixes that by adding a long lower put (making the short put into a defined put credit spread).
Management: If momentum stays above signal, ride toward +2 → +3 ATR. Sell the put near the current price → receive big premium. Buy the lower put → spend part of that premium (risk cap). Buy the call above the current price → spend more, but the short put premium mostly pays for it.
Exits/Adjust: Momentum downcross or squeeze flips back on (new compression) → reduce. If price retests −1/−2 ATR and holds, you can roll the short put down/out.
Breakout = Big Success; No Breakout = you keep the initial credit. Reversal = Max loss is capped by the long lower put.
✅ Iron Condor (Neutral: Short OTM Put Spread + Short OTM Call Spread)
Use when: Squeeze is active (🟡/🟣), momentum is flat near zero, and there is no directional edge. 🟢 lasts for around 5~8 bars typically. I measure the historical duration of it, and wait for a range period to occur.
Playbook Entry: During compression, set wings outside ±2 ATR (or recent range extremes). I prefer identifying boxes where the rectangle pattern occurs on the chart.
Management: Time decay works while price remains trapped in the coil. High-winrate ~80%, but 1 loser can wipe most of the gains.
Exits/Adjust: If a squeeze fires and momentum breaks hard one way, close the losing side, consider converting to a vertical or rotating to a directional spread aligned with momentum.
4HR-Bullish, closing one wing:
Tip: Align daily/weekly context with your intraday entries. 9 > 50 on Weekly, similar on Daily. Sell premium into compression; switch to directional spreads on expansion and momentum confirmation.
✅ Naked Call/Puts (Directional: 10~30 Delta Calls)
Stick to naked calls and puts when the squeezes are fired from either 🔴 or ⚫.
Look for Strikes slightly out of the money with an OI and Volume spread less than <10%.
If Strike Date is >45, manage 21 Days before expiration. Scalp: Expiration Strikes of 1/4 of the Squeeze period. Leap: Expiration Strikes of 1.75x of the Squeeze period.
📐 Futures Integrations
Playbook Entry:
Verify if the squeeze on the hourly is red or green, and enter on the 2- or 5-minute during a similar squeeze state.
Trend-Following: Traditional 2 Renko Block above 21 SMA and Momentum is bullish, or vice versa. (2~ES, 5~NQ)
Structure: Go long at/just below the ATR reference (or recent swing support). Exit below the breakout zone (prior high/mid-range +1 to +2 ATR).
Management: If momentum stays above +1 ATR ride toward +2 → +3 ATR, etc. House-money, should be kept.
Exits/Adjust: Momentum downcross or squeeze flips back on (new compression) → exit. On Renko Charts, lower the sensitivity to 0.7~1. If price retests 0/−1/−2 ATR and holds, you can enter when the 9 SMA flips. The 50 SMA is better for Daily and up; I wouldn't trade against it then.
📌 FOMO Trading Playbook
Credits & License
Credits: @JF10R (Multi-Timeframe Squeeze), @BigBeluga (DSL), @OskarGallard (Colored DMI base), @ChrisMoody (WVF ideas), @PineCodersTASC (VTTI/VPCI), @EliCobra (Divergence toolkit).
License: Mozilla Public License 2.0 (MPL-2.0).
Author: © GabrielAmadeusLau
Каналы_SMA_magistratura⚜️ Custom Indicator "ChannelsSMA_magistratura" — Seeing Trends as Zones, Not Lines
🔹 Why traditional trend lines aren't always practical?
— We draw trend lines, parallels, resistance levels — and the chart turns into a "geometry notebook",
— Every new impulse requires a new channel,
— Old lines get in the way and need to be deleted,
→ This is inefficient, unstructured, and not scalable.
🔹 Alternative — Moving Averages (SMA)
— SMAs show the trend direction without extra drawings,
— We already use SMA Magistratura to see all moving averages across timeframes,
— But we can go even further.
🔹 What are "ChannelsSMA_magistratura"?
— A custom indicator that turns SMA lines into zones,
— Each moving average is surrounded by a channel,
— Channel width is optimized based on backtesting,
→ Shows the normal price range around each SMA.
🔹 How the indicator works
— Visually:
SMA — central line,
Channel boundaries — on both sides,
The space between channels — filled in gray.
📌 Gray zones = deviations we call "gaps" (or "breakouts").
🔹 Normal vs. Anomaly
✅ Normal (Equilibrium):
— Price moves within the channel,
— Channels are nested:
→ Daily inside Weekly,
→ Weekly inside Monthly,
→ Monthly inside 3-Monthly.
→ Market is balanced — low volatility, stable trend.
⚠️ Anomaly (Gap):
— Price moves outside the channel,
— Channels diverge, forming a fan:
→ Monthly separates from 3-Monthly,
→ Weekly from Monthly,
→ Daily from Weekly.
→ This signals volatility, potential impulse, or correction.
🔹 Why are gaps the best entry points?
— A gap = anomalous deviation,
— Market is overbought or oversold,
— The wider the gap — the higher the chance of a strong reversal or new impulse.
📌 Example:
— Before a strong rally, price accumulates inside the channel,
— Then — a sharp breakout, piercing multiple levels.
🔹 Why is this indicator separate?
— Not always needed,
— Can be turned on/off for local analysis,
— Keeps the chart clean when using other tools.
🔹 Advantages over manual drawing
— No need to build channels manually,
— No guessing where support/resistance is,
— Everything is visible in advance, visually, and systematically.
"ChannelsSMA_magistratura" is not just an indicator.
It’s a way to see the trend not as a line — but as a zone.
It’s the ability to see not what has already happened,
but what is about to happen.
Multi-Timeframe SMA IndicatorOverview
The Multi-Timeframe Simple Moving Average (SMA) Indicator is a technical analysis tool designed for use in TradingView, written in Pine Script (version 6). It calculates and displays SMAs across multiple timeframes on a single chart, enabling traders to analyze price trends from various temporal perspectives simultaneously. This indicator is particularly useful for traders who employ multi-timeframe analysis to confirm trends, identify support and resistance levels, and make informed trading decisions.
Features
Multiple Timeframes: The indicator supports ten customizable timeframes: 1-minute, 2-minute, 3-minute, 5-minute, 15-minute, 30-minute, 1-hour, 4-hour, daily, and weekly. This allows traders to observe price trends across short-term, medium-term, and long-term perspectives.
Configurable SMA Lengths: Users can adjust the periods for three SMAs: 20-period, 50-period, and 200-period. These lengths are commonly used to represent short-term, medium-term, and long-term trends, respectively.
Customizable Colors: Each SMA (20, 50, and 200) can be assigned a unique color (default: blue for SMA 20, red for SMA 50, green for SMA 200) to distinguish them visually across different timeframes.
Overlay on Chart: The indicator is overlaid directly on the price chart, making it easy to compare SMAs with price action without cluttering the workspace.
Flexible Timeframe Selection: Users can modify the timeframes via input settings, allowing adaptability to different trading strategies (e.g., scalping, swing trading, or long-term investing).
Settings
The indicator provides the following configurable inputs:
Timeframe Inputs
1-Minute Timeframe: Default set to '1' (1-minute chart).
2-Minute Timeframe: Default set to '2'.
3-Minute Timeframe: Default set to '3'.
5-Minute Timeframe: Default set to '5'.
15-Minute Timeframe: Default set to '15'.
30-Minute Timeframe: Default set to '30'.
1-Hour Timeframe: Default set to '60'.
4-Hour Timeframe: Default set to '240'.
Daily Timeframe: Default set to 'D'.
Weekly Timeframe: Default set to 'W'.
SMA Length Inputs
SMA Length 20: Default set to 20 periods (short-term trend).
SMA Length 50: Default set to 50 periods (medium-term trend).
SMA Length 200: Default set to 200 periods (long-term trend).
Color Inputs
SMA 20 Color: Default is blue.
SMA 50 Color: Default is red.
SMA 200 Color: Default is green.
Plot Settings
Each SMA is plotted with a linewidth of 1 for most timeframes, except for the weekly timeframe, which uses a linewidth of 2 for better visibility.
Each SMA is labeled with its respective timeframe and period for easy identification in the chart’s legend.
Advantages
Comprehensive Trend Analysis: By displaying SMAs across multiple timeframes, the indicator allows traders to confirm trends across different scales. For example, a bullish signal on a 1-minute chart can be validated by checking alignment with higher timeframes like the 1-hour or daily charts.
Versatility: The indicator is adaptable to various trading styles, including day trading (using shorter timeframes like 1-minute or 5-minute) and swing trading (using 4-hour or daily timeframes).
Customizability: Traders can adjust SMA lengths and timeframes to suit their specific strategies, such as focusing on shorter periods for faster signals or longer periods for more reliable trends.
Visual Clarity: The use of distinct colors and clear labeling helps traders quickly differentiate between SMAs of different periods and timeframes, reducing confusion on complex charts.
Support and Resistance Identification: The 200-period SMA, in particular, often acts as a dynamic support or resistance level, especially on higher timeframes like daily or weekly, aiding in strategic entry and exit points.
Cross-Platform Compatibility: Built in Pine Script v6, the indicator is fully compatible with TradingView’s platform, ensuring seamless integration and performance.
Usage Tips
Trend Confirmation: Use the alignment of SMAs across timeframes to confirm trends. For instance, when the SMA 20 is above the SMA 50, and both are above the SMA 200 on multiple timeframes, it indicates a strong bullish trend.
Crossover Signals: Look for crossovers between the SMA 20 and SMA 50 for potential buy or sell signals. Confirm these with higher timeframe SMAs to filter out false signals.
Multi-Timeframe Strategy: Combine shorter timeframes (e.g., 1-minute, 5-minute) for entry points and longer timeframes (e.g., 4-hour, daily) for trend direction to enhance trade accuracy.
Adjust SMA Lengths: Experiment with different SMA lengths based on the asset’s volatility. For highly volatile assets, shorter SMAs (e.g., 10 or 15) may provide faster signals, while less volatile assets may benefit from longer SMAs.
Limitations
Lagging Indicator: As with all SMAs, this indicator is based on historical data, which may lag behind rapid price movements, potentially delaying signals in fast-moving markets.
Chart Clutter: Plotting SMAs for all ten timeframes can make the chart visually complex. Traders may need to toggle off certain timeframes to focus on relevant ones.
No Signal Generation: The indicator plots SMAs but does not include built-in alerts or signals for crossovers or trend changes, requiring manual interpretation.
Conclusion
The Multi-Timeframe SMA Indicator is a powerful and flexible tool for traders seeking to incorporate multi-timeframe analysis into their strategies. Its ability to display customizable SMAs across various timeframes provides a comprehensive view of market trends, making it suitable for traders of all experience levels. By leveraging its features, traders can enhance their decision-making process, improve trade timing, and better navigate dynamic market conditions.
Multi Timeframe Fair Value Gap Indicator ProMulti Timeframe Fair Value Gap Indicator Pro | MTF FVG Imbalance Zones | Institutional Supply Demand Levels
🎯 The Most Comprehensive Multi-Timeframe Fair Value Gap (FVG) Indicator on TradingView
Transform Your Trading with Institutional-Grade Multi-Timeframe FVG Analysis
Keywords: Multi Timeframe Indicator, MTF FVG, Fair Value Gap, Imbalance Zones, Supply and Demand, Institutional Trading, Order Flow Imbalance, Price Inefficiency, Smart Money Concepts, ICT Concepts, Volume Imbalance, Liquidity Voids, Multi Timeframe Analysis
📊 WHAT IS THIS INDICATOR?
The Multi Timeframe Fair Value Gap Indicator Pro is the most advanced FVG detection system on TradingView, designed to identify high-probability institutional supply and demand zones across multiple timeframes simultaneously. This professional-grade tool automatically detects Fair Value Gaps (FVGs), also known as imbalance zones, liquidity voids, or inefficiency gaps - the exact areas where institutional traders enter and exit positions.
🔍 What Are Fair Value Gaps (FVGs)?
Fair Value Gaps are three-candle price formations that create imbalances in the market structure. These gaps represent areas where buying or selling was so aggressive that price moved too quickly, leaving behind an inefficient zone that price often returns to "fill" or "mitigate." Professional traders use these zones as high-probability entry points.
Bullish FVG: When the low of candle 3 is higher than the high of candle 1
Bearish FVG: When the high of candle 3 is lower than the low of candle 1
⚡ KEY FEATURES
📈 Multi-Timeframe Analysis (MTF)
- 12 Timeframes Simultaneously: 1m, 3m, 5m, 15m, 30m, 45m, 1H, 2H, 3H, 4H, Daily, Weekly
- Real-Time Detection: Instantly identifies FVGs as they form across all selected timeframes
- Customizable Timeframe Selection: Choose which timeframes to display based on your trading style
- Higher Timeframe Confluence: See when multiple timeframes align for stronger signals
🎨 Three Professional Visual Themes
1. Dark Intergalactic: Futuristic neon colors with high contrast for dark mode traders
2. Light Minimal: Clean, professional appearance for traditional charting
3. Pro Modern: Low-saturation colors for extended screen time comfort
📊 Advanced FVG Dashboard
- Live FVG Counter: Real-time count of active bullish and bearish gaps
- Total Zone Tracking: Monitor all active imbalance zones at a glance
- Theme-Adaptive Display: Dashboard automatically adjusts to your selected visual theme
- Strategic Positioning: Optimally placed to not interfere with price action
🔧 Smart Zone Management
- Dynamic Zone Updates: FVG boxes automatically adjust when price touches them
- Mitigation Detection: Visual feedback when zones are tested or filled
- Color-Coded Status: Instantly see untested vs tested zones
- Extended Projection: Option to extend boxes to the right for future reference
- Timeframe Labels: Optional labels showing which timeframe each FVG originated from
💡 Intelligent Features
- Automatic Zone Cleanup: Removes fully mitigated FVGs to keep charts clean
- Touch-Based Level Adjustment: Zones adapt to partial fills
- Maximum Box Management: Optimized to handle 500 simultaneous FVG zones
- Performance Optimized: Efficient code ensures smooth operation even with multiple timeframes
🎯 TRADING APPLICATIONS
Day Trading & Scalping
- Use 1m, 3m, 5m FVGs for quick scalp entries
- Combine with higher timeframe FVGs for directional bias
- Perfect for futures (ES, NQ, MNQ), forex, and crypto scalping
Swing Trading
- Focus on 1H, 4H, and Daily FVGs for swing positions
- Identify major support/resistance zones
- Plan entries at untested higher timeframe gaps
Position Trading
- Utilize Daily and Weekly FVGs for long-term positions
- Identify institutional accumulation/distribution zones
- Major reversal points at significant imbalance areas
Multi-Timeframe Confluence Trading
- Stack multiple timeframe FVGs for high-probability zones
- Confirm entries when lower and higher timeframe FVGs align
- Professional edge through timeframe confluence
📚 HOW TO USE THIS INDICATOR
Step 1: Add to Your Chart
Click "Add to Favorites" and apply to any trading instrument - works on all markets including stocks, forex, crypto, futures, and indices.
Step 2: Configure Your Timeframes
In settings, select which timeframes you want to monitor. Day traders might focus on 1m-15m, while swing traders might use 1H-Weekly.
Step 3: Choose Your Visual Theme
Select from three professional themes based on your preference and trading environment.
Step 4: Identify Trading Opportunities
For Long Entries:
- Look for Bullish FVGs (green/cyan zones)
- Wait for price to return to untested zones
- Enter when price shows rejection from the FVG zone
- Higher timeframe FVGs provide stronger support
For Short Entries:
- Look for Bearish FVGs (red/pink zones)
- Wait for price to return to untested zones
- Enter when price shows rejection from the FVG zone
- Higher timeframe FVGs provide stronger resistance
Step 5: Manage Risk
- Place stops beyond the FVG zone
- Use partially filled FVGs as trailing stop levels
- Exit when opposite FVGs form (reversal signal)
🏆 WHY THIS IS THE BEST MTF FVG INDICATOR
✅ Most Comprehensive
- More timeframes than any other FVG indicator
- Advanced features not found elsewhere
- Professional-grade visual presentation
✅ Institutional-Grade
- Based on smart money concepts (SMC)
- ICT (Inner Circle Trader) methodology compatible
- Used by professional prop traders
✅ User-Friendly
- Clean, intuitive interface
- Detailed tooltips and descriptions
- Works out-of-the-box with optimal defaults
✅ Continuously Updated
- Regular improvements and optimizations
- Community feedback incorporated
- Professional development by PineProfits
🔥 PERFECT FOR
- Scalpers seeking quick FVG fills
- Day Traders using multi-timeframe analysis
- Swing Traders identifying major zones
- ICT/SMC Traders following smart money
- Prop Firm Traders needing reliable setups
- Algorithmic Traders building systematic strategies
- Technical Analysts studying market structure
- All Experience Levels from beginners to professionals
💎 ADVANCED TIPS
1. Confluence is Key: The strongest signals occur when multiple timeframe FVGs align at the same price level
2. Fresh vs Tested: Untested FVGs (original color) are stronger than tested ones (gray/muted color)
3. Time of Day: FVGs formed during high-volume sessions (London/NY) are more reliable
4. Trend Alignment: Trade FVGs in the direction of the higher timeframe trend for best results
5. Volume Confirmation: Combine with volume indicators for enhanced reliability
📈 INDICATOR SETTINGS
Visual Settings
- Visual Theme: Choose between Dark Intergalactic, Light Minimal, or Pro Modern
- Show Branding: Toggle PineProfits branding on/off
General Settings
- Move box levels with price touch: Dynamically adjust FVG zones
- Change box color with price touch: Visual feedback for tested zones
- Extend boxes to the right: Project zones into the future
- Plot Timeframe Label: Show origin timeframe on each FVG
- Show FVG Dashboard: Toggle the summary dashboard
Timeframe Selection
Select any combination of 12 available timeframes (1m to Weekly)
🚀 GET STARTED NOW
1. Click "Add to Favorites" to save this indicator
2. Apply to your chart - works on any instrument
3. Join thousands of traders already using this professional tool
4. Follow PineProfits for more institutional-grade indicators
⚖️ DISCLAIMER
This indicator is for educational and informational purposes only. It should not be considered financial advice. Always do your own research and practice proper risk management. Past performance does not guarantee future results. Trade responsibly.
© PineProfits - Professional Trading Tools for Modern Markets
If you find this indicator valuable, please leave a like and comment. Your support helps me create more professional-grade tools for the TradingView community!






















