VWAP CALENDARThe VWAP CALENDAR indicator plots up to 20 anchored Volume-Weighted Average Price (VWAP) lines on your chart, each starting from a user-defined date and time (e.g., April 20, 2024). Designed for simplicity, it helps traders visualize VWAPs for key events or dates, with customizable labels and colors. The indicator is optimized for crypto markets (e.g., BTC/USD) but works with any symbol providing volume data.
Features: Multiple VWAPs: Configure up to 20 independent VWAPs, each with a custom anchor date and time.
Dynamic Labels: Labels update in real-time, aligning precisely with each VWAP line’s price level, positioned to the right of the chart for clarity.
Customizable Settings: Adjust label text (e.g., “Event A”), line colors, line widths (1–5 pixels), text colors, and text sizes (8–40 points, default 22).
Bubble or No-Background Labels: Choose between bubble-style labels (with colored backgrounds) or plain text labels without backgrounds.
Timeframe Support: Accurate on daily, 4-hour, 1-hour, and 30-minute charts for anchors within ~1.5 years (e.g., April 20, 2024, from August 2025).
Limitations: VWAP accuracy for anchors like April 20, 2024 (~477 days back) is reliable on 1-hour and larger timeframes. Below 30-minute (e.g., 15-minute, 24-minute), VWAPs may start later or be unavailable due to TradingView’s 5,000-bar historical data limit. For distant anchors, use 4-hour or daily charts to ensure accuracy.
Requires sufficient chart history (e.g., premium account or deep exchange data) for older anchors on 1-hour or 30-minute charts.
Usage Notes: Set anchor dates via the indicator settings (e.g., “2024-04-20 00:00”).
Enable/disable individual VWAPs as needed.
Zoom out to load maximum chart history for best results, especially on 1-hour or 30-minute timeframes.
Ideal for crypto symbols with continuous trading data, but verify data availability for other markets.
Disclaimer:
This is a free indicator provided as-is.
Cerca negli script per "20蒙古币兑换人民币"
Game Theory Trading StrategyGame Theory Trading Strategy: Explanation and Working Logic
This Pine Script (version 5) code implements a trading strategy named "Game Theory Trading Strategy" in TradingView. Unlike the previous indicator, this is a full-fledged strategy with automated entry/exit rules, risk management, and backtesting capabilities. It uses Game Theory principles to analyze market behavior, focusing on herd behavior, institutional flows, liquidity traps, and Nash equilibrium to generate buy (long) and sell (short) signals. Below, I'll explain the strategy's purpose, working logic, key components, and usage tips in detail.
1. General Description
Purpose: The strategy identifies high-probability trading opportunities by combining Game Theory concepts (herd behavior, contrarian signals, Nash equilibrium) with technical analysis (RSI, volume, momentum). It aims to exploit market inefficiencies caused by retail herd behavior, institutional flows, and liquidity traps. The strategy is designed for automated trading with defined risk management (stop-loss/take-profit) and position sizing based on market conditions.
Key Features:
Herd Behavior Detection: Identifies retail panic buying/selling using RSI and volume spikes.
Liquidity Traps: Detects stop-loss hunting zones where price breaks recent highs/lows but reverses.
Institutional Flow Analysis: Tracks high-volume institutional activity via Accumulation/Distribution and volume spikes.
Nash Equilibrium: Uses statistical price bands to assess whether the market is in equilibrium or deviated (overbought/oversold).
Risk Management: Configurable stop-loss (SL) and take-profit (TP) percentages, dynamic position sizing based on Game Theory (minimax principle).
Visualization: Displays Nash bands, signals, background colors, and two tables (Game Theory status and backtest results).
Backtesting: Tracks performance metrics like win rate, profit factor, max drawdown, and Sharpe ratio.
Strategy Settings:
Initial capital: $10,000.
Pyramiding: Up to 3 positions.
Position size: 10% of equity (default_qty_value=10).
Configurable inputs for RSI, volume, liquidity, institutional flow, Nash equilibrium, and risk management.
Warning: This is a strategy, not just an indicator. It executes trades automatically in TradingView's Strategy Tester. Always backtest thoroughly and use proper risk management before live trading.
2. Working Logic (Step by Step)
The strategy processes each bar (candle) to generate signals, manage positions, and update performance metrics. Here's how it works:
a. Input Parameters
The inputs are grouped for clarity:
Herd Behavior (🐑):
RSI Period (14): For overbought/oversold detection.
Volume MA Period (20): To calculate average volume for spike detection.
Herd Threshold (2.0): Volume multiplier for detecting herd activity.
Liquidity Analysis (💧):
Liquidity Lookback (50): Bars to check for recent highs/lows.
Liquidity Sensitivity (1.5): Volume multiplier for trap detection.
Institutional Flow (🏦):
Institutional Volume Multiplier (2.5): For detecting large volume spikes.
Institutional MA Period (21): For Accumulation/Distribution smoothing.
Nash Equilibrium (⚖️):
Nash Period (100): For calculating price mean and standard deviation.
Nash Deviation (0.02): Multiplier for equilibrium bands.
Risk Management (🛡️):
Use Stop-Loss (true): Enables SL at 2% below/above entry price.
Use Take-Profit (true): Enables TP at 5% above/below entry price.
b. Herd Behavior Detection
RSI (14): Checks for extreme conditions:
Overbought: RSI > 70 (potential herd buying).
Oversold: RSI < 30 (potential herd selling).
Volume Spike: Volume > SMA(20) x 2.0 (herd_threshold).
Momentum: Price change over 10 bars (close - close ) compared to its SMA(20).
Herd Signals:
Herd Buying: RSI > 70 + volume spike + positive momentum = Retail buying frenzy (red background).
Herd Selling: RSI < 30 + volume spike + negative momentum = Retail selling panic (green background).
c. Liquidity Trap Detection
Recent Highs/Lows: Calculated over 50 bars (liquidity_lookback).
Psychological Levels: Nearest round numbers (e.g., $100, $110) as potential stop-loss zones.
Trap Conditions:
Up Trap: Price breaks recent high, closes below it, with a volume spike (volume > SMA x 1.5).
Down Trap: Price breaks recent low, closes above it, with a volume spike.
Visualization: Traps are marked with small red/green crosses above/below bars.
d. Institutional Flow Analysis
Volume Check: Volume > SMA(20) x 2.5 (inst_volume_mult) = Institutional activity.
Accumulation/Distribution (AD):
Formula: ((close - low) - (high - close)) / (high - low) * volume, cumulated over time.
Smoothed with SMA(21) (inst_ma_length).
Accumulation: AD > MA + high volume = Institutions buying.
Distribution: AD < MA + high volume = Institutions selling.
Smart Money Index: (close - open) / (high - low) * volume, smoothed with SMA(20). Positive = Smart money buying.
e. Nash Equilibrium
Calculation:
Price mean: SMA(100) (nash_period).
Standard deviation: stdev(100).
Upper Nash: Mean + StdDev x 0.02 (nash_deviation).
Lower Nash: Mean - StdDev x 0.02.
Conditions:
Near Equilibrium: Price between upper and lower Nash bands (stable market).
Above Nash: Price > upper band (overbought, sell potential).
Below Nash: Price < lower band (oversold, buy potential).
Visualization: Orange line (mean), red/green lines (upper/lower bands).
f. Game Theory Signals
The strategy generates three types of signals, combined into long/short triggers:
Contrarian Signals:
Buy: Herd selling + (accumulation or down trap) = Go against retail panic.
Sell: Herd buying + (distribution or up trap).
Momentum Signals:
Buy: Below Nash + positive smart money + no herd buying.
Sell: Above Nash + negative smart money + no herd selling.
Nash Reversion Signals:
Buy: Below Nash + rising close (close > close ) + volume > MA.
Sell: Above Nash + falling close + volume > MA.
Final Signals:
Long Signal: Contrarian buy OR momentum buy OR Nash reversion buy.
Short Signal: Contrarian sell OR momentum sell OR Nash reversion sell.
g. Position Management
Position Sizing (Minimax Principle):
Default: 1.0 (10% of equity).
In Nash equilibrium: Reduced to 0.5 (conservative).
During institutional volume: Increased to 1.5 (aggressive).
Entries:
Long: If long_signal is true and no existing long position (strategy.position_size <= 0).
Short: If short_signal is true and no existing short position (strategy.position_size >= 0).
Exits:
Stop-Loss: If use_sl=true, set at 2% below/above entry price.
Take-Profit: If use_tp=true, set at 5% above/below entry price.
Pyramiding: Up to 3 concurrent positions allowed.
h. Visualization
Nash Bands: Orange (mean), red (upper), green (lower).
Background Colors:
Herd buying: Red (90% transparency).
Herd selling: Green.
Institutional volume: Blue.
Signals:
Contrarian buy/sell: Green/red triangles below/above bars.
Liquidity traps: Red/green crosses above/below bars.
Tables:
Game Theory Table (Top-Right):
Herd Behavior: Buying frenzy, selling panic, or normal.
Institutional Flow: Accumulation, distribution, or neutral.
Nash Equilibrium: In equilibrium, above, or below.
Liquidity Status: Trap detected or safe.
Position Suggestion: Long (green), Short (red), or Wait (gray).
Backtest Table (Bottom-Right):
Total Trades: Number of closed trades.
Win Rate: Percentage of winning trades.
Net Profit/Loss: In USD, colored green/red.
Profit Factor: Gross profit / gross loss.
Max Drawdown: Peak-to-trough equity drop (%).
Win/Loss Trades: Number of winning/losing trades.
Risk/Reward Ratio: Simplified Sharpe ratio (returns / drawdown).
Avg Win/Loss Ratio: Average win per trade / average loss per trade.
Last Update: Current time.
i. Backtesting Metrics
Tracks:
Total trades, winning/losing trades.
Win rate (%).
Net profit ($).
Profit factor (gross profit / gross loss).
Max drawdown (%).
Simplified Sharpe ratio (returns / drawdown).
Average win/loss ratio.
Updates metrics on each closed trade.
Displays a label on the last bar with backtest period, total trades, win rate, and net profit.
j. Alerts
No explicit alertconditions defined, but you can add them for long_signal and short_signal (e.g., alertcondition(long_signal, "GT Long Entry", "Long Signal Detected!")).
Use TradingView's alert system with Strategy Tester outputs.
3. Usage Tips
Timeframe: Best for H1-D1 timeframes. Shorter frames (M1-M15) may produce noisy signals.
Settings:
Risk Management: Adjust sl_percent (e.g., 1% for volatile markets) and tp_percent (e.g., 3% for scalping).
Herd Threshold: Increase to 2.5 for stricter herd detection in choppy markets.
Liquidity Lookback: Reduce to 20 for faster markets (e.g., crypto).
Nash Period: Increase to 200 for longer-term analysis.
Backtesting:
Use TradingView's Strategy Tester to evaluate performance.
Check win rate (>50%), profit factor (>1.5), and max drawdown (<20%) for viability.
Test on different assets/timeframes to ensure robustness.
Live Trading:
Start with a demo account.
Combine with other indicators (e.g., EMAs, support/resistance) for confirmation.
Monitor liquidity traps and institutional flow for context.
Risk Management:
Always use SL/TP to limit losses.
Adjust position_size for risk tolerance (e.g., 5% of equity for conservative trading).
Avoid over-leveraging (pyramiding=3 can amplify risk).
Troubleshooting:
If no trades are executed, check signal conditions (e.g., lower herd_threshold or liquidity_sensitivity).
Ensure sufficient historical data for Nash and liquidity calculations.
If tables overlap, adjust position.top_right/bottom_right coordinates.
4. Key Differences from the Previous Indicator
Indicator vs. Strategy: The previous code was an indicator (VP + Game Theory Integrated Strategy) focused on visualization and alerts. This is a strategy with automated entries/exits and backtesting.
Volume Profile: Absent in this strategy, making it lighter but less focused on high-volume zones.
Wick Analysis: Not included here, unlike the previous indicator's heavy reliance on wick patterns.
Backtesting: This strategy includes detailed performance metrics and a backtest table, absent in the indicator.
Simpler Signals: Focuses on Game Theory signals (contrarian, momentum, Nash reversion) without the "Power/Ultra Power" hierarchy.
Risk Management: Explicit SL/TP and dynamic position sizing, not present in the indicator.
5. Conclusion
The "Game Theory Trading Strategy" is a sophisticated system leveraging herd behavior, institutional flows, liquidity traps, and Nash equilibrium to trade market inefficiencies. It’s designed for traders who understand Game Theory principles and want automated execution with robust risk management. However, it requires thorough backtesting and parameter optimization for specific markets (e.g., forex, crypto, stocks). The backtest table and visual aids make it easy to monitor performance, but always combine with other analysis tools and proper capital management.
If you need help with backtesting, adding alerts, or optimizing parameters, let me know!
SMAs Ghost in the Machine v3SMAs Ghost in the Machine v3
Created by: MecarderoAurum
Overview
The "SMAs Ghost in the Machine" is a powerful multi-timeframe analysis tool designed for traders who want to align their entries and exits with the trend on several different chart periods simultaneously. At its core, the indicator plots the 9-period and 20-period Simple Moving Averages (SMAs) from up to three user-defined timeframes directly onto your active chart.
Its most powerful feature is the Combined Crossover Signal, which allows you to create highly specific, custom trading setups by defining conditions that must occur at the same time across any of the enabled timeframes. This eliminates guesswork and helps you visually confirm when your precise market conditions are met.
Important Note on Line Drawing
This indicator allows you to see trends of other timeframes. A specific design choice was made not to smooth the moving average lines. This is to ensure that the crossover signals appear on the exact candle where the cross occurs in real-time. Smoothing the lines can cause a delay and shift the signal to a later candle.
The side effect of this accuracy is that the lines will appear "stepped." As new data comes in on your current chart, you may need to refresh the chart to keep the higher timeframe lines updated. We are working on a solution to this.
Capabilities
Multi-Timeframe Analysis: Plot the 9 and 20 SMAs from three different timeframes (e.g., 1-minute, 5-minute, and 30-minute) on a single chart.
Individual Crossover Signals: Automatically plots a green triangle (▲) for a "Golden Cross" (9 SMA crosses above 20) and a red triangle (▼) for a "Death Cross" (9 SMA crosses below 20) on each individual timeframe.
Combined Crossover Engine: Define a custom bullish or bearish signal by combining multiple events. The indicator will plot a green diamond (◆) for your bullish setup and a red diamond (◆) for your bearish setup when all specified conditions are met on the same candle.
Customizable Alerts: Create alerts for both the individual 9/20 SMA crosses and your custom Combined Crossover Signal to ensure you never miss a potential setup.
How to Use the Indicator
Basic Setup
Add the "SMAs Ghost in the Machine v3" indicator to your TradingView chart.
Open the indicator settings.
Under the Timeframe Settings, enable the timeframes you want to monitor and select the desired period for each (e.g., TF1: '1', TF2: '5', TF3: '30').
Configuring the Combined Crossover Signal
This is the core feature for defining your specific trading setups.
In the settings, go to the "Combined Crossover Signal" group and check the box to "Enable Combined Signal."
Decide if you are building a bullish (long) or bearish (short) setup.
Under the "Bullish Setup" or "Bearish Setup" sections, check the boxes for every event that must happen at the same time for your signal to trigger.
Example Bullish Setup:
Let's say your strategy is to go long when:
On the 1-minute chart (TF1), the price crosses above the 9 SMA.
AND, on the 5-minute chart (TF3), the price also crosses above its 9 SMA.
To configure this, you would check the following two boxes under the "Bullish Setup":
TF1: Price crosses above 9 SMA
TF3: Price crosses above 9 SMA
Now, a green diamond (◆) will only appear on your chart when both of those conditions are true on the exact same bar, giving you a precise entry signal.
Setting Up Alerts
Go to the "Alert Settings" tab in the indicator options.
Check the boxes for the alerts you want to enable (e.g., "Alert on TF1 SMA Cross," "Alert on Combined Signal").
Close the settings. Now, right-click on the chart and choose "Add alert."
In the "Condition" dropdown, select "SMA Ghosts v3."
A second dropdown will appear. Choose the specific event you want an alert for, such as Combined Bullish Signal or TF1 Golden Cross.
Configure the alert options as desired and click "Create."
Trading Strategies
Trend Confirmation: Use the indicator on a 1-minute chart with the 5-minute 9/20 SMA lines enabled to see the 5-minute trend. Only take 1-minute trades that are in the same direction as the 5-minute SMAs.
Multi-Flow Alignment: Keep track of bigger timeframes (like the 30-min or 4-hour) to also match your entries with longer-term market flows.
Avoid Flat Markets: Avoid taking trades when the SMA lines from multiple timeframes are flat or moving sideways, as this indicates a lack of clear trend.
Multi-Timeframe EMA Alignment + Listing InfoEnhanced EMA Alignment Checks
Original 4-EMA rows: Check 10EMA ≥ 20EMA ≥ 50EMA ≥ 200EMA for all timeframes
New 3-EMA rows: Check 10EMA ≥ 20EMA ≥ 50EMA (without 200EMA requirement) for weekly and monthly timeframes
Visual Distinction
White background: 4-EMA alignment rows (standard check)
Yellow background: 3-EMA alignment rows (less restrictive check)
Asterisk notation: "1W*" and "1M*" indicate the 3-EMA version
Complete Table Layout
1H: 4-EMA alignment (10≥20≥50≥200)
1D: 4-EMA alignment (10≥20≥50≥200)
1W: 4-EMA alignment (10≥20≥50≥200)
1M: 4-EMA alignment (10≥20≥50≥200)
1W* : 3-EMA alignment (10≥20≥50) - NEW
1M* : 3-EMA alignment (10≥20≥50) - NEW
Separator line
Since List: Weeks/months since listing
Benefits of This Setup:
Comprehensive Analysis: You can now see both strict (4-EMA) and relaxed (3-EMA) trend conditions
Better Entry Signals: The 3-EMA alignment might trigger earlier than 4-EMA, providing potential early entry signals
Trend Strength Assessment: When both 3-EMA and 4-EMA are aligned, it indicates very strong trend conditions
Flexible Strategy: You can use 3-EMA for trend following and 4-EMA for confirmation
The table now provides a complete multi-timeframe trend analysis with both conservative and aggressive alignment criteria, giving you more flexibility in your trading decisions.
Market Matrix ViewThis technical indicator is designed to provide traders with a quick and integrated view of market dynamics by combining several popular indicators into a single tool. It's not a magic bullet, but a practical aid for analyzing buying/selling pressure, trends, volume, and divergences, saving you time in the decision-making process. Built for flexibility, the indicator adapts to various trading styles (scalping, swing, or long-term) and offers customizable settings to suit your needs.
🟡 Multi-Timeframe Trends
➤ This section displays the trend direction (bullish, bearish, or neutral) across 15-minute, 1-hour, 4-hour, and Daily timeframes, providing multi-timeframe market context. Timeframes lower than the one currently selected will show "N/A."
➤It utilizes fast and slow Exponential Moving Averages (EMAs) for each timeframe:
15m: Fast EMA 42, Slow EMA 170
1h: Fast EMA 40, Slow EMA 100
4h: Fast EMA 36, Slow EMA 107
Daily: Fast EMA 20, Slow EMA 60
🟡 Smart Flow & RVOL
➤ This section displays "Buying Pressure" or "Selling Pressure" signals based on indicator confluence, alongside volume activity ("High Activity," "Normal Activity," or "Low Activity").
➤ Smart Flow combines Chaikin Money Flow (CMF) and Money Flow Index (MFI) to detect buying/selling pressure. CMF measures money flow based on price position within the high-low range, while MFI analyzes money flow considering typical price and volume. A signal is generated only when both indicators simultaneously increase/decrease beyond an adjustable threshold ("Buy/Sell Sensitivity") and volume exceeds a Simple Moving Average (SMA) scaled by the "Volume Multiplier."
➤ RVOL (Relative Volume) calculates relative volume separately for bullish and bearish candles, comparing recent volume (fast SMA) with a reference volume (slow SMA). Thresholds are adjusted based on the selected mode.
🟡 ADX & RSI
This section displays trend strength ("Strong," "Moderate," or "Weak"), its direction ("Bullish" or "Bearish"), and the RSI momentum status ("Overbought," "Oversold," "Buy/Sell Momentum," or "Neutral").
➤ ADX (Average Directional Index) measures trend strength (above 40 = "Strong," 20–40 = "Moderate," below 20 = "Weak"). Direction is determined by comparing +DI (upward movement) with -DI (downward movement). Additionally, an arrow indicates whether the trend's strength is decreasing or increasing.
➤RSI (Relative Strength Index) evaluates price momentum. Extreme levels (above 80/85 = "Overbought," below 15/20 = "Oversold") and intermediate zones (47–53 = "Neutral," above 53 = "Buy Momentum," below 47 = "Sell Momentum") are adjusted based on the selected mode.
🟡 When these signals are active for a potential trade setup, the table's background lights up green or red, respectively.
🟡 Volume Spikes
➤This feature highlights bars with significantly higher volume than the recent average, coloring them yellow on the chart to draw attention to intense market activity.
➤It uses the Z-Score method to detect volume anomalies. Current volume is compared to a 10-bar Simple Moving Average (SMA) and the standard deviation of volume over the same period. If the Z-Score exceeds a certain threshold, the bar is marked as a volume spike.
🟡 Divergences (Volume Divergence Detection)
➤ This feature marks divergences between price and technical indicators on the chart, using diamond-shaped labels (green for bullish divergences, red for bearish divergences) to signal potential trend reversals.
➤ It compares price deviations from a Simple Moving Average (SMA) with deviations of three indicators: Chaikin Money Flow (CMF), Money Flow Index (MFI), and On-Balance Volume (OBV). A bullish divergence occurs when price falls below its average, but CMF, MFI, and OBV rise above their averages, indicating hidden accumulation. A bearish divergence occurs when price rises above its average, but CMF, MFI, and OBV fall, suggesting distribution. The length of the moving averages is adjustable (default 13/10/5 bars for Scalping/Balanced/Swing), and detection thresholds are scaled by "Divergence Sensitivity" (default 1.0).
🟡 Adaptive Stop-Loss (ATR)
➤Draws dynamic stop-loss lines (red, dashed) on the chart for buy or sell signals, helping traders manage risk.Uses the Average True Range (ATR) to calculate stop-loss levels, set at low/high ± ATR × multiplier
🟡 Alerts for trend direction changes in the Info Panel:
➤ Triggers notifications when the trend shifts to Bullish (when +DI crosses above -DI) or Bearish (when +DI crosses below -DI), helping you stay informed about key market shifts.
How to use: Set alerts in Trading View for “Trend Changed to Bullish” or “Trend Changed to Bearish” with “Once Per Bar Close” for reliable signals.
🟡 Settings (Inputs)
➤ The indicator offers customizable settings to fit your trading style, but it's already optimized for Scalping (1m–15m), Balanced (16m–3h59m), and Swing (4h–Daily) modes, which automatically adjust based on the selected timeframe. The visible inputs allow you to adjust the following parameters:
Show Info Panel: Enables/disables the information panel (default: enabled).
Show Volume Spikes: Turns on/off coloring for volume spike bars (default: enabled).
Spike Sensitivity: Controls the Z-Score threshold for detecting volume spikes (default: 2.0; lower values increase signal frequency).
Show Divergence: Enables/disables the display of divergence labels (default: enabled).
Divergence Sensitivity: Adjusts the thresholds for divergence detection (default: 1.0; higher values reduce sensitivity).
Divergence Lookback Length: Sets the length of the moving averages used for divergences (default: 5, automatically adjusted to 13/10/5 for Scalping/Balanced/Swing).
RVOL Reference Period: Defines the reference period for relative volume (default: 20, automatically adjusted to 7/15/20).
RSI Length: Sets the RSI length (default: 14, automatically adjusted to 5/10/14).
Buy Sensitivity: Controls the increase threshold for Buying Pressure signals (default: 0.007; higher values reduce frequency).
Sell Sensitivity: Controls the decrease threshold for Selling Pressure signals (default: 0.007; higher values reduce frequency).
Volume Multiplier (B/S Pressure): Adjusts the volume threshold for Smart Flow signals (default: 0.6; higher values require greater volume).
🟡 This indicator is created to simplify market analysis, but I am not a professional in Pine Script or technical indicators. This indicator is not a standalone solution. For optimal results, it must be integrated into a well-defined trading strategy that includes risk management and other confirmations.
BTC Mining Income Oscillator Z-ScoreBTC Mining Income Oscillator (Z-Score)
Overview
The BTC Mining Income Oscillator (Z-Score) is a custom technical indicator that analyzes Bitcoin mining income to help traders identify overbought and oversold conditions. The indicator uses a Z-Score to track deviations in mining income, highlighting periods of high or low mining profitability.
This indicator is made up of:
Z-Score Line (Blue): Measures how far the current mining income deviates from its historical mean.
Mining Income Oscillator (Orange): A scaled value of mining income that oscillates within a specific range to indicate overbought and oversold conditions.
How the Indicator Works
1. Mining Income Calculation
The BTC Mining Income is determined using two main factors:
Block Reward: The number of BTC miners earn for each block mined (currently 3.125 BTC, adjustable in settings).
Transaction Fees: The average transaction fees per block (default is 0.3 BTC).
Blocks per Day: The number of blocks mined per day (default is 144).
The daily mining income in BTC is calculated as:
Mining Income
=
(
Block Reward
+
Transaction Fees
)
×
Blocks per Day
Mining Income=(Block Reward+Transaction Fees)×Blocks per Day
This value is then converted to USD by multiplying it by the current Bitcoin price.
2. Z-Score Calculation
The Z-Score measures how far the current mining income deviates from its mean over a set period (default is 90 days). The Z-Score helps identify when mining income is unusually high or low:
A high Z-Score indicates that the mining income is significantly above the historical mean, signaling overbought conditions.
A low Z-Score indicates that the mining income is significantly below the historical mean, signaling oversold conditions.
The Z-Score is calculated as follows:
Z-Score
=
(
Current Mining Income
−
Mean Income
)
Standard Deviation
Z-Score=
Standard Deviation
(Current Mining Income−Mean Income)
The result is then smoothed over a period (default is 5) to reduce noise and provide a more stable value.
3. Mining Income Oscillator
The mining income is scaled to oscillate between +20 and +90. This oscillation makes it easy to track overbought and oversold conditions in the market:
Values between 85 and 90 indicate overbought conditions (high mining profitability).
Values between 20 and 22 indicate oversold conditions (low mining profitability).
Values between 22 and 85 indicate neutral conditions, where mining profitability is normal.
The mining income oscillator helps traders spot extreme conditions (overbought or oversold) in mining profitability.
How to Read the Indicator
1. Z-Score Line (Blue)
The Z-Score represents how far current mining income is from the historical average.
Above +2: The mining income is unusually high, indicating an overbought market.
Below -2: The mining income is unusually low, indicating an oversold market.
Between -2 and +2: This range is neutral, where the mining income is within the average historical range.
2. Mining Income Oscillator (Orange)
The Mining Income Oscillator is scaled between 20 and 90.
85–90: Overbought conditions, indicating high mining profitability.
20–22: Oversold conditions, indicating low mining profitability.
22–85: Neutral conditions, indicating moderate mining profitability.
3. Background Shading
Red Shading (85–90): Indicates overbought conditions (mining income is unusually high).
Green Shading (20–22): Indicates oversold conditions (mining income is unusually low).
The shaded regions provide a visual guide to spot periods when the market is overbought or oversold.
4. Key Horizontal Lines
0 Line: Represents the neutral level for the Z-Score, where the mining income is at the historical mean.
+2 and -2 Lines: Indicate overbought and oversold conditions for the Z-Score.
90 and 20 Lines: Indicate the upper and lower bounds for the mining income oscillator.
Where the Data Comes From
Bitcoin Price: The current Bitcoin price is pulled directly from the chart.
Block Reward and Transaction Fees: These values are set manually by the user or can be updated dynamically.
Mining Income: Calculated based on the block reward, transaction fees, and current Bitcoin price.
Z-Score and Oscillator Calculations: Both are calculated based on mining income in USD over a defined look-back period.
Best Timeframe for This Indicator
This indicator is designed to work best on the 2-day chart (2D) timeframe. On the 2-day chart, the mining income data, Z-Score, and the oscillator are less sensitive to noise and short-term volatility, providing more reliable signals. While it can be used on other timeframes, the 2-day chart offers the clearest and most stable analysis.
ADR% Extension Levels from SMA 50I created this indicator inspired by RealSimpleAriel (a swing trader I recommend following on X) who does not buy stocks extended beyond 4 ADR% from the 50 SMA and uses extensions from the 50 SMA at 7-8-9-10-11-12-13 ADR% to take profits with a 20% position trimming.
RealSimpleAriel's strategy (as I understood it):
-> Focuses on leading stocks from leading groups and industries, i.e., those that have grown the most in the last 1-3-6 months (see on Finviz groups and then select sector-industry).
-> Targets stocks with the best technical setup for a breakout, above the 200 SMA in a bear market and above both the 50 SMA and 200 SMA in a bull market, selecting those with growing Earnings and Sales.
-> Buys stocks on breakout with a stop loss set at the day's low of the breakout and ensures they are not extended beyond 4 ADR% from the 50 SMA.
-> 3-5 day momentum burst: After a breakout, takes profits by selling 1/2 or 1/3 of the position after a 3-5 day upward move.
-> 20% trimming on extension from the 50 SMA: At 7 ADR% (ADR% calculated over 20 days) extension from the 50 SMA, takes profits by selling 20% of the remaining position. Continues to trim 20% of the remaining position based on the stock price extension from the 50 SMA, calculated using the 20-period ADR%, thus trimming 20% at 8-9-10-11 ADR% extension from the 50 SMA. Upon reaching 12-13 ADR% extension from the 50 SMA, considers the stock overextended, closes the remaining position, and evaluates a short.
-> Trailing stop with ascending SMA: Uses a chosen SMA (10, 20, or 50) as the definitive stop loss for the position, depending on the stock's movement speed (preferring larger SMAs for slower-moving stocks or for long-term theses). If the stock's closing price falls below the chosen SMA, the entire position is closed.
In summary:
-->Buy a breakout using the day's low of the breakout as the stop loss (this stop loss is the most critical).
--> Do not buy stocks extended beyond 4 ADR% from the 50 SMA.
--> Sell 1/2 or 1/3 of the position after 3-5 days of upward movement.
--> Trim 20% of the position at each 7-8-9-10-11-12-13 ADR% extension from the 50 SMA.
--> Close the entire position if the breakout fails and the day's low of the breakout is reached.
--> Close the entire position if the price, during the rise, falls below a chosen SMA (10, 20, or 50, depending on your preference).
--> Definitively close the position if it reaches 12-13 ADR% extension from the 50 SMA.
I used Grok from X to create this indicator. I am not a programmer, but based on the ADR% I use, it works.
Below is Grok from X's description of the indicator:
Script Description
The script is a custom indicator for TradingView that displays extension levels based on ADR% relative to the 50-period Simple Moving Average (SMA). Below is a detailed description of its features, structure, and behavior:
1. Purpose of the Indicator
Name: "ADR% Extension Levels from SMA 50".
Objective: Draw horizontal blue lines above and below the 50-period SMA, corresponding to specific ADR% multiples (4, 7, 8, 9, 10, 11, 12, 13). These levels represent potential price extension zones based on the average daily percentage volatility.
Overlay: The indicator is overlaid on the price chart (overlay=true), so the lines and SMA appear directly on the price graph.
2. Configurable Inputs
The indicator allows users to customize parameters through TradingView settings:
SMA Length (smaLength):
Default: 50 periods.
Description: Specifies the number of periods for calculating the Simple Moving Average (SMA). The 50-period SMA serves as the reference point for extension levels.
Constraint: Minimum 1 period.
ADR% Length (adrLength):
Default: 20 periods.
Description: Specifies the number of days to calculate the moving average of the daily high/low ratio, used to determine ADR%.
Constraint: Minimum 1 period.
Scale Factor (scaleFactor):
Default: 1.0.
Description: An optional multiplier to adjust the distance of extension levels from the SMA. Useful if levels are too close or too far due to an overly small or large ADR%.
Constraint: Minimum 0.1, increments of 0.1.
Tooltip: "Adjust if levels are too close or far from SMA".
3. Main Calculations
50-period SMA:
Calculated with ta.sma(close, smaLength) using the closing price (close).
Serves as the central line around which extension levels are drawn.
ADR% (Average Daily Range Percentage):
Formula: 100 * (ta.sma(dhigh / dlow, adrLength) - 1).
Details:
dhigh and dlow are the daily high and low prices, obtained via request.security(syminfo.tickerid, "D", high/low) to ensure data is daily-based, regardless of the chart's timeframe.
The dhigh / dlow ratio represents the daily percentage change.
The simple moving average (ta.sma) of this ratio over 20 days (adrLength) is subtracted by 1 and multiplied by 100 to obtain ADR% as a percentage.
The result is multiplied by scaleFactor for manual adjustments.
Extension Levels:
Defined as ADR% multiples: 4, 7, 8, 9, 10, 11, 12, 13.
Stored in an array (levels) for easy iteration.
For each level, prices above and below the SMA are calculated as:
Above: sma50 * (1 + (level * adrPercent / 100))
Below: sma50 * (1 - (level * adrPercent / 100))
These represent price levels corresponding to a percentage change from the SMA equal to level * ADR%.
4. Visualization
Horizontal Blue Lines:
For each level (4, 7, 8, 9, 10, 11, 12, 13 ADR%), two lines are drawn:
One above the SMA (e.g., +4 ADR%).
One below the SMA (e.g., -4 ADR%).
Color: Blue (color.blue).
Style: Solid (style=line.style_solid).
Management:
Each level has dedicated variables for upper and lower lines (e.g., upperLine1, lowerLine1 for 4 ADR%).
Previous lines are deleted with line.delete before drawing new ones to avoid overlaps.
Lines are updated at each bar with line.new(bar_index , level, bar_index, level), covering the range from the previous bar to the current one.
Labels:
Displayed only on the last bar (barstate.islast) to avoid clutter.
For each level, two labels:
Above: E.g., "4 ADR%", positioned above the upper line (style=label.style_label_down).
Below: E.g., "-4 ADR%", positioned below the lower line (style=label.style_label_up).
Color: Blue background, white text.
50-period SMA:
Drawn as a gray line (color.gray) for visual reference.
Diagnostics:
ADR% Plot: ADR% is plotted in the status line (orange, histogram style) to verify the value.
ADR% Label: A label on the last bar near the SMA shows the exact ADR% value (e.g., "ADR%: 2.34%"), with a gray background and white text.
5. Behavior
Dynamic Updating:
Lines update with each new bar to reflect new SMA 50 and ADR% values.
Since ADR% uses daily data ("D"), it remains constant within the same day but changes day-to-day.
Visibility Across All Bars:
Lines are drawn on every bar, not just the last one, ensuring visibility on historical data as well.
Adaptability:
The scaleFactor allows level adjustments if ADR% is too small (e.g., for low-volatility symbols) or too large (e.g., for cryptocurrencies).
Compatibility:
Works on any timeframe since ADR% is calculated from daily data.
Suitable for symbols with varying volatility (e.g., stocks, forex, cryptocurrencies).
6. Intended Use
Technical Analysis: Extension levels represent significant price zones based on average daily volatility. They can be used to:
Identify potential price targets (e.g., take profit at +7 ADR%).
Assess support/resistance zones (e.g., -4 ADR% as support).
Measure price extension relative to the 50 SMA.
Trading: Useful for strategies based on breakouts or mean reversion, where ADR% levels indicate reversal or continuation points.
Debugging: Labels and ADR% plot help verify that values align with the symbol’s volatility.
7. Limitations
Dependence on Daily Data: ADR% is based on daily dhigh/dlow, so it may not reflect intraday volatility on short timeframes (e.g., 1 minute).
Extreme ADR% Values: For low-volatility symbols (e.g., bonds) or high-volatility symbols (e.g., meme stocks), ADR% may require adjustments via scaleFactor.
Graphical Load: Drawing 16 lines (8 upper, 8 lower) on every bar may slow the chart for very long historical periods, though line management is optimized.
ADR% Formula: The formula 100 * (sma(dhigh/dlow, Length) - 1) may produce different values compared to other ADR% definitions (e.g., (high - low) / close * 100), so users should be aware of the context.
8. Visual Example
On a chart of a stock like TSLA (daily timeframe):
The 50 SMA is a gray line tracking the average trend.
Assuming an ADR% of 3%:
At +4 ADR% (12%), a blue line appears at sma50 * 1.12.
At -4 ADR% (-12%), a blue line appears at sma50 * 0.88.
Other lines appear at ±7, ±8, ±9, ±10, ±11, ±12, ±13 ADR%.
On the last bar, labels show "4 ADR%", "-4 ADR%", etc., and a gray label shows "ADR%: 3.00%".
ADR% is visible in the status line as an orange histogram.
9. Code: Technical Structure
Language: Pine Script @version=5.
Inputs: Three configurable parameters (smaLength, adrLength, scaleFactor).
Calculations:
SMA: ta.sma(close, smaLength).
ADR%: 100 * (ta.sma(dhigh / dlow, adrLength) - 1) * scaleFactor.
Levels: sma50 * (1 ± (level * adrPercent / 100)).
Graphics:
Lines: Created with line.new, deleted with line.delete to avoid overlaps.
Labels: Created with label.new only on the last bar.
Plots: plot(sma50) for the SMA, plot(adrPercent) for debugging.
Optimization: Uses dedicated variables for each line (e.g., upperLine1, lowerLine1) for clear management and to respect TradingView’s graphical object limits.
10. Possible Improvements
Option to show lines only on the last bar: Would reduce visual clutter.
Customizable line styles: Allow users to choose color or style (e.g., dashed).
Alert for anomalous ADR%: A message if ADR% is too small or large.
Dynamic levels: Allow users to specify ADR% multiples via input.
Optimization for short timeframes: Adapt ADR% for intraday timeframes.
Conclusion
The script creates a visual indicator that helps traders identify price extension levels based on daily volatility (ADR%) relative to the 50 SMA. It is robust, configurable, and includes debugging tools (ADR% plot and labels) to verify values. The ADR% formula based on dhigh/dlow
Bullish and Bearish Breakout Alert for Gold Futures PullbackBelow is a Pine Script (version 6) for TradingView that includes both bullish and bearish breakout conditions for my intraday trading strategy on micro gold futures (MGC). The strategy focuses on scalping two-legged pullbacks to the 20 EMA or key levels with breakout confirmation, tailored for the Apex Trader Funding $300K challenge. The script accounts for the Daily Sentiment Index (DSI) at 87 (overbought, favoring pullbacks). It generates alerts for placing stop-limit orders for 175 MGC contracts, ensuring compliance with Apex’s rules ($7,500 trailing threshold, $20,000 profit target, 4:59 PM ET close).
Script Requirements
Version: Pine Script v6 (latest for TradingView, April 2025).
Purpose:
Bullish: Alert when price breaks above a rejection candle’s high after a two-legged pullback to the 20 EMA in a bullish trend (price above 20 EMA, VWAP, higher highs/lows).
Bearish: Alert when price breaks below a rejection candle’s low after a two-legged pullback to the 20 EMA in a bearish trend (price below 20 EMA, VWAP, lower highs/lows).
Context: 5-minute MGC chart, U.S. session (8:30 AM–12:00 PM ET), avoiding overbought breakouts above $3,450 (DSI 87).
Output: Alerts for stop-limit orders (e.g., “Buy: Stop=$3,377, Limit=$3,377.10” or “Sell: Stop=$3,447, Limit=$3,446.90”), quantity 175 MGC.
Apex Compliance: 175-contract limit, stop-losses, one-directional news trading, close by 4:59 PM ET.
How to Use the Script in TradingView
1. Add Script:
Open TradingView (tradingview.com).
Go to “Pine Editor” (bottom panel).
Copy the script from the content.
Click “Add to Chart” to apply to your MGC 5-minute chart .
2. Configure Chart:
Symbol: MGC (Micro Gold Futures, CME, via Tradovate/Apex data feed).
Timeframe: 5-minute (entries), 15-minute (trend confirmation, manually check).
Indicators: Script plots 20 EMA and VWAP; add RSI (14) and volume manually if needed .
3. Set Alerts:
Click the “Alert” icon (bell).
Add two alerts:
Bullish Breakout: Condition = “Bullish Breakout Alert for Gold Futures Pullback,” trigger = “Once Per Bar Close.”
Bearish Breakout: Condition = “Bearish Breakout Alert for Gold Futures Pullback,” trigger = “Once Per Bar Close.”
Customize messages (default provided) and set notifications (e.g., TradingView app, SMS).
Example: Bullish alert at $3,377 prompts “Stop=$3,377, Limit=$3,377.10, Quantity=175 MGC” .
4. Execute Orders:
Bullish:
Alert triggers (e.g., stop $3,377, limit $3,377.10).
In TradingView’s “Order Panel,” select “Stop-Limit,” set:
Stop Price: $3,377.
Limit Price: $3,377.10.
Quantity: 175 MGC.
Direction: Buy.
Confirm via Tradovate.
Add bracket order (OCO):
Stop-loss: Sell 175 at $3,376.20 (8 ticks, $1,400 risk).
Take-profit: Sell 87 at $3,378 (1:1), 88 at $3,379 (2:1) .
Bearish:
Alert triggers (e.g., stop $3,447, limit $3,446.90).
Select “Stop-Limit,” set:
Stop Price: $3,447.
Limit Price: $3,446.90.
Quantity: 175 MGC.
Direction: Sell.
Confirm via Tradovate.
Add bracket order:
Stop-loss: Buy 175 at $3,447.80 (8 ticks, $1,400 risk).
Take-profit: Buy 87 at $3,446 (1:1), 88 at $3,445 (2:1) .
5. Monitor:
Green triangles (bullish) or red triangles (bearish) confirm signals.
Avoid bullish entries above $3,450 (DSI 87, overbought) or bearish entries below $3,296 (support) .
Close trades by 4:59 PM ET (set 4:50 PM alert) .
ICT Bread and Butter Sell-SetupICT Bread and Butter Sell-Setup – TradingView Strategy
Overview:
The ICT Bread and Butter Sell-Setup is an intraday trading strategy designed to capitalize on bearish market conditions. It follows institutional order flow and exploits liquidity patterns within key trading sessions—London, New York, and Asia—to identify high-probability short entries.
Key Components of the Strategy:
🔹 London Open Setup (2:00 AM – 8:20 AM NY Time)
The London session typically sets the initial directional move of the day.
A short-term high often forms before a downward push, establishing the daily high.
🔹 New York Open Kill Zone (8:20 AM – 10:00 AM NY Time)
The New York Judas Swing (a temporary rally above London’s high) creates an opportunity for short entries.
Traders fade this move, anticipating a sell-off targeting liquidity below previous lows.
🔹 London Close Buy Setup (10:30 AM – 1:00 PM NY Time)
If price reaches a higher timeframe discount array, a retracement higher is expected.
A bullish order block or failure swing signals a possible reversal.
The risk is set just below the day’s low, targeting a 20-30% retracement of the daily range.
🔹 Asia Open Sell Setup (7:00 PM – 2:00 AM NY Time)
If institutional order flow remains bearish, a short entry is taken around the 0-GMT Open.
Expect a 15-20 pip decline as the Asian range forms.
Strategy Rules:
📉 Short Entry Conditions:
✅ New York Judas Swing occurs (price moves above London’s high before reversing).
✅ Short entry is triggered when price closes below the open.
✅ Stop-loss is set 10 pips above the session high.
✅ Take-profit targets liquidity zones on higher timeframes.
📈 Long Entry (London Close Reversal):
✅ Price reaches a higher timeframe discount array between 10:30 AM – 1:00 PM NY Time.
✅ A bullish order block confirms the reversal.
✅ Stop-loss is set 10 pips below the day’s low.
✅ Take-profit targets 20-30% of the daily range retracement.
📉 Asia Open Sell Entry:
✅ Price trades slightly above the 0-GMT Open.
✅ Short entry is taken at resistance, targeting a quick 15-20 pip move.
Why Use This Strategy?
🚀 Institutional Order Flow Tracking – Aligns with smart money concepts.
📊 Precise Session Timing – Uses market structure across London, New York, and Asia.
🎯 High-Probability Entries – Focuses on liquidity grabs and engineered stop hunts.
📉 Optimized Risk Management – Defined stop-loss and take-profit levels.
This strategy is ideal for traders looking to trade with institutions, fade liquidity grabs, and capture high-probability short setups during the trading day. 📉🔥
[COG] Adaptive Squeeze Intensity 📊 Adaptive Squeeze Intensity (ASI) Indicator
🎯 Overview
The Adaptive Squeeze Intensity (ASI) indicator is an advanced technical analysis tool that combines the power of volatility compression analysis with momentum, volume, and trend confirmation to identify high-probability trading opportunities. It quantifies the degree of price compression using a sophisticated scoring system and provides clear entry signals for both long and short positions.
⭐ Key Features
- 📈 Comprehensive squeeze intensity scoring system (0-100)
- 📏 Multiple Keltner Channel compression zones
- 📊 Volume analysis integration
- 🎯 EMA-based trend confirmation
- 🎨 Proximity-based entry validation
- 📱 Visual status monitoring
- 🎨 Customizable color schemes
- ⚡ Clear entry signals with directional indicators
🔧 Components
1. 📐 Squeeze Intensity Score (0-100)
The indicator calculates a total squeeze intensity score based on four components:
- 📊 Band Convergence (0-40 points): Measures the relationship between Bollinger Bands and Keltner Channels
- 📍 Price Position (0-20 points): Evaluates price location relative to the base channels
- 📈 Volume Intensity (0-20 points): Analyzes volume patterns and thresholds
- ⚡ Momentum (0-20 points): Assesses price momentum and direction
2. 🎨 Compression Zones
Visual representation of squeeze intensity levels:
- 🔴 Extreme Squeeze (80-100): Red zone
- 🟠 Strong Squeeze (60-80): Orange zone
- 🟡 Moderate Squeeze (40-60): Yellow zone
- 🟢 Light Squeeze (20-40): Green zone
- ⚪ No Squeeze (0-20): Base zone
3. 🎯 Entry Signals
The indicator generates entry signals based on:
- ✨ Squeeze release confirmation
- ➡️ Momentum direction
- 📊 Candlestick pattern confirmation
- 📈 Optional EMA trend alignment
- 🎯 Customizable EMA proximity validation
⚙️ Settings
🔧 Main Settings
- Base Length: Determines the calculation period for main indicators
- BB Multiplier: Sets the Bollinger Bands deviation multiplier
- Keltner Channel Multipliers: Three separate multipliers for different compression zones
📈 Trend Confirmation
- Four customizable EMA periods (default: 21, 34, 55, 89)
- Optional trend requirement for entry signals
- Adjustable EMA proximity threshold
📊 Volume Analysis
- Customizable volume MA length
- Adjustable volume threshold for signal confirmation
- Option to enable/disable volume analysis
🎨 Visualization
- Customizable bullish/bearish colors
- Optional intensity zones display
- Status monitor with real-time score and state information
- Clear entry arrows and background highlights
💻 Technical Code Breakdown
1. Core Calculations
// Base calculations for EMAs
ema_1 = ta.ema(close, ema_length_1)
ema_2 = ta.ema(close, ema_length_2)
ema_3 = ta.ema(close, ema_length_3)
ema_4 = ta.ema(close, ema_length_4)
// Proximity calculation for entry validation
ema_prox_raw = math.abs(close - ema_1) / ema_1 * 100
is_close_to_ema_long = close > ema_1 and ema_prox_raw <= prox_percent
```
### 2. Squeeze Detection System
```pine
// Bollinger Bands setup
BB_basis = ta.sma(close, length)
BB_dev = ta.stdev(close, length)
BB_upper = BB_basis + BB_mult * BB_dev
BB_lower = BB_basis - BB_mult * BB_dev
// Keltner Channels setup
KC_basis = ta.sma(close, length)
KC_range = ta.sma(ta.tr, length)
KC_upper_high = KC_basis + KC_range * KC_mult_high
KC_lower_high = KC_basis - KC_range * KC_mult_high
```
### 3. Scoring System Implementation
```pine
// Band Convergence Score
band_ratio = BB_width / KC_width
convergence_score = math.max(0, 40 * (1 - band_ratio))
// Price Position Score
price_range = math.abs(close - KC_basis) / (KC_upper_low - KC_lower_low)
position_score = 20 * (1 - price_range)
// Final Score Calculation
squeeze_score = convergence_score + position_score + vol_score + mom_score
```
### 4. Signal Generation
```pine
// Entry Signal Logic
long_signal = squeeze_release and
is_momentum_positive and
(not use_ema_trend or (bullish_trend and is_close_to_ema_long)) and
is_bullish_candle
short_signal = squeeze_release and
is_momentum_negative and
(not use_ema_trend or (bearish_trend and is_close_to_ema_short)) and
is_bearish_candle
```
📈 Trading Signals
🚀 Long Entry Conditions
- Squeeze release detected
- Positive momentum
- Bullish candlestick
- Price above relevant EMAs (if enabled)
- Within EMA proximity threshold (if enabled)
- Sufficient volume confirmation (if enabled)
🔻 Short Entry Conditions
- Squeeze release detected
- Negative momentum
- Bearish candlestick
- Price below relevant EMAs (if enabled)
- Within EMA proximity threshold (if enabled)
- Sufficient volume confirmation (if enabled)
⚠️ Alert Conditions
- 🔔 Extreme squeeze level reached (score crosses above 80)
- 🚀 Long squeeze release signal
- 🔻 Short squeeze release signal
💡 Tips for Usage
1. 📱 Use the status monitor to track real-time squeeze intensity and state
2. 🎨 Pay attention to the color gradient for trend direction and strength
3. ⏰ Consider using multiple timeframes for confirmation
4. ⚙️ Adjust EMA and proximity settings based on your trading style
5. 📊 Use volume analysis for additional confirmation in liquid markets
📝 Notes
- 🔧 The indicator combines multiple technical analysis concepts for robust signal generation
- 📈 Suitable for all tradable markets and timeframes
- ⭐ Best results typically achieved in trending markets with clear volatility cycles
- 🎯 Consider using in conjunction with other technical analysis tools for confirmation
⚠️ Disclaimer
This technical indicator is designed to assist in analysis but should not be considered as financial advice. Always perform your own analysis and risk management when trading.
3 EMA + RSI with Trail Stop [Free990] (LOW TF)This trading strategy combines three Exponential Moving Averages (EMAs) to identify trend direction, uses RSI to signal exit conditions, and applies both a fixed percentage stop-loss and a trailing stop for risk management. It aims to capture momentum when the faster EMAs cross the slower EMA, then uses RSI thresholds, time-based exits, and stops to close trades.
Short Explanation of the Logic
Trend Detection: When the 10 EMA crosses above the 20 EMA and both are above the 100 EMA (and the current price bar closes higher), it triggers a long entry signal. The reverse happens for a short (the 10 EMA crosses below the 20 EMA and both are below the 100 EMA).
RSI Exit: RSI crossing above a set threshold closes long trades; crossing below another threshold closes short trades.
Time-Based Exit: If a trade is in profit after a set number of bars, the strategy closes it.
Stop-Loss & Trailing Stop: A fixed stop-loss based on a percentage from the entry price guards against large drawdowns. A trailing stop dynamically tightens as the trade moves in favor, locking in potential gains.
Detailed Explanation of the Strategy Logic
Exponential Moving Average (EMA) Setup
Short EMA (out_a, length=10)
Medium EMA (out_b, length=20)
Long EMA (out_c, length=100)
The code calculates three separate EMAs to gauge short-term, medium-term, and longer-term trend behavior. By comparing their relative positions, the strategy infers whether the market is bullish (EMAs stacked positively) or bearish (EMAs stacked negatively).
Entry Conditions
Long Entry (entryLong): Occurs when:
The short EMA (10) crosses above the medium EMA (20).
Both EMAs (short and medium) are above the long EMA (100).
The current bar closes higher than it opened (close > open).
This suggests that momentum is shifting to the upside (short-term EMAs crossing up and price action turning bullish). If there’s an existing short position, it’s closed first before opening a new long.
Short Entry (entryShort): Occurs when:
The short EMA (10) crosses below the medium EMA (20).
Both EMAs (short and medium) are below the long EMA (100).
The current bar closes lower than it opened (close < open).
This indicates a potential shift to the downside. If there’s an existing long position, that gets closed first before opening a new short.
Exit Signals
RSI-Based Exits:
For long trades: When RSI exceeds a specified threshold (e.g., 70 by default), it triggers a long exit. RSI > short_rsi generally means overbought conditions, so the strategy exits to lock in profits or avoid a pullback.
For short trades: When RSI dips below a specified threshold (e.g., 30 by default), it triggers a short exit. RSI < long_rsi indicates oversold conditions, so the strategy closes the short to avoid a bounce.
Time-Based Exit:
If the trade has been open for xBars bars (configurable, e.g., 24 bars) and the trade is in profit (current price above entry for a long, or current price below entry for a short), the strategy closes the position. This helps lock in gains if the move takes too long or momentum stalls.
Stop-Loss Management
Fixed Stop-Loss (% Based): Each trade has a fixed stop-loss calculated as a percentage from the average entry price.
For long positions, the stop-loss is set below the entry price by a user-defined percentage (fixStopLossPerc).
For short positions, the stop-loss is set above the entry price by the same percentage.
This mechanism prevents catastrophic losses if the market moves strongly against the position.
Trailing Stop:
The strategy also sets a trail stop using trail_points (the distance in price points) and trail_offset (how quickly the stop “catches up” to price).
As the market moves in favor of the trade, the trailing stop gradually tightens, allowing profits to run while still capping potential drawdowns if the price reverses.
Order Execution Flow
When the conditions for a new position (long or short) are triggered, the strategy first checks if there’s an opposite position open. If there is, it closes that position before opening the new one (prevents going “both long and short” simultaneously).
RSI-based and time-based exits are checked on each bar. If triggered, the position is closed.
If the position remains open, the fixed stop-loss and trailing stop remain in effect until the position is exited.
Why This Combination Works
Multiple EMA Cross: Combining 10, 20, and 100 EMAs balances short-term momentum detection with a longer-term trend filter. This reduces false signals that can occur if you only look at a single crossover without considering the broader trend.
RSI Exits: RSI provides a momentum oscillator view—helpful for detecting overbought/oversold conditions, acting as an extra confirmation to exit.
Time-Based Exit: Prevents “lingering trades.” If the position is in profit but failing to advance further, it takes profit rather than risking a trend reversal.
Fixed & Trailing Stop-Loss: The fixed stop-loss is your safety net to cap worst-case losses. The trailing stop allows the strategy to lock in gains by following the trade as it moves favorably, thus maximizing profit potential while keeping risk in check.
Overall, this approach tries to capture momentum from EMA crossovers, protect profits with trailing stops, and limit risk through both a fixed percentage stop-loss and exit signals from RSI/time-based logic.
ATR-based TP/SL with Dynamic RREnglish
This indicator combines the power of the Average True Range (ATR) with dynamic calculations for Take Profit (TP) and Stop Loss (SL) levels, offering a clear visualization of trading opportunities and their respective Risk-Reward Ratios (RRR).
Features:
Dynamic TP/SL Calculation:
TP and SL levels are derived using user-defined ATR multipliers for precise positioning.
Multipliers are flexible, allowing traders to adjust according to their strategies.
Risk-Reward Ratio (RRR):
Automatically calculates and displays the RRR for each trade signal.
Helps traders quickly assess if a trade aligns with their risk management plan.
Entry Conditions:
Buy signals occur when the closing price crosses above the 20-period Simple Moving Average (SMA).
Sell signals occur when the closing price crosses below the 20-period SMA.
Visual Aids:
Red and green lines indicate Stop Loss and Take Profit levels.
Blue and orange labels show the RRR for long and short trades, respectively.
How It Works:
The indicator uses the ATR to calculate TP and SL levels:
TP: Adjusted based on the desired Risk-Reward Ratio (RR).
SL: Proportional to the ATR multiplier.
Entry signals are plotted with "BUY" or "SELL" markers, while the respective TP/SL levels are drawn as horizontal lines.
Why Use This Indicator?
Perfect for traders who value precise risk management.
Helps identify trades with favorable RRR (e.g., greater than 1.5 or 2.0).
Ideal for swing traders, day traders, and scalpers looking to automate their decision-making process.
Customization:
ATR Length: Control the sensitivity of ATR-based calculations.
ATR Multipliers: Set the TP and SL distances relative to the ATR.
Desired RRR: Define the risk/reward ratio you aim to achieve.
Important Notes:
The indicator does not place trades automatically; it is for visual and analytical purposes.
Always backtest and combine it with additional analysis for best results.
French
Cet indicateur combine la puissance de l’Average True Range (ATR) avec des calculs dynamiques pour les niveaux de Take Profit (TP) et de Stop Loss (SL), tout en offrant une visualisation claire des opportunités de trading et de leurs Ratios Risque/Rendement (RRR).
Fonctionnalités :
Calcul Dynamique des TP/SL :
Les niveaux de TP et SL sont calculés à l'aide de multiplicateurs ATR définis par l’utilisateur pour une position précise.
Les multiplicateurs sont personnalisables pour s'adapter à votre stratégie de trading.
Ratio Risque/Rendement (RRR) :
Calcule et affiche automatiquement le ratio RRR pour chaque signal de trade.
Permet aux traders d’évaluer rapidement si un trade correspond à leur plan de gestion des risques.
Conditions d'Entrée :
Les signaux d'achat apparaissent lorsque le prix de clôture traverse au-dessus de la moyenne mobile simple (SMA) à 20 périodes.
Les signaux de vente apparaissent lorsque le prix de clôture traverse en dessous de la SMA à 20 périodes.
Aides Visuelles :
Lignes rouges et vertes pour indiquer les niveaux de Stop Loss et de Take Profit.
Étiquettes bleues et orange pour afficher le RRR des trades longs et courts, respectivement.
Comment Cela Fonctionne :
L'indicateur utilise l’ATR pour calculer les niveaux TP et SL :
TP : Calculé dynamiquement en fonction du ratio risque/rendement souhaité (RRR).
SL : Proportionnel au multiplicateur ATR défini par l’utilisateur.
Les signaux d’entrée sont représentés par des étiquettes "BUY" ou "SELL", tandis que les niveaux de TP/SL sont tracés sous forme de lignes horizontales.
Pourquoi Utiliser Cet Indicateur ?
Idéal pour les traders soucieux d’une gestion rigoureuse des risques.
Identifie les opportunités de trades avec des RRR favorables (par exemple, supérieurs à 1.5 ou 2.0).
Convient aux swing traders, day traders et scalpeurs souhaitant automatiser leur processus de décision.
Personnalisation :
Longueur de l’ATR : Contrôlez la sensibilité des calculs basés sur l’ATR.
Multiplicateurs ATR : Ajustez les distances TP et SL par rapport à l’ATR.
Ratio RRR souhaité : Définissez le ratio risque/rendement que vous visez.
Remarques Importantes :
Cet indicateur n’exécute pas de trades automatiquement ; il est destiné à un usage visuel et analytique uniquement.
Toujours backtester et combiner avec une analyse supplémentaire pour de meilleurs résultats.
parametre par type de trading:
1. Pour les Scalpers :
Style de trading : Trades rapides sur de petites variations de prix, souvent sur des unités de temps courtes (1 min, 5 min).
Recommandations de paramètres :
ATR Length : 7 (plus court pour réagir rapidement à la volatilité).
Multiplicateur SL : 1.0 (Stop Loss proche pour limiter les pertes).
RR souhaité : 1.5 à 2.0 (bon équilibre entre risque et récompense).
Résultat attendu : Des trades fréquents, avec une probabilité raisonnable de toucher le TP tout en limitant les pertes.
2. Pour les Day Traders :
Style de trading : Trades qui durent plusieurs heures dans la journée, souvent sur des unités de temps moyennes (15 min, 1h).
Recommandations de paramètres :
ATR Length : 14 (standard pour capturer une volatilité modérée).
Multiplicateur SL : 1.5 (Stop Loss à distance raisonnable pour supporter les fluctuations intrajournalières).
RR souhaité : 2.0 à 3.0 (ciblez une bonne récompense par rapport au risque).
Résultat attendu : Moins de trades, mais un RR élevé pour compenser les pertes potentielles.
3. Pour les Swing Traders :
Style de trading : Trades qui durent plusieurs jours, souvent sur des unités de temps longues (4h, 1 jour).
Recommandations de paramètres :
ATR Length : 20 (pour capturer des mouvements de volatilité plus larges).
Multiplicateur SL : 2.0 (Stop Loss large pour supporter des fluctuations importantes).
RR souhaité : 3.0 ou plus (ciblez de gros mouvements de prix).
Résultat attendu : Des trades moins fréquents mais potentiellement très lucratifs.
4. Pour les Actifs Volatils (Crypto, Commodités) :
Problème spécifique : Les actifs volatils ont souvent des mouvements brusques.
Recommandations de paramètres :
ATR Length : 7 ou 10 (plus court pour suivre rapidement les variations).
Multiplicateur SL : 1.5 à 2.0 (assez large pour ne pas être déclenché prématurément).
RR souhaité : 1.5 à 2.0 (favorisez des récompenses réalistes sur des mouvements volatils).
Résultat attendu : Trades qui s’adaptent à la volatilité sans sortir trop tôt.
5. Pour les Marchés Stables (Indices, Actions Blue Chip) :
Problème spécifique : Les mouvements sont souvent lents et prévisibles.
Recommandations de paramètres :
ATR Length : 14 ou 20 (capture une volatilité modérée).
Multiplicateur SL : 1.0 à 1.5 (Stop Loss serré pour maximiser l’efficacité).
RR souhaité : 2.0 à 3.0 (ciblez des ratios plus élevés sur des mouvements moins fréquents).
Résultat attendu : Maximisation des profits sur des tendances claires.
Recommandation Générale :
Si vous ne savez pas par où commencer, utilisez ces paramètres par défaut :
ATR Length : 14
Multiplicateur SL : 1.5
RR souhaité : 2.0
SMA- Ashish SinghSMA
This script implements a Simple Moving Average (SMA) crossover strategy using three SMAs: 200-day, 50-day, and 20-day, with buy and sell signals triggered based on specific conditions involving these moving averages. The indicator is overlaid on the price chart, providing visual cues for potential buy and sell opportunities based on moving average crossovers.
Key Features:
Moving Averages:
The 200-day, 50-day, and 20-day SMAs are calculated and plotted on the price chart. These are key levels that traders use to assess trends.
The 200-day SMA represents the long-term trend, the 50-day SMA is used for medium-term trends, and the 20-day SMA is for short-term analysis.
Buy Signal:
A buy signal is triggered when the price is below all three moving averages (200 SMA, 50 SMA, 20 SMA) and the SMAs are in a specific downward trend (200 SMA > 50 SMA > 20 SMA). This is an indication of a potential upward reversal.
The buy signal is marked with a green triangle below the price bar.
Sell Signal:
A sell signal is triggered when the price is above all three moving averages and the SMAs are in a specific upward trend (200 SMA < 50 SMA < 20 SMA). This signals a potential downward reversal.
The sell signal is marked with a red triangle above the price bar.
Trade Information:
After a buy signal, the buy price, bar index, and timestamp are recorded. When a sell signal occurs, the percentage gain or loss is calculated along with the number of days between the buy and sell signals.
The script automatically displays a label on the chart showing the gain or loss percentage along with the number of days the trade lasted. Green labels represent gains, and red labels represent losses.
User-friendly Visuals:
The buy and sell signals are plotted as small triangles directly on the chart for easy identification.
Detailed trade information is provided with well-formatted labels to highlight the profit or loss after each trade.
How It Works:
This strategy helps traders to identify trend reversals by leveraging long-term and short-term moving averages.
A single buy or sell signal is triggered based on price movement relative to the SMAs and their order.
The tool is designed to help traders quickly spot buying and selling opportunities with clear visual indicators and gain/loss metrics.
This indicator is ideal for traders looking to implement a systematic SMA-based strategy with well-defined buy/sell points and automatic performance tracking for each trade.
Disclaimer: The information provided here is for educational and informational purposes only. It is not intended as financial advice or as a recommendation to buy or sell any stocks. Please conduct your own research or consult a financial advisor before making any investment decisions. ProfitLens does not guarantee the accuracy, completeness, or reliability of any information presented.
Autotable█ OVERVIEW
The library allows to automatically draw a table based on a string or float matrix (or both) controlling all of the parameters of the table (including merging cells) with parameter matrices (like, e.g. matrix of cell colors).
All things you would normally do with table.new() and table.cell() are now possible using respective parameters of library's main function, autotable() (as explained further below).
Headers can be supplied as arrays.
Merging of the cells is controlled with a special matrix of "L" and "U" values which instruct a cell to merged with the cell to the left or upwards (please see examples in the script and in this description).
█ USAGE EXAMPLES
The simplest and most straightforward:
mxF = matrix.new(3,3, 3.14)
mxF.autotable(bgcolor = color.rgb(249, 209, 29)) // displays float matrix as a table in the top right corner with defalult settings
mxS = matrix.new(3,3,"PI")
// displays string matrix as a table in the top right corner with defalult settings
mxS.autotable(Ypos = "bottom", Xpos = "right", bgcolor = #b4d400)
// displays matrix displaying a string value over a float value in each cell
mxS.autotable(mxF, Ypos = "middle", Xpos = "center", bgcolor = color.gray, text_color = #86f62a)
Draws this:
Tables with headers:
if barstate.islast
mxF = matrix.new(3,3, 3.14)
mxS = matrix.new(3,3,"PI")
arColHeaders = array.from("Col1", "Col2", "Col3")
arRowHeaders = array.from("Row1", "Row2", "Row3")
// float matrix with col headers
mxF.autotable(
bgcolor = #fdfd6b
, arColHeaders = arColHeaders
)
// string matrix with row headers
mxS.autotable(arRowHeaders = arRowHeaders, Ypos = "bottom", Xpos = "right", bgcolor = #b4d400)
// string/float matrix with both row and column headers
mxS.autotable(mxF
, Ypos = "middle", Xpos = "center"
, arRowHeaders = arRowHeaders
, arColHeaders = arColHeaders
, cornerBgClr = #707070, cornerTitle = "Corner\ncell", cornerTxtClr = #ffdc13
, bgcolor = color.gray, text_color = #86f62a
)
Draws this:
█ FUNCTIONS
One main function is autotable() which has only one required argument mxValS, a string matrix.
Please see below the description of all of the function parameters:
The table:
tbl (table) (Optional) If supplied, this table will be deleted.
The data:
mxValS (matrix ) (Required) Cell text values
mxValF (matrix) (Optional) Numerical part of cell text values. Is concatenated to the mxValS values via `string_float_separator` string (default "\n")
Table properties, have same effect as in table.new() :
defaultBgColor (color) (Optional) bgcolor to be used if mxBgColor is not supplied
Ypos (string) (Optional) "top", "bottom" or "center"
Xpos (string) (Optional) "left", "right", or "center"
frame_color (color) (Optional) frame_color like in table.new()
frame_width (int) (Optional) frame_width like in table.new()
border_color (color) (Optional) border_color like in table.new()
border_width (int) (Optional) border_width like in table.new()
force_overlay (simple bool) (Optional) If true draws table on main pane.
Cell parameters, have same effect as in table.cell() ):
mxBgColor (matrix) (Optional) like bgcolor argument in table.cell()
mxTextColor (matrix) (Optional) like text_color argument in table.cell()
mxTt (matrix) (Optional) like tooltip argument in table.cell()
mxWidth (matrix) (Optional) like width argument in table.cell()
mxHeight (matrix) (Optional) like height argument in table.cell()
mxHalign (matrix) (Optional) like text_halign argument in table.cell()
mxValign (matrix) (Optional) like text_valign argument in table.cell()
mxTextSize (matrix) (Optional) like text_size argument in table.cell()
mxFontFamily (matrix) (Optional) like text_font_family argument in table.cell()
Other table properties:
tableWidth (float) (Optional) Overrides table width if cell widths are non zero. E.g. if there are four columns and cell widths are 20 (either as set via cellW or via mxWidth) then if tableWidth is set to e.g. 50 then cell widths will be 50 * (20 / 80), where 80 is 20*4 = total width of all cells. Works simialar for widths set via mxWidth - determines max sum of widths across all cloumns of mxWidth and adjusts cell widths proportionally to it. If cell widths are 0 (i.e. auto-adjust) tableWidth has no effect.
tableHeight (float) (Optional) Overrides table height if cell heights are non zero. E.g. if there are four rows and cell heights are 20 (either as set via cellH or via mxHeight) then if tableHeigh is set to e.g. 50 then cell heights will be 50 * (20 / 80), where 80 is 20*4 = total height of all cells. Works simialar for heights set via mxHeight - determines max sum of heights across all cloumns of mxHeight and adjusts cell heights proportionally to it. If cell heights are 0 (i.e. auto-adjust) tableHeight has no effect.
defaultTxtColor (color) (Optional) text_color to be used if mxTextColor is not supplied
text_size (string) (Optional) text_size to be used if mxTextSize is not supplied
font_family (string) (Optional) cell text_font_family value to be used if a value in mxFontFamily is no supplied
cellW (float) (Optional) cell width to be used if a value in mxWidth is no supplied
cellH (float) (Optional) cell height to be used if a value in mxHeight is no supplied
halign (string) (Optional) cell text_halign value to be used if a value in mxHalign is no supplied
valign (string) (Optional) cell text_valign value to be used if a value in mxValign is no supplied
Headers parameters:
arColTitles (array) (Optional) Array of column titles. If not na a header row is added.
arRowTitles (array) (Optional) Array of row titles. If not na a header column is added.
cornerTitle (string) (Optional) If both row and column titles are supplied allows to set the value of the corner cell.
colTitlesBgColor (color) (Optional) bgcolor for header row
colTitlesTxtColor (color) (Optional) text_color for header row
rowTitlesBgColor (color) (Optional) bgcolor for header column
rowTitlesTxtColor (color) (Optional) text_color for header column
cornerBgClr (color) (Optional) bgcolor for the corner cell
cornerTxtClr (color) (Optional) text_color for the corner cell
Cell merge parameters:
mxMerge (matrix) (Optional) A matrix determining how cells will be merged. "L" - cell merges to the left, "U" - upwards.
mergeAllColTitles (bool) (Optional) Allows to print a table title instead of column headers, merging all header row cells and leaving just the value of the first cell. For more flexible options use matrix arguments leaving header/row arguments na.
mergeAllRowTitles (bool) (Optional) Allows to print one text value merging all header row cells and leaving just the value of the first cell. For more flexible options use matrix arguments leaving header/row arguments na.
Format:
string_float_separator (string) (Optional) A string used to separate string and float parts of cell values (mxValS and mxValF). Default is "\n"
format (string) (Optional) format string like in str.format() used to format numerical values
nz (string) (Optional) Determines how na numerical values are displayed.
The only other available function is autotable(string,... ) with a string parameter instead of string and float matrices which draws a one cell table.
█ SAMPLE USE
E.g., CSVParser library demo uses Autotable's for generating complex tables with merged cells.
█ CREDITS
The library was inspired by @kaigouthro's matrixautotable . A true master. Many thanks to him for his creative, beautiful and very helpful libraries.
ADX + Volume Strategy### Strategy Description: ADX and Volume-Based Trading Strategy
This strategy is designed to identify strong market trends using the **Average Directional Index (ADX)** and confirm trading signals with **Volume**. The idea behind the strategy is to enter trades only when the market shows a strong trend (as indicated by ADX) and when the price movement is supported by high trading volume. This combination helps filter out weaker signals and provides more reliable entries into positions.
### Key Indicators:
1. **ADX (Average Directional Index)**:
- **Purpose**: ADX is a technical indicator that measures the strength of a trend, regardless of its direction (up or down).
- **Usage**: The strategy uses ADX to determine whether the market is trending strongly. If ADX is above a certain threshold (default is 25), it indicates that a strong trend is present.
- **Directional Indicators**:
- **DI+ (Directional Indicator Plus)**: Indicates the strength of the upward price movement.
- **DI- (Directional Indicator Minus)**: Indicates the strength of the downward price movement.
- ADX does not indicate the direction of the trend but confirms that a trend exists. DI+ and DI- are used to determine the direction.
2. **Volume**:
- **Purpose**: Volume is a key indicator for confirming the strength of a price movement. High volume suggests that a large number of market participants are supporting the movement, making it more likely to continue.
- **Usage**: The strategy compares the current volume to the 20-period moving average of the volume. The trade signal is confirmed if the current volume is greater than the average volume by a specified **Volume Multiplier** (default multiplier is 1.5). This ensures that the trade is supported by strong market participation.
### Strategy Logic:
#### **Entry Conditions:**
1. **Long Position** (Buy):
- **ADX** is above the threshold (default is 25), indicating a strong trend.
- **DI+ > DI-**, signaling that the market is trending upward.
- The **current volume** is greater than the 20-period average volume multiplied by the **Volume Multiplier** (e.g., 1.5), indicating that the upward price movement is backed by sufficient market activity.
2. **Short Position** (Sell):
- **ADX** is above the threshold (default is 25), indicating a strong trend.
- **DI- > DI+**, signaling that the market is trending downward.
- The **current volume** is greater than the 20-period average volume multiplied by the **Volume Multiplier** (e.g., 1.5), indicating that the downward price movement is backed by strong selling activity.
#### **Exit Conditions**:
- Positions are closed when the opposite signal appears:
- **For long positions**: Close when the short conditions are met (ADX still above the threshold, DI- > DI+, and the volume condition holds).
- **For short positions**: Close when the long conditions are met (ADX still above the threshold, DI+ > DI-, and the volume condition holds).
### Parameters:
- **ADX Period**: The period used to calculate ADX (default is 14). This controls how sensitive the ADX is to price movements.
- **ADX Threshold**: The minimum ADX value required for the strategy to consider the market trend as strong (default is 25). Higher values focus on stronger trends.
- **Volume Multiplier**: This parameter adjusts how much higher the current volume needs to be compared to the 20-period moving average for the signal to be valid. A value of 1.5 means the current volume must be 50% higher than the average volume.
### Example Trade Flow:
1. **Long Trade Example**:
- ADX > 25, confirming a strong trend.
- DI+ > DI-, confirming that the trend direction is upward.
- The current volume is 50% higher than the 20-period average volume (multiplied by 1.5).
- **Action**: Enter a long position.
2. **Short Trade Example**:
- ADX > 25, confirming a strong trend.
- DI- > DI+, confirming that the trend direction is downward.
- The current volume is 50% higher than the 20-period average volume.
- **Action**: Enter a short position.
### Strengths of the Strategy:
- **Trend Filtering**: The strategy ensures that trades are only taken when the market is trending strongly (confirmed by ADX) and that the price movement is supported by high volume, reducing the likelihood of false signals.
- **Volume Confirmation**: Using volume as confirmation provides an additional layer of reliability, as volume spikes often accompany sustained price moves.
- **Dual Signal Confirmation**: Both trend strength (ADX) and volume conditions must be met for a trade, making the strategy more robust.
### Weaknesses of the Strategy:
- **Limited Effectiveness in Range-Bound Markets**: Since the strategy relies on strong trends, it may underperform in sideways or non-trending markets where ADX stays below the threshold.
- **Lagging Nature of ADX**: ADX is a lagging indicator, which means that it may confirm the trend after it has already begun, potentially leading to late entries.
- **Volume Requirement**: In low-volume markets, the volume multiplier condition may not be met often, leading to fewer trade opportunities.
### Customization:
- **Adjust the ADX Threshold**: You can raise the threshold if you want to focus only on very strong trends, or lower it to capture moderate trends.
- **Adjust the Volume Multiplier**: You can change the multiplier to be more or less strict. A higher multiplier (e.g., 2.0) will require a stronger volume spike to confirm the signal, while a lower multiplier (e.g., 1.2) will allow more trades with weaker volume confirmation.
### Summary:
This ADX and Volume strategy is ideal for traders who want to follow strong trends while ensuring that the trend is supported by high trading volume. By combining a trend strength filter (ADX) and volume confirmation, the strategy aims to increase the probability of entering profitable trades while reducing the number of false signals. However, it may underperform in range-bound markets or in markets with low volume.
PubLibTrendLibrary "PubLibTrend"
trend, multi-part trend, double trend and multi-part double trend conditions for indicator and strategy development
rlut()
return line uptrend condition
Returns: bool
dt()
downtrend condition
Returns: bool
ut()
uptrend condition
Returns: bool
rldt()
return line downtrend condition
Returns: bool
dtop()
double top condition
Returns: bool
dbot()
double bottom condition
Returns: bool
rlut_1p()
1-part return line uptrend condition
Returns: bool
rlut_2p()
2-part return line uptrend condition
Returns: bool
rlut_3p()
3-part return line uptrend condition
Returns: bool
rlut_4p()
4-part return line uptrend condition
Returns: bool
rlut_5p()
5-part return line uptrend condition
Returns: bool
rlut_6p()
6-part return line uptrend condition
Returns: bool
rlut_7p()
7-part return line uptrend condition
Returns: bool
rlut_8p()
8-part return line uptrend condition
Returns: bool
rlut_9p()
9-part return line uptrend condition
Returns: bool
rlut_10p()
10-part return line uptrend condition
Returns: bool
rlut_11p()
11-part return line uptrend condition
Returns: bool
rlut_12p()
12-part return line uptrend condition
Returns: bool
rlut_13p()
13-part return line uptrend condition
Returns: bool
rlut_14p()
14-part return line uptrend condition
Returns: bool
rlut_15p()
15-part return line uptrend condition
Returns: bool
rlut_16p()
16-part return line uptrend condition
Returns: bool
rlut_17p()
17-part return line uptrend condition
Returns: bool
rlut_18p()
18-part return line uptrend condition
Returns: bool
rlut_19p()
19-part return line uptrend condition
Returns: bool
rlut_20p()
20-part return line uptrend condition
Returns: bool
rlut_21p()
21-part return line uptrend condition
Returns: bool
rlut_22p()
22-part return line uptrend condition
Returns: bool
rlut_23p()
23-part return line uptrend condition
Returns: bool
rlut_24p()
24-part return line uptrend condition
Returns: bool
rlut_25p()
25-part return line uptrend condition
Returns: bool
rlut_26p()
26-part return line uptrend condition
Returns: bool
rlut_27p()
27-part return line uptrend condition
Returns: bool
rlut_28p()
28-part return line uptrend condition
Returns: bool
rlut_29p()
29-part return line uptrend condition
Returns: bool
rlut_30p()
30-part return line uptrend condition
Returns: bool
dt_1p()
1-part downtrend condition
Returns: bool
dt_2p()
2-part downtrend condition
Returns: bool
dt_3p()
3-part downtrend condition
Returns: bool
dt_4p()
4-part downtrend condition
Returns: bool
dt_5p()
5-part downtrend condition
Returns: bool
dt_6p()
6-part downtrend condition
Returns: bool
dt_7p()
7-part downtrend condition
Returns: bool
dt_8p()
8-part downtrend condition
Returns: bool
dt_9p()
9-part downtrend condition
Returns: bool
dt_10p()
10-part downtrend condition
Returns: bool
dt_11p()
11-part downtrend condition
Returns: bool
dt_12p()
12-part downtrend condition
Returns: bool
dt_13p()
13-part downtrend condition
Returns: bool
dt_14p()
14-part downtrend condition
Returns: bool
dt_15p()
15-part downtrend condition
Returns: bool
dt_16p()
16-part downtrend condition
Returns: bool
dt_17p()
17-part downtrend condition
Returns: bool
dt_18p()
18-part downtrend condition
Returns: bool
dt_19p()
19-part downtrend condition
Returns: bool
dt_20p()
20-part downtrend condition
Returns: bool
dt_21p()
21-part downtrend condition
Returns: bool
dt_22p()
22-part downtrend condition
Returns: bool
dt_23p()
23-part downtrend condition
Returns: bool
dt_24p()
24-part downtrend condition
Returns: bool
dt_25p()
25-part downtrend condition
Returns: bool
dt_26p()
26-part downtrend condition
Returns: bool
dt_27p()
27-part downtrend condition
Returns: bool
dt_28p()
28-part downtrend condition
Returns: bool
dt_29p()
29-part downtrend condition
Returns: bool
dt_30p()
30-part downtrend condition
Returns: bool
ut_1p()
1-part uptrend condition
Returns: bool
ut_2p()
2-part uptrend condition
Returns: bool
ut_3p()
3-part uptrend condition
Returns: bool
ut_4p()
4-part uptrend condition
Returns: bool
ut_5p()
5-part uptrend condition
Returns: bool
ut_6p()
6-part uptrend condition
Returns: bool
ut_7p()
7-part uptrend condition
Returns: bool
ut_8p()
8-part uptrend condition
Returns: bool
ut_9p()
9-part uptrend condition
Returns: bool
ut_10p()
10-part uptrend condition
Returns: bool
ut_11p()
11-part uptrend condition
Returns: bool
ut_12p()
12-part uptrend condition
Returns: bool
ut_13p()
13-part uptrend condition
Returns: bool
ut_14p()
14-part uptrend condition
Returns: bool
ut_15p()
15-part uptrend condition
Returns: bool
ut_16p()
16-part uptrend condition
Returns: bool
ut_17p()
17-part uptrend condition
Returns: bool
ut_18p()
18-part uptrend condition
Returns: bool
ut_19p()
19-part uptrend condition
Returns: bool
ut_20p()
20-part uptrend condition
Returns: bool
ut_21p()
21-part uptrend condition
Returns: bool
ut_22p()
22-part uptrend condition
Returns: bool
ut_23p()
23-part uptrend condition
Returns: bool
ut_24p()
24-part uptrend condition
Returns: bool
ut_25p()
25-part uptrend condition
Returns: bool
ut_26p()
26-part uptrend condition
Returns: bool
ut_27p()
27-part uptrend condition
Returns: bool
ut_28p()
28-part uptrend condition
Returns: bool
ut_29p()
29-part uptrend condition
Returns: bool
ut_30p()
30-part uptrend condition
Returns: bool
rldt_1p()
1-part return line downtrend condition
Returns: bool
rldt_2p()
2-part return line downtrend condition
Returns: bool
rldt_3p()
3-part return line downtrend condition
Returns: bool
rldt_4p()
4-part return line downtrend condition
Returns: bool
rldt_5p()
5-part return line downtrend condition
Returns: bool
rldt_6p()
6-part return line downtrend condition
Returns: bool
rldt_7p()
7-part return line downtrend condition
Returns: bool
rldt_8p()
8-part return line downtrend condition
Returns: bool
rldt_9p()
9-part return line downtrend condition
Returns: bool
rldt_10p()
10-part return line downtrend condition
Returns: bool
rldt_11p()
11-part return line downtrend condition
Returns: bool
rldt_12p()
12-part return line downtrend condition
Returns: bool
rldt_13p()
13-part return line downtrend condition
Returns: bool
rldt_14p()
14-part return line downtrend condition
Returns: bool
rldt_15p()
15-part return line downtrend condition
Returns: bool
rldt_16p()
16-part return line downtrend condition
Returns: bool
rldt_17p()
17-part return line downtrend condition
Returns: bool
rldt_18p()
18-part return line downtrend condition
Returns: bool
rldt_19p()
19-part return line downtrend condition
Returns: bool
rldt_20p()
20-part return line downtrend condition
Returns: bool
rldt_21p()
21-part return line downtrend condition
Returns: bool
rldt_22p()
22-part return line downtrend condition
Returns: bool
rldt_23p()
23-part return line downtrend condition
Returns: bool
rldt_24p()
24-part return line downtrend condition
Returns: bool
rldt_25p()
25-part return line downtrend condition
Returns: bool
rldt_26p()
26-part return line downtrend condition
Returns: bool
rldt_27p()
27-part return line downtrend condition
Returns: bool
rldt_28p()
28-part return line downtrend condition
Returns: bool
rldt_29p()
29-part return line downtrend condition
Returns: bool
rldt_30p()
30-part return line downtrend condition
Returns: bool
dut()
double uptrend condition
Returns: bool
ddt()
double downtrend condition
Returns: bool
dut_1p()
1-part double uptrend condition
Returns: bool
dut_2p()
2-part double uptrend condition
Returns: bool
dut_3p()
3-part double uptrend condition
Returns: bool
dut_4p()
4-part double uptrend condition
Returns: bool
dut_5p()
5-part double uptrend condition
Returns: bool
dut_6p()
6-part double uptrend condition
Returns: bool
dut_7p()
7-part double uptrend condition
Returns: bool
dut_8p()
8-part double uptrend condition
Returns: bool
dut_9p()
9-part double uptrend condition
Returns: bool
dut_10p()
10-part double uptrend condition
Returns: bool
dut_11p()
11-part double uptrend condition
Returns: bool
dut_12p()
12-part double uptrend condition
Returns: bool
dut_13p()
13-part double uptrend condition
Returns: bool
dut_14p()
14-part double uptrend condition
Returns: bool
dut_15p()
15-part double uptrend condition
Returns: bool
dut_16p()
16-part double uptrend condition
Returns: bool
dut_17p()
17-part double uptrend condition
Returns: bool
dut_18p()
18-part double uptrend condition
Returns: bool
dut_19p()
19-part double uptrend condition
Returns: bool
dut_20p()
20-part double uptrend condition
Returns: bool
dut_21p()
21-part double uptrend condition
Returns: bool
dut_22p()
22-part double uptrend condition
Returns: bool
dut_23p()
23-part double uptrend condition
Returns: bool
dut_24p()
24-part double uptrend condition
Returns: bool
dut_25p()
25-part double uptrend condition
Returns: bool
dut_26p()
26-part double uptrend condition
Returns: bool
dut_27p()
27-part double uptrend condition
Returns: bool
dut_28p()
28-part double uptrend condition
Returns: bool
dut_29p()
29-part double uptrend condition
Returns: bool
dut_30p()
30-part double uptrend condition
Returns: bool
ddt_1p()
1-part double downtrend condition
Returns: bool
ddt_2p()
2-part double downtrend condition
Returns: bool
ddt_3p()
3-part double downtrend condition
Returns: bool
ddt_4p()
4-part double downtrend condition
Returns: bool
ddt_5p()
5-part double downtrend condition
Returns: bool
ddt_6p()
6-part double downtrend condition
Returns: bool
ddt_7p()
7-part double downtrend condition
Returns: bool
ddt_8p()
8-part double downtrend condition
Returns: bool
ddt_9p()
9-part double downtrend condition
Returns: bool
ddt_10p()
10-part double downtrend condition
Returns: bool
ddt_11p()
11-part double downtrend condition
Returns: bool
ddt_12p()
12-part double downtrend condition
Returns: bool
ddt_13p()
13-part double downtrend condition
Returns: bool
ddt_14p()
14-part double downtrend condition
Returns: bool
ddt_15p()
15-part double downtrend condition
Returns: bool
ddt_16p()
16-part double downtrend condition
Returns: bool
ddt_17p()
17-part double downtrend condition
Returns: bool
ddt_18p()
18-part double downtrend condition
Returns: bool
ddt_19p()
19-part double downtrend condition
Returns: bool
ddt_20p()
20-part double downtrend condition
Returns: bool
ddt_21p()
21-part double downtrend condition
Returns: bool
ddt_22p()
22-part double downtrend condition
Returns: bool
ddt_23p()
23-part double downtrend condition
Returns: bool
ddt_24p()
24-part double downtrend condition
Returns: bool
ddt_25p()
25-part double downtrend condition
Returns: bool
ddt_26p()
26-part double downtrend condition
Returns: bool
ddt_27p()
27-part double downtrend condition
Returns: bool
ddt_28p()
28-part double downtrend condition
Returns: bool
ddt_29p()
29-part double downtrend condition
Returns: bool
ddt_30p()
30-part double downtrend condition
Returns: bool
Keltner Channel+EMA with Buy/Sell SignalsIndicator Name: Double Keltner Channel with EMA (Buy/Sell Signals)
Description:
This indicator is designed to help traders identify potential trend reversals and generate buy/sell signals in volatile markets. It combines two Keltner Channels with different sensitivities (multipliers of 2.6 and 3.8) to visualize dynamic support and resistance levels. The addition of a 20-period EMA helps confirm trend direction and filter out potential false signals.
How the Indicator Works:
• Keltner Channels: These bands dynamically adjust to changing market volatility, offering a visual representation of potential price ranges. The 2.6 multiplier Keltner Channel (KC) is more sensitive to price changes, potentially highlighting short-term reversals, while the 3.8 multiplier KC focuses on broader trend shifts.
• 20-period EMA: This widely used trend indicator helps smooth out price fluctuations and identify the underlying direction of the market.
• Buy Signals: Generated when a candle's low touches or crosses below either Keltner Channel's lower band, and within the next 6 candles, that same candle closes above the 20 EMA. This combination suggests a potential rejection of lower prices (support) and a possible resumption of the uptrend.
• Sell Signals: Mirror the buy signal logic but are triggered when the candle's high touches or crosses above either Keltner Channel's upper band and then closes below the 20 EMA within the next 6 candles. This indicates a potential rejection of higher prices (resistance) and a possible shift to a downtrend.
How to Use the Indicator:
1. Identify the Trend: Use the 20 EMA to determine the overall trend direction. Look for buy signals primarily in uptrends and sell signals in downtrends.
2. Confirm with RSI : While not included in this indicator, consider using a separate Relative Strength Index (RSI) with a length of 10, SMA type, MA length of 14, and standard deviation of 2. Look for oversold conditions (RSI below 20) to confirm buy signals and overbought conditions (RSI above 80) to confirm sell signals.
3.Apply Risk Management: Always use appropriate risk management techniques, such as stop-loss orders, to protect your capital.
Key Points:
• This indicator is most effective in trending markets.
• It is not a standalone trading system and should be used in conjunction with other analysis tools and confirmation.
• The Keltner Channel multiplier values can be adjusted to suit your trading style and risk tolerance.
Important Disclaimer:
This indicator is a modification of the original Keltner Channel code and is intended for educational and informational purposes only.
It does not constitute financial advice. Always conduct your own research and consult with a qualified financial advisor before making any investment decisions.
Auto-magnifier / quantifytools- Overview
Auto-magnifier shows a lower timeframe view of candles and volume bars inside any main timeframe candle by zooming into it. Candles and volume bars as they develop are shown chronologically from left to right. By default, magnifier is triggered when less than 3 candles are visible on the chart.
By default, 20 lower timeframe candles are displayed by splitting main timeframe into 20 parts. The amount of candles displayed is a target rate, meaning the script will use a lower timeframe that has the closest match to 20 candles and therefore will vary a bit. Users can override automatic timeframe calculation and opt in to display any specific lower timeframe or adjust amount of candles shown (e.g. 20 -> 30 candles) per each main timeframe candle.
Example
Main timeframe set to 30 minute, candles displayed set to 20 -> Magnifying using 2 minute candles (30 minute/20 candles = 1.5 min, rounded to 2 min)
Main timeframe set to 30 minute, override set to 5 minutes -> Displaying 5 minute candles
Size of volume bars is calculated using relative volume (volume relative to volume SMA20), lowest bar representing relative volume values of under or equal to 1x the moving average and from there onwards progressively growing.
- Limitations and considerations
Amount of candles shown might flow over from the background on smaller screen sizes, in which case you would want to decrease the amount shown. Opposite is true for bigger screens, this value can be increased as more candles fit.
This indicator involves a lot of tricks with text elements to make it work automatically by zooming in. Size of wicks, bodies and volume bars are calculated by adding more text elements on big candles and less text elements on smaller candles. This means the displayed candles won't be a 100% match, but a rather a fair representation of the view, e.g. candle is green = lower timeframe candle is green, candle has a big wick = lower timeframe candle has a big wick (but not a 100% match).
Example
Magnified lower timeframe chart vs. Actual lower timeframe chart
Most mismatch will be found on the price levels where lower timeframe candles are shown, which is sacrificed for the sake of getting a better readability on the overall shape of lower timeframe price action. Users can alternatively optimize calculations for more accuracy, giving a better representation of the price levels where candles truly originated. This typically comes with the cost of worse readability however.
Example
Optimized for readability vs. Optimized for accuracy
- Visuals
All visual elements are fully customizable.
Christmas Toolkit [LuxAlgo]It's that time of the year... and what would be more appropriate than displaying Christmas-themed elements on your chart?
The Christmas Toolkit displays a tree containing elements affected by various technical indicators. If you're lucky, you just might also find a precious reindeer trotting toward the tree, how fancy!
🔶 USAGE
Each of the 7 X-mas balls is associated with a specific condition.
Each ball has a color indicating:
lime: very bullish
green: bullish
blue: holding the same position or sideline
red: bearish
darkRed: very bearish
From top to bottom:
🔹 RSI (length 14)
rsi < 20 - lime (+2 points)
rsi < 30 - green (+1 point)
rsi > 80 - darkRed (-2 points)
rsi > 70 - red (-1 point)
else - blue
🔹 Stoch (length 14)
stoch < 20 - lime (+2 points)
stoch < 30 - green (+1 point)
stoch > 80 - darkRed (-2 points)
stoch > 70 - red (-1 point)
else - blue
🔹 close vs. ema (length 20)
close > ema 20 - green (+1 point)
else - red (-1 point)
🔹 ema (length 20)
ema 20 rises - green (+1 point)
else - red (-1 point)
🔹 ema (length 50)
ema 50 rises - green (+1 point)
else - red (-1 point)
🔹 ema (length 100)
ema 100 rises - green (+1 point)
else - red (-1 point)
🔹 ema (length 200)
ema 200 rises - green (+1 point)
else - red (-1 point)
The above information can also be found on the right side of the tree.
You'll see the conditions associated with the specific X-mas ball and the meaning of color changes. This can also be visualized by hovering over the labels.
All values are added together, this result is used to color the star at the top of the tree, with a specific color indicating:
lime: very bullish (> 6 points)
green: bullish (6 points)
blue: holding the same position or sideline
red: bearish (-6 points)
darkRed: very bearish (< -6 points)
Switches to green/lime or red/dark red can be seen by the fallen stars at the bottom.
The Last Switch indicates the latest green/lime or red/dark red color (not blue)
🔶 ANIMATION
Randomly moving snowflakes are added to give it a wintry character.
There are also randomly moving stars in the tree.
Garland rotations, style, and color can be adjusted, together with the width and offset of the tree, put your tree anywhere on your chart!
Disabling the "static tree" setting will make the needles 'move'.
Have you happened to see the precious reindeer on the right? This proud reindeer moves towards the most recent candle. Who knows what this reindeer might be bringing to the tree?
🔶 SETTINGS
Width: Width of tree.
Offset: Offset of the tree.
Garland rotations: Amount of rotations, a high number gives other styles.
Color/Style: sets the color & style of garland stars.
Needles: sets the needle color.
Static Tree: Allows the tree needles to 'move' with each tick.
Reindeer Speed: Controls how fast the deer moves toward the most recent bar.
🔶 MESSAGE FROM THE LUXALGO TEAM
It has been an honor to contribute to the TradingView community and we are always so happy to see your supportive messages on our scripts.
We have posted a total of 78 script publications this year, which is no small feat & was only possible thanks to our team of Wizard developers @alexgrover + @dgtrd + @fikira , the development team behind Pine Script, and of course to the support of our legendary community.
Happy Holidays to you all, and we'll see ya next year! ☃️
SMA Comparison with Buy and Sell Signals ShrutIndicator Name: SMA Comparison with Buy and Sell Signals
Overlay: Enabled (Indicator is displayed on the main price chart)
Description:
The "SMA Comparison with Buy and Sell Signals" indicator is designed to identify potential buying and selling opportunities in a financial instrument by comparing three Simple Moving Averages (SMAs) – the 20-day SMA, 50-day SMA, and 200-day SMA.
Features:
Simple Moving Averages (SMAs):
Calculates and displays three SMAs based on the closing price: SMA-20, SMA-50, and SMA-200.
Buy and Sell Conditions:
Buy Condition : Triggered when the 200-day SMA is greater than the 50-day SMA, the 50-day SMA is greater than the 20-day SMA, and the current closing price is lower than the 20-day SMA.
Sell Condition: Triggered when the 200-day SMA is less than the 50-day SMA, the 50-day SMA is less than the 20-day SMA, and the current closing price is higher than the 20-day SMA.
Signal Generation:
Generates buy and sell signals on the chart based on the identified conditions.
Implements a 15-day cooldown period between consecutive buy or sell signals to prevent frequent signals in volatile market conditions.
Signal Display:
Displays buy signals as green triangle shapes below the price bars.
Displays sell signals as red triangle shapes above the price bars.
Usage:
Buy Signals: Considered when the green triangle shapes (buy signals) appear below the price bars, indicating a potential buying opportunity based on the defined SMA conditions.
Sell Signals: Considered when the red triangle shapes (sell signals) appear above the price bars, indicating a potential selling opportunity based on the defined SMA conditions.
Notes:
This indicator is customizable and can be adjusted by modifying the conditions based on specific trading strategies and preferences.
Traders should consider additional analysis and risk management strategies before making trading decisions based solely on the indicator signals.
A_Traders_Edge__LibraryLibrary "A_Traders_Edge__Library"
- A Trader's Edge (ATE)_Library was created to assist in constructing Market Overview Scanners (MOS)
LabelLocation(_firstLocation)
This function is used when there's a desire to print an assets ALERT LABELS at a set location on the scale that will
NOT change throughout the progression of the script. This is created so that if a lot of alerts are triggered, they
will stay relatively visible and not overlap each other. Ex. If you set your '_firstLocation' parameter as 1, since
there are a max of 40 assets that can be scanned, the 1st asset's location is assigned the value in the '_firstLocation' parameter,
the 2nd asset's location is the (1st asset's location+1)...and so on. If your first location is set to 81 then
the 1st asset is 81 and 2nd is 82 and so on until the 40th location = 120(in this particular example).
Parameters:
_firstLocation (simple int) : (simple int)
Optional(starts at 1 if no parameter added).
Location that you want the first asset to print its label if is triggered to do so.
ie. loc2=loc1+1, loc3=loc2+1, etc.
Returns: Returns 40 output variables each being a different location to print the labels so that an asset is asssigned to
a particular location on the scale. Regardless of if you have the maximum amount of assets being screened (40 max), this
function will output 40 locations… So there needs to be 40 variables assigned in the tuple in this function. What I
mean by that is you need to have 40 output location variables within your tuple (ie. between the ' ') regarless of
if your scanning 40 assets or not. If you only have 20 assets in your scripts input settings, then only the first 20
variables within the ' ' Will be assigned to a value location and the other 20 will be assigned 'NA', but their
variables still need to be present in the tuple.
SeparateTickerids(_string)
You must form this single tickerID input string exactly as described in the scripts info panel (little gray 'i' that
is circled at the end of the settings in the settings/input panel that you can hover your cursor over this 'i' to read the
details of that particular input). IF the string is formed correctly then it will break up this single string parameter into
a total of 40 separate strings which will be all of the tickerIDs that the script is using in your MO scanner.
Parameters:
_string (simple string) : (string)
A maximum of 40 Tickers (ALL joined as 1 string for the input parameter) that is formulated EXACTLY as described
within the tooltips of the TickerID inputs in my MOS Scanner scripts:
assets = input.text_area(tIDset1, title="TickerID (MUST READ TOOLTIP)", tooltip="Accepts 40 TICKERID's for each
copy of the script on the chart. TEXT FORMATTING RULES FOR TICKERID'S:
(1) To exclude the EXCHANGE NAME in the Labels, de-select the next input option.
(2) MUST have a space (' ') AFTER each TickerID.
(3) Capitalization in the Labels will match cap of these TickerID's.
(4) If your asset has a BaseCurrency & QuoteCurrency (ie. ADAUSDT ) BUT you ONLY want Labels
to show BaseCurrency(ie.'ADA'), include a FORWARD SLASH ('/') between the Base & Quote (ie.'ADA/USDT')", display=display.none)
Returns: Returns 40 output variables of the different strings of TickerID's (ie. you need to output 40 variables within the
tuple ' ' regardless of if you were scanning using all possible (40) assets or not.
If your scanning for less than 40 assets, then once the variables are assigned to all of the tickerIDs, the rest
of the 40 variables in the tuple will be assigned "NA".
TickeridForLabelsAndSecurity(_includeExchange, _ticker)
This function accepts the TickerID Name as its parameter and produces a single string that will be used in all of your labels.
Parameters:
_includeExchange (simple bool) : (bool)
Optional(if parameter not included in function it defaults to false ).
Used to determine if the Exchange name will be included in all labels/triggers/alerts.
_ticker (simple string) : (string)
For this parameter, input the varible named '_coin' from your 'f_main()' function for this parameter. It is the raw
Ticker ID name that will be processed.
Returns: ( )
Returns 2 output variables:
1st ('_securityTickerid') is to be used in the 'request.security()' function as this string will contain everything
TV needs to pull the correct assets data.
2nd ('lblTicker') is to be used in all of the labels in your MOS as it will only contain what you want your labels
to show as determined by how the tickerID is formulated in the MOS's input.
InvalidTID(_tablePosition, _stackVertical, _close, _securityTickerid, _invalidArray)
This is to add a table in the middle right of your chart that prints all the TickerID's that were either not formulated
correctly in the '_source' input or that is not a valid symbol and should be changed.
Parameters:
_tablePosition (simple string) : (string)
Optional(if parameter not included, it defaults to position.middle_right). Location on the chart you want the table printed.
Possible strings include: position.top_center, position.top_left, position.top_right, position.middle_center,
position.middle_left, position.middle_right, position.bottom_center, position.bottom_left, position.bottom_right.
_stackVertical (simple bool) : (bool)
Optional(if parameter not included, it defaults to true). All of the assets that are counted as INVALID will be
created in a list. If you want this list to be prited as a column then input 'true' here.
_close (float) : (float)
If you want them printed as a single row then input 'false' here.
This should be the closing value of each of the assets being tested to determine in the TickerID is valid or not.
_securityTickerid (string) : (string)
Throughout the entire charts updates, if a '_close' value is never regestered then the logic counts the asset as INVALID.
This will be the 1st TickerID varible (named _securityTickerid) outputted from the tuple of the TickeridForLabels()
function above this one.
_invalidArray (string ) : (array string)
Input the array from the original script that houses all of the invalidArray strings.
Returns: (na)
Returns a table with the screened assets Invalid TickerID's. Table draws automatically if any are Invalid, thus,
no output variable to deal with.
LabelSizes(_barCnt, _lblSzRfrnce)
This function sizes your Alert Trigger Labels according to the amount of Printed Bars the chart has printed within
a set time period, while also keeping in mind the smallest relative reference size you input in the 'lblSzRfrnceInput'
parameter of this function. A HIGHER % of Printed Bars(aka...more trades occurring for that asset on the exchange),
the LARGER the Name Label will print, potentially showing you the better opportunities on the exchange to avoid
exchange manipulation liquidations.
*** SHOULD NOT be used as size of labels that are your asset Name Labels next to each asset's Line Plot...
if your MOS includes these as you want these to be the same size for every asset so the larger ones dont cover the
smaller ones if the plots are all close to each other ***
Parameters:
_barCnt (float) : (float)
Get the 1st variable('barCnt') from the 'PrintedBarCount' function's tuple and input it as this functions 1st input
parameter which will directly affect the size of the 2nd output variable ('alertTrigLabel') outputted by this function.
_lblSzRfrnce (string) : (string)
Optional(if parameter not included, it defaults to size.small). This will be the size of the 1st variable outputted
by this function ('assetNameLabel') BUT also affects the 2nd variable outputted by this function.
Returns: ( )
Returns 2 variables:
1st output variable ('AssetNameLabel') is assigned to the size of the 'lblSzRfrnceInput' parameter.
2nd output variable('alertTrigLabel') can be of variying sizes depending on the 'barCnt' parameter...BUT the smallest
size possible for the 2nd output variable ('alertTrigLabel') will be the size set in the 'lblSzRfrnceInput' parameter.
AssetColor()
This function is used to assign 40 different colors to 40 variables to be used for the different labels/plots.
Returns: Returns 40 output variables each with a different color assigned to them to be used in your plots & labels.
Regardless of if you have the maximum amount of assets your scanning(40 max) or less,
this function will assign 40 colors to 40 variables that you have between the ' '.
PrintedBarCount(_time, _barCntLength, _barCntPercentMin)
The Printed BarCount Filter looks back a User Defined amount of minutes and calculates the % of bars that have printed
out of the TOTAL amount of bars that COULD HAVE been printed within the same amount of time.
Parameters:
_time (int) : (int)
The time associated with the chart of the particular asset that is being screened at that point.
_barCntLength (int) : (int)
The amount of time (IN MINUTES) that you want the logic to look back at to calculate the % of bars that have actually
printed in the span of time you input into this parameter.
_barCntPercentMin (int) : (int)
The minimum % of Printed Bars of the asset being screened has to be GREATER than the value set in this parameter
for the output variable 'bc_gtg' to be true.
Returns: ( )
Returns 2 outputs:
1st is the % of Printed Bars that have printed within the within the span of time you input in the '_barCntLength' parameter.
2nd is true/false according to if the Printed BarCount % is above the threshold that you input into the '_barCntPercentMin' parameter.
RCI(_rciLength, _source, _interval)
You will see me using this a lot. DEFINITELY my favorite oscillator to utilize for SO many different things from
timing entries/exits to determining trends.Calculation of this indicator based on Spearmans Correlation.
Parameters:
_rciLength (int) : (int)
Amount of bars back to use in RCI calculations.
_source (float) : (float)
Source to use in RCI calculations (can use ANY source series. Ie, open,close,high,low,etc).
_interval (int) : (int)
Optional(if parameter not included, it defaults to 3). RCI calculation groups bars by this amount and then will.
rank these groups of bars.
Returns: (float)
Returns a single RCI value that will oscillates between -100 and +100.
RCIAVG(firstLength, _amtBtLengths, _rciSMAlen, _source, _interval)
20 RCI's are averaged together to get this RCI Avg (Rank Correlation Index Average). Each RCI (of the 20 total RCI)
has a progressively LARGER Lookback Length. Though the RCI Lengths are not individually adjustable,
there are 2 factors that ARE:
(1) the Lookback Length of the 1st RCI and
(2) the amount of values between one RCI's Lookback Length and the next.
*** If you set 'firstLength' to it's default of 200 and '_amtBtLengths' to it's default of 120 (aka AMOUNT BETWEEN LENGTHS=120)...
then RCI_2 Length=320, RCI_3 Length=440, RCI_4 Length=560, and so on.
Parameters:
firstLength (int) : (int)
Optional(if parameter is not included when the function is called, then it defaults to 200).
This parameter is the Lookback Length for the 1st RCI used in the RCI Avg.
_amtBtLengths (int) : (int)
Optional(if parameter not included when the function is called, then it defaults to 120).
This parameter is the value amount between each of the progressively larger lengths used for the 20 RCI's that
are averaged in the RCI Avg.
***** BEWARE ***** Too large of a value here will cause the calc to look back too far, causing an error(thus the value must be lowered)
_rciSMAlen (int) : (int)
Unlike the Single RCI Function, this function smooths out the end result using an SMA with a length value that is this parameter.
_source (float) : (float)
Source to use in RCI calculations (can use ANY source series. Ie, open,close,high,low,etc).
_interval (int) : (int)
Optional(if parameter not included, it defaults to 3). Within the RCI calculation, bars next to each other are grouped together
and then these groups are Ranked against each other. This parameter is the number of adjacent bars that are grouped together.
Returns: (float)
Returns a single RCI value that is the Avg of many RCI values that will oscillate between -100 and +100.
PercentChange(_startingValue, _endingValue)
This is a quick function to calculate how much % change has occurred between the '_startingValue' and the '_endingValue'
that you input into the function.
Parameters:
_startingValue (float) : (float)
The source value to START the % change calculation from.
_endingValue (float) : (float)
The source value to END the % change caluclation from.
Returns: Returns a single output being the % value between 0-100 (with trailing numbers behind a decimal). If you want only
a certain amount of numbers behind the decimal, this function needs to be put within a formatting function to do so.
Rescale(_source, _oldMin, _oldMax, _newMin, _newMax)
Rescales series with a known '_oldMin' & '_oldMax'. Use this when the scale of the '_source' to
rescale is known (bounded).
Parameters:
_source (float) : (float)
Source to be normalized.
_oldMin (int) : (float)
The known minimum of the '_source'.
_oldMax (int) : (float)
The known maximum of the '_source'.
_newMin (int) : (float)
What you want the NEW minimum of the '_source' to be.
_newMax (int) : (float)
What you want the NEW maximum of the '_source' to be.
Returns: Outputs your previously bounded '_source', but now the value will only move between the '_newMin' and '_newMax'
values you set in the variables.
Normalize_Historical(_source, _minimumLvl, _maximumLvl)
Normalizes '_source' that has a previously unknown min/max(unbounded) determining the max & min of the '_source'
FROM THE ENTIRE CHARTS HISTORY. ]
Parameters:
_source (float) : (float)
Source to be normalized.
_minimumLvl (int) : (float)
The Lower Boundary Level.
_maximumLvl (int) : (float)
The Upper Boundary Level.
Returns: Returns your same '_source', but now the value will MOSTLY stay between the minimum and maximum values you set in the
'_minimumLvl' and '_maximumLvl' variables (ie. if the source you input is an RSI...the output is the same RSI value but
instead of moving between 0-100 it will move between the maxand min you set).
Normailize_Local(_source, _length, _minimumLvl, _maximumLvl)
Normalizes series with previously unknown min/max(unbounded). Much like the Normalize_Historical function above this one,
but rather than using the Highest/Lowest Values within the ENTIRE charts history, this on looks for the Highest/Lowest
values of '_source' within the last ___ bars (set by user as/in the '_length' parameter. ]
Parameters:
_source (float) : (float)
Source to be normalized.
_length (int) : (float)
The amount of bars to look back to determine the highest/lowest '_source' value.
_minimumLvl (int) : (float)
The Lower Boundary Level.
_maximumLvl (int) : (float)
The Upper Boundary Level.
Returns: Returns a single output variable being the previously unbounded '_source' that is now normalized and bound between
the values used for '_minimumLvl'/'_maximumLvl' of the '_source' within the user defined lookback period.
ICT TGIF_V2 [MK]The ICT T.G.I.F (Thank God Its Friday) works on the following strategy:
1. Friday makes the High/Low of the Week.
2. The Weekly High/Low range is used to calculate 20-30% levels. (see chart above)
3. Trades are taken in the Friday PM session (NY EST) with the idea that price may retrace to the 20-30% level.
The indicator plots the following levels:
1. Week High
2. Week Low
3. Week Open
3. 20-30% level in upper part of weekly range (only shows if Friday has made the high of the week)
4. 20-30% level in lower part of weekly range (only shows if Friday has made the low of the week)
It is possible to show all historical levels listed above for the purpose of back-testing the TGIF strategy.
Also it is possible to disable all the historical and current levels, in which case only the 20-30% levels will show when Friday has made the Week High/Low (the 20-30% level only shows from 1200-1600 on Friday to keep charts as clean as possible.
Users of this script, and any script for that matter, should always do proper back-testing before taking any trades.
Many thanks should be given to ICT (The Inner Circle Trader) for bringing this strategy to the trading community.
Below shows indicator with all levels turned ON
Below shows indicator with all levels turned OFF (this allows for cleaner charts)
Turtle Soup IndicatorTurtle Soup Indicator plots a shape when we have a 20-period high or 20-period low.
Turtle Soup Setup
The Turtle Soup setup was published in the book Street Smarts by Laurence A Connors and Linda Raschke. You can learn about it there. It is a great setup for false breakouts or breakdowns in the group failure tests.
Going long
1) We have a new 20-period low
2) that must have occured at least four trading sessions earlier <- this is very important
Then we place a buy stop above 5-10 ticks or 5 to 10 cents above the previous 20-period low.
If filled immediately place a good til cancelled sell stop one tick or one cent below todays low.
Turtle Soup Plus One
Similar to above but occurs one day later. It should close at/below previous 20-period low.
Buy stop at earlier 20 day low. Cancel fi not filled on day 2.
Take partials within 2-6 bars on this one and trail stop rest of position.
Going short
Reverse
Time frames
Works on all timeframes. Only adjust stoplosses accordingly to chosen timeframe.
Settings
You can change the color, shape and placement of the indicator shape. I actually prefer a grey color for both highs and lows as the color actually doesn't add much information. The placement says it all but it is up to you to change this as you like.