M2SL/DXY RatioThis is the ratio of M2 money supply (M2SL) to the U.S. dollar index (DXY), taking into account the impact of U.S. dollar strength and weakness on liquidity.
M2SL/DXY better represents the current impact of the United States on cryptocurrency prices.
Cari dalam skrip untuk "liquidity"
Combined ATR + VolumeOverview
The Combined ATR + Volume indicator (C-ATR+Vol) is designed to measure both price volatility and market participation by merging the Average True Range (ATR) and trading volume into a single normalized value. This provides traders with a more comprehensive tool than ATR alone, as it highlights not only how much price is moving, but also whether there is sufficient volume behind those moves.
Originality & Utility
Two Key Components
ATR (Average True Range): Measures price volatility by analyzing the range (high–low) over a specified period. A higher ATR often indicates larger price swings.
Volume: Reflects how actively traders are participating in the market. High volume typically indicates strong buying or selling interest.
Normalized Combination
Both ATR and volume are independently normalized to a 0–100 range.
The final output (C-ATR+Vol) is the average of these two normalized values. This makes it easy to see when both volatility and market participation are relatively high.
Practical Use
Above 80: Signifies elevated volatility and strong volume. Markets may experience significant moves.
Around 50–80: Indicates moderate activity. Price swings and volume are neither extreme nor minimal.
Below 50: Suggests relatively low volatility and lower participation. The market may be ranging or consolidating.
This combined approach can help filter out situations where volatility is high but volume is absent—or vice versa—providing a more reliable context for potential breakouts or trend continuations.
Indicator Logic
ATR Calculation
Uses Pine Script’s built-in ta.tr(true) function to measure true range, then smooths it with a user-selected method (RMA, SMA, EMA, or WMA).
Key Input: ATR Length (default 14).
Volume Calculation
Smooths the built-in volume variable using the same selectable smoothing methods.
Key Input: Volume Length (default 14).
Normalization
For each metric (ATR and Volume), the script finds the lowest and highest values over the lookback period and converts them into a 0–100 scale:
normalized value
=(current value−min)(max−min)×100
normalized value= (max−min)(current value−min) ×100
Combined Score
The final plot is the average of Normalized ATR and Normalized Volume. This single value simplifies the process of identifying high-volatility, high-volume conditions.
How to Use
Setup
Add the indicator to your chart.
Adjust ATR Length, Volume Length, and Smoothing to match your preferred time horizon or chart style.
Interpretation
High Values (above 80): The market is experiencing significant price movement with high participation. Potential for strong trends or breakouts.
Moderate Range (50–80): Conditions are active but not extreme. Trend setups may be forming.
Low Values (below 50): Indicates quieter markets with reduced liquidity. Expect ranging or less decisive moves.
Strategy Integration
Use C-ATR+Vol alongside other trend or momentum indicators (e.g., Moving Averages, RSI, MACD) to confirm potential entries/exits.
Combine it with support/resistance or price action analysis for a broader market view.
Important Notes
This script is open-source and intended as a community contribution.
No Future Guarantee: Past market behavior does not guarantee future results. Always use proper risk management and validate signals with additional tools.
The indicator’s performance may vary depending on timeframes, asset classes, and market conditions.
Adjust inputs as needed to suit different instruments or personal trading styles.
By adhering to TradingView’s publishing rules, this script is provided with sufficient detail on what it does, how it’s unique, and how traders can use it. Feel free to customize the settings and experiment with other technical indicators to develop a trading methodology that fits your objectives.
🔹 Combined ATR + Volume (C-ATR+Vol) 지표 설명
이 인디케이터는 ATR(Average True Range)와 거래량(Volume)을 결합하여 시장의 변동성과 유동성을 동시에 측정하는 지표입니다.
ATR은 가격 변동성의 크기를 나타내며, 거래량은 시장 참여자의 활동 수준을 반영합니다. 보통 높은 ATR은 가격 변동이 크다는 의미이고, 높은 거래량은 시장에서 적극적인 거래가 이루어지고 있음을 나타냅니다.
이 두 지표를 각각 0~100 범위로 정규화한 후, 평균을 구하여 "Combined ATR + Volume (C-ATR+Vol)" 값을 계산합니다.
이를 통해 단순한 가격 변동성뿐만 아니라 거래량까지 고려하여, 더욱 신뢰성 있는 변동성 판단을 할 수 있도록 도와줍니다.
📌 핵심 개념
1️⃣ ATR (Average True Range)란?
시장의 변동성을 측정하는 지표로, 일정 기간 동안의 고점-저점 변동폭을 기반으로 계산됩니다.
ATR이 높을수록 가격 변동이 크며, 낮을수록 횡보장이 지속될 가능성이 큽니다.
하지만 ATR은 방향성을 제공하지 않으며, 단순히 변동성의 크기만을 나타냅니다.
2️⃣ 거래량 (Volume)의 역할
거래량은 시장 참여자의 관심과 유동성을 반영하는 중요한 요소입니다.
높은 거래량은 강한 매수 또는 매도세가 존재함을 의미하며, 낮은 거래량은 시장 참여가 적거나 관심이 줄어들었음을 나타냅니다.
3️⃣ ATR + 거래량의 결합 (C-ATR+Vol)
단순한 ATR 값만으로는 변동성이 커도 거래량이 부족할 수 있으며, 반대로 거래량이 많아도 변동성이 낮을 수 있습니다.
이를 해결하기 위해 ATR과 거래량을 각각 0~100으로 정규화하여 균형 잡힌 변동성 지표를 만들었습니다.
두 지표의 평균값을 계산하여, 가격 변동과 거래량이 동시에 높은지를 측정할 수 있도록 설계되었습니다.
📊 사용법 및 해석
80 이상 → 강한 변동성 구간
가격 변동성이 크고 거래량도 높은 상태
강한 추세가 진행 중이거나 큰 변동이 일어날 가능성이 큼
상승/하락 방향성을 확인한 후 트렌드를 따라가는 전략이 유리
50~80 구간 → 보통 수준의 변동성
가격 움직임이 일정하며, 거래량도 적절한 수준
점진적인 추세 형성이 이루어질 가능성이 있음
시장이 점진적으로 상승 혹은 하락할 가능성이 크므로, 보조지표를 활용하여 매매 타이밍을 결정하는 것이 중요
50 이하 → 낮은 변동성 및 유동성 부족
가격 변동이 적고, 거래량도 낮은 상태
시장이 횡보하거나 조정 기간에 들어갈 가능성이 큼
박스권 매매(지지/저항 활용) 또는 돌파 전략을 고려할 수 있음
💡 활용 방법 및 전략
✅ 1. 트렌드 판단 보조지표로 활용
단독으로 사용하는 것보다는 RSI, MACD, 이동평균선(MA) 등의 지표와 함께 활용하는 것이 효과적입니다.
예를 들어, MACD가 상승 신호를 주고, C-ATR+Vol 값이 80을 초과하면 강한 상승 추세로 해석할 수 있습니다.
✅ 2. 변동성 돌파 전략에 활용
C-ATR+Vol이 80 이상인 구간에서 가격이 특정 저항선을 돌파한다면, 강한 추세의 시작을 의미할 수 있습니다.
반대로, C-ATR+Vol이 50 이하에서 가격이 저항선에 가까워지면 돌파 가능성이 낮아질 수 있습니다.
✅ 3. 시장 참여도와 변동성 확인
단순히 ATR만 높아서는 신뢰하기 어려운 경우가 많습니다. 예를 들어, 급등 후 거래량이 급감하면 상승 지속 가능성이 낮아질 수도 있습니다.
하지만 C-ATR+Vol을 사용하면 거래량이 함께 증가하는지를 확인하여 보다 신뢰할 수 있는 분석이 가능합니다.
🚀 결론
🔹 Combined ATR + Volume (C-ATR+Vol) 인디케이터는 단순한 ATR이 아니라 거래량까지 고려하여 변동성을 측정하는 강력한 도구입니다.
🔹 시장이 큰 움직임을 보일 가능성이 높은 구간을 찾는 데 유용하며, 80 이상일 경우 강한 변동성이 있음을 나타냅니다.
🔹 단독으로 사용하기보다는 보조지표와 함께 활용하여, 트렌드 분석 및 돌파 전략 등에 효과적으로 적용할 수 있습니다.
📌 주의사항
변동성이 크다고 해서 반드시 가격이 급등/급락한다는 보장은 없습니다.
특정한 매매 전략 없이 단순히 이 지표만 보고 매수/매도를 결정하는 것은 위험할 수 있습니다.
시장 상황에 따라 변동성의 의미가 다르게 작용할 수 있으므로, 반드시 다른 보조지표와 함께 활용하는 것이 중요합니다.
🔥 이 지표를 활용하여 시장의 변동성과 거래량을 보다 효과적으로 분석해보세요! 🚀
ZenAlgo - LevelsThis script combines multiple anchored Volume-Weighted Average Price (VWAP) calculations into a single tool, providing a continuous record of past VWAP levels and highlighting when price has tested them. Typically, VWAP indicators show only the current VWAP for a single anchor period, requiring you to either keep re-anchoring manually or juggle multiple instances of different VWAP tools for each timeframe. By contrast, this script automatically tracks both the ongoing VWAP and previously completed VWAP values, along with real-time detection of “tests” (when price crosses a particular VWAP level). It’s especially valuable for traders who want to see how price has interacted with VWAP over several sessions, weeks, or months—without switching between separate indicators or manually setting anchors.
Below is a comprehensive explanation of each component, why multiple VWAP lines working together can be more informative than a single line, and how to adjust the script for various markets and trading styles:
Primary VWAP vs. Historical VWAP Lines - Standard VWAP indicators typically focus on the current line only. This script also calculates a primary VWAP, but it “locks in” each completed VWAP value when a new time anchor is detected (e.g., new weekly bar, new monthly bar, new session). As a result, you retain an ongoing history of VWAP lines for every completed anchored period. This is more powerful than manually setting up multiple VWAP tools—one for each desired timeframe—because everything is handled in a single script. You avoid chart clutter and the risk of forgetting to reset your manual VWAP at the correct bar.
Why Combine Multiple Anchored VWAP Lines in One Script? - Viewing several anchored VWAP lines together offers synergy . You see not only the current VWAP but also previous ones from different sessions or months, all within the same chart pane. This synergy becomes apparent if multiple historical VWAP lines cluster near the same price level, indicating a potentially significant zone of volume-based support or resistance. Handling this manually would involve repeatedly setting separate VWAP indicators, each reset at specific points, which is time-consuming and prone to error. In this script, the process is automated: as soon as the anchor changes, a completed VWAP line is stored so you can observe how price eventually reacts to it, repeatedly or not at all.
Automated “Test” Detection - Once a historical VWAP line is set, the script tracks when price crosses it in subsequent bars. If the high and low of a bar span that line, the script marks it in red (both the line and its label). It also keeps a counter of how many times each line has been tested. This method goes beyond a simple visual approach by quantifying the retests. Because all these lines are created and managed in one place, you don’t have to manually label the lines or check them one by one.
Advantages Over Manually Setting Multiple VWAPs
You save screen space: Instead of layering several VWAP indicators, each with unique settings, this single script plots them all on one overlay.
Automation: When a new anchor period begins, the script “closes out” the old VWAP and starts a new one. You never need to remember to reset it manually.
Retest Visualization: The script not only draws each line but also changes color and updates the label automatically if a line gets tested. Doing this by hand would be labor-intensive.
Unified Parameters: All settings (e.g., array size, max distance, test count limit) apply uniformly. You can manage them from one place, instead of configuring multiple separate tools.
Extended Insight with Multiple VWAP Lines
Since VWAP reflects the volume-weighted average price for each chosen period, historical lines can show zones where the market had a fair-value consensus in previous intervals. When the script preserves these lines, you see potential support/resistance areas more distinctly. If, for instance, price continually pivots around an old VWAP line, that may reveal a strong volume-based level. With several older VWAP lines on the chart, you gain an immediate sense of where these volume-derived averages have appeared and how price reacted over time. This wider perspective often proves more revealing than a single “current” VWAP line that does not reflect previous anchor sessions.
Handling of Illiquid Markets and Volume Limitations
VWAP is inherently tied to volume data, so its reliability decreases if volume reporting is missing or if the asset trades with very low liquidity. In such cases, a single large trade might momentarily skew the VWAP, resulting in “false” test signals when the high/low range intersects an abnormal price swing. If you suspect the data is incomplete or the market is unusually thin, it’s wise to confirm the validity of these VWAP lines before using them for any decision-making. Additionally, unusual market conditions—like after-hours trading or sudden high-volatility events—may cause VWAP to shift quickly, setting up multiple lines in a short time.
Key User-Configurable Settings
Hide VWAP on Day timeframe and above : Lets you disable the primary VWAP plot on daily or higher timeframes for a cleaner view.
Anchor Period : Select from Session, Week, Month, Quarter, Year, Decade or Century. Controls how frequently the script resets and preserves the VWAP line.
Offset : Moves the current VWAP line by a specified number of bars if you need a shifted perspective.
Max Array Size : Caps how many past VWAP lines the script will remember. Prevents clutter if you’re charting very long histories.
Max Distance : Defines how far back (in bar index units) a line is kept. If a line’s start bar is older than this threshold, it’s removed, keeping the chart uncluttered.
Max Red Labels : Limits the number of tested (red) VWAP lines that appear. If price tests a large number of old lines, only the newest red labels remain once you hit the set limit.
Workflow Overview
As soon as a new anchor period begins (e.g., a new weekly candle if “Week” is chosen), the script ends the current VWAP and stores that final value in its internal arrays.
It creates a dotted line and label representing the completed VWAP, and keeps track of whether it has been tested or not.
Subsequent bars may then cross that line. If a bar’s high/low includes the line’s value, it’s flagged as tested, labeled red, and a test counter increases.
As new anchored periods come, old lines remain visible—unless they fall outside your maxDistance or you exceed the maximum stored line count.
Real-World Benefits
Combining multiple VWAP lines—ranging, for example, from session-based lines for intraday perspectives to monthly or quarterly lines for broader context—provides a layered view of the volume-based fair price. This can help you quickly spot zones where price repeatedly intersects old VWAPs, potentially highlighting where bulls or bears took action historically. Because this script automates the management of all these lines and flags their retests, it removes a great deal of repetitive manual work that would typically accompany multiple, separate VWAP indicators set to different anchors.
Limitations & Practical Use
As with any volume-related tool, the script depends on reliable volume data. Assets trading on smaller venues or during illiquid periods may produce spurious signals. The script does not signal buy or sell decisions; rather, it helps visually map out where volume-weighted averages from previous periods might still be relevant to market behavior. Always combine the insight from these historical VWAP lines with your existing analytical approach or other technical and fundamental tools you use.
Conclusion
This script unifies past and present VWAP lines into one overlay, automatically detecting new anchor resets, storing the final VWAP values, and indicating whenever old lines are retested by price. It offers synergy through the simultaneous display of multiple historical VWAP lines, making it quicker and easier to detect potential support/resistance zones and better reflect changing market volumes over time. You no longer need to manually create, configure, or reset multiple VWAP indicators. Instead, the script handles all aspects of line creation, retest detection, and clutter management, giving you a robust framework to observe how historical VWAP data aligns with current price action.
By understanding the significance of multiple anchored VWAP lines, you can assess market structure from multiple angles in a single view. As always, ensure you confirm the reliability of the volume data for your particular asset and use these lines in conjunction with other analyses to form a well-rounded perspective on current market behavior.
Effective FVG Indicator - ImranDescription:
The Effective FVG Indicator is a technical analysis tool designed to identify Fair Value Gaps (FVGs) in financial markets. FVGs occur when there is a significant gap between the closing price of one session and the opening price of the next session, often indicating a potential reversal point. This indicator uses volume and price movement criteria to confirm and mark these gaps effectively.
Key Features:
Fair Value Gap Detection : Identifies both bullish and bearish FVGs based on significant gaps in price.
Volume Confirmation : Confirms FVGs with high volume, ensuring that the gap is not due to a lack of liquidity.
Price Imbalance : Ensures that the gap is accompanied by a large price movement within the session, indicating strong market sentiment.
Buy/Sell Signals : Marks bullish FVGs with a green "BUY" label below the bar and bearish FVGs with a red "SELL" label above the bar.
Background Highlighting : Highlights the background with a semi-transparent green or red color when a valid FVG is detected, making it easy to spot significant gaps.
Higher Timeframe SeparatorThis script helps visually identify when a higher timeframe candle starts by drawing a vertical line. It also shades the area above or below the opening price, making it easier to track price movement relative to the higher timeframe.
Why It's Useful
If you use multiple timeframes, this indicator provides a clear visual reference for where the price is relative to the higher timeframe. This is much more convenient than constantly switching between charts. You can see in the screenshot below how much clearer the price action becomes when the indicator is enabled:
Additional Benefit
If you trade on a lower timeframe and notice that the number of bars between separators is inconsistent, it means there weren’t enough trades during that period—indicating low liquidity. Illiquid instruments can be riskier to trade. For example, observe how the vertical lines on the left side of the image below are densely packed:
Market Sessions and OverlapsMarket Sessions and Overlaps Indicator
This script, titled " Market Sessions and Overlaps ," provides a detailed visualization of major global trading sessions—Asia, Europe, and New York—along with the periods where these sessions overlap. It is designed to assist traders in understanding session timings and overlaps in their local time zone. Key features include:
Session Visualization: Highlights the Asia, Europe, and New York trading sessions directly on the chart with customizable colors and transparency for better clarity.
Overlap Identification: Marks the overlapping periods between Asia-Europe and Europe-New York sessions, where market activity often intensifies, with distinct candle colors.
Time Zone Support: The script allows users to select their local time zone, ensuring all session times are displayed accurately, no matter the user’s location.
Alerts for Key Events: Includes optional alerts to notify users of session openings, closings, and the start or end of overlap periods.
This indicator serves as a visual tool for tracking session-specific activity and liquidity. It is configurable to match individual preferences, enabling better alignment with trading strategies.
Disclaimer: This script is for informational purposes only and does not provide financial advice. Please consult a licensed financial advisor for personalized trading guidance.
Mean Reversion Pro Strategy [tradeviZion]Mean Reversion Pro Strategy : User Guide
A mean reversion trading strategy for daily timeframe trading.
Introduction
Mean Reversion Pro Strategy is a technical trading system that operates on the daily timeframe. The strategy uses a dual Simple Moving Average (SMA) system combined with price range analysis to identify potential trading opportunities. It can be used on major indices and other markets with sufficient liquidity.
The strategy includes:
Trading System
Fast SMA for entry/exit points (5, 10, 15, 20 periods)
Slow SMA for trend reference (100, 200 periods)
Price range analysis (20% threshold)
Position management rules
Visual Elements
Gradient color indicators
Three themes (Dark/Light/Custom)
ATR-based visuals
Signal zones
Status Table
Current position information
Basic performance metrics
Strategy parameters
Optional messages
📊 Strategy Settings
Main Settings
Trading Mode
Options: Long Only, Short Only, Both
Default: Long Only
Position Size: 10% of equity
Starting Capital: $20,000
Moving Averages
Fast SMA: 5, 10, 15, or 20 periods
Slow SMA: 100 or 200 periods
Default: Fast=5, Slow=100
🎯 Entry and Exit Rules
Long Entry Conditions
All conditions must be met:
Price below Fast SMA
Price below 20% of current bar's range
Price above Slow SMA
No existing position
Short Entry Conditions
All conditions must be met:
Price above Fast SMA
Price above 80% of current bar's range
Price below Slow SMA
No existing position
Exit Rules
Long Positions
Exit when price crosses above Fast SMA
No fixed take-profit levels
No stop-loss (mean reversion approach)
Short Positions
Exit when price crosses below Fast SMA
No fixed take-profit levels
No stop-loss (mean reversion approach)
💼 Risk Management
Position Sizing
Default: 10% of equity per trade
Initial capital: $20,000
Commission: 0.01%
Slippage: 2 points
Maximum one position at a time
Risk Control
Use daily timeframe only
Avoid trading during major news events
Consider market conditions
Monitor overall exposure
📊 Performance Dashboard
The strategy includes a comprehensive status table displaying:
Strategy Parameters
Current SMA settings
Trading direction
Fast/Slow SMA ratio
Current Status
Active position (Flat/Long/Short)
Current price with color coding
Position status indicators
Performance Metrics
Net Profit (USD and %)
Win Rate with color grading
Profit Factor with thresholds
Maximum Drawdown percentage
Average Trade value
📱 Alert Settings
Entry Alerts
Long Entry (Buy Signal)
Short Entry (Sell Signal)
Exit Alerts
Long Exit (Take Profit)
Short Exit (Take Profit)
Alert Message Format
Strategy name
Signal type and direction
Current price
Fast SMA value
Slow SMA value
💡 Usage Tips
Consider starting with Long Only mode
Begin with default settings
Keep track of your trades
Review results regularly
Adjust settings as needed
Follow your trading plan
⚠️ Disclaimer
This strategy is for educational and informational purposes only. It is not financial advice. Always:
Conduct your own research
Test thoroughly before live trading
Use proper risk management
Consider your trading goals
Monitor market conditions
Never risk more than you can afford to lose
📋 Release Notes
14 January 2025
Added New Fast & Slow SMA Options:
Fibonacci-based periods: 8, 13, 21, 144, 233, 377
Additional period: 50
Complete Fast SMA options now: 5, 8, 10, 13, 15, 20, 21, 34, 50
Complete Slow SMA options now: 100, 144, 200, 233, 377
Bug Fixes:
Fixed Maximum Drawdown calculation in the performance table
Now using strategy.max_drawdown_percent for accurate DD reporting
Previous version showed incorrect DD values
Performance metrics now accurately reflect trading results
Performance Note:
Strategy tested with Fast/Slow SMA 13/377
Test conducted with 10% equity risk allocation
Daily Timeframe
For Beginners - How to Modify SMA Levels:
Find this line in the code:
fastLength = input.int(title="Fast SMA Length", defval=5, options= )
To add a new Fast SMA period: Add the number to the options list, e.g.,
To remove a Fast SMA period: Remove the number from the options list
For Slow SMA, find:
slowLength = input.int(title="Slow SMA Length", defval=100, options= )
Modify the options list the same way
⚠️ Note: Keep the periods that make sense for your trading timeframe
💡 Tip: Test any new combinations thoroughly before live trading
"Trade with Discipline, Manage Risk, Stay Consistent" - tradeviZion
Profitability Visualization with Bid-Ask Spread ApproximationOverview
The " Profitability Visualization with Bid-Ask Spread Approximation " indicator is designed to assist traders in assessing potential profit and loss targets in relation to the current market price or a simulated entry price. It provides flexibility by allowing users to choose between two methods for calculating the offset from the current price:
Bid-Ask Spread Approximation: The indicator attempts to estimate the bid-ask spread by using the highest (high) and lowest (low) prices within a given period (typically the current bar or a user-defined timeframe) as proxies for the ask and bid prices, respectively. This method provides a dynamic offset that adapts to market volatility.
Percentage Offset: Alternatively, users can specify a fixed percentage offset from the current price. This method offers a consistent offset regardless of market conditions.
Key Features
Dual Offset Calculation Methods: Choose between a dynamic bid-ask spread approximation or a fixed percentage offset to tailor the indicator to your trading style and market analysis.
Entry Price Consideration: The indicator can simulate an entry price at the beginning of each trading session (or the first bar on the chart if no sessions are defined). This feature enables a more realistic visualization of potential profit and loss levels based on a hypothetical entry point.
Profit and Loss Targets: When the entry price consideration is enabled, the indicator plots profit target (green) and loss target (red) lines. These lines represent the price levels at which a trade entered at the simulated entry price would achieve a profit or incur a loss equivalent to the calculated offset amount.
Offset Visualization: Regardless of whether the entry price is considered, the indicator always displays upper (aqua) and lower (fuchsia) offset lines. These lines represent the calculated offset levels based on the chosen method (bid-ask approximation or percentage offset).
Customization: Users can adjust the percentage offset, toggle the bid-ask approximation and entry price consideration, and customize the appearance of the lines through the indicator's settings.
Inputs
useBidAskApproximation A boolean (checkbox) input that determines whether to use the bid-ask spread approximation (true) or the percentage offset (false). Default is false.
percentageOffset A float input that allows users to specify the percentage offset to be used when useBidAskApproximation is false. The default value is 0.63.
considerEntryPrice A boolean input that enables the consideration of a simulated entry price for calculating and displaying profit and loss targets. Default is true.
Calculations
Bid-Ask Approximation (if enabled): bidApprox = request.security(syminfo.tickerid, timeframe.period, low) Approximates the bid price using the lowest price (low) of the current period. askApprox = request.security(syminfo.tickerid, timeframe.period, high) Approximates the ask price using the highest price (high) of the current period. spreadApprox = askApprox - bidApprox Calculates the approximate spread.
Offset Amount: offsetAmount = useBidAskApproximation ? spreadApprox / 2 : close * (percentageOffset / 100) Determines the offset amount based on the selected method. If useBidAskApproximation is true, the offset is half of the approximated spread; otherwise, it's the current closing price (close) multiplied by the percentageOffset.
Entry Price (if enabled): var entryPrice = 0.0 Initializes a variable to store the entry price. if considerEntryPrice Checks if entry price consideration is enabled. if barstate.isnew Checks if the current bar is the first bar of a new session. entryPrice := close Sets the entryPrice to the closing price of the first bar of the session.
Profit and Loss Targets (if entry price is considered): profitTarget = entryPrice + offsetAmount Calculates the profit target price level. lossTarget = entryPrice - offsetAmount Calculates the loss target price level.
Plotting
Profit Target Line: Plotted in green (color.green) with a dashed line style (plot.style_linebr) and increased linewidth (linewidth=2) when considerEntryPrice is true.
Loss Target Line: Plotted in red (color.red) with a dashed line style (plot.style_linebr) and increased linewidth (linewidth=2) when considerEntryPrice is true.
Upper Offset Line: Always plotted in aqua (color.aqua) to show the offset level above the current price.
Lower Offset Line: Always plotted in fuchsia (color.fuchsia) to show the offset level below the current price.
Limitations
Approximation: The bid-ask spread approximation is based on high and low prices and may not perfectly reflect the actual bid-ask spread of a specific broker, especially during periods of high volatility or low liquidity.
Simplified Entry: The entry price simulation is basic and assumes entry at the beginning of each session. It does not account for specific entry signals or order types.
No Order Execution: This indicator is purely for visualization and does not execute any trades.
Data Discrepancies: The high and low values used for approximation might not always align with real-time bid and ask prices due to differences in data aggregation and timing between TradingView and various brokers.
Disclaimer
This indicator is for educational and informational purposes only and should not be considered financial advice. Trading involves substantial risk, and past performance is not indicative of future results. Always conduct thorough research and consider your own risk tolerance before making any trading decisions. It is recommended to combine this indicator with other technical analysis tools and a well-defined trading strategy.
DAILY Supertrend + EMA Crossover with RSI FilterThis strategy is a technical trading approach that combines multiple indicators—Supertrend, Exponential Moving Averages (EMAs), and the Relative Strength Index (RSI)—to identify and manage trades.
Core Components:
1. Exponential Moving Averages (EMAs):
Two EMAs, one with a shorter period (fast) and one with a longer period (slow), are calculated. The idea is to spot when the faster EMA crosses above or below the slower EMA. A fast EMA crossing above the slow EMA often suggests upward momentum, while crossing below suggests downward momentum.
2. Supertrend Indicator:
The Supertrend uses Average True Range (ATR) to establish dynamic support and resistance lines. These lines shift above or below price depending on the prevailing trend. When price is above the Supertrend line, the trend is considered bullish; when below, it’s considered bearish. This helps ensure that the strategy trades only in the direction of the overall trend rather than against it.
3. RSI Filter:
The RSI measures momentum. It helps avoid buying into markets that are already overbought or selling into markets that are oversold. For example, when going long (buying), the strategy only proceeds if the RSI is not too high, and when going short (selling), it only proceeds if the RSI is not too low. This filter is meant to improve the quality of the trades by reducing the chance of entering right before a reversal.
4. Time Filters:
The strategy only triggers entries during user-specified date and time ranges. This is useful if one wants to limit trading activity to certain trading sessions or periods with higher market liquidity.
5. Risk Management via ATR-based Stops and Targets:
Both stop loss and take profit levels are set as multiples of the ATR. ATR measures volatility, so when volatility is higher, both stops and profit targets adjust to give the trade more breathing room. Conversely, when volatility is low, stops and targets tighten. This dynamic approach helps maintain consistent risk management regardless of market conditions.
Overall Logic Flow:
- First, the market conditions are analyzed through EMAs, Supertrend, and RSI.
- When a buy (long) condition is met—meaning the fast EMA crosses above the slow EMA, the trend is bullish according to Supertrend, and RSI is below the specified “overbought” threshold—the strategy initiates or adds to a long position.
- Similarly, when a sell (short) condition is met—meaning the fast EMA crosses below the slow EMA, the trend is bearish, and RSI is above the specified “oversold” threshold—it initiates or adds to a short position.
- Each position is protected by an automatically calculated stop loss and a take profit level based on ATR multiples.
Intended Result:
By blending trend detection, momentum filtering, and volatility-adjusted risk management, the strategy aims to capture moves in the primary trend direction while avoiding entries at excessively stretched prices. Allowing multiple entries can potentially amplify gains in strong trends but also increases exposure, which traders should consider in their risk management approach.
In essence, this strategy tries to ride established trends as indicated by the Supertrend and EMAs, filter out poor-quality entries using RSI, and dynamically manage trade risk through ATR-based stops and targets.
Alternative Price [OmegaTools]The Alternative Price script is a sophisticated and flexible indicator designed to redefine how traders visualize and interpret price data. By offering multiple unique charting modes, robust customization options, and advanced features, this tool provides a comprehensive alternative to traditional price charts. It is particularly useful for identifying market trends, detecting patterns, and simplifying complex data into actionable insights.
This script is highly versatile, allowing users to choose from five distinct charting modes: Candles, Line, Channel, Renko, and Bubbles. Each mode serves a unique purpose and presents price information in an innovative way. When using this script, it is strongly recommended to hide the platform’s default price candles or chart data. Doing so will eliminate redundancy and provide a clearer and more focused view of the alternative price visualization.
The Candles mode offers a traditional candlestick charting style but with added flexibility. Users can choose to enable smoothed opens or smoothed closes, which adjust the way the open and close prices are calculated. When smoothed opens are enabled, the opening price is computed as the average of the actual open price and the closing prices of the previous two bars. This creates a more gradual representation of price transitions, particularly useful in markets prone to sudden spikes or irregularities. Similarly, smoothed closes modify the closing price by averaging it with the previous close, the high-low midpoint, and an exponential moving average of the high-low-close mean. This technique filters out noise, making trends and price momentum easier to identify.
In the Line mode, the script displays a simple line chart that connects the smoothed closing prices. This mode is ideal for traders who prefer minimalism or need to focus on the overall trend without the distraction of individual bar details. The Channel mode builds upon this by plotting additional lines representing the highs and lows of each bar. The resulting visualization resembles a price corridor that helps identify support and resistance zones or price compression areas.
The Renko mode introduces a more advanced and noise-filtering method of visualizing price movements. Renko charts, constructed using the ATR (Average True Range) as a baseline, display blocks that represent a specific price range. The script dynamically calculates the size of these blocks based on ATR, with separate thresholds for upward and downward movements. This makes Renko mode particularly effective for identifying sustained trends while ignoring minor price fluctuations. Additionally, the open and close values of Renko blocks can be smoothed to further refine the visualization.
The Bubbles mode represents price activity using circles or bubbles whose size corresponds to relative volume. This mode provides a quick and intuitive way to assess market participation at different price levels. Larger bubbles indicate higher trading volumes, while smaller bubbles highlight periods of lower activity. This visualization is particularly valuable in understanding the relationship between price movements and market liquidity.
The coloring of candles and other chart elements is a core feature of this script. Users can select between two color modes: Normal and Volume. In Normal mode, bullish candles are displayed in the user-defined bullish color, while bearish candles use the bearish color. Neutral elements, such as midpoints or undecided price movements, are shaded with a neutral color. In Volume mode, the candle colors are dynamically adjusted based on trading volume. A gradient color scale is applied, where the intensity of the bullish or bearish colors reflects the volume for that particular bar. This feature allows traders to visually identify periods of heightened activity and associate them with specific price movements.
Engulfing patterns, a popular technical analysis tool, are automatically detected and marked on the chart when the corresponding setting is enabled. The script identifies long engulfing patterns, where the current bar's range completely encompasses the previous bar’s range and indicates a potential bullish reversal. Similarly, short engulfing patterns are identified where the current bar fully engulfs the previous bar in the opposite direction, suggesting a bearish reversal. These patterns are visually highlighted with circular markers to draw the trader’s attention.
Each feature and mode is highly customizable. The colors for bullish, bearish, and neutral movements can be personalized, and the thresholds for patterns or smoothing can be fine-tuned to match specific trading strategies. The script's ability to toggle between various modes makes it adaptable to different market conditions and analysis preferences.
In summary, the Alternative Price script is a comprehensive tool that redefines the way traders view price charts. By offering multiple visualization modes, customizable features, and advanced detection algorithms, it provides a powerful way to uncover market trends, volume relationships, and significant patterns. The recommendation to hide default chart elements ensures that the focus remains on this innovative tool, enhancing its usability and clarity. This script empowers traders to gain deeper insights into market behavior and make informed trading decisions, all while maintaining a clean and visually appealing chart layout.
Keep in mind that some of the modes of this indicator might not reflect the actual closing price of the underlying asset, before opening a trade, check carefully the actual price!
Merged Conditional Horizontal Lines with TogglesThe ranges that have blue highs & orange lows have been broken out of & may get re-tested as "support".
Prefer this candle range to be an expansion with neutral wicks.
The ranges that have red highs and green lows have generated interest (inside-bars) in the market, where the first end will get turtle souped and the second will be the draw on liquidity.
Prefer this candle range has long wick(s).
This patch allows you to toggle either range off.
FVG Price & Volume Graph [LuxAlgo]The FVG Price & Volume Graph tool plot recently detected fair value gaps relative to the volume traded within their area during their formation. This allows us to effectively visualize significant fair value gaps caused by high liquidity.
The indicator also returns levels from the fair value gaps areas average with the highest associated volume.
Do note that the indicator can consider the chart's visible range when being computed, which will recalculate the indicator when the chart's visible range changes.
🔶 USAGE
Fair Value Gaps (FVG) are core price action concepts occurring when the disparity between supply and demand is significant. Price has a tendency to come back to those areas and mitigating them, that is filling them.
The provided tools allow for effective visualization of both FVG's area's height as well as the volume originating from their creation, which is defined by the total traded volume located within the FVG during its creation. FVG's with more associated volume are displayed to the rightmost of the chart.
Users can determine the amount of most recent FVG's to display from the "Display Amount" setting. Disabling the "Consider Mitigation" setting will return mitigated FVGs in the plot, which can be useful to know where most FVGs were located.
We can use the area average of the FVGs with the most associated volume as potential support/resistance levels. Users can extend more FVG's averages by increasing the "Highest Volume Averages" setting.
🔹 Visualizing Volume/Price Relationships of FVG's
A linear regression is fit between FVG's areas average and their associated volume, with this linear regression helping us see where FVG's with specific volume might be located in the future based on existing FVG's.
Note that FVG's do not tend to exhibit linear relationships with their associated volume, the provided linear regression can give a general sense of tendency, but nothing necessarily accurate.
🔶 DETAILS
🔹 Intrabar Data TF
Given a formation of three candles causing an FVG, the volume traded within that FVG area is obtained by looking at the lower timeframe intrabar candles located within the intermediary candle of the formation. The volume of the intrabar candles located within the FVG areas is added up to obtain the associated volume of the FVG.
Using a lower "Intrabar Data TF" allows obtaining more precise volume results, at the cost of computation time and data availability (if there is a high difference between the "Intrabar Data TF" and the chart TF then less FVG can have their associated volume calculated due to Tradingview limitations).
🔹 Display
Users have access to multiple graphical settings affecting how the indicator is displayed.
The "Graph Resolution" setting determines the length of the X axis, with higher values returning more precise results on the location of FVGs over the X axis. Users can also control the number of labels displayed on the X-axis using the numerical input to the right of "Show X-Axis Labels".
Additionally, users can color FVG areas using a gradient relative to the size of the area, or the volume associated with the FVG.
🔶 SETTINGS
Display Amount: Amount of most recent FVGs to display.
Highest Volume Averages: Amount of FVG averages levels with the highest volume to display and extend.
Consider Mitigation: Only display unmitigated FVGs.
Filter FVGs Outside Visible Range: Only display FVGs areas that are located within the user chart visible range.
Intrabar Data TF: Timeframe used to obtain intrabar data. Should be lower than the user chart timeframe.
OrderFlow Absorption IndicatorWhat it Does
The OrderFlow Absorption Indicator marks areas where the price absorbs a large volume of aggressive market trades. This indicates areas where price may bounce back due to large limit (resting) orders absorbing significant aggressor volume (market orders). Absorption can also be seen as "preventing" or "stopping" the other side from breaking through a price level (e.g. bids stopping an influx of sell market orders). Absorption may signal a change in sentiment, potentially leading to a pullback or reversal.
An Example of Absorption
Of course, it is not always the case that such bullish absorption will initiate a trend as the example above. The OrderFlow Absorption Indicator merely serves as a tool for spotting possible absorption points in the market which you can incorporate into your trading arsenal.
How it Works
The indicator actively monitors price changes and records volume accumulated at a price level. If the price bounces back to at least where it was before the current price move, the indicator records this as absorption, provided it meets the Volume Requirement and optional Time Requirement.
How to Use it
1. Set Parameters
Choose your desired tick size and volume filter value. If unsure, refer to the table on the top right of the chart for recommended values. An automatic volume limit filter mode is also available.
Automatic Limit Mode : Enable this mode to have the indicator automatically select a volume filter value. It calculates the standard deviation of the last n minutes of volume and multiplies it by a volume multiplier. You can adjust these parameters.
Higher Volume Filter : Setting a higher volume filter value results in fewer, but higher quality detections, reducing noise.
2. Enabling the Time Limit
Enabling the time limit further improves detection quality by filtering out price levels that can defend against quick, sudden aggressive orders, acting as confirmation and indicating strong sentiment and resilient liquidity.
3. Enabling Historical Data Absorption
The indicator can also detect absorption in historical data, though less accurately than in real-time due to OHLCV aggregation.
You can select the granularity of historical data.
Lower granularity (e.g., 1 second) : Provides more accurate detections but may slow down the indicator.
Higher granularity : Improves speed but reduces detection accuracy.
Other Features
Hovering : When hovering over an absorption point, the interface reveals the price where the absorption occurred, along with the volume absorbed by the bids and asks, as well as the volume filter value used.
Delta Mode : In Delta mode, the system calculates the difference between the volume absorbed by bids and asks, revealing points only when the absolute value of this difference exceeds the volume filter value. Especially useful for larger tick sizes.
Troubleshooting
If the indicator doesn't mark anything, it means the traded volume hasn't exceeded the set volume filter value within the specified price intervals(tick size) and time limit. Adjust these settings as necessary.
Uptrick: MultiMA_VolumePurpose:
The "Uptrick: MultiMA_Volume" indicator, identified by its abbreviated title 'MMAV,' is meticulously designed to provide traders with a comprehensive view of market dynamics by incorporating multiple moving averages (MAs) and volume analysis. With adjustable inputs and customizable visibility options, traders can tailor the indicator to their specific trading preferences and strategies, thereby enhancing its utility and usability.
Explanation:
Input Variables and Customization:
Traders have the flexibility to adjust various parameters, including the lengths of different moving averages (SMA, EMA, WMA, HMA, and KAMA), as well as the option to show or hide each moving average and volume-related components.
Customization options empower traders to fine-tune the indicator according to their trading styles and market preferences, enhancing its adaptability across different market conditions.
Moving Averages and Trend Identification:
The script computes multiple types of moving averages, including Simple (SMA), Exponential (EMA), Weighted (WMA), Hull (HMA), and Kaufman's Adaptive (KAMA), allowing traders to assess trend directionality and strength from various perspectives.
Traders can determine potential price movements by observing the relationship between the current price and the plotted moving averages. For example, prices above the moving averages may suggest bullish sentiment, while prices below could indicate bearish sentiment.
Volume Analysis:
Volume analysis is integrated into the indicator, enabling traders to evaluate volume dynamics alongside trend analysis.
Traders can identify significant volume spikes using a customizable threshold, with bars exceeding the threshold highlighted to signify potential shifts in market activity and liquidity.
Determining Potential Price Movements:
By analyzing the relationship between price and the plotted moving averages, traders can infer potential price movements.
Bullish biases may be suggested when prices are above the moving averages, accompanied by rising volume, while bearish biases may be indicated when prices are below the moving averages, with declining volume reinforcing the potential for downward price movements.
Utility and Potential Usage:
The "Uptrick: MultiMA_Volume" indicator serves as a comprehensive tool for traders, offering insights into trend directionality, strength, and volume dynamics.
Traders can utilize the indicator to identify potential trading opportunities, confirm trend signals, and manage risk effectively.
By consolidating multiple indicators into a single chart, the indicator streamlines the analytical process, providing traders with a concise overview of market conditions and facilitating informed decision-making.
Through its customizable features and comprehensive analysis, the "Uptrick: MultiMA_Volume" indicator equips traders with actionable insights into market trends and volume dynamics. By integrating trend analysis and volume assessment into their trading strategies, traders can navigate the markets with confidence and precision, thereby enhancing their trading outcomes.
WRESBAL PlusWRESBAL Plus is an improved way of looking at the same data that drives WRESBAL, which is a commonly used series on FRED.
WRESBAL is a weekly average of combined balances on FRED using inputs that are weekly averages in some cases. For example the Treasury General Account has multiple FRED series including WDTGAL (wednesday level) and WTREGEN (wednesday weekly average) There are data sets that are tracking the same metrics which are updated daily such as RRPONTSYD as opposed to WLRRAL.
This situation leads to an opportunity to create a new and improved WRESBAL with the data that is updated more frequently. WRESBAL Plus solves the problem of waiting for weekly averages to update trends.
WRESBAL plus combines data sets from FRED that are updated more frequently and are the basis for the original WRESBAL equation. WRESBAL Plus offers a signal that predicts where WRESBAL will go, and this is important when determining the direction of asset prices as they relate to liquidity. One example of an asset that closely follows WRESBAL is Bitcoin.
TASC 2023.10 COT Commercials Indicator█ OVERVIEW
This script implements the COT Commercials Indicator introduced by Alfred François Tagher in an article featured in TASC's October 2023 edition of Traders' Tips . The indicator is designed for use in futures markets and represents a fast stochastic (%K) calculated based on the commercial open interest values of an asset derived from the weekly Commitments Of Traders (COT) report .
█ CONCEPTS
The COT report, issued by the Commodity Futures Trading Commission (CFTC) , presents a breakdown of reportable open interest positions held by various trader groups—commercial, noncommercial, and nonreportable (small traders). Open interest reflects the total number of derivative contracts entered by market participants but not yet settled. Consequently, it can serve as a measure of market activity and liquidity.
The indicator showcased here aims to analyze changes in the reported net values of open interest for commercial traders/hedgers (often referred to as 'smart money', as they deal directly in underlying commodities). The net values are positive when the commercial traders have more long positions than short ones and negative when they hold more short positions than long ones. Positive net values indicate that commercial traders hold more long positions than short ones, while negative values indicate the opposite. Thus, overbought and oversold conditions of the COT Commercials Indicator potentially suggest collective bullish and bearish sentiments, respectively.
█ CALCULATIONS
The calculations involve these steps:
1. Net open interest values are extracted from COT data using the LibraryCOT library provided by TradingView.
2. A fast stochastic indicator (%K) is then applied to normalize these net values.
The script also provides an option of calculating and plotting the indicator curve for noncommercial (speculators) open interest.
TraderJoe TickMarket sentiment and market breadth are important factors for traders to consider when making trading decisions.
The TICK index , which reflects the buying and selling activity of an entire index, can provide valuable insights into market sentiment and breadth.
1. Assessing Market Sentiment:
- Positive TICK: When the TICK index is consistently positive (indicating more stocks are being bought at or above the asking price), it suggests overall bullish sentiment in the market.
- Negative TICK: Conversely, a consistently negative TICK indicates bearish sentiment, where more stocks are being sold at or below the asking price.
2. Market Breadth:
- Look at the TICK readings for various market indexes, not just one. If all major market indexes are experiencing the same sentiment (e.g., all have aggressive buyers), it's a stronger signal of a broader market trend.
3. Using the TICK for Entry and Exit:
- Positive TICK can be an entry signal for long positions. Traders might consider going long when the TICK index is consistently positive, indicating strong buying pressure in the market.
- Negative TICK can be an entry signal for short positions. When the TICK is consistently negative, it suggests selling pressure, making shorting more attractive.
- Exit positions or take profits when the TICK starts to show signs of reversing from its extreme levels. An excessively positive TICK might indicate overbought conditions, while an overly negative TICK may signal oversold conditions.
4. Combining TICK with Other Indicators:
- It's often beneficial to combine TICK analysis with other technical and fundamental indicators to increase the accuracy of your trading decisions. For example, you could use moving averages, RSI, or support and resistance levels to confirm your entry and exit points.
5. Low Float Stocks and TICK:
- Low float stocks can be more volatile, making TICK analysis even more crucial. In these cases, watch for extreme TICK readings, as they can trigger rapid price movements.
- Be cautious when trading low float stocks, as they can be susceptible to price manipulation due to limited liquidity. Use proper risk management techniques, like setting stop-loss orders.
6. Stay Informed:
- Keep an eye on news and events that might explain sudden shifts in market sentiment. Unexpected news, economic releases, or geopolitical events can quickly change market dynamics.
BTFD strategy [3min]Hello
I would like to introduce a very simple strategy to buy lows and sell with minimal profit
This strategy works very well in the markets when there is no clear trend and in other words, the trend going sideways
this strategy works very well for stable financial markets like spx500, nasdaq100 and dow jones 30
two indicators were used to determine the best time to enter the market:
volume + rsi values
volume is usually the number of stocks or contracts traded over a certain period of time. Thus, it is an important indicator of market activity and liquidity. Each transaction constitutes an individual exchange between the buyer and the seller and constitutes the trading volume of a given instrument or asset.
The RSI measures the strength of uptrends versus downtrends. The signal is the entry or exit of the indicator value of the oversold or overbought level of the market. It is assumed that a value below or equal 30 indicates an oversold level of the market, and an RSI value above or equal 70 indicates an overbought level.
the strategy uses a maximum of 5 market entries after each candle that meets the condition
uses 5 target point levels to close the position:
tp1= 0.4%
tp2= 0.6%
tp3= 0.8%
tp4= 1.0%
tp5= 1.2%
after reaching a given profit value, a piece of the position is cut off gradually, where tp5 closes 100% of the remaining position
each time you enter a position, a stop loss of 5.0% is set, which is quite a high value, however, when buying each, sometimes very active downward price movement, you need a lot of space for market decisions in which direction it wants to go
to determine the level of stop loss and target point I used a piece of code by RafaelZioni , here is the script from which a piece of code was taken
this strategy is used for automation, however, I would recommend brokers that have the lowest commission values when opening and closing positions, because the strategy generates very high commission costs
Enjoy and trade safe ;)
Wick Delta vs Body/Wick BiasThe top and bottom of this indicator use the same logic as my Wick Delta script, but it displays differently, visualising the rejection or buy/sell pressure that wicks can represent. Outliers are highlighted in darker colours and often show inflection points, particular if they've just wicked into liquidity. So the start or end of moves, or a trend change. They can also happen for no reason, or just be a stop hunt. It's all about context, like everything in technical analysis.
The new addition is the centre line which shows whether wicks or bodies or in charge. Kinda like Average True Range (ATR) this script calculates Average True Bodies (ATBs) and compares it with Average True Wicks (ATWs) and shows when one or the other is in charge. So if candle wicks are bigger (>50%) than bodies, you'll see skinny, wick-like columns, and if the bodies are bigger you'll seen thicker, body-like columns. These can show inflection points too.
Keen to hear how people use this, and I intend to add a volume weighting feature when I get to it.
Goertzel Cycle Composite Wave [Loxx]As the financial markets become increasingly complex and data-driven, traders and analysts must leverage powerful tools to gain insights and make informed decisions. One such tool is the Goertzel Cycle Composite Wave indicator, a sophisticated technical analysis indicator that helps identify cyclical patterns in financial data. This powerful tool is capable of detecting cyclical patterns in financial data, helping traders to make better predictions and optimize their trading strategies. With its unique combination of mathematical algorithms and advanced charting capabilities, this indicator has the potential to revolutionize the way we approach financial modeling and trading.
*** To decrease the load time of this indicator, only XX many bars back will render to the chart. You can control this value with the setting "Number of Bars to Render". This doesn't have anything to do with repainting or the indicator being endpointed***
█ Brief Overview of the Goertzel Cycle Composite Wave
The Goertzel Cycle Composite Wave is a sophisticated technical analysis tool that utilizes the Goertzel algorithm to analyze and visualize cyclical components within a financial time series. By identifying these cycles and their characteristics, the indicator aims to provide valuable insights into the market's underlying price movements, which could potentially be used for making informed trading decisions.
The Goertzel Cycle Composite Wave is considered a non-repainting and endpointed indicator. This means that once a value has been calculated for a specific bar, that value will not change in subsequent bars, and the indicator is designed to have a clear start and end point. This is an important characteristic for indicators used in technical analysis, as it allows traders to make informed decisions based on historical data without the risk of hindsight bias or future changes in the indicator's values. This means traders can use this indicator trading purposes.
The repainting version of this indicator with forecasting, cycle selection/elimination options, and data output table can be found here:
Goertzel Browser
The primary purpose of this indicator is to:
1. Detect and analyze the dominant cycles present in the price data.
2. Reconstruct and visualize the composite wave based on the detected cycles.
To achieve this, the indicator performs several tasks:
1. Detrending the price data: The indicator preprocesses the price data using various detrending techniques, such as Hodrick-Prescott filters, zero-lag moving averages, and linear regression, to remove the underlying trend and focus on the cyclical components.
2. Applying the Goertzel algorithm: The indicator applies the Goertzel algorithm to the detrended price data, identifying the dominant cycles and their characteristics, such as amplitude, phase, and cycle strength.
3. Constructing the composite wave: The indicator reconstructs the composite wave by combining the detected cycles, either by using a user-defined list of cycles or by selecting the top N cycles based on their amplitude or cycle strength.
4. Visualizing the composite wave: The indicator plots the composite wave, using solid lines for the cycles. The color of the lines indicates whether the wave is increasing or decreasing.
This indicator is a powerful tool that employs the Goertzel algorithm to analyze and visualize the cyclical components within a financial time series. By providing insights into the underlying price movements, the indicator aims to assist traders in making more informed decisions.
█ What is the Goertzel Algorithm?
The Goertzel algorithm, named after Gerald Goertzel, is a digital signal processing technique that is used to efficiently compute individual terms of the Discrete Fourier Transform (DFT). It was first introduced in 1958, and since then, it has found various applications in the fields of engineering, mathematics, and physics.
The Goertzel algorithm is primarily used to detect specific frequency components within a digital signal, making it particularly useful in applications where only a few frequency components are of interest. The algorithm is computationally efficient, as it requires fewer calculations than the Fast Fourier Transform (FFT) when detecting a small number of frequency components. This efficiency makes the Goertzel algorithm a popular choice in applications such as:
1. Telecommunications: The Goertzel algorithm is used for decoding Dual-Tone Multi-Frequency (DTMF) signals, which are the tones generated when pressing buttons on a telephone keypad. By identifying specific frequency components, the algorithm can accurately determine which button has been pressed.
2. Audio processing: The algorithm can be used to detect specific pitches or harmonics in an audio signal, making it useful in applications like pitch detection and tuning musical instruments.
3. Vibration analysis: In the field of mechanical engineering, the Goertzel algorithm can be applied to analyze vibrations in rotating machinery, helping to identify faulty components or signs of wear.
4. Power system analysis: The algorithm can be used to measure harmonic content in power systems, allowing engineers to assess power quality and detect potential issues.
The Goertzel algorithm is used in these applications because it offers several advantages over other methods, such as the FFT:
1. Computational efficiency: The Goertzel algorithm requires fewer calculations when detecting a small number of frequency components, making it more computationally efficient than the FFT in these cases.
2. Real-time analysis: The algorithm can be implemented in a streaming fashion, allowing for real-time analysis of signals, which is crucial in applications like telecommunications and audio processing.
3. Memory efficiency: The Goertzel algorithm requires less memory than the FFT, as it only computes the frequency components of interest.
4. Precision: The algorithm is less susceptible to numerical errors compared to the FFT, ensuring more accurate results in applications where precision is essential.
The Goertzel algorithm is an efficient digital signal processing technique that is primarily used to detect specific frequency components within a signal. Its computational efficiency, real-time capabilities, and precision make it an attractive choice for various applications, including telecommunications, audio processing, vibration analysis, and power system analysis. The algorithm has been widely adopted since its introduction in 1958 and continues to be an essential tool in the fields of engineering, mathematics, and physics.
█ Goertzel Algorithm in Quantitative Finance: In-Depth Analysis and Applications
The Goertzel algorithm, initially designed for signal processing in telecommunications, has gained significant traction in the financial industry due to its efficient frequency detection capabilities. In quantitative finance, the Goertzel algorithm has been utilized for uncovering hidden market cycles, developing data-driven trading strategies, and optimizing risk management. This section delves deeper into the applications of the Goertzel algorithm in finance, particularly within the context of quantitative trading and analysis.
Unveiling Hidden Market Cycles:
Market cycles are prevalent in financial markets and arise from various factors, such as economic conditions, investor psychology, and market participant behavior. The Goertzel algorithm's ability to detect and isolate specific frequencies in price data helps trader analysts identify hidden market cycles that may otherwise go unnoticed. By examining the amplitude, phase, and periodicity of each cycle, traders can better understand the underlying market structure and dynamics, enabling them to develop more informed and effective trading strategies.
Developing Quantitative Trading Strategies:
The Goertzel algorithm's versatility allows traders to incorporate its insights into a wide range of trading strategies. By identifying the dominant market cycles in a financial instrument's price data, traders can create data-driven strategies that capitalize on the cyclical nature of markets.
For instance, a trader may develop a mean-reversion strategy that takes advantage of the identified cycles. By establishing positions when the price deviates from the predicted cycle, the trader can profit from the subsequent reversion to the cycle's mean. Similarly, a momentum-based strategy could be designed to exploit the persistence of a dominant cycle by entering positions that align with the cycle's direction.
Enhancing Risk Management:
The Goertzel algorithm plays a vital role in risk management for quantitative strategies. By analyzing the cyclical components of a financial instrument's price data, traders can gain insights into the potential risks associated with their trading strategies.
By monitoring the amplitude and phase of dominant cycles, a trader can detect changes in market dynamics that may pose risks to their positions. For example, a sudden increase in amplitude may indicate heightened volatility, prompting the trader to adjust position sizing or employ hedging techniques to protect their portfolio. Additionally, changes in phase alignment could signal a potential shift in market sentiment, necessitating adjustments to the trading strategy.
Expanding Quantitative Toolkits:
Traders can augment the Goertzel algorithm's insights by combining it with other quantitative techniques, creating a more comprehensive and sophisticated analysis framework. For example, machine learning algorithms, such as neural networks or support vector machines, could be trained on features extracted from the Goertzel algorithm to predict future price movements more accurately.
Furthermore, the Goertzel algorithm can be integrated with other technical analysis tools, such as moving averages or oscillators, to enhance their effectiveness. By applying these tools to the identified cycles, traders can generate more robust and reliable trading signals.
The Goertzel algorithm offers invaluable benefits to quantitative finance practitioners by uncovering hidden market cycles, aiding in the development of data-driven trading strategies, and improving risk management. By leveraging the insights provided by the Goertzel algorithm and integrating it with other quantitative techniques, traders can gain a deeper understanding of market dynamics and devise more effective trading strategies.
█ Indicator Inputs
src: This is the source data for the analysis, typically the closing price of the financial instrument.
detrendornot: This input determines the method used for detrending the source data. Detrending is the process of removing the underlying trend from the data to focus on the cyclical components.
The available options are:
hpsmthdt: Detrend using Hodrick-Prescott filter centered moving average.
zlagsmthdt: Detrend using zero-lag moving average centered moving average.
logZlagRegression: Detrend using logarithmic zero-lag linear regression.
hpsmth: Detrend using Hodrick-Prescott filter.
zlagsmth: Detrend using zero-lag moving average.
DT_HPper1 and DT_HPper2: These inputs define the period range for the Hodrick-Prescott filter centered moving average when detrendornot is set to hpsmthdt.
DT_ZLper1 and DT_ZLper2: These inputs define the period range for the zero-lag moving average centered moving average when detrendornot is set to zlagsmthdt.
DT_RegZLsmoothPer: This input defines the period for the zero-lag moving average used in logarithmic zero-lag linear regression when detrendornot is set to logZlagRegression.
HPsmoothPer: This input defines the period for the Hodrick-Prescott filter when detrendornot is set to hpsmth.
ZLMAsmoothPer: This input defines the period for the zero-lag moving average when detrendornot is set to zlagsmth.
MaxPer: This input sets the maximum period for the Goertzel algorithm to search for cycles.
squaredAmp: This boolean input determines whether the amplitude should be squared in the Goertzel algorithm.
useAddition: This boolean input determines whether the Goertzel algorithm should use addition for combining the cycles.
useCosine: This boolean input determines whether the Goertzel algorithm should use cosine waves instead of sine waves.
UseCycleStrength: This boolean input determines whether the Goertzel algorithm should compute the cycle strength, which is a normalized measure of the cycle's amplitude.
WindowSizePast: These inputs define the window size for the composite wave.
FilterBartels: This boolean input determines whether Bartel's test should be applied to filter out non-significant cycles.
BartNoCycles: This input sets the number of cycles to be used in Bartel's test.
BartSmoothPer: This input sets the period for the moving average used in Bartel's test.
BartSigLimit: This input sets the significance limit for Bartel's test, below which cycles are considered insignificant.
SortBartels: This boolean input determines whether the cycles should be sorted by their Bartel's test results.
StartAtCycle: This input determines the starting index for selecting the top N cycles when UseCycleList is set to false. This allows you to skip a certain number of cycles from the top before selecting the desired number of cycles.
UseTopCycles: This input sets the number of top cycles to use for constructing the composite wave when UseCycleList is set to false. The cycles are ranked based on their amplitudes or cycle strengths, depending on the UseCycleStrength input.
SubtractNoise: This boolean input determines whether to subtract the noise (remaining cycles) from the composite wave. If set to true, the composite wave will only include the top N cycles specified by UseTopCycles.
█ Exploring Auxiliary Functions
The following functions demonstrate advanced techniques for analyzing financial markets, including zero-lag moving averages, Bartels probability, detrending, and Hodrick-Prescott filtering. This section examines each function in detail, explaining their purpose, methodology, and applications in finance. We will examine how each function contributes to the overall performance and effectiveness of the indicator and how they work together to create a powerful analytical tool.
Zero-Lag Moving Average:
The zero-lag moving average function is designed to minimize the lag typically associated with moving averages. This is achieved through a two-step weighted linear regression process that emphasizes more recent data points. The function calculates a linearly weighted moving average (LWMA) on the input data and then applies another LWMA on the result. By doing this, the function creates a moving average that closely follows the price action, reducing the lag and improving the responsiveness of the indicator.
The zero-lag moving average function is used in the indicator to provide a responsive, low-lag smoothing of the input data. This function helps reduce the noise and fluctuations in the data, making it easier to identify and analyze underlying trends and patterns. By minimizing the lag associated with traditional moving averages, this function allows the indicator to react more quickly to changes in market conditions, providing timely signals and improving the overall effectiveness of the indicator.
Bartels Probability:
The Bartels probability function calculates the probability of a given cycle being significant in a time series. It uses a mathematical test called the Bartels test to assess the significance of cycles detected in the data. The function calculates coefficients for each detected cycle and computes an average amplitude and an expected amplitude. By comparing these values, the Bartels probability is derived, indicating the likelihood of a cycle's significance. This information can help in identifying and analyzing dominant cycles in financial markets.
The Bartels probability function is incorporated into the indicator to assess the significance of detected cycles in the input data. By calculating the Bartels probability for each cycle, the indicator can prioritize the most significant cycles and focus on the market dynamics that are most relevant to the current trading environment. This function enhances the indicator's ability to identify dominant market cycles, improving its predictive power and aiding in the development of effective trading strategies.
Detrend Logarithmic Zero-Lag Regression:
The detrend logarithmic zero-lag regression function is used for detrending data while minimizing lag. It combines a zero-lag moving average with a linear regression detrending method. The function first calculates the zero-lag moving average of the logarithm of input data and then applies a linear regression to remove the trend. By detrending the data, the function isolates the cyclical components, making it easier to analyze and interpret the underlying market dynamics.
The detrend logarithmic zero-lag regression function is used in the indicator to isolate the cyclical components of the input data. By detrending the data, the function enables the indicator to focus on the cyclical movements in the market, making it easier to analyze and interpret market dynamics. This function is essential for identifying cyclical patterns and understanding the interactions between different market cycles, which can inform trading decisions and enhance overall market understanding.
Bartels Cycle Significance Test:
The Bartels cycle significance test is a function that combines the Bartels probability function and the detrend logarithmic zero-lag regression function to assess the significance of detected cycles. The function calculates the Bartels probability for each cycle and stores the results in an array. By analyzing the probability values, traders and analysts can identify the most significant cycles in the data, which can be used to develop trading strategies and improve market understanding.
The Bartels cycle significance test function is integrated into the indicator to provide a comprehensive analysis of the significance of detected cycles. By combining the Bartels probability function and the detrend logarithmic zero-lag regression function, this test evaluates the significance of each cycle and stores the results in an array. The indicator can then use this information to prioritize the most significant cycles and focus on the most relevant market dynamics. This function enhances the indicator's ability to identify and analyze dominant market cycles, providing valuable insights for trading and market analysis.
Hodrick-Prescott Filter:
The Hodrick-Prescott filter is a popular technique used to separate the trend and cyclical components of a time series. The function applies a smoothing parameter to the input data and calculates a smoothed series using a two-sided filter. This smoothed series represents the trend component, which can be subtracted from the original data to obtain the cyclical component. The Hodrick-Prescott filter is commonly used in economics and finance to analyze economic data and financial market trends.
The Hodrick-Prescott filter is incorporated into the indicator to separate the trend and cyclical components of the input data. By applying the filter to the data, the indicator can isolate the trend component, which can be used to analyze long-term market trends and inform trading decisions. Additionally, the cyclical component can be used to identify shorter-term market dynamics and provide insights into potential trading opportunities. The inclusion of the Hodrick-Prescott filter adds another layer of analysis to the indicator, making it more versatile and comprehensive.
Detrending Options: Detrend Centered Moving Average:
The detrend centered moving average function provides different detrending methods, including the Hodrick-Prescott filter and the zero-lag moving average, based on the selected detrending method. The function calculates two sets of smoothed values using the chosen method and subtracts one set from the other to obtain a detrended series. By offering multiple detrending options, this function allows traders and analysts to select the most appropriate method for their specific needs and preferences.
The detrend centered moving average function is integrated into the indicator to provide users with multiple detrending options, including the Hodrick-Prescott filter and the zero-lag moving average. By offering multiple detrending methods, the indicator allows users to customize the analysis to their specific needs and preferences, enhancing the indicator's overall utility and adaptability. This function ensures that the indicator can cater to a wide range of trading styles and objectives, making it a valuable tool for a diverse group of market participants.
The auxiliary functions functions discussed in this section demonstrate the power and versatility of mathematical techniques in analyzing financial markets. By understanding and implementing these functions, traders and analysts can gain valuable insights into market dynamics, improve their trading strategies, and make more informed decisions. The combination of zero-lag moving averages, Bartels probability, detrending methods, and the Hodrick-Prescott filter provides a comprehensive toolkit for analyzing and interpreting financial data. The integration of advanced functions in a financial indicator creates a powerful and versatile analytical tool that can provide valuable insights into financial markets. By combining the zero-lag moving average,
█ In-Depth Analysis of the Goertzel Cycle Composite Wave Code
The Goertzel Cycle Composite Wave code is an implementation of the Goertzel Algorithm, an efficient technique to perform spectral analysis on a signal. The code is designed to detect and analyze dominant cycles within a given financial market data set. This section will provide an extremely detailed explanation of the code, its structure, functions, and intended purpose.
Function signature and input parameters:
The Goertzel Cycle Composite Wave function accepts numerous input parameters for customization, including source data (src), the current bar (forBar), sample size (samplesize), period (per), squared amplitude flag (squaredAmp), addition flag (useAddition), cosine flag (useCosine), cycle strength flag (UseCycleStrength), past sizes (WindowSizePast), Bartels filter flag (FilterBartels), Bartels-related parameters (BartNoCycles, BartSmoothPer, BartSigLimit), sorting flag (SortBartels), and output buffers (goeWorkPast, cyclebuffer, amplitudebuffer, phasebuffer, cycleBartelsBuffer).
Initializing variables and arrays:
The code initializes several float arrays (goeWork1, goeWork2, goeWork3, goeWork4) with the same length as twice the period (2 * per). These arrays store intermediate results during the execution of the algorithm.
Preprocessing input data:
The input data (src) undergoes preprocessing to remove linear trends. This step enhances the algorithm's ability to focus on cyclical components in the data. The linear trend is calculated by finding the slope between the first and last values of the input data within the sample.
Iterative calculation of Goertzel coefficients:
The core of the Goertzel Cycle Composite Wave algorithm lies in the iterative calculation of Goertzel coefficients for each frequency bin. These coefficients represent the spectral content of the input data at different frequencies. The code iterates through the range of frequencies, calculating the Goertzel coefficients using a nested loop structure.
Cycle strength computation:
The code calculates the cycle strength based on the Goertzel coefficients. This is an optional step, controlled by the UseCycleStrength flag. The cycle strength provides information on the relative influence of each cycle on the data per bar, considering both amplitude and cycle length. The algorithm computes the cycle strength either by squaring the amplitude (controlled by squaredAmp flag) or using the actual amplitude values.
Phase calculation:
The Goertzel Cycle Composite Wave code computes the phase of each cycle, which represents the position of the cycle within the input data. The phase is calculated using the arctangent function (math.atan) based on the ratio of the imaginary and real components of the Goertzel coefficients.
Peak detection and cycle extraction:
The algorithm performs peak detection on the computed amplitudes or cycle strengths to identify dominant cycles. It stores the detected cycles in the cyclebuffer array, along with their corresponding amplitudes and phases in the amplitudebuffer and phasebuffer arrays, respectively.
Sorting cycles by amplitude or cycle strength:
The code sorts the detected cycles based on their amplitude or cycle strength in descending order. This allows the algorithm to prioritize cycles with the most significant impact on the input data.
Bartels cycle significance test:
If the FilterBartels flag is set, the code performs a Bartels cycle significance test on the detected cycles. This test determines the statistical significance of each cycle and filters out the insignificant cycles. The significant cycles are stored in the cycleBartelsBuffer array. If the SortBartels flag is set, the code sorts the significant cycles based on their Bartels significance values.
Waveform calculation:
The Goertzel Cycle Composite Wave code calculates the waveform of the significant cycles for specified time windows. The windows are defined by the WindowSizePast parameters, respectively. The algorithm uses either cosine or sine functions (controlled by the useCosine flag) to calculate the waveforms for each cycle. The useAddition flag determines whether the waveforms should be added or subtracted.
Storing waveforms in a matrix:
The calculated waveforms for the cycle is stored in the matrix - goeWorkPast. This matrix holds the waveforms for the specified time windows. Each row in the matrix represents a time window position, and each column corresponds to a cycle.
Returning the number of cycles:
The Goertzel Cycle Composite Wave function returns the total number of detected cycles (number_of_cycles) after processing the input data. This information can be used to further analyze the results or to visualize the detected cycles.
The Goertzel Cycle Composite Wave code is a comprehensive implementation of the Goertzel Algorithm, specifically designed for detecting and analyzing dominant cycles within financial market data. The code offers a high level of customization, allowing users to fine-tune the algorithm based on their specific needs. The Goertzel Cycle Composite Wave's combination of preprocessing, iterative calculations, cycle extraction, sorting, significance testing, and waveform calculation makes it a powerful tool for understanding cyclical components in financial data.
█ Generating and Visualizing Composite Waveform
The indicator calculates and visualizes the composite waveform for specified time windows based on the detected cycles. Here's a detailed explanation of this process:
Updating WindowSizePast:
The WindowSizePast is updated to ensure they are at least twice the MaxPer (maximum period).
Initializing matrices and arrays:
The matrix goeWorkPast is initialized to store the Goertzel results for specified time windows. Multiple arrays are also initialized to store cycle, amplitude, phase, and Bartels information.
Preparing the source data (srcVal) array:
The source data is copied into an array, srcVal, and detrended using one of the selected methods (hpsmthdt, zlagsmthdt, logZlagRegression, hpsmth, or zlagsmth).
Goertzel function call:
The Goertzel function is called to analyze the detrended source data and extract cycle information. The output, number_of_cycles, contains the number of detected cycles.
Initializing arrays for waveforms:
The goertzel array is initialized to store the endpoint Goertzel.
Calculating composite waveform (goertzel array):
The composite waveform is calculated by summing the selected cycles (either from the user-defined cycle list or the top cycles) and optionally subtracting the noise component.
Drawing composite waveform (pvlines):
The composite waveform is drawn on the chart using solid lines. The color of the lines is determined by the direction of the waveform (green for upward, red for downward).
To summarize, this indicator generates a composite waveform based on the detected cycles in the financial data. It calculates the composite waveforms and visualizes them on the chart using colored lines.
█ Enhancing the Goertzel Algorithm-Based Script for Financial Modeling and Trading
The Goertzel algorithm-based script for detecting dominant cycles in financial data is a powerful tool for financial modeling and trading. It provides valuable insights into the past behavior of these cycles. However, as with any algorithm, there is always room for improvement. This section discusses potential enhancements to the existing script to make it even more robust and versatile for financial modeling, general trading, advanced trading, and high-frequency finance trading.
Enhancements for Financial Modeling
Data preprocessing: One way to improve the script's performance for financial modeling is to introduce more advanced data preprocessing techniques. This could include removing outliers, handling missing data, and normalizing the data to ensure consistent and accurate results.
Additional detrending and smoothing methods: Incorporating more sophisticated detrending and smoothing techniques, such as wavelet transform or empirical mode decomposition, can help improve the script's ability to accurately identify cycles and trends in the data.
Machine learning integration: Integrating machine learning techniques, such as artificial neural networks or support vector machines, can help enhance the script's predictive capabilities, leading to more accurate financial models.
Enhancements for General and Advanced Trading
Customizable indicator integration: Allowing users to integrate their own technical indicators can help improve the script's effectiveness for both general and advanced trading. By enabling the combination of the dominant cycle information with other technical analysis tools, traders can develop more comprehensive trading strategies.
Risk management and position sizing: Incorporating risk management and position sizing functionality into the script can help traders better manage their trades and control potential losses. This can be achieved by calculating the optimal position size based on the user's risk tolerance and account size.
Multi-timeframe analysis: Enhancing the script to perform multi-timeframe analysis can provide traders with a more holistic view of market trends and cycles. By identifying dominant cycles on different timeframes, traders can gain insights into the potential confluence of cycles and make better-informed trading decisions.
Enhancements for High-Frequency Finance Trading
Algorithm optimization: To ensure the script's suitability for high-frequency finance trading, optimizing the algorithm for faster execution is crucial. This can be achieved by employing efficient data structures and refining the calculation methods to minimize computational complexity.
Real-time data streaming: Integrating real-time data streaming capabilities into the script can help high-frequency traders react to market changes more quickly. By continuously updating the cycle information based on real-time market data, traders can adapt their strategies accordingly and capitalize on short-term market fluctuations.
Order execution and trade management: To fully leverage the script's capabilities for high-frequency trading, implementing functionality for automated order execution and trade management is essential. This can include features such as stop-loss and take-profit orders, trailing stops, and automated trade exit strategies.
While the existing Goertzel algorithm-based script is a valuable tool for detecting dominant cycles in financial data, there are several potential enhancements that can make it even more powerful for financial modeling, general trading, advanced trading, and high-frequency finance trading. By incorporating these improvements, the script can become a more versatile and effective tool for traders and financial analysts alike.
█ Understanding the Limitations of the Goertzel Algorithm
While the Goertzel algorithm-based script for detecting dominant cycles in financial data provides valuable insights, it is important to be aware of its limitations and drawbacks. Some of the key drawbacks of this indicator are:
Lagging nature:
As with many other technical indicators, the Goertzel algorithm-based script can suffer from lagging effects, meaning that it may not immediately react to real-time market changes. This lag can lead to late entries and exits, potentially resulting in reduced profitability or increased losses.
Parameter sensitivity:
The performance of the script can be sensitive to the chosen parameters, such as the detrending methods, smoothing techniques, and cycle detection settings. Improper parameter selection may lead to inaccurate cycle detection or increased false signals, which can negatively impact trading performance.
Complexity:
The Goertzel algorithm itself is relatively complex, making it difficult for novice traders or those unfamiliar with the concept of cycle analysis to fully understand and effectively utilize the script. This complexity can also make it challenging to optimize the script for specific trading styles or market conditions.
Overfitting risk:
As with any data-driven approach, there is a risk of overfitting when using the Goertzel algorithm-based script. Overfitting occurs when a model becomes too specific to the historical data it was trained on, leading to poor performance on new, unseen data. This can result in misleading signals and reduced trading performance.
Limited applicability:
The Goertzel algorithm-based script may not be suitable for all markets, trading styles, or timeframes. Its effectiveness in detecting cycles may be limited in certain market conditions, such as during periods of extreme volatility or low liquidity.
While the Goertzel algorithm-based script offers valuable insights into dominant cycles in financial data, it is essential to consider its drawbacks and limitations when incorporating it into a trading strategy. Traders should always use the script in conjunction with other technical and fundamental analysis tools, as well as proper risk management, to make well-informed trading decisions.
█ Interpreting Results
The Goertzel Cycle Composite Wave indicator can be interpreted by analyzing the plotted lines. The indicator plots two lines: composite waves. The composite wave represents the composite wave of the price data.
The composite wave line displays a solid line, with green indicating a bullish trend and red indicating a bearish trend.
Interpreting the Goertzel Cycle Composite Wave indicator involves identifying the trend of the composite wave lines and matching them with the corresponding bullish or bearish color.
█ Conclusion
The Goertzel Cycle Composite Wave indicator is a powerful tool for identifying and analyzing cyclical patterns in financial markets. Its ability to detect multiple cycles of varying frequencies and strengths make it a valuable addition to any trader's technical analysis toolkit. However, it is important to keep in mind that the Goertzel Cycle Composite Wave indicator should be used in conjunction with other technical analysis tools and fundamental analysis to achieve the best results. With continued refinement and development, the Goertzel Cycle Composite Wave indicator has the potential to become a highly effective tool for financial modeling, general trading, advanced trading, and high-frequency finance trading. Its accuracy and versatility make it a promising candidate for further research and development.
█ Footnotes
What is the Bartels Test for Cycle Significance?
The Bartels Cycle Significance Test is a statistical method that determines whether the peaks and troughs of a time series are statistically significant. The test is named after its inventor, George Bartels, who developed it in the mid-20th century.
The Bartels test is designed to analyze the cyclical components of a time series, which can help traders and analysts identify trends and cycles in financial markets. The test calculates a Bartels statistic, which measures the degree of non-randomness or autocorrelation in the time series.
The Bartels statistic is calculated by first splitting the time series into two halves and calculating the range of the peaks and troughs in each half. The test then compares these ranges using a t-test, which measures the significance of the difference between the two ranges.
If the Bartels statistic is greater than a critical value, it indicates that the peaks and troughs in the time series are non-random and that there is a significant cyclical component to the data. Conversely, if the Bartels statistic is less than the critical value, it suggests that the peaks and troughs are random and that there is no significant cyclical component.
The Bartels Cycle Significance Test is particularly useful in financial analysis because it can help traders and analysts identify significant cycles in asset prices, which can in turn inform investment decisions. However, it is important to note that the test is not perfect and can produce false signals in certain situations, particularly in noisy or volatile markets. Therefore, it is always recommended to use the test in conjunction with other technical and fundamental indicators to confirm trends and cycles.
Deep-dive into the Hodrick-Prescott Fitler
The Hodrick-Prescott (HP) filter is a statistical tool used in economics and finance to separate a time series into two components: a trend component and a cyclical component. It is a powerful tool for identifying long-term trends in economic and financial data and is widely used by economists, central banks, and financial institutions around the world.
The HP filter was first introduced in the 1990s by economists Robert Hodrick and Edward Prescott. It is a simple, two-parameter filter that separates a time series into a trend component and a cyclical component. The trend component represents the long-term behavior of the data, while the cyclical component captures the shorter-term fluctuations around the trend.
The HP filter works by minimizing the following objective function:
Minimize: (Sum of Squared Deviations) + λ (Sum of Squared Second Differences)
Where:
1. The first term represents the deviation of the data from the trend.
2. The second term represents the smoothness of the trend.
3. λ is a smoothing parameter that determines the degree of smoothness of the trend.
The smoothing parameter λ is typically set to a value between 100 and 1600, depending on the frequency of the data. Higher values of λ lead to a smoother trend, while lower values lead to a more volatile trend.
The HP filter has several advantages over other smoothing techniques. It is a non-parametric method, meaning that it does not make any assumptions about the underlying distribution of the data. It also allows for easy comparison of trends across different time series and can be used with data of any frequency.
However, the HP filter also has some limitations. It assumes that the trend is a smooth function, which may not be the case in some situations. It can also be sensitive to changes in the smoothing parameter λ, which may result in different trends for the same data. Additionally, the filter may produce unrealistic trends for very short time series.
Despite these limitations, the HP filter remains a valuable tool for analyzing economic and financial data. It is widely used by central banks and financial institutions to monitor long-term trends in the economy, and it can be used to identify turning points in the business cycle. The filter can also be used to analyze asset prices, exchange rates, and other financial variables.
The Hodrick-Prescott filter is a powerful tool for analyzing economic and financial data. It separates a time series into a trend component and a cyclical component, allowing for easy identification of long-term trends and turning points in the business cycle. While it has some limitations, it remains a valuable tool for economists, central banks, and financial institutions around the world.
Goertzel Browser [Loxx]As the financial markets become increasingly complex and data-driven, traders and analysts must leverage powerful tools to gain insights and make informed decisions. One such tool is the Goertzel Browser indicator, a sophisticated technical analysis indicator that helps identify cyclical patterns in financial data. This powerful tool is capable of detecting cyclical patterns in financial data, helping traders to make better predictions and optimize their trading strategies. With its unique combination of mathematical algorithms and advanced charting capabilities, this indicator has the potential to revolutionize the way we approach financial modeling and trading.
█ Brief Overview of the Goertzel Browser
The Goertzel Browser is a sophisticated technical analysis tool that utilizes the Goertzel algorithm to analyze and visualize cyclical components within a financial time series. By identifying these cycles and their characteristics, the indicator aims to provide valuable insights into the market's underlying price movements, which could potentially be used for making informed trading decisions.
The primary purpose of this indicator is to:
1. Detect and analyze the dominant cycles present in the price data.
2. Reconstruct and visualize the composite wave based on the detected cycles.
3. Project the composite wave into the future, providing a potential roadmap for upcoming price movements.
To achieve this, the indicator performs several tasks:
1. Detrending the price data: The indicator preprocesses the price data using various detrending techniques, such as Hodrick-Prescott filters, zero-lag moving averages, and linear regression, to remove the underlying trend and focus on the cyclical components.
2. Applying the Goertzel algorithm: The indicator applies the Goertzel algorithm to the detrended price data, identifying the dominant cycles and their characteristics, such as amplitude, phase, and cycle strength.
3. Constructing the composite wave: The indicator reconstructs the composite wave by combining the detected cycles, either by using a user-defined list of cycles or by selecting the top N cycles based on their amplitude or cycle strength.
4. Visualizing the composite wave: The indicator plots the composite wave, using solid lines for the past and dotted lines for the future projections. The color of the lines indicates whether the wave is increasing or decreasing.
5. Displaying cycle information: The indicator provides a table that displays detailed information about the detected cycles, including their rank, period, Bartel's test results, amplitude, and phase.
This indicator is a powerful tool that employs the Goertzel algorithm to analyze and visualize the cyclical components within a financial time series. By providing insights into the underlying price movements and their potential future trajectory, the indicator aims to assist traders in making more informed decisions.
█ What is the Goertzel Algorithm?
The Goertzel algorithm, named after Gerald Goertzel, is a digital signal processing technique that is used to efficiently compute individual terms of the Discrete Fourier Transform (DFT). It was first introduced in 1958, and since then, it has found various applications in the fields of engineering, mathematics, and physics.
The Goertzel algorithm is primarily used to detect specific frequency components within a digital signal, making it particularly useful in applications where only a few frequency components are of interest. The algorithm is computationally efficient, as it requires fewer calculations than the Fast Fourier Transform (FFT) when detecting a small number of frequency components. This efficiency makes the Goertzel algorithm a popular choice in applications such as:
1. Telecommunications: The Goertzel algorithm is used for decoding Dual-Tone Multi-Frequency (DTMF) signals, which are the tones generated when pressing buttons on a telephone keypad. By identifying specific frequency components, the algorithm can accurately determine which button has been pressed.
2. Audio processing: The algorithm can be used to detect specific pitches or harmonics in an audio signal, making it useful in applications like pitch detection and tuning musical instruments.
3. Vibration analysis: In the field of mechanical engineering, the Goertzel algorithm can be applied to analyze vibrations in rotating machinery, helping to identify faulty components or signs of wear.
4. Power system analysis: The algorithm can be used to measure harmonic content in power systems, allowing engineers to assess power quality and detect potential issues.
The Goertzel algorithm is used in these applications because it offers several advantages over other methods, such as the FFT:
1. Computational efficiency: The Goertzel algorithm requires fewer calculations when detecting a small number of frequency components, making it more computationally efficient than the FFT in these cases.
2. Real-time analysis: The algorithm can be implemented in a streaming fashion, allowing for real-time analysis of signals, which is crucial in applications like telecommunications and audio processing.
3. Memory efficiency: The Goertzel algorithm requires less memory than the FFT, as it only computes the frequency components of interest.
4. Precision: The algorithm is less susceptible to numerical errors compared to the FFT, ensuring more accurate results in applications where precision is essential.
The Goertzel algorithm is an efficient digital signal processing technique that is primarily used to detect specific frequency components within a signal. Its computational efficiency, real-time capabilities, and precision make it an attractive choice for various applications, including telecommunications, audio processing, vibration analysis, and power system analysis. The algorithm has been widely adopted since its introduction in 1958 and continues to be an essential tool in the fields of engineering, mathematics, and physics.
█ Goertzel Algorithm in Quantitative Finance: In-Depth Analysis and Applications
The Goertzel algorithm, initially designed for signal processing in telecommunications, has gained significant traction in the financial industry due to its efficient frequency detection capabilities. In quantitative finance, the Goertzel algorithm has been utilized for uncovering hidden market cycles, developing data-driven trading strategies, and optimizing risk management. This section delves deeper into the applications of the Goertzel algorithm in finance, particularly within the context of quantitative trading and analysis.
Unveiling Hidden Market Cycles:
Market cycles are prevalent in financial markets and arise from various factors, such as economic conditions, investor psychology, and market participant behavior. The Goertzel algorithm's ability to detect and isolate specific frequencies in price data helps trader analysts identify hidden market cycles that may otherwise go unnoticed. By examining the amplitude, phase, and periodicity of each cycle, traders can better understand the underlying market structure and dynamics, enabling them to develop more informed and effective trading strategies.
Developing Quantitative Trading Strategies:
The Goertzel algorithm's versatility allows traders to incorporate its insights into a wide range of trading strategies. By identifying the dominant market cycles in a financial instrument's price data, traders can create data-driven strategies that capitalize on the cyclical nature of markets.
For instance, a trader may develop a mean-reversion strategy that takes advantage of the identified cycles. By establishing positions when the price deviates from the predicted cycle, the trader can profit from the subsequent reversion to the cycle's mean. Similarly, a momentum-based strategy could be designed to exploit the persistence of a dominant cycle by entering positions that align with the cycle's direction.
Enhancing Risk Management:
The Goertzel algorithm plays a vital role in risk management for quantitative strategies. By analyzing the cyclical components of a financial instrument's price data, traders can gain insights into the potential risks associated with their trading strategies.
By monitoring the amplitude and phase of dominant cycles, a trader can detect changes in market dynamics that may pose risks to their positions. For example, a sudden increase in amplitude may indicate heightened volatility, prompting the trader to adjust position sizing or employ hedging techniques to protect their portfolio. Additionally, changes in phase alignment could signal a potential shift in market sentiment, necessitating adjustments to the trading strategy.
Expanding Quantitative Toolkits:
Traders can augment the Goertzel algorithm's insights by combining it with other quantitative techniques, creating a more comprehensive and sophisticated analysis framework. For example, machine learning algorithms, such as neural networks or support vector machines, could be trained on features extracted from the Goertzel algorithm to predict future price movements more accurately.
Furthermore, the Goertzel algorithm can be integrated with other technical analysis tools, such as moving averages or oscillators, to enhance their effectiveness. By applying these tools to the identified cycles, traders can generate more robust and reliable trading signals.
The Goertzel algorithm offers invaluable benefits to quantitative finance practitioners by uncovering hidden market cycles, aiding in the development of data-driven trading strategies, and improving risk management. By leveraging the insights provided by the Goertzel algorithm and integrating it with other quantitative techniques, traders can gain a deeper understanding of market dynamics and devise more effective trading strategies.
█ Indicator Inputs
src: This is the source data for the analysis, typically the closing price of the financial instrument.
detrendornot: This input determines the method used for detrending the source data. Detrending is the process of removing the underlying trend from the data to focus on the cyclical components.
The available options are:
hpsmthdt: Detrend using Hodrick-Prescott filter centered moving average.
zlagsmthdt: Detrend using zero-lag moving average centered moving average.
logZlagRegression: Detrend using logarithmic zero-lag linear regression.
hpsmth: Detrend using Hodrick-Prescott filter.
zlagsmth: Detrend using zero-lag moving average.
DT_HPper1 and DT_HPper2: These inputs define the period range for the Hodrick-Prescott filter centered moving average when detrendornot is set to hpsmthdt.
DT_ZLper1 and DT_ZLper2: These inputs define the period range for the zero-lag moving average centered moving average when detrendornot is set to zlagsmthdt.
DT_RegZLsmoothPer: This input defines the period for the zero-lag moving average used in logarithmic zero-lag linear regression when detrendornot is set to logZlagRegression.
HPsmoothPer: This input defines the period for the Hodrick-Prescott filter when detrendornot is set to hpsmth.
ZLMAsmoothPer: This input defines the period for the zero-lag moving average when detrendornot is set to zlagsmth.
MaxPer: This input sets the maximum period for the Goertzel algorithm to search for cycles.
squaredAmp: This boolean input determines whether the amplitude should be squared in the Goertzel algorithm.
useAddition: This boolean input determines whether the Goertzel algorithm should use addition for combining the cycles.
useCosine: This boolean input determines whether the Goertzel algorithm should use cosine waves instead of sine waves.
UseCycleStrength: This boolean input determines whether the Goertzel algorithm should compute the cycle strength, which is a normalized measure of the cycle's amplitude.
WindowSizePast and WindowSizeFuture: These inputs define the window size for past and future projections of the composite wave.
FilterBartels: This boolean input determines whether Bartel's test should be applied to filter out non-significant cycles.
BartNoCycles: This input sets the number of cycles to be used in Bartel's test.
BartSmoothPer: This input sets the period for the moving average used in Bartel's test.
BartSigLimit: This input sets the significance limit for Bartel's test, below which cycles are considered insignificant.
SortBartels: This boolean input determines whether the cycles should be sorted by their Bartel's test results.
UseCycleList: This boolean input determines whether a user-defined list of cycles should be used for constructing the composite wave. If set to false, the top N cycles will be used.
Cycle1, Cycle2, Cycle3, Cycle4, and Cycle5: These inputs define the user-defined list of cycles when 'UseCycleList' is set to true. If using a user-defined list, each of these inputs represents the period of a specific cycle to include in the composite wave.
StartAtCycle: This input determines the starting index for selecting the top N cycles when UseCycleList is set to false. This allows you to skip a certain number of cycles from the top before selecting the desired number of cycles.
UseTopCycles: This input sets the number of top cycles to use for constructing the composite wave when UseCycleList is set to false. The cycles are ranked based on their amplitudes or cycle strengths, depending on the UseCycleStrength input.
SubtractNoise: This boolean input determines whether to subtract the noise (remaining cycles) from the composite wave. If set to true, the composite wave will only include the top N cycles specified by UseTopCycles.
█ Exploring Auxiliary Functions
The following functions demonstrate advanced techniques for analyzing financial markets, including zero-lag moving averages, Bartels probability, detrending, and Hodrick-Prescott filtering. This section examines each function in detail, explaining their purpose, methodology, and applications in finance. We will examine how each function contributes to the overall performance and effectiveness of the indicator and how they work together to create a powerful analytical tool.
Zero-Lag Moving Average:
The zero-lag moving average function is designed to minimize the lag typically associated with moving averages. This is achieved through a two-step weighted linear regression process that emphasizes more recent data points. The function calculates a linearly weighted moving average (LWMA) on the input data and then applies another LWMA on the result. By doing this, the function creates a moving average that closely follows the price action, reducing the lag and improving the responsiveness of the indicator.
The zero-lag moving average function is used in the indicator to provide a responsive, low-lag smoothing of the input data. This function helps reduce the noise and fluctuations in the data, making it easier to identify and analyze underlying trends and patterns. By minimizing the lag associated with traditional moving averages, this function allows the indicator to react more quickly to changes in market conditions, providing timely signals and improving the overall effectiveness of the indicator.
Bartels Probability:
The Bartels probability function calculates the probability of a given cycle being significant in a time series. It uses a mathematical test called the Bartels test to assess the significance of cycles detected in the data. The function calculates coefficients for each detected cycle and computes an average amplitude and an expected amplitude. By comparing these values, the Bartels probability is derived, indicating the likelihood of a cycle's significance. This information can help in identifying and analyzing dominant cycles in financial markets.
The Bartels probability function is incorporated into the indicator to assess the significance of detected cycles in the input data. By calculating the Bartels probability for each cycle, the indicator can prioritize the most significant cycles and focus on the market dynamics that are most relevant to the current trading environment. This function enhances the indicator's ability to identify dominant market cycles, improving its predictive power and aiding in the development of effective trading strategies.
Detrend Logarithmic Zero-Lag Regression:
The detrend logarithmic zero-lag regression function is used for detrending data while minimizing lag. It combines a zero-lag moving average with a linear regression detrending method. The function first calculates the zero-lag moving average of the logarithm of input data and then applies a linear regression to remove the trend. By detrending the data, the function isolates the cyclical components, making it easier to analyze and interpret the underlying market dynamics.
The detrend logarithmic zero-lag regression function is used in the indicator to isolate the cyclical components of the input data. By detrending the data, the function enables the indicator to focus on the cyclical movements in the market, making it easier to analyze and interpret market dynamics. This function is essential for identifying cyclical patterns and understanding the interactions between different market cycles, which can inform trading decisions and enhance overall market understanding.
Bartels Cycle Significance Test:
The Bartels cycle significance test is a function that combines the Bartels probability function and the detrend logarithmic zero-lag regression function to assess the significance of detected cycles. The function calculates the Bartels probability for each cycle and stores the results in an array. By analyzing the probability values, traders and analysts can identify the most significant cycles in the data, which can be used to develop trading strategies and improve market understanding.
The Bartels cycle significance test function is integrated into the indicator to provide a comprehensive analysis of the significance of detected cycles. By combining the Bartels probability function and the detrend logarithmic zero-lag regression function, this test evaluates the significance of each cycle and stores the results in an array. The indicator can then use this information to prioritize the most significant cycles and focus on the most relevant market dynamics. This function enhances the indicator's ability to identify and analyze dominant market cycles, providing valuable insights for trading and market analysis.
Hodrick-Prescott Filter:
The Hodrick-Prescott filter is a popular technique used to separate the trend and cyclical components of a time series. The function applies a smoothing parameter to the input data and calculates a smoothed series using a two-sided filter. This smoothed series represents the trend component, which can be subtracted from the original data to obtain the cyclical component. The Hodrick-Prescott filter is commonly used in economics and finance to analyze economic data and financial market trends.
The Hodrick-Prescott filter is incorporated into the indicator to separate the trend and cyclical components of the input data. By applying the filter to the data, the indicator can isolate the trend component, which can be used to analyze long-term market trends and inform trading decisions. Additionally, the cyclical component can be used to identify shorter-term market dynamics and provide insights into potential trading opportunities. The inclusion of the Hodrick-Prescott filter adds another layer of analysis to the indicator, making it more versatile and comprehensive.
Detrending Options: Detrend Centered Moving Average:
The detrend centered moving average function provides different detrending methods, including the Hodrick-Prescott filter and the zero-lag moving average, based on the selected detrending method. The function calculates two sets of smoothed values using the chosen method and subtracts one set from the other to obtain a detrended series. By offering multiple detrending options, this function allows traders and analysts to select the most appropriate method for their specific needs and preferences.
The detrend centered moving average function is integrated into the indicator to provide users with multiple detrending options, including the Hodrick-Prescott filter and the zero-lag moving average. By offering multiple detrending methods, the indicator allows users to customize the analysis to their specific needs and preferences, enhancing the indicator's overall utility and adaptability. This function ensures that the indicator can cater to a wide range of trading styles and objectives, making it a valuable tool for a diverse group of market participants.
The auxiliary functions functions discussed in this section demonstrate the power and versatility of mathematical techniques in analyzing financial markets. By understanding and implementing these functions, traders and analysts can gain valuable insights into market dynamics, improve their trading strategies, and make more informed decisions. The combination of zero-lag moving averages, Bartels probability, detrending methods, and the Hodrick-Prescott filter provides a comprehensive toolkit for analyzing and interpreting financial data. The integration of advanced functions in a financial indicator creates a powerful and versatile analytical tool that can provide valuable insights into financial markets. By combining the zero-lag moving average,
█ In-Depth Analysis of the Goertzel Browser Code
The Goertzel Browser code is an implementation of the Goertzel Algorithm, an efficient technique to perform spectral analysis on a signal. The code is designed to detect and analyze dominant cycles within a given financial market data set. This section will provide an extremely detailed explanation of the code, its structure, functions, and intended purpose.
Function signature and input parameters:
The Goertzel Browser function accepts numerous input parameters for customization, including source data (src), the current bar (forBar), sample size (samplesize), period (per), squared amplitude flag (squaredAmp), addition flag (useAddition), cosine flag (useCosine), cycle strength flag (UseCycleStrength), past and future window sizes (WindowSizePast, WindowSizeFuture), Bartels filter flag (FilterBartels), Bartels-related parameters (BartNoCycles, BartSmoothPer, BartSigLimit), sorting flag (SortBartels), and output buffers (goeWorkPast, goeWorkFuture, cyclebuffer, amplitudebuffer, phasebuffer, cycleBartelsBuffer).
Initializing variables and arrays:
The code initializes several float arrays (goeWork1, goeWork2, goeWork3, goeWork4) with the same length as twice the period (2 * per). These arrays store intermediate results during the execution of the algorithm.
Preprocessing input data:
The input data (src) undergoes preprocessing to remove linear trends. This step enhances the algorithm's ability to focus on cyclical components in the data. The linear trend is calculated by finding the slope between the first and last values of the input data within the sample.
Iterative calculation of Goertzel coefficients:
The core of the Goertzel Browser algorithm lies in the iterative calculation of Goertzel coefficients for each frequency bin. These coefficients represent the spectral content of the input data at different frequencies. The code iterates through the range of frequencies, calculating the Goertzel coefficients using a nested loop structure.
Cycle strength computation:
The code calculates the cycle strength based on the Goertzel coefficients. This is an optional step, controlled by the UseCycleStrength flag. The cycle strength provides information on the relative influence of each cycle on the data per bar, considering both amplitude and cycle length. The algorithm computes the cycle strength either by squaring the amplitude (controlled by squaredAmp flag) or using the actual amplitude values.
Phase calculation:
The Goertzel Browser code computes the phase of each cycle, which represents the position of the cycle within the input data. The phase is calculated using the arctangent function (math.atan) based on the ratio of the imaginary and real components of the Goertzel coefficients.
Peak detection and cycle extraction:
The algorithm performs peak detection on the computed amplitudes or cycle strengths to identify dominant cycles. It stores the detected cycles in the cyclebuffer array, along with their corresponding amplitudes and phases in the amplitudebuffer and phasebuffer arrays, respectively.
Sorting cycles by amplitude or cycle strength:
The code sorts the detected cycles based on their amplitude or cycle strength in descending order. This allows the algorithm to prioritize cycles with the most significant impact on the input data.
Bartels cycle significance test:
If the FilterBartels flag is set, the code performs a Bartels cycle significance test on the detected cycles. This test determines the statistical significance of each cycle and filters out the insignificant cycles. The significant cycles are stored in the cycleBartelsBuffer array. If the SortBartels flag is set, the code sorts the significant cycles based on their Bartels significance values.
Waveform calculation:
The Goertzel Browser code calculates the waveform of the significant cycles for both past and future time windows. The past and future windows are defined by the WindowSizePast and WindowSizeFuture parameters, respectively. The algorithm uses either cosine or sine functions (controlled by the useCosine flag) to calculate the waveforms for each cycle. The useAddition flag determines whether the waveforms should be added or subtracted.
Storing waveforms in matrices:
The calculated waveforms for each cycle are stored in two matrices - goeWorkPast and goeWorkFuture. These matrices hold the waveforms for the past and future time windows, respectively. Each row in the matrices represents a time window position, and each column corresponds to a cycle.
Returning the number of cycles:
The Goertzel Browser function returns the total number of detected cycles (number_of_cycles) after processing the input data. This information can be used to further analyze the results or to visualize the detected cycles.
The Goertzel Browser code is a comprehensive implementation of the Goertzel Algorithm, specifically designed for detecting and analyzing dominant cycles within financial market data. The code offers a high level of customization, allowing users to fine-tune the algorithm based on their specific needs. The Goertzel Browser's combination of preprocessing, iterative calculations, cycle extraction, sorting, significance testing, and waveform calculation makes it a powerful tool for understanding cyclical components in financial data.
█ Generating and Visualizing Composite Waveform
The indicator calculates and visualizes the composite waveform for both past and future time windows based on the detected cycles. Here's a detailed explanation of this process:
Updating WindowSizePast and WindowSizeFuture:
The WindowSizePast and WindowSizeFuture are updated to ensure they are at least twice the MaxPer (maximum period).
Initializing matrices and arrays:
Two matrices, goeWorkPast and goeWorkFuture, are initialized to store the Goertzel results for past and future time windows. Multiple arrays are also initialized to store cycle, amplitude, phase, and Bartels information.
Preparing the source data (srcVal) array:
The source data is copied into an array, srcVal, and detrended using one of the selected methods (hpsmthdt, zlagsmthdt, logZlagRegression, hpsmth, or zlagsmth).
Goertzel function call:
The Goertzel function is called to analyze the detrended source data and extract cycle information. The output, number_of_cycles, contains the number of detected cycles.
Initializing arrays for past and future waveforms:
Three arrays, epgoertzel, goertzel, and goertzelFuture, are initialized to store the endpoint Goertzel, non-endpoint Goertzel, and future Goertzel projections, respectively.
Calculating composite waveform for past bars (goertzel array):
The past composite waveform is calculated by summing the selected cycles (either from the user-defined cycle list or the top cycles) and optionally subtracting the noise component.
Calculating composite waveform for future bars (goertzelFuture array):
The future composite waveform is calculated in a similar way as the past composite waveform.
Drawing past composite waveform (pvlines):
The past composite waveform is drawn on the chart using solid lines. The color of the lines is determined by the direction of the waveform (green for upward, red for downward).
Drawing future composite waveform (fvlines):
The future composite waveform is drawn on the chart using dotted lines. The color of the lines is determined by the direction of the waveform (fuchsia for upward, yellow for downward).
Displaying cycle information in a table (table3):
A table is created to display the cycle information, including the rank, period, Bartel value, amplitude (or cycle strength), and phase of each detected cycle.
Filling the table with cycle information:
The indicator iterates through the detected cycles and retrieves the relevant information (period, amplitude, phase, and Bartel value) from the corresponding arrays. It then fills the table with this information, displaying the values up to six decimal places.
To summarize, this indicator generates a composite waveform based on the detected cycles in the financial data. It calculates the composite waveforms for both past and future time windows and visualizes them on the chart using colored lines. Additionally, it displays detailed cycle information in a table, including the rank, period, Bartel value, amplitude (or cycle strength), and phase of each detected cycle.
█ Enhancing the Goertzel Algorithm-Based Script for Financial Modeling and Trading
The Goertzel algorithm-based script for detecting dominant cycles in financial data is a powerful tool for financial modeling and trading. It provides valuable insights into the past behavior of these cycles and potential future impact. However, as with any algorithm, there is always room for improvement. This section discusses potential enhancements to the existing script to make it even more robust and versatile for financial modeling, general trading, advanced trading, and high-frequency finance trading.
Enhancements for Financial Modeling
Data preprocessing: One way to improve the script's performance for financial modeling is to introduce more advanced data preprocessing techniques. This could include removing outliers, handling missing data, and normalizing the data to ensure consistent and accurate results.
Additional detrending and smoothing methods: Incorporating more sophisticated detrending and smoothing techniques, such as wavelet transform or empirical mode decomposition, can help improve the script's ability to accurately identify cycles and trends in the data.
Machine learning integration: Integrating machine learning techniques, such as artificial neural networks or support vector machines, can help enhance the script's predictive capabilities, leading to more accurate financial models.
Enhancements for General and Advanced Trading
Customizable indicator integration: Allowing users to integrate their own technical indicators can help improve the script's effectiveness for both general and advanced trading. By enabling the combination of the dominant cycle information with other technical analysis tools, traders can develop more comprehensive trading strategies.
Risk management and position sizing: Incorporating risk management and position sizing functionality into the script can help traders better manage their trades and control potential losses. This can be achieved by calculating the optimal position size based on the user's risk tolerance and account size.
Multi-timeframe analysis: Enhancing the script to perform multi-timeframe analysis can provide traders with a more holistic view of market trends and cycles. By identifying dominant cycles on different timeframes, traders can gain insights into the potential confluence of cycles and make better-informed trading decisions.
Enhancements for High-Frequency Finance Trading
Algorithm optimization: To ensure the script's suitability for high-frequency finance trading, optimizing the algorithm for faster execution is crucial. This can be achieved by employing efficient data structures and refining the calculation methods to minimize computational complexity.
Real-time data streaming: Integrating real-time data streaming capabilities into the script can help high-frequency traders react to market changes more quickly. By continuously updating the cycle information based on real-time market data, traders can adapt their strategies accordingly and capitalize on short-term market fluctuations.
Order execution and trade management: To fully leverage the script's capabilities for high-frequency trading, implementing functionality for automated order execution and trade management is essential. This can include features such as stop-loss and take-profit orders, trailing stops, and automated trade exit strategies.
While the existing Goertzel algorithm-based script is a valuable tool for detecting dominant cycles in financial data, there are several potential enhancements that can make it even more powerful for financial modeling, general trading, advanced trading, and high-frequency finance trading. By incorporating these improvements, the script can become a more versatile and effective tool for traders and financial analysts alike.
█ Understanding the Limitations of the Goertzel Algorithm
While the Goertzel algorithm-based script for detecting dominant cycles in financial data provides valuable insights, it is important to be aware of its limitations and drawbacks. Some of the key drawbacks of this indicator are:
Lagging nature:
As with many other technical indicators, the Goertzel algorithm-based script can suffer from lagging effects, meaning that it may not immediately react to real-time market changes. This lag can lead to late entries and exits, potentially resulting in reduced profitability or increased losses.
Parameter sensitivity:
The performance of the script can be sensitive to the chosen parameters, such as the detrending methods, smoothing techniques, and cycle detection settings. Improper parameter selection may lead to inaccurate cycle detection or increased false signals, which can negatively impact trading performance.
Complexity:
The Goertzel algorithm itself is relatively complex, making it difficult for novice traders or those unfamiliar with the concept of cycle analysis to fully understand and effectively utilize the script. This complexity can also make it challenging to optimize the script for specific trading styles or market conditions.
Overfitting risk:
As with any data-driven approach, there is a risk of overfitting when using the Goertzel algorithm-based script. Overfitting occurs when a model becomes too specific to the historical data it was trained on, leading to poor performance on new, unseen data. This can result in misleading signals and reduced trading performance.
No guarantee of future performance: While the script can provide insights into past cycles and potential future trends, it is important to remember that past performance does not guarantee future results. Market conditions can change, and relying solely on the script's predictions without considering other factors may lead to poor trading decisions.
Limited applicability: The Goertzel algorithm-based script may not be suitable for all markets, trading styles, or timeframes. Its effectiveness in detecting cycles may be limited in certain market conditions, such as during periods of extreme volatility or low liquidity.
While the Goertzel algorithm-based script offers valuable insights into dominant cycles in financial data, it is essential to consider its drawbacks and limitations when incorporating it into a trading strategy. Traders should always use the script in conjunction with other technical and fundamental analysis tools, as well as proper risk management, to make well-informed trading decisions.
█ Interpreting Results
The Goertzel Browser indicator can be interpreted by analyzing the plotted lines and the table presented alongside them. The indicator plots two lines: past and future composite waves. The past composite wave represents the composite wave of the past price data, and the future composite wave represents the projected composite wave for the next period.
The past composite wave line displays a solid line, with green indicating a bullish trend and red indicating a bearish trend. On the other hand, the future composite wave line is a dotted line with fuchsia indicating a bullish trend and yellow indicating a bearish trend.
The table presented alongside the indicator shows the top cycles with their corresponding rank, period, Bartels, amplitude or cycle strength, and phase. The amplitude is a measure of the strength of the cycle, while the phase is the position of the cycle within the data series.
Interpreting the Goertzel Browser indicator involves identifying the trend of the past and future composite wave lines and matching them with the corresponding bullish or bearish color. Additionally, traders can identify the top cycles with the highest amplitude or cycle strength and utilize them in conjunction with other technical indicators and fundamental analysis for trading decisions.
This indicator is considered a repainting indicator because the value of the indicator is calculated based on the past price data. As new price data becomes available, the indicator's value is recalculated, potentially causing the indicator's past values to change. This can create a false impression of the indicator's performance, as it may appear to have provided a profitable trading signal in the past when, in fact, that signal did not exist at the time.
The Goertzel indicator is also non-endpointed, meaning that it is not calculated up to the current bar or candle. Instead, it uses a fixed amount of historical data to calculate its values, which can make it difficult to use for real-time trading decisions. For example, if the indicator uses 100 bars of historical data to make its calculations, it cannot provide a signal until the current bar has closed and become part of the historical data. This can result in missed trading opportunities or delayed signals.
█ Conclusion
The Goertzel Browser indicator is a powerful tool for identifying and analyzing cyclical patterns in financial markets. Its ability to detect multiple cycles of varying frequencies and strengths make it a valuable addition to any trader's technical analysis toolkit. However, it is important to keep in mind that the Goertzel Browser indicator should be used in conjunction with other technical analysis tools and fundamental analysis to achieve the best results. With continued refinement and development, the Goertzel Browser indicator has the potential to become a highly effective tool for financial modeling, general trading, advanced trading, and high-frequency finance trading. Its accuracy and versatility make it a promising candidate for further research and development.
█ Footnotes
What is the Bartels Test for Cycle Significance?
The Bartels Cycle Significance Test is a statistical method that determines whether the peaks and troughs of a time series are statistically significant. The test is named after its inventor, George Bartels, who developed it in the mid-20th century.
The Bartels test is designed to analyze the cyclical components of a time series, which can help traders and analysts identify trends and cycles in financial markets. The test calculates a Bartels statistic, which measures the degree of non-randomness or autocorrelation in the time series.
The Bartels statistic is calculated by first splitting the time series into two halves and calculating the range of the peaks and troughs in each half. The test then compares these ranges using a t-test, which measures the significance of the difference between the two ranges.
If the Bartels statistic is greater than a critical value, it indicates that the peaks and troughs in the time series are non-random and that there is a significant cyclical component to the data. Conversely, if the Bartels statistic is less than the critical value, it suggests that the peaks and troughs are random and that there is no significant cyclical component.
The Bartels Cycle Significance Test is particularly useful in financial analysis because it can help traders and analysts identify significant cycles in asset prices, which can in turn inform investment decisions. However, it is important to note that the test is not perfect and can produce false signals in certain situations, particularly in noisy or volatile markets. Therefore, it is always recommended to use the test in conjunction with other technical and fundamental indicators to confirm trends and cycles.
Deep-dive into the Hodrick-Prescott Fitler
The Hodrick-Prescott (HP) filter is a statistical tool used in economics and finance to separate a time series into two components: a trend component and a cyclical component. It is a powerful tool for identifying long-term trends in economic and financial data and is widely used by economists, central banks, and financial institutions around the world.
The HP filter was first introduced in the 1990s by economists Robert Hodrick and Edward Prescott. It is a simple, two-parameter filter that separates a time series into a trend component and a cyclical component. The trend component represents the long-term behavior of the data, while the cyclical component captures the shorter-term fluctuations around the trend.
The HP filter works by minimizing the following objective function:
Minimize: (Sum of Squared Deviations) + λ (Sum of Squared Second Differences)
Where:
The first term represents the deviation of the data from the trend.
The second term represents the smoothness of the trend.
λ is a smoothing parameter that determines the degree of smoothness of the trend.
The smoothing parameter λ is typically set to a value between 100 and 1600, depending on the frequency of the data. Higher values of λ lead to a smoother trend, while lower values lead to a more volatile trend.
The HP filter has several advantages over other smoothing techniques. It is a non-parametric method, meaning that it does not make any assumptions about the underlying distribution of the data. It also allows for easy comparison of trends across different time series and can be used with data of any frequency.
However, the HP filter also has some limitations. It assumes that the trend is a smooth function, which may not be the case in some situations. It can also be sensitive to changes in the smoothing parameter λ, which may result in different trends for the same data. Additionally, the filter may produce unrealistic trends for very short time series.
Despite these limitations, the HP filter remains a valuable tool for analyzing economic and financial data. It is widely used by central banks and financial institutions to monitor long-term trends in the economy, and it can be used to identify turning points in the business cycle. The filter can also be used to analyze asset prices, exchange rates, and other financial variables.
The Hodrick-Prescott filter is a powerful tool for analyzing economic and financial data. It separates a time series into a trend component and a cyclical component, allowing for easy identification of long-term trends and turning points in the business cycle. While it has some limitations, it remains a valuable tool for economists, central banks, and financial institutions around the world.
Simple ICT Market Structure by toodegreesThis Simple ICT Market Structure is based on the teachings of ICT, specifically in his episode 12 of the Public 2022 Mentorship.
The only omission here is the peculiar calculation of Intermediate Term points, for which I am not using the concept of repricing imbalances – this can be added later!
Feel free to use this tool, however it is quite simple and market structure is something we all know very well how to spot. In my opinion it is helpful to display the long term swing points to identify more mature pools of liquidity.
The reason for coding this tool is to help new coders understand PineScript (I have a video tutorial where I code this from start to finish), as well as fostering some algorithmic thinking in your trading of ICT Concepts and Algorithmic Delivery.
If you have any questions about the code, shoot me a message!
Hope you learn something and GLGT!
Supply and Demand Visible Range [LuxAlgo]The Supply and Demand Visible Range indicator displays areas & levels on the user's chart for the visible range using a novel volume-based method. The script also makes use of intra-bar data to create precise Supply & Demand zones.
🔶 SETTINGS
Threshold %: Percentage of the total visible range volume used as a threshold to set supply/demand areas. Higher values return wider areas.
Resolution: Determines the number of bins used to find each area. Higher values will return more precise results.
Intra-bar TF: Timeframe used to obtain intra-bar data.
🔶 USAGE
The supply/demand areas and levels displayed by the script are aimed at providing potential supports/resistances for users. The script's behavior makes it recalculate each time the visible chart interval/range changes, as such this script is more suited as a descriptive tool.
Price reaching a supply (upper) area that might have been tested a few times might be indicative of a potential reversal down, while price reaching a demand (lower) area that might have been tested a few times could be indicative of a potential reversal up.
The width of each area can also indicate which areas are more liquid, with thinner areas indicating more significant liquidity.
The user can control the width of each area using the Threshold % setting, with a higher setting returning wider areas. The precision setting can also return wider supply/demand areas if very low values are used and has the benefit of improving the script execution time at the cost of precision.
The Supply and Demand Zones indicator returns various levels. The solid-colored levels display the average of each area, while dashed colored lines display the weighted averages of each area. These weighted averages can highlight more liquid price levels within the supply/demand areas.
Central solid/dashed lines display the average between the areas' averages and weighted averages.
🔶 DETAILS
Each supply/demand area is constructed from volume data. The calculation is done as follows:
The accumulated volume within the chart visible range is calculated.
The chart visible range is divided into N bins of equal width (where N is the resolution setting)
Calculation start from the highest visible range price value for the supply area, and lowest value for the demand area.
The volume within each bin after the starting calculation level is accumulated, once this accumulated volume is equal or exceed the threshold value ( p % of the total visible range volume) the area is set.
Each bin volume accumulation within an area is displayed on the left, this can help indicate how fast volume accumulates within an area.
🔶 LIMITATIONS
The script execution time is dependent on all of the script's settings, using more demanding settings might return errors so make sure to be aware of the potential scenarios that might make the script exceed the allowed execution time:
Having a chart's visible range including a high number of bars.
Using a high number of bins (high resolution value) will increase computation time, this can be worsened by using a high threshold %.
Using very low intra-bar timeframe can drastically increase computation time but can also simply throw an error if the chart timeframe is high.
Users facing issues can lower the resolution value or use the chart timeframe for intra-bar data.