Z-Score Normalized VIX StrategyThis strategy leverages the concept of the Z-score applied to multiple VIX-based volatility indices, specifically designed to capture market reversals based on the normalization of volatility. The strategy takes advantage of VIX-related indicators to measure extreme levels of market fear or greed and adjusts its position accordingly.
1. Overview of the Z-Score Methodology
The Z-score is a statistical measure that describes the position of a value relative to the mean of a distribution in terms of standard deviations. In this strategy, the Z-score is calculated for various volatility indices to assess how far their values are from their historical averages, thus normalizing volatility levels. The Z-score is calculated as follows:
Z = \frac{X - \mu}{\sigma}
Where:
• X is the current value of the volatility index.
• \mu is the mean of the index over a specified period.
• \sigma is the standard deviation of the index over the same period.
This measure tells us how many standard deviations the current value of the index is away from its average, indicating whether the market is experiencing unusually high or low volatility (fear or calm).
2. VIX Indices Used in the Strategy
The strategy utilizes four commonly referenced volatility indices:
• VIX (CBOE Volatility Index): Measures the market’s expectations of 30-day volatility based on S&P 500 options.
• VIX3M (3-Month VIX): Reflects expectations of volatility over the next three months.
• VIX9D (9-Day VIX): Reflects shorter-term volatility expectations.
• VVIX (VIX of VIX): Measures the volatility of the VIX itself, indicating the level of uncertainty in the volatility index.
These indices provide a comprehensive view of the current volatility landscape across different time horizons.
3. Strategy Logic
The strategy follows a long entry condition and an exit condition based on the combined Z-score of the selected volatility indices:
• Long Entry Condition: The strategy enters a long position when the combined Z-score of the selected VIX indices falls below a user-defined threshold, indicating an abnormally low level of volatility (suggesting a potential market bottom and a bullish reversal). The threshold is set as a negative value (e.g., -1), where a more negative Z-score implies greater deviation below the mean.
• Exit Condition: The strategy exits the long position when the combined Z-score exceeds the threshold (i.e., when the market volatility increases above the threshold, indicating a shift in market sentiment and reduced likelihood of continued upward momentum).
4. User Inputs
• Z-Score Lookback Period: The user can adjust the lookback period for calculating the Z-score (e.g., 6 periods).
• Z-Score Threshold: A customizable threshold value to define when the market has reached an extreme volatility level, triggering entries and exits.
The strategy also allows users to select which VIX indices to use, with checkboxes to enable or disable each index in the calculation of the combined Z-score.
5. Trade Execution Parameters
• Initial Capital: The strategy assumes an initial capital of $20,000.
• Pyramiding: The strategy does not allow pyramiding (multiple positions in the same direction).
• Commission and Slippage: The commission is set at $0.05 per contract, and slippage is set at 1 tick.
6. Statistical Basis of the Z-Score Approach
The Z-score methodology is a standard technique in statistics and finance, commonly used in risk management and for identifying outliers or unusual events. According to Dumas, Fleming, and Whaley (1998), volatility indices like the VIX serve as a useful proxy for market sentiment, particularly during periods of high uncertainty. By calculating the Z-score, we normalize volatility and quantify the degree to which the current volatility deviates from historical norms, allowing for systematic entry and exit based on these deviations.
7. Implications of the Strategy
This strategy aims to exploit market conditions where volatility has deviated significantly from its historical mean. When the Z-score falls below the threshold, it suggests that the market has become excessively calm, potentially indicating an overreaction to past market events. Entering long positions under such conditions could capture market reversals as fear subsides and volatility normalizes. Conversely, when the Z-score rises above the threshold, it signals increased volatility, which could be indicative of a bearish shift in the market, prompting an exit from the position.
By applying this Z-score normalized approach, the strategy seeks to achieve more consistent entry and exit points by reducing reliance on subjective interpretation of market conditions.
8. Scientific Sources
• Dumas, B., Fleming, J., & Whaley, R. (1998). “Implied Volatility Functions: Empirical Tests”. The Journal of Finance, 53(6), 2059-2106. This paper discusses the use of volatility indices and their empirical behavior, providing context for volatility-based strategies.
• Black, F., & Scholes, M. (1973). “The Pricing of Options and Corporate Liabilities”. Journal of Political Economy, 81(3), 637-654. The original Black-Scholes model, which forms the basis for many volatility-related strategies.
Cari dalam skrip untuk "文华财经tick价格"
Manual Trade Ledger# Manual Options Trade Journal – Pine Script
This project is a Pine Script implementation for TradingView that allows users to manually log options trades into a live table overlay on a chart.
## ✨ Features
- 📥 Manual entry of ticker, premium, contracts, strike, expiry, notes
- 📈 Auto-filled live data: timestamp, price, and % change since first log
- 🧾 Tabular logging for trade journaling and exporting to Google Sheets
- 🔧 Fully customizable and designed to support product experimentation
## 🎯 Use Case
This project was built to support a real-world trading workflow for options traders who:
- Prefer to manually log trades while watching charts
- Want a visual, copyable ledger that evolves in real-time
- Want to later analyze entries/exits in spreadsheets or dashboards
## 🛠 How It Works
1. Toggle the `Log Trade` switch inside TradingView’s indicator settings
2. Fill in your trade metadata (ticker, premium, etc.)
3. The script captures timestamp, price, and calculates % change
4. Each new trade adds a row to the table (up to 50 max)
JsonAlertJsonAlert Library – Convert TradingView Alerts to JSON for Server Processing! 📡
🚀 The JsonAlert library makes it easy to send TradingView alerts as structured JSON to your server, allowing seamless integration with automated trading systems, databases, or webhook-based services.
📌 Features:
✅ Converts TradingView alert data into JSON format
✅ Supports custom key-value pairs for flexibility
✅ Allows frequency control (once per bar, once per bar close, every update)
✅ Easy to integrate with server-side PHP or other languages
Note that you have to pass one string array for keys and one string array for values , also you should pass alert frequency .
📖 Example Usage in Pine Script:
//@version=6
indicator("My script" , overlay = true)
import Penhan/JsonAlert/1 as alrt
if high > low
var array keys = array.from("ticker", "timeframe", "pattern")
var array values = array.from( syminfo.ticker , timeframe.period , str.tostring(123.45) )
alrt.alarm (keys, values , alert.freq_once_per_bar)
📡 Json Output Example:
{"ticker": "BTCUSDT","timeframe": "1","pattern": "123.45"}
🖥️ Server-Side PHP Example:
There you can integrate JsonAlert with your server in seconds! :)
Similar Bars Pattern DetecterDescription:
The Similar Bars Pattern Detector is a professional Pine Script indicator designed for TradingView users who want to identify sequences of similar candlesticks in a row. Whether you're looking for bullish or bearish patterns, this tool helps you spot repeating formations based on customizable settings.
Features:
✅ Detects patterns of consecutive similar bars
✅ Works for both bullish and bearish trends
✅ Uses tick-based range filtering for precise detection
✅ Fully customizable: adjust number of candles, trend type, and range
✅ Highlights detected patterns directly on the chart
🔹 Ideal for traders who rely on pattern recognition to confirm trends and price movements.
🔹 Works across all markets and timeframes.
💡 How to Use:
1️⃣ Set the number of candles to detect a repeating pattern.
2️⃣ Choose bullish or bearish trend direction.
3️⃣ Adjust the tick range to fine-tune pattern similarity.
🚀 Enhance your trading analysis with this powerful pattern recognition tool!
Display Stocks with Change%Display Stocks with Change% - Pine Script™ Indicator
Overview
The Display Stocks with Change% indicator is designed for TradingView to highlight specific stocks and their percentage change on a given date. The indicator allows users to input custom stock names, dates, and percentage changes, displaying relevant information directly on the chart. Additionally, it provides an option to connect the stock's high price with a label using customizable line styles.
Features
Custom Stock List: Users can input multiple stock names along with corresponding dates and percentage changes.
Date-Specific Highlighting: The script dynamically checks if the current bar's date matches any input date and displays relevant stock data.
Color-Coded Percentage Change: Stocks with a negative change are displayed in red, while positive or neutral changes are in black.
Connecting Lines: An option to enable or disable dotted, dashed, or solid lines connecting the stock's high price to the label.
Automatic Label Positioning: Adjusts label alignment based on recent price movement to avoid overlap and enhance visibility.
Input Parameters
COB (Close of Business Dates): A comma-separated list of dates in DD-MM-YYYY format.
Stock Names: A comma-separated list of stock tickers.
Change Percentage: Corresponding percentage changes for the listed stocks.
Show Connecting Lines: Boolean toggle to enable or disable connecting lines.
Line Color & Style: Customizable line color and style (solid, dotted, or dashed).
How It Works
Data Processing: The script splits user inputs into arrays and iterates through them.
Date Matching: It checks if the current bar's date matches any of the provided COB dates.
Label Formatting: When a match is found, it constructs a label containing the stock name and its percentage change.
Text Alignment & Factor Adjustments: Dynamically determines label positioning based on recent price movements.
Label Display: If any matching stocks are found, a label is created at the stock's high price.
Connecting Line (Optional): If enabled, a line is drawn from the stock’s high to the label for better visualization.
Key Benefits for Traders:
Track Multiple Stocks at Once – Displays stock names and their percentage changes on specific dates automatically.
Saves Time – No need to manually check historical data; the indicator overlays key stock movements.
Visual Insights – Labels & color coding (red for negative, black for positive) make it easy to spot trends.
Customizable & Automated – Add your own stocks, dates, and percentage changes; the script adjusts dynamically.
📌 Use Case Example:
You’re tracking MRPL, CARTRADE, and JSWENERGY on specific dates. Instead of digging through historical data, this indicator automatically highlights the stock’s movement on that date, allowing you to make faster, informed trading decisions.
HTF Anchored FanSimilar to an Anchored VWAP, this lets you click a bar on an Daily, Weekly, or Monthly chart to add an "Anchored Fan" which displays lines at up to 6 levels above and below the chosen Anchor Point. Useful to measure the retracement during swing moves.
You can reposition the fan by either hovering over the anchor or by clicking the name of the study to "activate" it, and then dragging. You can also change the Anchor Point in Settings.
By default the anchor uses the bar Close, but you can change this manually in settings OR you can use the fancy "Auto high/low" mode which is handy if you are mainly dropping the fan on local swing highs and lows.
The default line measures were chosen for ES (Futures) but the study should be usable with nearly anything as long as you adjust the settings to something appropriate for the ticker. If you want to use this on NQ, for example, it would be reasonable to multiple each of these settings by 3.5 or so.
NOTE: If the fan is way off the left side of the chart it's generally easiest to use Settings to move it back to close to "now".
TestMA-STATEOverview:
This Pine Script (version 6) is designed to generate trading events based on moving average (MA) behavior and dynamically calculated percentiles. It leverages a custom state machine library (version 7) from decrypt_capital to track and manage state transitions related to MA conditions, and it triggers alerts (and optionally, chart labels) when specific state transitions occur.
Key Components:
License & Metadata:
The script is distributed under the Mozilla Public License 2.0.
It carries copyright by decrypt_capital.
The title ("TestMA-STATE") and short title ("MA-STATE") are defined, and the script runs on an overlay with extended backtracking and drawing limits.
State Machine Integration:
The script imports the lib_statemachine_modified library (version 7) using the alias modSM.
A persistent state machine instance (MovingAverageDirection_SM) is created to manage various MA-related states.
Several state constants are defined to represent different market conditions, such as:
MA_SHORT_ABOVE_OVERBOUGHT: When the short MA low is above the overbought threshold.
MA_SHORT_CROSSUNDER_MID & MA_SHORT_CROSSUNDER_BIG: Conditions for bearish crossunders.
MA_SHORT_BELOW_OVERSOLD: When the short MA high is below the oversold threshold.
MA_SHORT_CROSSOVER_MID & MA_SHORT_CROSSOVER_BIG: Conditions for bullish crossovers.
Inputs & MA Calculation:
Users can choose the type of moving average (EMA, SMA, WMA, VWMA) and adjust lengths for short, mid, and big MAs.
Additional inputs include lookback length for percentile calculations and percentile thresholds for determining overbought and oversold boundaries.
The script computes:
Short MA Low and High: Based on the low and high series.
Mid MA and Big MA: Based on the average price (ohlc4).
Dynamic Percentile Boundaries:
Two functions (f_getPercentile() and f_getPercentileArr()) calculate dynamic percentile values from the MA data.
These functions determine the oversold and overbought boundaries used in the state transition conditions.
Timestamp & Alert Header Formatting:
A helper function (f_formatTimestamp()) formats timestamps into a human-readable form (e.g., "Tue 12 Mar 16:30").
This formatted time, along with ticker information and other details, is used to build an alert header.
State Transitions & Alerts:
The script calls the state machine’s step() method multiple times with conditions based on the relationship between MA values and the percentile boundaries.
For example:
A bullish condition is triggered when the short MA low moves above the overbought threshold.
A bearish condition is triggered when the short MA high falls below the oversold boundary.
Transitions are further refined by checking if the MA is rising or falling.
When specific state transitions occur (e.g., MA_SHORT_CROSSOVER_MID after MA_SHORT_BELOW_OVERSOLD), the script:
Checks that the transition is recent (using the barsSinceState() method).
Optionally creates a label on the chart.
Triggers an alert with a descriptive message.
Chart Plotting:
The script plots the calculated moving averages (short, mid, and optionally big) on the chart.
It also plots the dynamic percentile boundaries for visual reference.
Purpose & Usage:
Trading Signal Generation:
The primary goal is to monitor key MA conditions and trigger alerts when significant crossovers or crossunders occur. These events—such as bullish crossovers when the market recovers from oversold conditions or bearish crossunders when the market retracts from overbought conditions—can be used as trading signals.
Visualization:
Users have options to display the various moving averages and percentile boundaries directly on the chart, as well as optional labels that mark when an alert is generated.
Alerting:
When specific state transitions are detected, the script constructs and sends an alert message with a timestamp, ticker, and descriptive text, aiding traders in making timely decisions.
Intraday Anchored FanSimilar to an Anchored VWAP, this lets you click a bar on an Intraday chart to add an "Anchored Fan" which displays lines at up to 6 levels above and below the chosen Anchor Point. Useful to measure the retracement during swing moves.
You can reposition the fan by either hovering over the anchor or by clicking the name of the study to "activate" it, and then dragging. You can also change the Anchor Point in Settings.
By default the anchor uses the bar Close, but you can change this manually in settings OR you can use the fancy "Auto high/low" mode which is handy if you are mainly dropping the fan on local swing highs and lows.
The default line measures were chosen for ES (Futures) but the study should be usable with nearly anything as long as you adjust the settings to something appropriate for the ticker. If you want to use this on NQ, for example, it would be reasonable to multiple each of these settings by 3.5 or so.
NOTE: If the fan is off the left side of the chart, one way to see the Anchor handle again easily is to switch to a higher timeframe; for example if you are on the 5min maybe use the 15min or hourly to find the handle -- if it is WAY off the left side (for example if you let many days pass without advancing it) it's generally easiest to use Settings to move it back to "now".
Machine Learning + IchimokuIchimoku Cloud + Machine Learning Levels is an advanced indicator that merges a classic trend tool with machine-learned supply & demand zones. Combining the two can help traders identify trends and key price zones with greater confidence when both signals align!
How it Works
The Ichimoku Cloud component identifies the trend direction and momentum at a glance – it shows support/resistance areas via its cloud (Kumo) and signals potential trend changes when the Tenkan-sen and Kijun-sen lines cross. Meanwhile, the Machine Learning module analyzes historical price data to project potential support and resistance levels (displayed as horizontal lines) that the algorithm deems significant. By combining these, the script offers a two-layer confirmation: Ichimoku outlines the broader trend and equilibrium, while the ML levels pinpoint specific price levels where the price may react. For example, if price is above the Ichimoku Cloud (uptrend) and also near an ML-predicted support, the confluence of these signals strengthens the case for a bounce.
How to Use
Apply the indicator to a chart like any other TradingView script. It works on multiple asset classes (see supported list below). Once added:
Ichimoku Lines
Tenkan-sen (Blue): Short-term average reflecting recent highs/lows.
Kijun-sen (Red): Medium-term baseline for support/resistance.
Senkou Span A (Green) & Senkou Span B (Orange) form the “Cloud” (Kumo). Price above the Cloud often signals a bullish environment; price below it can signal a bearish environment.
Chikou Span (Purple): Plots current closing price shifted back, helping gauge momentum vs. past price.
ML-Predicted Support/Resistance Lines (Green/Red Horizontal Lines)
Green Horizontal Lines – Potential support zones.
Red Horizontal Lines – Potential resistance zones.
These dynamically adjust based on the specific asset and are updated as new historical data becomes available.
Password (for Advanced Features)
In the indicator’s Settings, there is an input field labeled “Password.” The password corresponds to the ticker(s) listed below.
Stocks
TSLA, NVDA, AAPL, AMZN, PLTR, AMD, META, MSFT, MSTR, GOOG, GME, COIN, NFLX, BABA, UBER, HOOD, NKE
Cryptocurrencies
ETH, BTC, SOL, BNB, XRP, ADA, DOT, DOGE, LTC, JUP, LINK, INJ, FET, SAND, HBAR, TRX, SHIB, UNI
(If you attach the indicator to any unlisted ticker, you will only see the Ichimoku Cloud.)
Why It’s Unique
This script is a fresh take on market analysis – it’s original in fusing Ichimoku’s visual trend mapping with machine learning. The Ichimoku framework provides time-proven trend insight, and the ML levels add forward-looking context specific to each asset. By uniting them, the indicator aims to filter out false signals and highlight high-probability zones. No repainting occurs: Ichimoku values are based on closed data, and ML levels are computed from historical patterns (they do not retroactively change).
Ichimoku Cloud + Machine Learning Levels offers an informative blend of old and new analysis techniques. It clearly shows where price is relative to trend (via Ichimoku) and where it might react in the future (via ML levels). Use it to gain a richer view of the market’s behavior. I hope this indicator provides valuable insights for your trading decisions. Happy trading!
Futures Open/High/Low TablesAdds (up to) 3 tables to a chart, displaying Open/High/Low data for today (RTH and extended hours), yesterday, and the current week / month -- to help with intraday analysis of a futures ticker.
The tables only appear on intraday charts (5min, 30min, etc). On a Daily/Weekly/etc chart they are not calculated or shown.
In addition to Open/High/Low, the "Current" table in the top-right shows a live measurement of # of points from the open, the RTH open, and the highs/lows.
Lastly, the 9:30am ET open and the 4pm RTH close are by default marked with a shaded background (on intraday charts) for easy visual reference, and also to help with adjusting the session time to accommodate time zone issues if they occur.
Tested on ES in Eastern Time Zone, but should work on any futures instrument and any time zone by adjusting the Session Time setting.
Delta VolDelta Volume BTC - Multi Pair
Description The Delta Volume BTC - Multi Pair indicator visualizes the balance between buying and selling volume across multiple Bitcoin exchanges. By analyzing price action within each bar, it provides insight into underlying market pressure that traditional volume indicators miss. This indicator allows traders to:
Compare volume flow across Coinbase, Binance, and Binance Perpetual markets
Identify divergences between exchanges that may signal market shifts
Detect accumulation or distribution patterns through volume imbalances
View exchanges individually or in aggregate for comprehensive analysis
Calculation Methods The indicator offers three volume delta calculation methods:
VWAP Based (default):
price_range = high - low
buy_percent = (close - low) / price_range
sell_percent = (high - close) / price_range
delta = volume * (buy_percent - sell_percent)
This method distributes volume based on where price closed within the bar's range, providing a nuanced view of buying/selling pressure.
Tick Based :
delta = volume * sign(hlc3 - previous_hlc3)
This approach assigns volume based on the direction of typical price movement between bars, capturing momentum between periods.
Simple :
delta = close > open ? volume : close < open ? -volume : 0
A straightforward method that assigns positive volume to up bars and negative volume to down bars.
When Aggregate Mode is enabled, the indicator sums the volume deltas from all selected exchanges:
aggregate_delta = coinbase_delta + binance_delta + binance_perp_delta
Features
Multi-Exchange Support : Track volume delta across Coinbase, Binance, and Binance Perpetual futures
Advanced Calculation Methods : Choose between VWAP-based, tick-based, or simple volume delta algorithms
Flexible Display Options : Visualize as histogram, columns, area, or line charts
Customizable Colors : Distinct color schemes for each exchange and direction
Smoothing Options : Apply EMA, SMA, or WMA to reduce noise
Aggregate Mode : Combine all exchanges to see total market flow
How to Use
Individual Exchange Analysis : Uncheck "Aggregate Mode" to see each exchange separately, revealing where smart money may be positioning
Divergence Detection : Watch for one exchange showing buying while others show selling
Volume Trend Confirmation : Strong price moves should be accompanied by strong delta in the same direction
Liquidity Analysis : Compare spot vs futures volume delta to identify market sentiment shifts
The Delta Volume BTC - Multi Pair indicator helps identify the "hidden" buying and selling pressure that may not be apparent from price action alone, giving you an edge in understanding market dynamics across the Bitcoin ecosystem.
TPO IQ [TradingIQ]Hello Traders!
Introducing "TPO IQ"!
TPO IQ offers a Time Price Opportunity profile with several customization options that packs several related features to help traders navigate the generated profiles!
Features
TPO Profiles
Single Print identification
Initial Balance Identification
Can be anchored to timeframe change
Can be anchored to fixed time interval
Last profile detailed visuals
Customizable value area percentage
POC identification
Mid-point identification
TPO Profiles
A TPO profile is a market profile visualization that details how much time was spent at each price level throughout the time interval.
The image above further explains what a TPO Profile is!
Each letter corresponds to a candlestick. With this information, traders are able to visualize how much time was spent at each price area.
With customizable gradient colors, specifically in this example, blocks colored red are the earliest times in the profile, blocks colored green are in the beginning half of the time midpoint of the profile. Blue blocks represent the first half of the end of the time period, and purple blocks correspond to the end of the time period.
Please note that this form of TPO profile generation will only occur when the most recent profile uses less than 500 alphabet characters! If more than 500 characters are preset, TPO IQ will revert to using labels!
Initial Balance
TPO IQ also identifies the initial balance range and all alphabet characters that form within it!
The image above exemplifies this feature. The initial balance range is denoted by a a neon-blue line, with a blue circle showing the opening price. All characters within the initial balance range are highlighted blue, which is a feature that can be disabled with customizable colors.
POC
TPO IQ also identifies the point of control (POC) of the TPO Profile.
The point of control for the profile is labeled yellow by default, and shows where price spent the most time throughout the time period.
The image above shows the POC for the time period being identified by TPO IQ.
Value Area
TPO IQ also identifies the value area of the profile. A customizable percentage that is 70% by default, the value area of a TPO profile shows where price traded the majority of the time.
The image above further explains this feature. For this example, with the value area percentage being set to 70%, the value area high and value area low show the price zone that prices traded at 70% of the time throughout the profile.
TPO Midpoint
In addition to the POC, the TPO profile midpoint is also identified by TPO IQ.
The TPO midpoint simply corresponds to the middle price between the session's high and low!
Fixed Interval Mode
By default, TPO IQ recalculates every day, but this can also be changed to a customizable session time, such as 4 hours. If 4 hours is selected, then a new TPO profile will be generated every 4 hours.
However, in Fixed Interval mode, a TPO profile will be generated through a user-defined time range, such as 1300-1700.
In the image above, Fixed Interval mode is applied with a time range of 1300-1700 and, consequently, TPO IQ generates a new profile throughout every 1300-1700 time range!
This feature allows traders to specify time ranges of interest to generate TPO profiles for!
TPO Overview Label
The TPO overview label shows key statistics for the TPO profile generated throughout the trading session!
The "TPO Count" statistic shows how many alphabetical letters were generated for the profile, which is an adequate method to determine the session's volatility and price range.
The "Tick Levels" statistic shows how many tick levels were used to create the profile - another method to determine the volatility and price range of the session.
The "Top Letter" statistic shows which letter appears most throughout the profile. In this example, the top letter was "f", which means throughout creation of the profile, the letter "f" appeared the most!
And that's all for now!
If you have any feedback or new feature ideas for TPO IQ please feel free to share them with us!
Thank you traders!
AO/AC Trading Zones Strategy [Skyrexio] Overview
AO/AC Trading Zones Strategy leverages the combination of Awesome Oscillator (AO), Acceleration/Deceleration Indicator (AC), Williams Fractals, Williams Alligator and Exponential Moving Average (EMA) to obtain the high probability long setups. Moreover, strategy uses multi trades system, adding funds to long position if it considered that current trend has likely became stronger. Combination of AO and AC is used for creating so-called trading zones to create the signals, while Alligator and Fractal are used in conjunction as an approximation of short-term trend to filter them. At the same time EMA (default EMA's period = 100) is used as high probability long-term trend filter to open long trades only if it considers current price action as an uptrend. More information in "Methodology" and "Justification of Methodology" paragraphs. The strategy opens only long trades.
Unique Features
No fixed stop-loss and take profit: Instead of fixed stop-loss level strategy utilizes technical condition obtained by Fractals and Alligator to identify when current uptrend is likely to be over. In some special cases strategy uses AO and AC combination to trail profit (more information in "Methodology" and "Justification of Methodology" paragraphs)
Configurable Trading Periods: Users can tailor the strategy to specific market windows, adapting to different market conditions.
Multilayer trades opening system: strategy uses only 10% of capital in every trade and open up to 5 trades at the same time if script consider current trend as strong one.
Short and long term trend trade filters: strategy uses EMA as high probability long-term trend filter and Alligator and Fractal combination as a short-term one.
Methodology
The strategy opens long trade when the following price met the conditions:
1. Price closed above EMA (by default, period = 100). Crossover is not obligatory.
2. Combination of Alligator and Williams Fractals shall consider current trend as an upward (all details in "Justification of Methodology" paragraph)
3. Both AC and AO shall print two consecutive increasing values. At the price candle close which corresponds to this condition algorithm opens the first long trade with 10% of capital.
4. If combination of Alligator and Williams Fractals shall consider current trend has been changed from up to downtrend, all long trades will be closed, no matter how many trades has been opened.
5. If AO and AC both continue printing the rising values strategy opens the long trade on each candle close with 10% of capital while number of opened trades reaches 5.
6. If AO and AC both has printed 5 rising values in a row algorithm close all trades if candle's low below the low of the 5-th candle with rising AO and AC values in a row.
Script also has additional visuals. If second long trade has been opened simultaneously the Alligator's teeth line is plotted with the green color. Also for every trade in a row from 2 to 5 the label "Buy More" is also plotted just below the teeth line. With every next simultaneously opened trade the green color of the space between teeth and price became less transparent.
Strategy settings
In the inputs window user can setup strategy setting:
EMA Length (by default = 100, period of EMA, used for long-term trend filtering EMA calculation).
User can choose the optimal parameters during backtesting on certain price chart.
Justification of Methodology
Let's explore the key concepts of this strategy and understand how they work together. We'll begin with the simplest: the EMA.
The Exponential Moving Average (EMA) is a type of moving average that assigns greater weight to recent price data, making it more responsive to current market changes compared to the Simple Moving Average (SMA). This tool is widely used in technical analysis to identify trends and generate buy or sell signals. The EMA is calculated as follows:
1.Calculate the Smoothing Multiplier:
Multiplier = 2 / (n + 1), Where n is the number of periods.
2. EMA Calculation
EMA = (Current Price) × Multiplier + (Previous EMA) × (1 − Multiplier)
In this strategy, the EMA acts as a long-term trend filter. For instance, long trades are considered only when the price closes above the EMA (default: 100-period). This increases the likelihood of entering trades aligned with the prevailing trend.
Next, let’s discuss the short-term trend filter, which combines the Williams Alligator and Williams Fractals. Williams Alligator
Developed by Bill Williams, the Alligator is a technical indicator that identifies trends and potential market reversals. It consists of three smoothed moving averages:
Jaw (Blue Line): The slowest of the three, based on a 13-period smoothed moving average shifted 8 bars ahead.
Teeth (Red Line): The medium-speed line, derived from an 8-period smoothed moving average shifted 5 bars forward.
Lips (Green Line): The fastest line, calculated using a 5-period smoothed moving average shifted 3 bars forward.
When the lines diverge and align in order, the "Alligator" is "awake," signaling a strong trend. When the lines overlap or intertwine, the "Alligator" is "asleep," indicating a range-bound or sideways market. This indicator helps traders determine when to enter or avoid trades.
Fractals, another tool by Bill Williams, help identify potential reversal points on a price chart. A fractal forms over at least five consecutive bars, with the middle bar showing either:
Up Fractal: Occurs when the middle bar has a higher high than the two preceding and two following bars, suggesting a potential downward reversal.
Down Fractal: Happens when the middle bar shows a lower low than the surrounding two bars, hinting at a possible upward reversal.
Traders often use fractals alongside other indicators to confirm trends or reversals, enhancing decision-making accuracy.
How do these tools work together in this strategy? Let’s consider an example of an uptrend.
When the price breaks above an up fractal, it signals a potential bullish trend. This occurs because the up fractal represents a shift in market behavior, where a temporary high was formed due to selling pressure. If the price revisits this level and breaks through, it suggests the market sentiment has turned bullish.
The breakout must occur above the Alligator’s teeth line to confirm the trend. A breakout below the teeth is considered invalid, and the downtrend might still persist. Conversely, in a downtrend, the same logic applies with down fractals.
In this strategy if the most recent up fractal breakout occurs above the Alligator's teeth and follows the last down fractal breakout below the teeth, the algorithm identifies an uptrend. Long trades can be opened during this phase if a signal aligns. If the price breaks a down fractal below the teeth line during an uptrend, the strategy assumes the uptrend has ended and closes all open long trades.
By combining the EMA as a long-term trend filter with the Alligator and fractals as short-term filters, this approach increases the likelihood of opening profitable trades while staying aligned with market dynamics.
Now let's talk about the trading zones concept and its signals. To understand this we need to briefly introduce what is AO and AC. The Awesome Oscillator (AO), developed by Bill Williams, is a momentum indicator designed to measure market momentum by contrasting recent price movements with a longer-term historical perspective. It helps traders detect potential trend reversals and assess the strength of ongoing trends.
The formula for AO is as follows:
AO = SMA5(Median Price) − SMA34(Median Price)
where:
Median Price = (High + Low) / 2
SMA5 = 5-period Simple Moving Average of the Median Price
SMA 34 = 34-period Simple Moving Average of the Median Price
The Acceleration/Deceleration (AC) Indicator, introduced by Bill Williams, measures the rate of change in market momentum. It highlights shifts in the driving force of price movements and helps traders spot early signs of trend changes. The AC Indicator is particularly useful for identifying whether the current momentum is accelerating or decelerating, which can indicate potential reversals or continuations. For AC calculation we shall use the AO calculated above is the following formula:
AC = AO − SMA5(AO) , where SMA5(AO)is the 5-period Simple Moving Average of the Awesome Oscillator
When the AC is above the zero line and rising, it suggests accelerating upward momentum.
When the AC is below the zero line and falling, it indicates accelerating downward momentum.
When the AC is below zero line and rising it suggests the decelerating the downtrend momentum. When AC is above the zero line and falling, it suggests the decelerating the uptrend momentum.
Now let's discuss the trading zones concept and how it can create the signal. Zones are created by the combination of AO and AC. We can divide three zone types:
Greed zone: when the AO and AC both are rising
Red zone: when the AO and AC both are decreasing
Gray zone: when one of AO or AC is rising, the other is falling
Gray zone is considered as uncertainty. AC and AO are moving in the opposite direction. Strategy skip such price action to decrease the chance to stuck in the losing trade during potential sideways. Red zone is also not interesting for the algorithm because both indicators consider the trend as bearish, but strategy opens only long trades. It is waiting for the green zone to increase the chance to open trade in the direction of the potential uptrend. When we have 2 candles in a row in the green zone script executes a long trade with 10% of capital.
Two green zone candles in a row is considered by algorithm as a bullish trend, but now so strong, that's the reason why trade is going to be closed when the combination of Alligator and Fractals will consider the the trend change from bullish to bearish. If id did not happens, algorithm starts to count the green zone candles in a row. When we have 5 in a row script change the trade closing condition. Such situation is considered is a high probability strong bull market and all trades will be closed if candle's low will be lower than fifth green zone candle's low. This is used to increase probability to secure the profit. If long trades are initiated, the strategy continues utilizing subsequent signals until the total number of trades reaches a maximum of 5. Each trade uses 10% of capital.
Why we use trading zones signals? If currently strategy algorithm considers the high probability of the short-term uptrend with the Alligator and Fractals combination pointed out above and the long-term trend is also suggested by the EMA filter as bullish. Rising AC and AO values in the direction of the most likely main trend signaling that we have the high probability of the fastest bullish phase on the market. The main idea is to take part in such rapid moves and add trades if this move continues its acceleration according to indicators.
Backtest Results
Operating window: Date range of backtests is 2023.01.01 - 2024.12.31. It is chosen to let the strategy to close all opened positions.
Commission and Slippage: Includes a standard Binance commission of 0.1% and accounts for possible slippage over 5 ticks.
Initial capital: 10000 USDT
Percent of capital used in every trade: 10%
Maximum Single Position Loss: -9.49%
Maximum Single Profit: +24.33%
Net Profit: +4374.70 USDT (+43.75%)
Total Trades: 278 (39.57% win rate)
Profit Factor: 2.203
Maximum Accumulated Loss: 668.16 USDT (-5.43%)
Average Profit per Trade: 15.74 USDT (+1.37%)
Average Trade Duration: 60 hours
How to Use
Add the script to favorites for easy access.
Apply to the desired timeframe and chart (optimal performance observed on 4h BTC/USDT).
Configure settings using the dropdown choice list in the built-in menu.
Set up alerts to automate strategy positions through web hook with the text: {{strategy.order.alert_message}}
Disclaimer:
Educational and informational tool reflecting Skyrex commitment to informed trading. Past performance does not guarantee future results. Test strategies in a simulated environment before live implementation
These results are obtained with realistic parameters representing trading conditions observed at major exchanges such as Binance and with realistic trading portfolio usage parameters.
IronCondor 10am 30TF by RMThe IronCondor 10am 30TF indicator shows Iron Condor trades win rate over a large number of days.
The default ETFs in this indicators are "QQQ", "SPY", "RUT" , "CBTX" and "SPX", other entries have not been tested.
Iron Condor quick explanation:
- Iron Condors trades have four options, generally, are based around a Midpoint price (Current Market Price Strike) and
- Two equally distances Strikes for the SELL components (called the Body of the Iron Condor)
- Further away from the two SELLs, another Two BUYs for protection (not considered in this indicator)
- Iron Condors are used for Passive Income based on small gains most of the time.
The IronCondor 10am 30TF has its logic created based on the premises that:
- Most days the market prices stay within a range.
- As example the S&P market prices would stay within 1% on about 80% of the time
- The moving markets (bullish or bearish) occur about 20% of the time
- The biggest market price volatility generally occurs before market opens and then around the first hour or so of trade in the day.
- After the first hour or so of the market the prices would be most likely to stay within a range.
The operation is simple:
- At the Trade Star time in the day (say 10:30 Hrs.) draws a vertical yellow line, then
- Creates two blue horizontal lines for the SELL limits in the Iron Condor Body, at +/- 1% price boundary (check Ticker list below for values)
- At the Trade End time (say 16:00 Hrs.) checks that none of the SELL limits have been broken by highs or lows during the trade day
(The check is done calculating at Trade End time the high/lows 10 bars back for 30 min TF - timeframe)
- There is a label at each Trade End time with Win/Loss and Body value.
- There is one final label with overall calculated past performance in Win percentage out of 'n' trades
Defaults and User Entries:
- The User can modify the Midpoint price called 'IronCondor Midpoint STRIKE' (default is the Candle Close at the selected time)
- The User can modify the Body value called 'IronCondor Body' (default is the Ticker's selected value as per list below)
"QQQ" or "SPY" Body = 5
"RUT" or "CBTX" Body = 20
"SPX" Body = 60
* Disclaimer: This is not a Financial tool, it cannot used as any kind of advice to invest or risk moneys in any market,
Markets are volatile in nature - with little or no warning - and will drain your account if you are not careful.
Use only as an academic demonstrator => * Use at your own risk *
Opening Range Breakout (ORB)This is an Opening Range Break indicator. Best if used on a 5 minute chart. It plots the opening 30 minutes high and low of a ticker. (meaning mostly for stocks, options, etfs) and then it alerts a buy signal upon break of opening high and a sell signal upon break of opening low. This is a day trading type of indicator and there is a new opening range everyday.
Triad Trade MatrixOverview
Triad Trade Matrix is an advanced multi-strategy indicator built using Pine Script v5. It is designed to simultaneously track and display key trading metrics for three distinct trading styles on a single chart:
Swing Trading (Swing Supreme):
This mode captures longer-term trends and is designed for trades that typically span several days. It uses customizable depth and deviation parameters to determine swing signals.
Day Trading (Day Blaze):
This mode focuses on intraday price movements. It generates signals that are intended to be executed within a single trading session. The parameters for depth and deviation are tuned to capture more frequent, shorter-term moves.
Scalping (Scalp Surge):
This mode is designed for very short-term trades where quick entries and exits are key. It uses more sensitive parameters to detect rapid price movements suitable for scalping strategies.
Each trading style is represented by its own merged table that displays real-time metrics. The tables update automatically as new trading signals are generated.
Key Features
Multi-Style Tracking:
Swing Supreme (Large): For swing trading; uses a purple theme.
Day Blaze (Medium): For day trading; uses an orange theme.
Scalp Surge (Small): For scalping; uses a green theme.
Real-Time Metrics:
Each table displays key trade metrics including:
Entry Price: The price at which the trade was entered.
Exit Price: The price at which the previous trade was exited.
Position Size: Calculated as the account size divided by the entry price.
Direction: Indicates whether the trade is “Up” (long) or “Down” (short).
Time: The time when the trade was executed (formatted to hours and minutes).
Wins/Losses: The cumulative number of winning and losing trades.
Current Price & PnL: The current price on the chart and the profit/loss computed relative to the entry price.
Duration: The number of bars that the trade has been open.
History Column: A merged summary column that shows the most recent trade’s details (entry, exit, and result).
Customizability:
Column Visibility: Users can toggle individual columns (Ticker, Timeframe, Entry, Exit, etc.) on or off according to their preference.
Appearance Settings: You can customize the table border width, frame color, header background, and text colors.
History Toggle: The merged history column can be enabled or disabled.
Chart Markers: There is an option to show or hide chart markers (labels and lines) that indicate trade entries and exits on the chart.
Trade History Management:
The indicator maintains a rolling history (up to three recent trades per trading style) and displays the latest summary in the merged table.
This history column provides a quick reference to recent performance.
How It Works
Signal Generation & Trade Metrics
Trade Entry/Exit Calculation:
For each trading style, the indicator uses built-in functions (such as ta.lowestbars and ta.highestbars) to analyze price movements. Based on a customizable "depth" and "deviation" parameter, it determines the point of entry for a trade.
Swing Supreme: Uses larger depth/deviation values to capture swing trends.
Day Blaze: Uses intermediate values for intraday moves.
Scalp Surge: Uses tighter parameters to pick up rapid price changes.
Metrics Update:
When a new trade signal is generated (i.e., when the trade entry price is updated), the indicator calculates:
The current PnL as the difference between the current price and the entry price (or vice versa, depending on the trade direction).
The duration as the number of bars since the trade was opened.
The position size using the formula: accountSize / entryPrice.
History Recording:
Each time a new trade is triggered (i.e., when the entry price is updated), a summary string is created (showing entry, exit, and win/loss status) and appended to the corresponding trade history array. The merged table then displays the latest summary from this history.
Table Display
Merged Table Structure:
Each trading style (Swing Supreme, Day Blaze, and Scalp Surge) is represented by a table that has 15 columns. The columns are:
Trade Type (e.g., Swing Supreme)
Ticker
Timeframe
Entry Price
Exit Price
Position Size
Direction
Time of Entry
Account Size
Wins
Losses
Current Price
Current PnL
Duration (in bars)
History (the latest trade summary)
User Customization:
Through the settings panel, users can choose which columns to display.
If a column is toggled off, its cells will remain blank, allowing traders to focus on the metrics that matter most to them.
Appearance & Themes:
The table headers and cell backgrounds are customizable via color inputs. The trading style names are color-coded:
Swing Supreme (Large): Uses a purple theme.
Day Blaze (Medium): Uses an orange theme.
Scalp Surge (Small): Uses a green theme.
How to Use the Indicator
Add the Indicator to Your Chart:
Once published, add "Triad Trade Matrix" to your TradingView chart.
Configure the Settings:
Adjust the Account Size to match your trading capital.
Use the Depth and Deviation inputs for each trading style to fine-tune the signal sensitivity.
Toggle the Chart Markers on if you want visual entry/exit markers on the chart.
Customize which columns are visible via the column visibility toggles.
Enable or disable the History Column to show the merged trade history in the table.
Adjust the appearance settings (colors, border width, etc.) to suit your chart background and preferences.
Interpret the Tables:
Swing Supreme:
This table shows metrics for swing trades.
Look for changes in entry price, PnL, and trade duration to monitor longer-term moves.
Day Blaze:
This table tracks day trading activity.It will update more frequently, reflecting intraday trends.
Scalp Surge:
This table is dedicated to scalping signals.Use it to see quick entry/exit data and rapid profit/loss changes.
The History column (if enabled) gives you a snapshot of the most recent trade (e.g., "E:123.45 X:124.00 Up Win").
Use allerts:
The indicator includes alert condition for new trade entries(both long and short)for each trading style.
Summary:
Triad Trade Matrix provides an robust,multi-dimensional view of your trading performance across swing trading, day trading, and scalping.
Best to be used whith my other indicators
True low high
Vma Ext_Adv_CustomTbl
This indicator is ideal for traders who wish to monitor multiple trading styles simultaneously, with a clear, technical, and real-time display of performance metrics.
Happy Trading!
ELHAI Futures Trend Checker (ES, NQ, YM)The ELHAI Futures Trend Checker is a powerful TradingView indicator designed for futures traders who want to monitor the trend synchronization of the three major U.S. futures indices:
✅ E-mini S&P 500 (ES1!)
✅ E-mini Nasdaq 100 (NQ1!)
✅ E-mini Dow Jones (YM1!)
This indicator checks whether all three futures indices are bullish or bearish during each candle formation. If one of them is out of sync (e.g., two indices are bullish while one is bearish), the indicator triggers an alert and highlights the background in red, helping traders identify potential market indecision or divergence.
Key Features
📌 Designed for Futures Traders – Focuses on ES, NQ, and YM futures contracts.
📌 Live Market Monitoring – Works in real-time and updates dynamically with each tick.
📌 Bullish/Bearish Trend Confirmation – Detects when all three indices are in sync.
📌 Mismatch Detection – Alerts you when at least one index is out of trend.
📌 Custom Alerts – Set up TradingView alerts to be notified instantly when a trend mismatch occurs.
📌 Visual Background Highlight – A red background warns of a market divergence.
How It Works
The script retrieves open and close prices for ES, NQ, and YM.
Determines whether each futures index is bullish (close > open) or bearish (close < open).
If all three indices are bullish or all are bearish, it remains neutral.
If one index is different, an alert is triggered and the background turns red.
How to Use
Apply the indicator to your TradingView chart.
Choose any timeframe – Works well on intraday, daily, or higher timeframes.
Enable alerts: Go to Alerts → Create Alert, select "Futures Trend Mismatch", and set your preferred alert frequency.
Use alongside other indicators like moving averages, RSI, or MACD for better trade confirmation.
Best Use Cases
✔ Day traders & scalpers – Quickly spot market divergence in live trading.
✔ Swing traders – Identify when futures markets lose synchronization.
✔ Trend followers – Confirm if all major futures markets are aligned before making a move.
Final Notes
This indicator was built for Elhai to provide real-time trend analysis across major U.S. futures indices. Use it as a confirmation tool to improve market timing and decision-making.
TTM FCFF Yield %An indicator that shows the Free Cash Flow yield daily for the underlying ticker. Useful for when you need to screen for ideas, or the news just broke out and you want to make a calculated purchase - rather than buying at whatever price it is at the moment.
Green line tracks daily Free Cash Flow yield to Enterprise Value.
Where Free Cash Flow is defined as = Cashflow from Operations + Depreciation and Amortization (from the income statement) - Capital Expenditure (fixed assets) - Change in Working Capital
And where Enterprise Value is defined as = Market Capitalization + Net Debt
Red line tracks Free Cash Flow of financial year and what FCFF yield does that equate to if the stock current trades at the price right now.
Reminder: When working with international equities. Be mindful of whether they report FQ or FH. For example, France only reports FH, so it's better to use TTM FHFree Cash Flow results. If you didn't toggle FH in the indicator settings, it will automatically set as FQ and it will not show anything.
GLHF
Enhanced SPX and BTC Overlay with EMASPX-BTC Momentum Gauge and EMA Cross Indicator
Thorough Analysis:
• Combined Overlay (Green/Red Line):
o Function: Plots a wide line over the price chart, representing a composite of SPX and BTC dynamics adjusted by volume data.
o Color Coding:
Green: Indicates bullish conditions when the combined value exceeds its 10-period SMA and Bitcoin volume increases.
Red: Signals bearish conditions when the combined value drops below its 10-period SMA and Bitcoin volume decreases.
o Line Characteristics:
Width: Set at 8 for high visibility.
Transparency: 86% for both colors to overlay without obscuring candlesticks.
Scaling: Uses a factor of 0.02446 to amplify movements, making trend changes more noticeable.
• Continuous Bright Red and Green Lines:
o 20-period EMA of Current Ticker (Red):
Purpose: Acts as a medium-term trend indicator, smoothing price data to reflect the asset's general direction over time.
Color: Bright red for easy identification.
Transparency: 60% to keep it visible but not overpowering.
o 5-period EMA of BTC (Green):
Purpose: Provides insights into short-term Bitcoin momentum, capturing rapid changes in market sentiment.
Color: Bright green to distinguish from the red EMA.
Transparency: 30% for high visibility against price movements.
Detailed Analysis of the EMA Cross:
• Crossing Points:
o Bullish Crossover:
Occurs when the 5-period BTC EMA (green) moves above the 20-period EMA of the current ticker (red).
Suggests that Bitcoin's short-term momentum is gaining strength relative to the asset's medium-term trend, potentially signaling an upcoming uptrend or strengthening of an existing one.
o Bearish Crossover:
When the green line falls below the red, it indicates that Bitcoin's immediate momentum is weakening compared to the asset's medium-term trend, which might precede a downtrend or confirm one.
• Early Trade Signals:
o Entry/Exit Points:
These crossovers can guide traders in making timely decisions to enter or exit trades, especially when corroborated by the combined overlay's color.
o Confirmation:
EMA crossovers can confirm trends indicated by the combined overlay. For example, a bullish crossover with a green combined line could validate a buying opportunity.
o Volatility Insights:
The rapid shifts in Bitcoin's 5-period EMA highlight potential volatility spikes, offering an additional layer of market analysis, particularly useful in volatile markets.
• Strategic Use:
o Multi-Market Insight: The script integrates data from both traditional (SPX) and crypto (BTC) markets, allowing for a more comprehensive analysis of market conditions.
o Decision-Making: Provides traders with visual cues for market sentiment, trend direction, and potential reversals, enhancing strategic trading decisions.
o Trend Confirmation: The combination of EMA crossovers and the overlay's color changes offers a multi-faceted approach to trend confirmation or divergence.
In Summary:
• This script merges elements of traditional stock market analysis with cryptocurrency dynamics, utilizing color changes, line thickness, and EMA crossovers to visually communicate market conditions, offering traders a robust tool for analyzing and acting on market movements.
200WMA ScreenerDescription:
This custom indicator helps identify stocks trading below their 200-week moving average (200WMA), a key technical indicator often used to analyze long-term trends. The script calculates the 200WMA using weekly close prices and provides the following features:
Visual Plot: Displays the 200WMA as a smooth line on the chart for easy trend analysis.
Background Highlight: Automatically highlights the chart background when the current price is below the 200WMA, signaling a potential bearish trend or undervalued stock.
Alert System: Includes an alert condition to notify you when a stock trades below its 200WMA, so you never miss an opportunity.
Compatibility: Works across all assets (stocks, forex, crypto) and automatically adapts to the selected ticker.
This script is ideal for traders and investors looking for long-term opportunities, identifying potential trend reversals, or spotting undervalued stocks.
Cash and Carry: Annualized BTC Basis (Parametric)This indicator calculates the annualized BTC basis (premium or discount) between a specified futures contract and a given spot symbol. You can customize the spot ticker, the futures ticker, and the exact expiration date/time. As time moves toward expiration, the annualized yield (basis) will adjust accordingly. Ideal for monitoring potential arbitrage or cash-and-carry opportunities!
Hybrid Adaptive Double Exponential Smoothing🙏🏻 This is HADES (Hybrid Adaptive Double Exponential Smoothing) : fully data-driven & adaptive exponential smoothing method, that gains all the necessary info directly from data in the most natural way and needs no subjective parameters & no optimizations. It gets applied to data itself -> to fit residuals & one-point forecast errors, all at O(1) algo complexity. I designed it for streaming high-frequency univariate time series data, such as medical sensor readings, orderbook data, tick charts, requests generated by a backend, etc.
The HADES method is:
fit & forecast = a + b * (1 / alpha + T - 1)
T = 0 provides in-sample fit for the current datum, and T + n provides forecast for n datapoints.
y = input time series
a = y, if no previous data exists
b = 0, if no previous data exists
otherwise:
a = alpha * y + (1 - alpha) * a
b = alpha * (a - a ) + (1 - alpha) * b
alpha = 1 / sqrt(len * 4)
len = min(ceil(exp(1 / sig)), available data)
sig = sqrt(Absolute net change in y / Sum of absolute changes in y)
For the start datapoint when both numerator and denominator are zeros, we define 0 / 0 = 1
...
The same set of operations gets applied to the data first, then to resulting fit absolute residuals to build prediction interval, and finally to absolute forecasting errors (from one-point ahead forecast) to build forecasting interval:
prediction interval = data fit +- resoduals fit * k
forecasting interval = data opf +- errors fit * k
where k = multiplier regulating intervals width, and opf = one-point forecasts calculated at each time t
...
How-to:
0) Apply to your data where it makes sense, eg. tick data;
1) Use power transform to compensate for multiplicative behavior in case it's there;
2) If you have complete data or only the data you need, like the full history of adjusted close prices: go to the next step; otherwise, guided by your goal & analysis, adjust the 'start index' setting so the calculations will start from this point;
3) Use prediction interval to detect significant deviations from the process core & make decisions according to your strategy;
4) Use one-point forecast for nowcasting;
5) Use forecasting intervals to ~ understand where the next datapoints will emerge, given the data-generating process will stay the same & lack structural breaks.
I advise k = 1 or 1.5 or 4 depending on your goal, but 1 is the most natural one.
...
Why exponential smoothing at all? Why the double one? Why adaptive? Why not Holt's method?
1) It's O(1) algo complexity & recursive nature allows it to be applied in an online fashion to high-frequency streaming data; otherwise, it makes more sense to use other methods;
2) Double exponential smoothing ensures we are taking trends into account; also, in order to model more complex time series patterns such as seasonality, we need detrended data, and this method can be used to do it;
3) The goal of adaptivity is to eliminate the window size question, in cases where it doesn't make sense to use cumulative moving typical value;
4) Holt's method creates a certain interaction between level and trend components, so its results lack symmetry and similarity with other non-recursive methods such as quantile regression or linear regression. Instead, I decided to base my work on the original double exponential smoothing method published by Rob Brown in 1956, here's the original source , it's really hard to find it online. This cool dude is considered the one who've dropped exponential smoothing to open access for the first time🤘🏻
R&D; log & explanations
If you wanna read this, you gotta know, you're taking a great responsability for this long journey, and it gonna be one hell of a trip hehe
Machine learning, apprentissage automatique, машинное обучение, digital signal processing, statistical learning, data mining, deep learning, etc., etc., etc.: all these are just artificial categories created by the local population of this wonderful world, but what really separates entities globally in the Universe is solution complexity / algorithmic complexity.
In order to get the game a lil better, it's gonna be useful to read the HTES script description first. Secondly, let me guide you through the whole R&D; process.
To discover (not to invent) the fundamental universal principle of what exponential smoothing really IS, it required the review of the whole concept, understanding that many things don't add up and don't make much sense in currently available mainstream info, and building it all from the beginning while avoiding these very basic logical & implementation flaws.
Given a complete time t, and yet, always growing time series population that can't be logically separated into subpopulations, the very first question is, 'What amount of data do we need to utilize at time t?'. Two answers: 1 and all. You can't really gain much info from 1 datum, so go for the second answer: we need the whole dataset.
So, given the sequential & incremental nature of time series, the very first and basic thing we can do on the whole dataset is to calculate a cumulative , such as cumulative moving mean or cumulative moving median.
Now we need to extend this logic to exponential smoothing, which doesn't use dataset length info directly, but all cool it can be done via a formula that quantifies the relationship between alpha (smoothing parameter) and length. The popular formulas used in mainstream are:
alpha = 1 / length
alpha = 2 / (length + 1)
The funny part starts when you realize that Cumulative Exponential Moving Averages with these 2 alpha formulas Exactly match Cumulative Moving Average and Cumulative (Linearly) Weighted Moving Average, and the same logic goes on:
alpha = 3 / (length + 1.5) , matches Cumulative Weighted Moving Average with quadratic weights, and
alpha = 4 / (length + 2) , matches Cumulative Weighted Moving Average with cubic weghts, and so on...
It all just cries in your shoulder that we need to discover another, native length->alpha formula that leverages the recursive nature of exponential smoothing, because otherwise, it doesn't make sense to use it at all, since the usual CMA and CMWA can be computed incrementally at O(1) algo complexity just as exponential smoothing.
From now on I will not mention 'cumulative' or 'linearly weighted / weighted' anymore, it's gonna be implied all the time unless stated otherwise.
What we can do is to approach the thing logically and model the response with a little help from synthetic data, a sine wave would suffice. Then we can think of relationships: Based on algo complexity from lower to higher, we have this sequence: exponential smoothing @ O(1) -> parametric statistics (mean) @ O(n) -> non-parametric statistics (50th percentile / median) @ O(n log n). Based on Initial response from slow to fast: mean -> median Based on convergence with the real expected value from slow to fast: mean (infinitely approaches it) -> median (gets it quite fast).
Based on these inputs, we need to discover such a length->alpha formula so the resulting fit will have the slowest initial response out of all 3, and have the slowest convergence with expected value out of all 3. In order to do it, we need to have some non-linear transformer in our formula (like a square root) and a couple of factors to modify the response the way we need. I ended up with this formula to meet all our requirements:
alpha = sqrt(1 / length * 2) / 2
which simplifies to:
alpha = 1 / sqrt(len * 8)
^^ as you can see on the screenshot; where the red line is median, the blue line is the mean, and the purple line is exponential smoothing with the formulas you've just seen, we've met all the requirements.
Now we just have to do the same procedure to discover the length->alpha formula but for double exponential smoothing, which models trends as well, not just level as in single exponential smoothing. For this comparison, we need to use linear regression and quantile regression instead of the mean and median.
Quantile regression requires a non-closed form solution to be solved that you can't really implement in Pine Script, but that's ok, so I made the tests using Python & sklearn:
paste.pics
^^ on this screenshot, you can see the same relationship as on the previous screenshot, but now between the responses of quantile regression & linear regression.
I followed the same logic as before for designing alpha for double exponential smoothing (also considered the initial overshoots, but that's a little detail), and ended up with this formula:
alpha = sqrt(1 / length) / 2
which simplifies to:
alpha = 1 / sqrt(len * 4)
Btw, given the pattern you see in the resulting formulas for single and double exponential smoothing, if you ever want to do triple (not Holt & Winters) exponential smoothing, you'll need len * 2 , and just len * 1 for quadruple exponential smoothing. I hope that based on this sequence, you see the hint that Maybe 4 rounds is enough.
Now since we've dealt with the length->alpha formula, we can deal with the adaptivity part.
Logically, it doesn't make sense to use a slower-than-O(1) method to generate input for an O(1) method, so it must be something universal and minimalistic: something that will help us measure consistency in our data, yet something far away from statistics and close enough to topology.
There's one perfect entity that can help us, this is fractal efficiency. The way I define fractal efficiency can be checked at the very beginning of the post, what matters is that I add a square root to the formula that is not typically added.
As explained in the description of my metric QSFS , one of the reasons for SQRT-transformed values of fractal efficiency applied in moving window mode is because they start to closely resemble normal distribution, yet with support of (0, 1). Data with this interesting property (normally distributed yet with finite support) can be modeled with the beta distribution.
Another reason is, in infinitely expanding window mode, fractal efficiency of every time series that exhibits randomness tends to infinitely approach zero, sqrt-transform kind of partially neutralizes this effect.
Yet another reason is, the square root might better reflect the dimensional inefficiency or degree of fractal complexity, since it could balance the influence of extreme deviations from the net paths.
And finally, fractals exhibit power-law scaling -> measures like length, area, or volume scale in a non-linear way. Adding a square root acknowledges this intrinsic property, while connecting our metric with the nature of fractals.
---
I suspect that, given analogies and connections with other topics in geometry, topology, fractals and most importantly positive test results of the metric, it might be that the sqrt transform is the fundamental part of fractal efficiency that should be applied by default.
Now the last part of the ballet is to convert our fractal efficiency to length value. The part about inverse proportionality is obvious: high fractal efficiency aka high consistency -> lower window size, to utilize only the last data that contain brand new information that seems to be highly reliable since we have consistency in the first place.
The non-obvious part is now we need to neutralize the side effect created by previous sqrt transform: our length values are too low, and exponentiation is the perfect candidate to fix it since translating fractal efficiency into window sizes requires something non-linear to reflect the fractal dynamics. More importantly, using exp() was the last piece that let the metric shine, any other transformations & formulas alike I've tried always had some weird results on certain data.
That exp() in the len formula was the last piece that made it all work both on synthetic and on real data.
^^ a standalone script calculating optimal dynamic window size
Omg, THAT took time to write. Comment and/or text me if you need
...
"Versace Pip-Boy, I'm a young gun coming up with no bankroll" 👻
∞