Advanced Swing High/Low Trend Lines with MA Filter# Advanced Swing High/Low Trend Lines Indicator
## Overview
This advanced indicator identifies and draws trend lines based on swing highs and lows across three different timeframes (large, middle, and small trends). It's designed to help traders visualize market structure and potential support/resistance levels at multiple scales simultaneously.
## Key Features
- *Multi-Timeframe Analysis*: Simultaneously tracks trends at large (200-bar), middle (100-bar), and small (50-bar) scales
- *Customizable Visualization*: Different colors, widths, and styles for each trend level
- *Trend Confirmation System*: Requires minimum consecutive pivot points to validate trends
- *Trend Filter Option*: Can align trends with 200 EMA direction for consistency
## Recommended Settings
### For Long-Term Investors:
- Large Swing Length: 200-300
- Middle Swing Length: 100-150
- Small Swing Length: 50-75
- Enable Trend Filter: Yes
- Confirmation Points: 4-5
### For Swing Traders:
- Large Swing Length: 100
- Middle Swing Length: 50
- Small Swing Length: 20-30
- Enable Trend Filter: Optional
- Confirmation Points: 3
### For Day Traders:
- Large Swing Length: 50
- Middle Swing Length: 20
- Small Swing Length: 5-10
- Enable Trend Filter: No
- Confirmation Points: 2-3
## How to Use
### Identification:
1. *Large Trend Lines* (Red/Green): Show major market structure
2. *Middle Trend Lines* (Purple/Aqua): Intermediate levels
3. *Small Trend Lines* (Orange/Blue): Short-term price action
### Trading Applications:
- *Breakout Trading*: Watch for price breaking through multiple trend lines
- *Bounce Trading*: Look for reactions at confluence of trend lines
- *Trend Confirmation*: Aligned trends across timeframes suggest stronger moves
### Best Markets:
- Works well in trending markets (forex, indices)
- Effective in higher timeframes (1H+)
- Can be used in ranging markets to identify boundaries
## Customization Tips
1. For cleaner charts, reduce line widths in congested markets
2. Use dotted styles for smaller trends to reduce visual clutter
3. Adjust confirmation points based on market volatility (higher for noisy markets)
## Limitations
- May repaint on current swing points
- Works best in trending conditions
- Requires sufficient historical data for longer swing lengths
This indicator provides a comprehensive view of market structure across multiple timeframes, helping traders make more informed decisions by visualizing the hierarchy of support and resistance levels.
"沪深300指数最高点" için komut dosyalarını ara
Volume Profile [ActiveQuants]The Volume Profile indicator visualizes the distribution of trading volume across price levels over a user-defined historical period. It identifies key liquidity zones, including the Point of Control (POC) (price level with the highest volume) and the Value Area (price range containing a specified percentage of total volume). This tool is ideal for traders analyzing support/resistance levels, market sentiment , and potential price reversals .
█ CORE METHODOLOGY
Vertical Price Rows: Divides the price range of the selected lookback period into equal-height rows.
Volume Aggregation: Accumulates bullish/bearish or total volume within each price row.
POC: The row with the highest total volume.
Value Area: Expands from the POC until cumulative volume meets the user-defined threshold (e.g., 70%).
Dynamic Visualization: Rows are plotted as horizontal boxes with widths proportional to their volume.
█ KEY FEATURES
- Customizable Lookback & Resolution
Adjust the historical period ( Lookback ) and granularity ( Number of Rows ) for precise analysis.
- Configurable Profile Width & Horizontal Offset
Control the relative horizontal length of the profile rows, and set the distance from the current bar to the POC row’s anchor.
Important: Do not set the horizontal offset too high. Indicators cannot be plotted more than 500 bars into the future.
- Value Area & POC Highlighting
Set the percentage of total volume required to form the Value Area , ensuring that key volume levels are clearly identified.
Value Area rows are colored distinctly, while the POC is marked with a bold line.
- Flexible Display Options
Show bullish/bearish volume splits or total volume.
Place the profile on the right or left of the chart.
- Gradient Coloring
Rows fade in color intensity based on their relative volume strength .
- Real-Time Adjustments
Modify horizontal offset, profile width, and appearance without reloading.
█ USAGE EXAMPLES
Example 1: Basic Volume Profile with Value Area
Settings:
Lookback: 500 bars
Number of Rows: 100
Value Area: 70%
Display Type: Up/Down
Placement: Right
Image Context:
The profile appears on the right side of the chart. The POC (orange line) marks the highest volume row. Value Area rows (green/red) extend above/below the POC, containing 70% of total volume.
Example 2: Total Volume with Gradient Colors
Settings:
Lookback: 800 bars
Number of Rows: 100
Profile Width: 60
Horizontal Offset: 20
Display Type: Total
Gradient Colors: Enabled
Image Context:
Rows display total volume in a single color with gradient transparency. Darker rows indicate higher volume concentration.
Example 3: Left-Aligned Profile with Narrow Value Area
Settings:
Lookback: 600 bars
Number of Rows: 100
Profile Width: 45
Horizontal Offset: 500
Value Area: 50%
Profile Placement: Left
Image Context:
The profile shifts to the left, with a tighter Value Area (50%).
█ USER INPUTS
Calculation Settings
Lookback: Historical bars analyzed (default: 500).
Number of Rows: Vertical resolution of the profile (default: 100).
Profile Width: Horizontal length of rows (default: 50).
Horizontal Offset: Distance from the current bar to the POC (default: 50).
Value Area (%): Cumulative volume threshold for the Value Area (default: 70%).
Volume Display: Toggle between Up/Down (bullish/bearish) or Total volume.
Profile Placement: Align profile to the Right or Left of the chart.
Appearance
Rows Border: Customize border width/color.
Gradient Colors: Enable fading color effects.
Value Area Colors: Set distinct colors for bullish and bearish Value Area rows.
POC Line: Adjust color, width, and visibility.
█ CONCLUSION
The Volume Profile indicator provides a dynamic, customizable view of market liquidity. By highlighting the POC and Value Area, traders can identify high-probability reversal zones, gauge market sentiment, and align entries/exits with key volume levels.
█ IMPORTANT NOTES
⚠ Lookback Period: Shorter lookbacks prioritize recent activity but may omit critical levels.
⚠ Horizontal Offset Limitation: Avoid excessively high offsets (e.g., close to ±300). TradingView restricts plotting indicators more than 500 bars into the future, which may truncate or hide the profile.
⚠ Risk Management: While the indicator highlights areas of concentrated volume, always use it in combination with other technical analysis tools and proper risk management techniques.
█ RISK DISCLAIMER
Trading involves substantial risk. The Volume Profile highlights historical liquidity but does not predict future price movements. Always use stop-loss orders and confirm signals with additional analysis. Past performance is not indicative of future results.
📊 Happy trading! 🚀
*Auto Backtest & Optimize EngineFull-featured Engine for Automatic Backtesting and parameter optimization. Allows you to test millions of different combinations of stop-loss and take profit parameters, including on any connected indicators.
⭕️ Key Futures
Quickly identify the optimal parameters for your strategy.
Automatically generate and test thousands of parameter combinations.
A simple Genetic Algorithm for result selection.
Saves time on manual testing of multiple parameters.
Detailed analysis, sorting, filtering and statistics of results.
Detailed control panel with many tooltips.
Display of key metrics: Profit, Win Rate, etc..
Comprehensive Strategy Score calculation.
In-depth analysis of the performance of different types of stop-losses.
Possibility to use to calculate the best Stop-Take parameters for your position.
Ability to test your own functions and signals.
Customizable visualization of results.
Flexible Stop-Loss Settings:
• Auto ━ Allows you to test all types of Stop Losses at once(listed below).
• S.VOLATY ━ Static stop based on volatility (Fixed, ATR, STDEV).
• Trailing ━ Classic trailing stop following the price.
• Fast Trail ━ Accelerated trailing stop that reacts faster to price movements.
• Volatility ━ Dynamic stop based on volatility indicators.
• Chandelier ━ Stop based on price extremes.
• Activator ━ Dynamic stop based on SAR.
• MA ━ Stop based on moving averages (9 different types).
• SAR ━ Parabolic SAR (Stop and Reverse).
Advanced Take-Profit Options:
• R:R: Risk/Reward ━ sets TP based on SL size.
• T.VOLATY ━ Calculation based on volatility indicators (Fixed, ATR, STDEV).
Testing Modes:
• Stops ━ Cyclical stop-loss testing
• Pivot Point Example ━ Example of using pivot points
• External Example ━ Built-in example how test functions with different parameters
• External Signal ━ Using external signals
⭕️ Usage
━ First Steps:
When opening, select any point on the chart. It will not affect anything until you turn on Manual Start mode (more on this below).
The chart will immediately show the best results of the default Auto mode. You can switch Part's to try to find even better results in the table.
Now you can display any result from the table on the chart by entering its ID in the settings.
Repeat steps 3-4 until you determine which type of Stop Loss you like best. Then set it in the settings instead of Auto mode.
* Example: I flipped through 14 parts before I liked the first result and entered its ID so I could visually evaluate it on the chart.
Then select the stop loss type, choose it in place of Auto mode and repeat steps 3-4 or immediately follow the recommendations of the algorithm.
Now the Genetic Algorithm at the bottom right will prompt you to enter the Parameters you need to search for and select even better results.
Parameters must be entered All at once before they are updated. Enter recommendations strictly in fields with the same names.
Repeat steps 5-6 until there are approximately 10 Part's left or as you like. And after that, easily pour through the remaining Parts and select the best parameters.
━ Example of the finished result.
━ Example of use with Takes
You can also test at the same time along with Take Profit. In this example, I simply enabled Risk/Reward mode and immediately specified in the TP field Maximum RR, Minimum RR and Step. So in this example I can test (3-1) / 0.1 = 20 Takes of different sizes. There are additional tips in the settings.
━
* Soon you will start to understand how the system works and things will become much easier.
* If something doesn't work, just reset the engine settings and start over again.
* Use the tips I have left in the settings and on the Panel.
━ Details:
Sort ━ Sorting results by Score, Profit, Trades, etc..
Filter ━ Filtring results by Score, Profit, Trades, etc..
Trade Type ━ Ability to disable Long\Short but only from statistics.
BackWin ━ Backtest Window Number of Candle the script can test.
Manual Start ━ Enabling it will allow you to call a Stop from a selected point. which you selected when you started the engine.
* If you have a real open position then this mode can help to save good Stop\Take for it.
1 - 9 Сheckboxs ━ Allow you to disable any stop from Auto mode.
Ex Source - Allow you to test Stops/Takes from connected indicators.
Connection guide:
//@version=6
indicator("My script")
rsi = ta.rsi(close, 14)
buy = not na(rsi) and ta.crossover (rsi, 40) // OS = 40
sell = not na(rsi) and ta.crossunder(rsi, 60) // OB = 60
Signal = buy ? +1 : sell ? -1 : 0
plot(Signal, "🔌Connector🔌", display = display.none)
* Format the signal for your indicator in a similar style and then select it in Ex Source.
⭕️ How it Works
Hypothesis of Uniform Distribution of Rare Elements After Mixing.
'This hypothesis states that if an array of N elements contains K valid elements, then after mixing, these valid elements will be approximately uniformly distributed.'
'This means that in a random sample of k elements, the proportion of valid elements should closely match their proportion in the original array, with some random variation.'
'According to the central limit theorem, repeated sampling will result in an average count of valid elements following a normal distribution.'
'This supports the assumption that the valid elements are evenly spread across the array.'
'To test this hypothesis, we can conduct an experiment:'
'Create an array of 1,000,000 elements.'
'Select 1,000 random elements (1%) for validation.'
'Shuffle the array and divide it into groups of 1,000 elements.'
'If the hypothesis holds, each group should contain, on average, 1~ valid element, with minor variations.'
* I'd like to attach more details to My hypothesis but it won't be very relevant here. Since this is a whole separate topic, I will leave the minimum part for understanding the engine.
Practical Application
To apply this hypothesis, I needed a way to generate and thoroughly mix numerous possible combinations. Within Pine, generating over 100,000 combinations presents significant challenges, and storing millions of combinations requires excessive resources.
I developed an efficient mechanism that generates combinations in random order to address these limitations. While conventional methods often produce duplicates or require generating a complete list first, my approach guarantees that the first 10% of possible combinations are both unique and well-distributed. Based on my hypothesis, this sampling is sufficient to determine optimal testing parameters.
Most generators and randomizers fail to accommodate both my hypothesis and Pine's constraints. My solution utilizes a simple Linear Congruential Generator (LCG) for pseudo-randomization, enhanced with prime numbers to increase entropy during generation. I pre-generate the entire parameter range and then apply systematic mixing. This approach, combined with a hybrid combinatorial array-filling technique with linear distribution, delivers excellent generation quality.
My engine can efficiently generate and verify 300 unique combinations per batch. Based on the above, to determine optimal values, only 10-20 Parts need to be manually scrolled through to find the appropriate value or range, eliminating the need for exhaustive testing of millions of parameter combinations.
For the Score statistic I applied all the same, generated a range of Weights, distributed them randomly for each type of statistic to avoid manual distribution.
Score ━ based on Trade, Profit, WinRate, Profit Factor, Drawdown, Sharpe & Sortino & Omega & Calmar Ratio.
⭕️ Notes
For attentive users, a little tricks :)
To save time, switch parts every 3 seconds without waiting for it to load. After 10-20 parts, stop and wait for loading. If the pause is correct, you can switch between the rest of the parts without loading, as they will be cached. This used to work without having to wait for a pause, but now it does slower. This will save a lot of time if you are going to do a deeper backtest.
Sometimes you'll get the error “The scripts take too long to execute.”
For a quick fix you just need to switch the TF or Ticker back and forth and most likely everything will load.
The error appears because of problems on the side of the site because the engine is very heavy. It can also appear if you set too long a period for testing in BackWin or use a heavy indicator for testing.
Manual Start - Allow you to Start you Result from any point. Which in turn can help you choose a good stop-stick for your real position.
* It took me half a year from idea to current realization. This seems to be one of the few ways to build something automatic in backtest format and in this particular Pine environment. There are already better projects in other languages, and they are created much easier and faster because there are no limitations except for personal PC. If you see solutions to improve this system I would be glad if you share the code. At the moment I am tired and will continue him not soon.
Also You can use my previosly big Backtest project with more manual settings(updated soon)
Dynamic Breakout Master by tradingbauhaus 🌟 Code Description:
This Pine Script implements a trading strategy called "Dynamic Breakout Master" 💥. The core idea of the strategy is to identify breakouts (price movements) at key support 💙 and resistance 🔴 levels, through a dynamic channel that adapts to the market’s conditions. Here's how it works:
🔧 Customizable Input Parameters:
🧭 Pivot Period: This defines the number of bars (candles) to the left and right used to detect pivots (highs and lows) that mark the support and resistance zones.
📊 Data Source: You can choose whether to use highs and lows or closes and opens of the candles to identify the pivots.
📏 Max Channel Width: Specifies the maximum width allowed for the support/resistance channel, expressed as a percentage over the last 300 bars.
💪 Minimum Pivot Strength: This defines the minimum number of pivots needed for a support or resistance level to be considered valid.
🏔 Max Support/Resistance Zones: Limits the number of key zones displayed on the chart.
📅 Lookback Period: Adjusts how many bars back the system should check to find and validate support and resistance levels.
🎨 Custom Colors: You can choose colors for the support, resistance, and in-channel zones.
📉 Moving Averages (MA): The strategy allows adding up to two moving averages (SMA or EMA) to assist in making trading decisions.
📊 Calculating Support/Resistance Levels:
The system uses an algorithm to identify pivots from prices and calculates dynamic support and resistance zones 🔒🔓.
The closer the pivots are and the stronger their influence, the more relevant the zone becomes for the strategy.
The dynamic channel is drawn on the chart, with a maximum width limit for these zones defined by the input parameter.
📈 Trading Logic:
🚀 Identifying Breakouts:
The strategy looks for when the price breaks (breakouts) a resistance or support level.
If the price breaks upward through the resistance level, a buy order 📈 is triggered.
If the price breaks downward through the support level, a sell order 📉 is triggered.
🔔 Alerts:
Resistance Break (ResBreak) and Support Break (SupBreak) alerts are configured to notify users when a significant breakout occurs.
💰 Commissions:
The strategy includes a commission (0.1%) to simulate transaction costs for each trade.
📊 Chart Visualization:
The support and resistance zones are displayed as colored rectangles:
🔴 Resistance (red) and
🔵 Support (blue).
Pivots of support and resistance can be labeled as P (for resistance) and V (for support).
Breakouts of support or resistance levels are marked with triangles that appear on the chart 🔺🔻.
📈 Trading Strategy:
If the price breaks upward through the resistance level, a long position (buy) 📈 is opened.
If the price breaks downward through the support level, a short position (sell) 📉 is opened.
🏆 Conclusion:
This script is a dynamic breakout strategy 💥 that allows traders to capture significant price movements when support or resistance channels break. The customizable parameters let users fine-tune the strategy according to their preferences, while the visual alerts on the chart make it easier to follow trading opportunities. The inclusion of moving averages and key price zones adds an extra layer of analysis to improve decision-making 💡.
EMA/SMA Ribbon Pro (AUTO HTF + Labels)This indicator is a multi-timeframe (MTF) moving average ribbon that dynamically adjusts to the next highest timeframe. It provides a visual representation of market trends by stacking multiple EMAs and SMAs with customizable color fills and labels.
Features
✅ Multi-Timeframe (MTF) Support: Automatically detects the next highest time frame or allows for manual selection
✅ Customizable Moving Averages: Supports EMA and SMA with different lengths for flexible configuration
✅ Ribbon Visualization: Smooth color transitions between different moving averages for better trend identification
✅ Crossover Labels: Detects bullish and bearish EMA/SMA crossovers and marks them on the chart
✅ Price Labels & Timeframe Display: Displays moving average values to the right of the price axis with customizable label padding and colors
How It Works
Select the HTF mode: Manual or automatic
Choose EMA/SMA lengths to create different ribbons
Enable/disable price labels for each moving average
Customize colors and transparency for ribbons and labels
Crossover labels appear when faster moving averages cross slower ones and vice versa
Use Cases
📌 Trend Identification: Identify bullish and bearish trends using multiple EMAs and SMAs
📌 Support & Resistance Zones: MAs can act as dynamic support and resistance levels
📌 Reversal & Confirmation Signals: Watch for MTF crossovers to confirm trend changes
Customization
🔹 Standard EMA Lengths: 6, 8, 13, 21, 34, 48, 100, 200, 300, 400
🔹 SMA Lengths: 48, 100, 200
🔹 Color Adjustments: Set custom colors for bullish/bearish ribbons
🔹 Crossovers: Enable/disable custom crossover pairs (e.g., 100/200 EMA, 200 EMA/SMA).
This indicator is perfect for traders who rely on multi-timeframe confluence while seeking to enhance their market analysis and decision-making process.
As always, by combining EMA/SMA Ribbon with other tools, traders ensure that they are not relying on a single indicator. This layered approach can reduce the likelihood of false signals and improve overall trading accuracy.
As always, be sure to use any indicator with price action and volume indicators for better trade confirmation!
AdvancedLines (FiboBands) - PaSKaL
Overview :
AdvancedLines (FiboBands) - PaSKaL is an advanced technical analysis tool designed to automate the plotting of key Fibonacci retracement levels based on the highest high and lowest low over a customizable period. This indicator helps traders identify critical price zones such as support, resistance, and potential trend reversal or continuation points.
By using AdvancedLines (FiboBands) - PaSKaL , traders can easily spot key areas where the price is likely to reverse or consolidate, or where the trend may continue. It is particularly useful for trend-following, scalping, and range-trading strategies.
Key Features:
Automatic Fibonacci Level Calculation :
- The indicator automatically calculates and plots key Fibonacci levels (0.236, 0.382, 0.5, 0.618, and 0.764), which are crucial for identifying potential support and resistance levels in the market.
Adjustable Parameters :
- Bands Length: You can adjust the bands_length setting to change the number of bars used for calculating the highest high and lowest low. This gives flexibility for using the indicator on different timeframes and trading styles.
- Visibility: The Fibonacci levels, as well as the midline (0.5 Fibonacci level), can be shown or hidden based on your preference.
- Color Customization: You can change the color of each Fibonacci level and background fills to suit your chart preferences.
Fibonacci Levels
- The main Fibonacci levels plotted are:
- 0.236 – Minor support/resistance level
- 0.382 – Moderate retracement level
- 0.5 – Midpoint retracement, often used as a key level
- 0.618 – Golden ratio, considered one of the most important Fibonacci levels
- 0.764 – Strong reversal level, often indicating a continuation or change in trend
Background Fill
- The indicator allows you to fill the background between the Fibonacci levels and the bands with customizable colors. This makes it easier to visually highlight key zones on the chart.
How the Indicator Works:
AdvancedLines (FiboBands) - PaSKaL calculates the range (difference between the highest high and the lowest low) over a user-defined number of bars (e.g., 300). Fibonacci levels are derived from this range, helping traders identify potential price reversal points.
Mathematical Basis :
Fibonacci retracement levels are based on the Fibonacci sequence, where each number is the sum of the previous two (0, 1, 1, 2, 3, 5, 8, 13, etc.). The ratios derived from this sequence (such as 0.618 and 0.382) have been widely observed in nature, market cycles, and price movements. These ratios are used to forecast potential price retracements or continuation points after a major price move.
Fibonacci Levels Calculation :
Identify the Range: The highest high and the lowest low over the defined period are calculated.
Apply Fibonacci Ratios: Fibonacci ratios (0.236, 0.382, 0.5, 0.618, and 0.764) are applied to this range to calculate the corresponding price levels.
Plot the Levels: The indicator automatically plots these levels on your chart.
Customizing Fibonacci Levels & Colors:
The "AdvancedLines (FiboBands) - PaSKaL" indicator offers various customization options for Fibonacci levels, colors, and visibility:
Fibonacci Level Ratios:
- You can customize the Fibonacci level ratios through the following inputs:
- Fibo Level 1: 0.764
- Fibo Level 2: 0.618
- Fibo Level 3: 0.5
- Fibo Level 4: 0.382
- Fibo Level 5: 0.236
- These levels determine key areas where price may reverse or pause. You can adjust these ratios based on your trading preferences.
Fibonacci Level Colors:
- Each Fibonacci level can be assigned a different color to make it more distinguishable on your chart:
- Fibo Level 1 Color (default: Yellow)
- Fibo Level 2 Color (default: Orange)
- Fibo Level 3 Color (default: Green)
- Fibo Level 4 Color (default: Red)
- Fibo Level 5 Color (default: Blue)
- You can change these colors to fit your visual preferences or to align with your existing chart themes.
Visibility of Fibonacci Levels:
- You can choose whether to display each Fibonacci level using the following visibility inputs:
- Show Fibo Level 1 (0.764): Display or hide this level.
- Show Fibo Level 2 (0.618): Display or hide this level.
- Show Fibo Level 3 (0.5): Display or hide this level.
- Show Fibo Level 4 (0.382): Display or hide this level.
- Show Fibo Level 5 (0.236): Display or hide this level.
- This allows you to customize the indicator according to the specific Fibonacci levels that are most relevant to your trading strategy.
Background Fill Color
- The background between the Fibonacci levels and price bands can be filled with customizable colors:
- Fill Color for Upper Band & Fibo Level 1: This color will fill the area between the upper band and Fibonacci Level 1.
- Fill Color for Lower Band & Fibo Level 5: This color will fill the area between the lower band and Fibonacci Level 5.
- Adjusting these colors helps highlight critical zones where price may reverse or consolidate.
How to Use AdvancedLines (FiboBands) - PaSKaL in Trading :
Range Trading :
Range traders typically buy at support and sell at resistance. Fibonacci levels provide excellent support and resistance zones in a ranging market.
Example: If price reaches the 0.618 level in an uptrend, it may reverse, providing an opportunity to sell.
Conversely, if price drops to the 0.382 level, a bounce might occur, and traders can buy, anticipating the market will stay within the range.
Trend-following Trading :
For trend-following traders, Fibonacci levels act as potential entry points during a retracement. After a strong trend, price often retraces to one of the Fibonacci levels before continuing in the direction of the trend.
Example: In a bullish trend, when price retraces to the 0.382 level, it could be a signal to buy, as the price might resume its upward movement after the correction.
In a bearish trend, retracements to levels like 0.618 or 0.764 could provide optimal opportunities for shorting as the price resumes its downward movement.
Scalping :
Scalpers focus on short-term price movements. Fibonacci levels can help identify precise entry and exit points for quick trades.
Example: If price is fluctuating in a narrow range, a scalper can enter a buy trade at 0.236 and exit at the next Fibonacci level, such as 0.382 or 0.5, capturing small but consistent profits.
Stop-Loss and Take-Profit Levels :
Fibonacci levels can also help in setting stop-loss and take-profit levels.
Example: In a bullish trend, you can set a stop-loss just below the 0.236 level and a take-profit at 0.618.
In a bearish trend, set the stop-loss just above the 0.382 level and the take-profit at 0.764.
Identifying Reversals and Continuations :
Reversals: When price reaches a Fibonacci level and reverses direction, it may indicate the end of a price move.
Trend Continuation: If price bounces off a Fibonacci level and continues in the same direction, this may signal that the trend is still intact.
Conclusion :
AdvancedLines (FiboBands) - PaSKaL is an essential tool for any trader who uses Fibonacci retracements in their trading strategy. By automatically plotting key Fibonacci levels, this indicator helps traders quickly identify support and resistance zones, forecast potential reversals, and make more informed trading decisions.
For Trend-following Traders: Use Fibonacci levels to find optimal entry points after a price retracement.
For Range Traders: Identify key levels where price is likely to reverse or bounce within a range.
For Scalpers: Pinpoint small price movements and take advantage of quick profits by entering and exiting trades at precise Fibonacci levels.
By incorporating AdvancedLines (FiboBands) - PaSKaL into your trading setup, you will gain a deeper understanding of price action, improve your decision-making process, and enhance your overall trading performance.
Log Regression OscillatorThe Log Regression Oscillator transforms the logarithmic regression curves into an easy-to-interpret oscillator that displays potential cycle tops/bottoms.
🔶 USAGE
Calculating the logarithmic regression of long-term swings can help show future tops/bottoms. The relationship between previous swing points is calculated and projected further. The calculated levels are directly associated with swing points, which means every swing point will change the calculation. Importantly, all levels will be updated through all bars when a new swing is detected.
The "Log Regression Oscillator" transforms the calculated levels, where the top level is regarded as 100 and the bottom level as 0. The price values are displayed in between and calculated as a ratio between the top and bottom, resulting in a clear view of where the price is situated.
The main picture contains the Logarithmic Regression Alternative on the chart to compare with this published script.
Included are the levels 30 and 70. In the example of Bitcoin, previous cycles showed a similar pattern: the bullish parabolic was halfway when the oscillator passed the 30-level, and the top was very near when passing the 70-level.
🔹 Proactive
A "Proactive" option is included, which ensures immediate calculations of tentative unconfirmed swings.
Instead of waiting 300 bars for confirmation, the "Proactive" mode will display a gray-white dot (not confirmed swing) and add the unconfirmed Swing value to the calculation.
The above example shows that the "Calculated Values" of the potential future top and bottom are adjusted, including the provisional swing.
When the swing is confirmed, the calculations are again adjusted, showing a red dot (confirmed top swing) or a green dot (confirmed bottom swing).
🔹 Dashboard
When less than two swings are available (top/bottom), this will be shown in the dashboard.
The user can lower the "Threshold" value or switch to a lower timeframe.
🔹 Notes
Logarithmic regression is typically used to model situations where growth or decay accelerates rapidly at first and then slows over time, meaning some symbols/tickers will fit better than others.
Since the logarithmic regression depends on swing values, each new value will change the calculation. A well-fitted model could not fit anymore in the future.
Users have to check the validity of swings; for example, if the direction of swings is downwards, then the dataset is not fitted for logarithmic regression.
In the example above, the "Threshold" is lowered. However, the calculated levels are unreliable due to the swings, which do not fit the model well.
Here, the combination of downward bottom swings and price accelerates slower at first and faster recently, resulting in a non-fit for the logarithmic regression model.
Note the price value (white line) is bound to a limit of 150 (upwards) and -150 (down)
In short, logarithmic regression is best used when there are enough tops/bottoms, and all tops are around 100, and all bottoms around 0.
Also, note that this indicator has been developed for a daily (or higher) timeframe chart.
🔶 DETAILS
In mathematics, the dot product or scalar product is an algebraic operation that takes two equal-length sequences of numbers (arrays) and returns a single number, the sum of the products of the corresponding entries of the two sequences of numbers.
The usual way is to loop through both arrays and sum the products.
In this case, the two arrays are transformed into a matrix, wherein in one matrix, a single column is filled with the first array values, and in the second matrix, a single row is filled with the second array values.
After this, the function matrix.mult() returns a new matrix resulting from the product between the matrices m1 and m2.
Then, the matrix.eigenvalues() function transforms this matrix into an array, where the array.sum() function finally returns the sum of the array's elements, which is the dot product.
dot(x, y)=>
if x.size() > 1 and y.size() > 1
m1 = matrix.new()
m2 = matrix.new()
m1.add_col(m1.columns(), y)
m2.add_row(m2.rows (), x)
m1.mult (m2)
.eigenvalues()
.sum()
🔶 SETTINGS
Threshold: Period used for the swing detection, with higher values returning longer-term Swing Levels.
Proactive: Tentative Swings are included with this setting enabled.
Style: Color Settings
Dashboard: Toggle, "Location" and "Text Size"
100s Level LinesPurpose of the Script
- Visualize Key Levels: The script highlights round-number levels (e.g., 100, 200, 300) automatically, making it easy to identify areas where price action might react.
- Improve Decision-Making: These levels can serve as benchmarks for entry, exit, stop-loss, or take-profit placement.
- Simplicity: Instead of manually drawing levels, the script dynamically updates to match the chart's price range.
Features of the Script
- Dynamic Level Calculation: The script calculates 100s levels based on the asset's current price range and plots lines above and below the visible chart area.
- Customizable Settings: Adjust line color, style (solid, dashed, or dotted), and width to suit your charting preferences.
- Auto-Scaling: Automatically adjusts to the chart's visible price range, ensuring plotted levels are always relevant.
- Labeling: Each line can optionally display its exact value (e.g., "1400," "1500") for easy reference.
- Performance Optimization: Efficient calculations ensure the script doesn’t slow down TradingView, even on volatile instruments like the US100.
How the Script Works
- The script detects the highest and lowest visible prices on the chart to define the range.
- Starting from the lowest 100-point increment within the visible range, the script calculates all 100-point levels up to the highest visible price.
- It plots horizontal lines across the chart for each calculated level.
- Optionally, labels can be added to display the value of each level.
How to Use the Script
- Copy the script code into the Pine Script editor in TradingView and apply it to your chart.
- Open the script settings to adjust line color, style, width, and label visibility.
- Use the plotted 100s levels as psychological support and resistance zones for trade entries, exits, and stop-loss or take-profit placement.
Example Use Cases
- Identify potential reversal points as the price approaches a 100s level in intraday trading.
- Confirm support or resistance zones on higher timeframes for swing trading setups.
- Use the levels to trail stop-losses during trending markets and lock in profits incrementally.
Customizable Options
- Line Color: Change the color of the horizontal lines.
- Line Style: Choose solid, dashed, or dotted lines.
- Line Width: Adjust the thickness of the lines for better visibility.
- Show Labels: Toggle price values on or off for each level.
Advantages
- Saves Time: Automatically plots levels, eliminating manual effort.
- Adaptable: Works on all timeframes and assets.
- Psychological Relevance: Highlights levels that align with trader psychology and market behavior.
Rainbow EMA Areas with Volatility HighlightThe indicator provides traders with an enhanced visual tool to observe price movements, trend strength, and market volatility on their charts. It combines multiple EMAs (Exponential Moving Averages) with color-coded areas to indicate the market’s directional bias and a high-volatility highlight for detecting times of increased market activity.
Explanation of Key Components
Multiple EMAs (Exponential Moving Averages):
Six different EMAs are calculated for various periods (15, 45, 100, 150, 200, 300).
Each EMA period represents a different timeframe, from short-term to long-term trends, providing a well-rounded view of price behavior across different market cycles.
The EMAs are color-coded for easy differentiation:
Green shades indicate bullish trends when prices are above the EMAs.
Red shades indicate bearish trends when prices are below the EMAs.
The space between each EMA is filled with a gradient color, creating a "wave" effect that helps identify the market’s overall direction.
ATR-Based Volatility Detection:
The ATR (Average True Range), a measure of market volatility, is used to assess how much the price is fluctuating. When volatility is high, price movements are typically more significant, indicating potential trading opportunities or times to exercise caution.
The indicator calculates ATR and uses a customizable multiplier to set a high-volatility threshold.
When the ATR exceeds this threshold, it signals that the market is experiencing high volatility.
Visual High Volatility Highlight:
A yellow background appears on the chart during periods of high volatility, giving a subtle but clear visual indication that the market is active.
This highlight helps traders spot potential breakout areas or increased activity zones without obstructing the EMA areas.
Volatility Signal Markers:
Small, red triangular markers are plotted above price bars when high volatility is detected, marking these areas for additional emphasis.
These signals serve as alerts to help traders quickly recognize high volatility moments where price moves may be stronger.
How to Use This Indicator
Identify Trends Using EMA Areas:
Bullish Trend: When the price is above most or all EMAs, and the EMA areas are colored in shades of green, it indicates a strong bullish trend. Traders might look for buy opportunities in this scenario.
Bearish Trend: When the price is below most or all EMAs, and the EMA areas are colored in shades of red, it signals a bearish trend. This condition can suggest potential sell opportunities.
Consolidation or Neutral Trend: If the price is moving within the EMA bands without a clear green or red dominance, the market may be in a consolidation phase. This period often precedes a breakout in either direction.
Volatility-Based Entries and Exits:
High Volatility Areas: The yellow background and red triangular markers signal high-volatility areas. This information can be valuable for identifying potential breakout points or strong moves.
Trading in High Volatility: During high-volatility phases, the market may experience rapid price changes, which can be ideal for breakout trades. However, high volatility also involves higher risk, so traders may adjust their strategies accordingly (e.g., setting wider stops or adjusting position sizes).
Trading in Low Volatility: When the yellow background and markers are absent, volatility is lower, indicating a calmer market. In these times, traders may choose to look for range-bound trading opportunities or wait for the next trend to develop.
Combining with Other Indicators:
This indicator works well in combination with momentum or oscillating indicators like RSI or MACD, providing a well-rounded view of the market.
For example, if the indicator shows a bullish EMA area with high volatility, and an RSI is trending up, it could be a stronger buy signal. Conversely, if the indicator shows a bearish EMA area with high volatility and RSI is trending down, this could be a stronger sell signal.
Practical Trading Examples
Bullish Trend in High Volatility:
Price is above the EMAs, showing green EMA areas, and the high volatility background is active.
This indicates a strong bullish trend with significant price movement potential.
A trader could look for breakout or continuation entries in the direction of the trend.
Bearish Reversal Signal:
Price crosses below the EMAs, showing red EMA areas, while high volatility is also detected.
This suggests that the market may be reversing to a bearish trend with increased price movement.
Traders could consider taking short positions or setting stops on existing long trades.
This indicator is designed to provide a rich visual experience, making it easy to spot trends, consolidations, and volatility zones at a glance. It is best used by traders who benefit from visual cues and who seek a quick understanding of both trend direction and market activity. Let me know if you'd like further customization or additional functionalities!
Momentum Entry & Trend Strategy M5Momentum Entry & Trend Strategy M5
Description:
The Momentum Entry & Trend Strategy M5 is an indicator script designed to assist traders in determining optimal buy and sell moments based on momentum and trend analysis. This script operates using two different momentum levels—Momentum Length for Entry (5) and Momentum Length for Trend (10)—along with the HMA (Hull Moving Average) indicator for trend confirmation.
Key Features:
Momentum Entry: Calculates momentum using the difference between the current price and the price from previous periods to determine the strength and direction of price movements.
Trend Identification: Utilizes two momentum levels (5 and 10) to identify bullish and bearish trend conditions.
HMA for Trend Confirmation: The HMA indicator is used to provide trend confirmation signals. When HMA indicates bullish, a buy signal is displayed; conversely, a bearish HMA results in a sell signal.
Signal Display: Displays buy (BUY) and sell (SELL) signals on the chart when the conditions for market entry are met, providing clear visualization for traders.
Background Color: Offers a green background for uptrends and a red background for downtrends, allowing traders to easily identify the overall market condition.
ATR (Average True Range): Calculates and plots a smoothed ATR to help traders measure market volatility.
Settings:
Momentum Length for Entry: 5 (to determine entry signals)
Momentum Length for Trend: 10 (to determine trend conditions)
HMA Length: 300 (period length for HMA to confirm trends)
ATR Length: 14 (period length for ATR to measure volatility)
Benefits:
This script is designed to provide visual and data-driven guidance for better trading decision-making. By combining momentum and trend analysis, traders can enhance the accuracy of their signals and reduce the risk of errors when identifying entry and exit points in the market.
Note:
This script is intended for use on the M5 time frame but can be adjusted for other time frames as needed. It is always recommended to conduct thorough testing before applying trading strategies on a live account.
Bitcoin CME-Spot Z-Spread - Strategy [presentTrading]This time is a swing trading strategy! It measures the sentiment of the Bitcoin market through the spread of CME Bitcoin Futures and Bitfinex BTCUSD Spot prices. By applying Bollinger Bands to the spread, the strategy seeks to capture mean-reversion opportunities when prices deviate significantly from their historical norms
█ Introduction and How it is Different
The Bitcoin CME-Spot Bollinger Bands Strategy is designed to capture mean-reversion opportunities by exploiting the spread between CME Bitcoin Futures and Bitfinex BTCUSD Spot prices. The strategy uses Bollinger Bands to detect when the spread between these two correlated assets has deviated significantly from its historical norm, signaling potential overbought or oversold conditions.
What sets this strategy apart is its focus on spread trading between futures and spot markets rather than price-based indicators. By applying Bollinger Bands to the spread rather than individual prices, the strategy identifies price inefficiencies across markets, allowing traders to take advantage of the natural reversion to the mean that often occurs in these correlated assets.
BTCUSD 8hr Performance
█ Strategy, How It Works: Detailed Explanation
The strategy relies on Bollinger Bands to assess the volatility and relative deviation of the spread between CME Bitcoin Futures and Bitfinex BTCUSD Spot prices. Bollinger Bands consist of a moving average and two standard deviation bands, which help measure how much the spread deviates from its historical mean.
🔶 Spread Calculation:
The spread is calculated by subtracting the Bitfinex spot price from the CME Bitcoin futures price:
Spread = CME Price - Bitfinex Price
This spread represents the difference between the futures and spot markets, which may widen or narrow based on supply and demand dynamics in each market. By analyzing the spread, the strategy can detect when prices are too far apart (potentially overbought or oversold), indicating a trading opportunity.
🔶 Bollinger Bands Calculation:
The Bollinger Bands for the spread are calculated using a simple moving average (SMA) and the standard deviation of the spread over a defined period.
1. Moving Average (SMA):
The simple moving average of the spread (mu_S) over a specified period P is calculated as:
mu_S = (1/P) * sum(S_i from i=1 to P)
Where S_i represents the spread at time i, and P is the lookback period (default is 200 bars). The moving average provides a baseline for the normal spread behavior.
2. Standard Deviation:
The standard deviation (sigma_S) of the spread is calculated to measure the volatility of the spread:
sigma_S = sqrt((1/P) * sum((S_i - mu_S)^2 from i=1 to P))
3. Upper and Lower Bollinger Bands:
The upper and lower Bollinger Bands are derived by adding and subtracting a multiple of the standard deviation from the moving average. The number of standard deviations is determined by a user-defined parameter k (default is 2.618).
- Upper Band:
Upper Band = mu_S + (k * sigma_S)
- Lower Band:
Lower Band = mu_S - (k * sigma_S)
These bands provide a dynamic range within which the spread typically fluctuates. When the spread moves outside of these bands, it is considered overbought or oversold, potentially offering trading opportunities.
Local view
🔶 Entry Conditions:
- Long Entry: A long position is triggered when the spread crosses below the lower Bollinger Band, indicating that the spread has become oversold and is likely to revert upward.
Spread < Lower Band
- Short Entry: A short position is triggered when the spread crosses above the upper Bollinger Band, indicating that the spread has become overbought and is likely to revert downward.
Spread > Upper Band
🔶 Risk Management and Profit-Taking:
The strategy incorporates multi-step take profits to lock in gains as the trade moves in favor. The position is gradually reduced at predefined profit levels, reducing risk while allowing part of the trade to continue running if the price keeps moving favorably.
Additionally, the strategy uses a hold period exit mechanism. If the trade does not hit any of the take-profit levels within a certain number of bars, the position is closed automatically to avoid excessive exposure to market risks.
█ Trade Direction
The trade direction is based on deviations of the spread from its historical norm:
- Long Trade: The strategy enters a long position when the spread crosses below the lower Bollinger Band, signaling an oversold condition where the spread is expected to narrow.
- Short Trade: The strategy enters a short position when the spread crosses above the upper Bollinger Band, signaling an overbought condition where the spread is expected to widen.
These entries rely on the assumption of mean reversion, where extreme deviations from the average spread are likely to revert over time.
█ Usage
The Bitcoin CME-Spot Bollinger Bands Strategy is ideal for traders looking to capitalize on price inefficiencies between Bitcoin futures and spot markets. It’s especially useful in volatile markets where large deviations between futures and spot prices occur.
- Market Conditions: This strategy is most effective in correlated markets, like CME futures and spot Bitcoin. Traders can adjust the Bollinger Bands period and standard deviation multiplier to suit different volatility regimes.
- Backtesting: Before deployment, backtesting the strategy across different market conditions and timeframes is recommended to ensure robustness. Adjust the take-profit steps and hold periods to reflect the trader’s risk tolerance and market behavior.
█ Default Settings
The default settings provide a balanced approach to spread trading using Bollinger Bands but can be adjusted depending on market conditions or personal trading preferences.
🔶 Bollinger Bands Period (200 bars):
This defines the number of bars used to calculate the moving average and standard deviation for the Bollinger Bands. A longer period smooths out short-term fluctuations and focuses on larger, more significant trends. Adjusting the period affects the responsiveness of the strategy:
- Shorter periods (e.g., 100 bars): Makes the strategy more reactive to short-term market fluctuations, potentially generating more signals but increasing the risk of false positives.
- Longer periods (e.g., 300 bars): Focuses on longer-term trends, reducing the frequency of trades and focusing only on significant deviations.
🔶 Standard Deviation Multiplier (2.618):
The multiplier controls how wide the Bollinger Bands are around the moving average. By default, the bands are set at 2.618 standard deviations away from the average, ensuring that only significant deviations trigger trades.
- Higher multipliers (e.g., 3.0): Require a more extreme deviation to trigger trades, reducing trade frequency but potentially increasing the accuracy of signals.
- Lower multipliers (e.g., 2.0): Make the bands narrower, increasing the number of trade signals but potentially decreasing their reliability.
🔶 Take-Profit Levels:
The strategy has four take-profit levels to gradually lock in profits:
- Level 1 (3%): 25% of the position is closed at a 3% profit.
- Level 2 (8%): 20% of the position is closed at an 8% profit.
- Level 3 (14%): 15% of the position is closed at a 14% profit.
- Level 4 (21%): 10% of the position is closed at a 21% profit.
Adjusting these take-profit levels affects how quickly profits are realized:
- Lower take-profit levels: Capture gains more quickly, reducing risk but potentially cutting off larger profits.
- Higher take-profit levels: Let trades run longer, aiming for bigger gains but increasing the risk of price reversals before profits are locked in.
🔶 Hold Days (20 bars):
The strategy automatically closes the position after 20 bars if none of the take-profit levels are hit. This feature prevents trades from being held indefinitely, especially if market conditions are stagnant. Adjusting this:
- Shorter hold periods: Reduce the duration of exposure, minimizing risks from market changes but potentially closing trades too early.
- Longer hold periods: Allow trades to stay open longer, increasing the chance for mean reversion but also increasing exposure to unfavorable market conditions.
By understanding how these default settings affect the strategy’s performance, traders can optimize the Bitcoin CME-Spot Bollinger Bands Strategy to their preferences, adapting it to different market environments and risk tolerances.
Intramarket Difference Index StrategyHi Traders !!
The IDI Strategy:
In layman’s terms this strategy compares two indicators across markets and exploits their differences.
note: it is best the two markets are correlated as then we know we are trading a short to long term deviation from both markets' general trend with the assumption both markets will trend again sometime in the future thereby exhausting our trading opportunity.
📍 Import Notes:
This Strategy calculates trade position size independently (i.e. risk per trade is controlled in the user inputs tab), this means that the ‘Order size’ input in the ‘Properties’ tab will have no effect on the strategy. Why ? because this allows us to define custom position size algorithms which we can use to improve our risk management and equity growth over time. Here we have the option to have fixed quantity or fixed percentage of equity ATR (Average True Range) based stops in addition to the turtle trading position size algorithm.
‘Pyramiding’ does not work for this strategy’, similar to the order size input togeling this input will have no effect on the strategy as the strategy explicitly defines the maximum order size to be 1.
This strategy is not perfect, and as of writing of this post I have not traded this algo.
Always take your time to backtests and debug the strategy.
🔷 The IDI Strategy:
By default this strategy pulls data from your current TV chart and then compares it to the base market, be default BINANCE:BTCUSD . The strategy pulls SMA and RSI data from either market (we call this the difference data), standardizes the data (solving the different unit problem across markets) such that it is comparable and then differentiates the data, calling the result of this transformation and difference the Intramarket Difference (ID). The formula for the the ID is
ID = market1_diff_data - market2_diff_data (1)
Where
market(i)_diff_data = diff_data / ATR(j)_market(i)^0.5,
where i = {1, 2} and j = the natural numbers excluding 0
Formula (1) interpretation is the following
When ID > 0: this means the current market outperforms the base market
When ID = 0: Markets are at long run equilibrium
When ID < 0: this means the current market underperforms the base market
To form the strategy we define one of two strategy type’s which are Trend and Mean Revesion respectively.
🔸 Trend Case:
Given the ‘‘Strategy Type’’ is equal to TREND we define a threshold for which if the ID crosses over we go long and if the ID crosses under the negative of the threshold we go short.
The motivating idea is that the ID is an indicator of the two symbols being out of sync, and given we know volatility clustering, momentum and mean reversion of anomalies to be a stylised fact of financial data we can construct a trading premise. Let's first talk more about this premise.
For some markets (cryptocurrency markets - synthetic symbols in TV) the stylised fact of momentum is true, this means that higher momentum is followed by higher momentum, and given we know momentum to be a vector quantity (with magnitude and direction) this momentum can be both positive and negative i.e. when the ID crosses above some threshold we make an assumption it will continue in that direction for some time before executing back to its long run equilibrium of 0 which is a reasonable assumption to make if the market are correlated. For example for the BTCUSD - ETHUSD pair, if the ID > +threshold (inputs for MA and RSI based ID thresholds are found under the ‘‘INTRAMARKET DIFFERENCE INDEX’’ group’), ETHUSD outperforms BTCUSD, we assume the momentum to continue so we go long ETHUSD.
In the standard case we would exit the market when the IDI returns to its long run equilibrium of 0 (for the positive case the ID may return to 0 because ETH’s difference data may have decreased or BTC’s difference data may have increased). However in this strategy we will not define this as our exit condition, why ?
This is because we want to ‘‘let our winners run’’, to achieve this we define a trailing Donchian Channel stop loss (along with a fixed ATR based stop as our volatility proxy). If we were too use the 0 exit the strategy may print a buy signal (ID > +threshold in the simple case, market regimes may be used), return to 0 and then print another buy signal, and this process can loop may times, this high trade frequency means we fail capture the entire market move lowering our profit, furthermore on lower time frames this high trade frequencies mean we pay more transaction costs (due to price slippage, commission and big-ask spread) which means less profit.
By capturing the sum of many momentum moves we are essentially following the trend hence the trend following strategy type.
Here we also print the IDI (with default strategy settings with the MA difference type), we can see that by letting our winners run we may catch many valid momentum moves, that results in a larger final pnl that if we would otherwise exit based on the equilibrium condition(Valid trades are denoted by solid green and red arrows respectively and all other valid trades which occur within the original signal are light green and red small arrows).
another example...
Note: if you would like to plot the IDI separately copy and paste the following code in a new Pine Script indicator template.
indicator("IDI")
// INTRAMARKET INDEX
var string g_idi = "intramarket diffirence index"
ui_index_1 = input.symbol("BINANCE:BTCUSD", title = "Base market", group = g_idi)
// ui_index_2 = input.symbol("BINANCE:ETHUSD", title = "Quote Market", group = g_idi)
type = input.string("MA", title = "Differrencing Series", options = , group = g_idi)
ui_ma_lkb = input.int(24, title = "lookback of ma and volatility scaling constant", group = g_idi)
ui_rsi_lkb = input.int(14, title = "Lookback of RSI", group = g_idi)
ui_atr_lkb = input.int(300, title = "ATR lookback - Normalising value", group = g_idi)
ui_ma_threshold = input.float(5, title = "Threshold of Upward/Downward Trend (MA)", group = g_idi)
ui_rsi_threshold = input.float(20, title = "Threshold of Upward/Downward Trend (RSI)", group = g_idi)
//>>+----------------------------------------------------------------+}
// CUSTOM FUNCTIONS |
//<<+----------------------------------------------------------------+{
// construct UDT (User defined type) containing the IDI (Intramarket Difference Index) source values
// UDT will hold many variables / functions grouped under the UDT
type functions
float Close // close price
float ma // ma of symbol
float rsi // rsi of the asset
float atr // atr of the asset
// the security data
getUDTdata(symbol, malookback, rsilookback, atrlookback) =>
indexHighTF = barstate.isrealtime ? 1 : 0
= request.security(symbol, timeframe = timeframe.period,
expression = [close , // Instentiate UDT variables
ta.sma(close, malookback) ,
ta.rsi(close, rsilookback) ,
ta.atr(atrlookback) ])
data = functions.new(close_, ma_, rsi_, atr_)
data
// Intramerket Difference Index
idi(type, symbol1, malookback, rsilookback, atrlookback, mathreshold, rsithreshold) =>
threshold = float(na)
index1 = getUDTdata(symbol1, malookback, rsilookback, atrlookback)
index2 = getUDTdata(syminfo.tickerid, malookback, rsilookback, atrlookback)
// declare difference variables for both base and quote symbols, conditional on which difference type is selected
var diffindex1 = 0.0, var diffindex2 = 0.0,
// declare Intramarket Difference Index based on series type, note
// if > 0, index 2 outpreforms index 1, buy index 2 (momentum based) until equalibrium
// if < 0, index 2 underpreforms index 1, sell index 1 (momentum based) until equalibrium
// for idi to be valid both series must be stationary and normalised so both series hae he same scale
intramarket_difference = 0.0
if type == "MA"
threshold := mathreshold
diffindex1 := (index1.Close - index1.ma) / math.pow(index1.atr*malookback, 0.5)
diffindex2 := (index2.Close - index2.ma) / math.pow(index2.atr*malookback, 0.5)
intramarket_difference := diffindex2 - diffindex1
else if type == "RSI"
threshold := rsilookback
diffindex1 := index1.rsi
diffindex2 := index2.rsi
intramarket_difference := diffindex2 - diffindex1
//>>+----------------------------------------------------------------+}
// STRATEGY FUNCTIONS CALLS |
//<<+----------------------------------------------------------------+{
// plot the intramarket difference
= idi(type,
ui_index_1,
ui_ma_lkb,
ui_rsi_lkb,
ui_atr_lkb,
ui_ma_threshold,
ui_rsi_threshold)
//>>+----------------------------------------------------------------+}
plot(intramarket_difference, color = color.orange)
hline(type == "MA" ? ui_ma_threshold : ui_rsi_threshold, color = color.green)
hline(type == "MA" ? -ui_ma_threshold : -ui_rsi_threshold, color = color.red)
hline(0)
Note it is possible that after printing a buy the strategy then prints many sell signals before returning to a buy, which again has the same implication (less profit. Potentially because we exit early only for price to continue upwards hence missing the larger "trend"). The image below showcases this cenario and again, by allowing our winner to run we may capture more profit (theoretically).
This should be clear...
🔸 Mean Reversion Case:
We stated prior that mean reversion of anomalies is an standerdies fact of financial data, how can we exploit this ?
We exploit this by normalizing the ID by applying the Ehlers fisher transformation. The transformed data is then assumed to be approximately normally distributed. To form the strategy we employ the same logic as for the z score, if the FT normalized ID > 2.5 (< -2.5) we buy (short). Our exit conditions remain unchanged (fixed ATR stop and trailing Donchian Trailing stop)
🔷 Position Sizing:
If ‘‘Fixed Risk From Initial Balance’’ is toggled true this means we risk a fixed percentage of our initial balance, if false we risk a fixed percentage of our equity (current balance).
Note we also employ a volatility adjusted position sizing formula, the turtle training method which is defined as follows.
Turtle position size = (1/ r * ATR * DV) * C
Where,
r = risk factor coefficient (default is 20)
ATR(j) = risk proxy, over j times steps
DV = Dollar Volatility, where DV = (1/Asset Price) * Capital at Risk
🔷 Risk Management:
Correct money management means we can limit risk and increase reward (theoretically). Here we employ
Max loss and gain per day
Max loss per trade
Max number of consecutive losing trades until trade skip
To read more see the tooltips (info circle).
🔷 Take Profit:
By defualt the script uses a Donchain Channel as a trailing stop and take profit, In addition to this the script defines a fixed ATR stop losses (by defualt, this covers cases where the DC range may be to wide making a fixed ATR stop usefull), ATR take profits however are defined but optional.
ATR SL and TP defined for all trades
🔷 Hurst Regime (Regime Filter):
The Hurst Exponent (H) aims to segment the market into three different states, Trending (H > 0.5), Random Geometric Brownian Motion (H = 0.5) and Mean Reverting / Contrarian (H < 0.5). In my interpretation this can be used as a trend filter that eliminates market noise.
We utilize the trending and mean reverting based states, as extra conditions required for valid trades for both strategy types respectively, in the process increasing our trade entry quality.
🔷 Example model Architecture:
Here is an example of one configuration of this strategy, combining all aspects discussed in this post.
Future Updates
- Automation integration (next update)
Double Donchian Channels [CrossTrade]Dual Channel System
The indicator incorporates two Donchian Channels - the Inner Channel and the Outer Channel. These channels are adjustable, allowing users to define their lengths according to their trading strategy.
Inner Channel: With a default length of 100 periods, the Inner Channel provides a closer view of market trends and potential support and resistance areas. It includes an upper, lower, and middle line (average of the upper and lower), offering detailed insights into shorter-term price movements.
Outer Channel: Set with a default length of 300 periods, the Outer Channel offers a broader perspective, ideal for identifying long-term trends and stronger levels of support and resistance.
Dynamic Color Coding: The middle lines of both channels change color based on the relationship between the previous close and the channel's basis. This feature provides an immediate visual cue regarding market sentiment.
Touching Bars Highlighting: The indicator highlights bars that touch the upper or lower bands of either channel. This is particularly useful for identifying potential reversals or continuation patterns.
Pullback Identification: By differentiating between bars that touch the Inner Channel only and those that touch the Outer Channel, the indicator helps in identifying pullbacks within a broader trend.
Customizable Alert System: Users can set up alerts for specific conditions - a bar touching the bottom band of the Inner Channel (green), the bottom band of the Outer Channel (blue), the upper band of the Inner Channel (red), and the upper band of the Outer Channel (orange). These alerts assist in timely decision-making and can be tailored to individual trading styles.
The indicator is a versatile tool designed to adapt to various trading styles and timeframes. Its features make it suitable for trend analysis, identifying potential reversal points, and understanding market volatility.
Bitcoin Logarithmic Regression
This indicator displays logarithmic regression channels for Bitcoin. A logarithmic regression is a function that increases or decreases rapidly at first, but then steadily slows as time moves. The original version of this indicator/model was created as an open source script by a user called Owain but is not available on TradingView anymore. So I decided to update the code to the latest version of pinescript and fine tune some of the parameters.
How to read and use the logarithmic regression:
There are 3 different regression lines or channels visible:
Green Channel: These lines represent different levels of support derived from the logarithmic regression model.
Purpose: The green channel is used to identify potential support levels where the price might find a bottom or bounce back upwards.
Interpretation:
If the price is approaching or touching the lower green lines, it might indicate a buying opportunity or an area where the price is considered undervalued.
------------------------------------------------
Red Channel: These lines represent different levels of resistance derived from the logarithmic regression model.
Purpose: The red channel is used to identify potential resistance levels where the price might encounter selling pressure or face difficulty moving higher.
Interpretation:
If the price is approaching or touching the upper red lines, it might indicate a selling opportunity or an area where the price is considered overvalued.
-------------------------------------------------
Purple Line This line represents to so-called "fair price" of Bitcoin according to the regression model.
Purpose: The purple line can be used to identify if the current price of Bitcoin is under- or overvalued.
Interpretation: A simple interpretation here would be that over time the price will have the tendency to always return to its "fair price", so starting to DCA more when price is under the line and less when it is over the line could be a suitable investment strategy.
----------------------------------------------------
Practical Application:
You can use this regression channel to build your own, long term, trading strategies. Notice how Bitcoin seems to always act in kind of the same 4 year cycle:
- Price likes to trade around the purple line at the time of the halvings
- After the halvings we see an extended sideways range for up to 300 days
- After the sideways range Bitcoin goes into a bull market frenzy (the area between the green and red channel)
- The price tops out at the upper red channel and then enters a prolonged bear market.
Buying around the purple line or lower line of the green channel and selling once the price reaches the red channel can be a suitable and very profitable strategy.
Nasan Moving Average with ForecastThe "Nasan Moving Average with Forecast" indicator is a technical analysis forecasting tool that combines the principles of historical data analysis and random walk theory. It calculates a customized moving average (Nasan Moving Average) by integrating price data and statistical measures and projects future price points by generating forecast values within calculated volatility bounds, creating a dynamic and insightful visualization of potential market movements. This indicator to blend past market behavior with probabilistic future trends to enhance forecasting.
Input Parameters:
len: Differencing length (default 21, Use a minimum of 5 and for lower time frames less than 15 min use values between 300 -3000)
len1: Correction Factor Length 1 (default 21, this determines the length of the MA you want , eg. 10 MA, 50 MA, 100 MA, )
len2: Correction Factor Length 2 (default 9, this works best if it is ~ </=1/2 of len1 )
len3: Smoothing Length (default 5, I would not change this and only use if I want to introduce lag where you want to use it for cross over strategies).
forecast_points: Number of points to forecast (default 30).
m: Multiplier for standard deviation (default 2.5).
bl: Block length for calculating max/min values (default 100).
use_calculated_max_min: Boolean to decide whether to use calculated max/min values.
Nasan Moving Average Calculation:
Calculates the simple moving average (mean) and standard deviation (sd) of the typical price (hlc3).
Computes intermediate variables (a, b, c, etc.) based on log transformation and cumulative sum.
Applies weighted moving averages (wma) to these intermediate variables to smooth them and derive the final value c6.
Plots c6 as the Nasan Moving Average if the bar is confirmed. To learn more see Nasan Moving Average.
Forecast Points Calculation:
Calculates maximum (max_val) and minimum (min_val) values for the forecast, either using a fixed value or based on standard deviation and a multiplier.
Initializes an array to store forecast values and creates polyline objects for plotting.
If the current bar is one of the last three bars and confirmed:
Clears and reinitializes the polyline.
Initializes the first forecast value from the cumulative sum c.
Generates subsequent forecast values using a random value within the range .
Updates the forecast array and plots the forecast points as an orange curved polyline.
Plotting Max/Min Values:
Plots max_val and min_val as green and red lines, respectively, to indicate the bounds of the forecast range.
Components of the Forecasting Model
Historical Dependence:
Nasan Moving Average Calculation: The script calculates a custom moving average (c6) that incorporates historical price data (hlc3), standard deviations (sd), and weighted moving averages (wma). This part of the code processes historical data to create a smoothed representation of the price trend.
Max/Min Value Calculation: The maximum (max_val) and minimum (min_val) values for the forecast can be calculated based on the historical standard deviation of a transformed variable b over a block length (bl). This introduces historical volatility into the bounds for the forecast.
Random Walk Model:
Random Value Generation: Within the forecast points calculation, a random value (random_val) is generated for each forecast point within the range . This random value introduces stochasticity into the model, characteristic of a random walk process.
Cumulative Sum for Forecasting: The script uses a cumulative sum (prev_f + random_val) to generate the next forecast point (next_f). This is a typical approach in random walk models where each new point is based on the previous point plus some random noise.
Explanation of the Forecast Model
Random Walk Characteristics: Each new forecast point is generated by adding a random value to the previous point, making the model a random walk with drift, where the drift is influenced by historical correction factors (c1, c4).
Historical and Statistical Dependence: The bounds of the random values and the initial conditions are derived from historical data, ensuring that the forecast respects historical volatility and trends.
The forecasting model in the script is a hybrid approach: It uses a random walk to generate future points, characterized by adding random values to the previous forecasted value.
The historical and statistical dependence is incorporated through initial conditions, scaling factors, and bounds derived from historical price data and its statistical properties.
This combination ensures that the forecasts are not purely stochastic but are grounded in historical price behavior, making the model more robust and potentially more accurate in reflecting market conditions.
Nasan Moving AverageNasan Moving Average belong to the group of moving average which provides a high degree of smoothness with very low lag.
The calculation process involves several steps to analyze the typical price of a financial asset over specific periods. It starts by computing a simple moving average and standard deviation of the typical price. Then, it standardizes (differencing TP - Average Typical price over previous n periods) the price and applies an inverse hyperbolic sine transformation to the standardized value. The transformed values are summed cumulatively, and various weighted moving averages are calculated to adjust and smooth the data. The final output is a smoothed signal with reduced lag.
Input Parameters:
len: Differencing length (default 21, Use a minimum of 5 and for lower time frames less than 15 min use values between 300 -3000)
len1: Correction Factor Length 1 (default 21, this determines the length of the MA you want , eg. 10 MA, 50 MA, 100 MA, )
len2: Correction Factor Length 2 (default 9, this works best if it is ~ </=1/2 of len1 )
len3: Smoothing Length (default 5, I would not change this and only use if I want to introduce lag where you want to use it for cross over strategies).
Differencing and Standardization:
The code calculates the standardized price a by differencing the typical price and normalizing it using the mean and standard deviation. This step standardizes the price changes.
Transformation:
The transformation using logarithms and square roots (b) aim to stabilize the variance and make the distribution more normal-like, improving the robustness of the cumulative sum c.
Cumulative Sum:
The cumulative sum c of the transformed series helps in integrating the series over time, capturing the overall trend and movement.
Correction Factors:
Correction factors c1 and c4 adjust the cumulative sum based on weighted averages, to correct any biases or to align it with the typical price.
Smoothing:
The final result c6 is smoothed using a weighted moving average, reducing noise and making it easier to interpret trends.
Papercuts Recency CandlesPapercuts Recency Candles
V0.8 by Joel Eckert @PapercutsTrading
***This is currently an experimental visual exploratory concept.***
*** Experimental tools should only be explored by fellow coders and experienced traders.***
DESCRIPTION:
As coders, how can we seamlessly transition between actual and smoothed price data sets as data ages?
This is a visual experiment to see if and how data can be smoothly transitioned from one value to another over a set number of candles. If we visualize a chart in 3 zones, a head, a body, and a tail we can start to understand how this could work. The head zone would represent the first data set of actual asset prices. The body zone would represent the transition period from the first to the to the second data set. Last, the tail zone would represent the second data set made of a Hull Moving Average of the asset.
CONCEPT:
It is conceived that data and position precision constantly shift as they decay or age, therefore making older price levels act more like price regions or zones vs exact price points. This is what I am calling Recency.
This indicator utilizes the concept of "Recency" to explore the possibility of a new style of candle. It aims to maintain accurately on recent prices action but loosen up accuracy on older price action. The very nature of this requires ALTERING HISTORICAL DATA within the body zone or transition candles to achieve the effect. It is similar to trying to merge a line chart type with a candle chart type.
This experiment of using recency for candles was to create candles that stay more accurate near current price but fade away into a simple line as they age out, resulting in a simplified view of the big picture which consists of older price action.
This experimental design theoretically will help you stay focused only on what is currently unfolding and to minimize distractions from older price nuances.
USAGE:
WHO:
This is not recommended for new traders or novices that are unfamiliar with standard tools. Standardized tools should always be used to get grounded and build a foundation.
Active traders who are familiar with trading comfortably should experiment with this to see if they find it interesting or usable.
Pine coders may find this concept interesting enough, and may adapt the idea to other elements of their own scripts if they find it interesting… I just ask they give credit where credit is due.
HOW:
The best way to visualize how this works is to do the following:
Load it on a chart.
Turn off Standard candles in Chart Setting of the current window. I actually just turn off the bodies and borders, and dim the old wicks as I like the way the old wicks look when left alone with these new candles.
Enable chart replay at a faster speed, like 3x, and play back the chart to watch the behavior of the candles.
You’ll be able to see how the head of the candle type preserves OHLC, and indicates direction but as the candle starts to age it progressively flowers into the HMA
While it plays back try adjusting settings to see how they affect behavior.
You can see the data average in real-time which often reveals how unstable actual price noise really is.
The head candle diagonals indicate the candle body direction.
SETTINGS:
Coloring: You can choose your own bullish or bearish colors to match your scheme.
Price Line: The price line is colored according to the trend and
Head Length: These candles are true to the source high and low. They remain slightly brighter than transition candles. We have a max of 50 to keep things responsive.
Time Decay Length: This is the amount of candles it takes to transition to the tail. Max is 300 to keep things responsive.
Decay Continuity: This forces transition candles to complete the HMA curve instead of creating gaps when conforming to it. The best way to visualize this feature is to run a 3x replay of an asset, and toggle the result on and off. On is preferred.
Tail HMA Length: This is the smoothing amount for the resulting HMA stepline that calculates every close, but has a delayed draw until after the transition candles. You can optionally turn off the delayed visibility to help with comprehension.
Tail HMA Weight: This is simply an option to make the tail thicker or thinner. This also adjusts the border on the head candles to help them stand out.
Show Side Bias Dots: Default true: Draws a dot when bias to one side changes to help keep you on the right side of trade. Side bias is simply the alignment of 3 moving averages in one direction.
IMPORTANT NOTES:
You'll have to turn off or dim the standard candles in your view "Chart Settings" to see this properly.
Be aware that since the candles are based on boxes and utilize the “recency concept”, which means their data decays and changes as it ages. This results in a cleaner chart overall, but exact highs and lows will be averaged out as the data decays, forming a Hull Moving Average stepline of your defined length once decay has finished.
SUMMARY OF HOW IT WORKS:
First it takes candle information and creates unique boxes that represent each candle based on the high and low. It utilizes boxes because standard candles once written, cannot be later altered or removed… which is a key element for this effect to work.
Next it creates a second box and line from open to close for the body of the Head candles. This indicates direction at a glance.
As candles age beyond the defined distance of the “Head” they enter the "Body" aka "Time Decay" zone. Here the accuracy of the high and low will be averaged down using an incremental factor of the HMA, defined by "Time Decay Length" amount of candles.
The resulting tail is an HMA of Tail HMA Length. This tail is always calculate at close, but is not drawn instantly. The draw is delayed so that there is not overlapping data, and this makes the effect look more elegant.
There are also two EMAs within the script that do nothing but help candle coloring and help provide a trade side bias. When both EMA's and the HMA align, a side bias is defined. Only when the side bias changes will a new dot is formed.
Head candles have been simplified from previous versions to be easier to read at a a glance.
Material Design ColorsThis library provides a standard set of colors defined in Material Design 2.0.
🔵 API
Step 1: Import this library.
import algotraderdev/material/1
// remember to check the latest version of this library and replace the 1 above.
Step 2: Get the color you like. Check the source code or the screenshot above to see all the supported colors.
material.red()
Each color function (except for `black()` and `white()`) accepts an optional `variant` parameter. You can choose any of 50, 100, 200, 300, 400, 500, 600, 700, 800, and 900. By default, 500 is chosen if this parameter is not provided.
ZigzagLiteLibrary "ZigzagLite"
Lighter version of the Zigzag Library. Without indicators and sub-component divisions
method getPrices(pivots)
Gets the array of prices from array of Pivots
Namespace types: Pivot
Parameters:
pivots (Pivot ) : array array of Pivot objects
Returns: array array of pivot prices
method getBars(pivots)
Gets the array of bars from array of Pivots
Namespace types: Pivot
Parameters:
pivots (Pivot ) : array array of Pivot objects
Returns: array array of pivot bar indices
method getPoints(pivots)
Gets the array of chart.point from array of Pivots
Namespace types: Pivot
Parameters:
pivots (Pivot ) : array array of Pivot objects
Returns: array array of pivot points
method getPoints(this)
Namespace types: Zigzag
Parameters:
this (Zigzag)
method calculate(this, ohlc, ltfHighTime, ltfLowTime)
Calculate zigzag based on input values and indicator values
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
ohlc (float ) : Array containing OHLC values. Can also have custom values for which zigzag to be calculated
ltfHighTime (int) : Used for multi timeframe zigzags when called within request.security. Default value is current timeframe open time.
ltfLowTime (int) : Used for multi timeframe zigzags when called within request.security. Default value is current timeframe open time.
Returns: current Zigzag object
method calculate(this)
Calculate zigzag based on properties embedded within Zigzag object
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
Returns: current Zigzag object
method nextlevel(this)
Namespace types: Zigzag
Parameters:
this (Zigzag)
method clear(this)
Clears zigzag drawings array
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing ) : array
Returns: void
method clear(this)
Clears zigzag drawings array
Namespace types: ZigzagDrawingPL
Parameters:
this (ZigzagDrawingPL ) : array
Returns: void
method drawplain(this)
draws fresh zigzag based on properties embedded in ZigzagDrawing object without trying to calculate
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
Returns: ZigzagDrawing object
method drawplain(this)
draws fresh zigzag based on properties embedded in ZigzagDrawingPL object without trying to calculate
Namespace types: ZigzagDrawingPL
Parameters:
this (ZigzagDrawingPL) : ZigzagDrawingPL object
Returns: ZigzagDrawingPL object
method drawfresh(this, ohlc)
draws fresh zigzag based on properties embedded in ZigzagDrawing object
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
ohlc (float ) : values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
Returns: ZigzagDrawing object
method drawcontinuous(this, ohlc)
draws zigzag based on the zigzagmatrix input
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
ohlc (float ) : values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
Returns:
PivotCandle
PivotCandle represents data of the candle which forms either pivot High or pivot low or both
Fields:
_high (series float) : High price of candle forming the pivot
_low (series float) : Low price of candle forming the pivot
length (series int) : Pivot length
pHighBar (series int) : represents number of bar back the pivot High occurred.
pLowBar (series int) : represents number of bar back the pivot Low occurred.
pHigh (series float) : Pivot High Price
pLow (series float) : Pivot Low Price
Pivot
Pivot refers to zigzag pivot. Each pivot can contain various data
Fields:
point (chart.point) : pivot point coordinates
dir (series int) : direction of the pivot. Valid values are 1, -1, 2, -2
level (series int) : is used for multi level zigzags. For single level, it will always be 0
ratio (series float) : Price Ratio based on previous two pivots
sizeRatio (series float)
ZigzagFlags
Flags required for drawing zigzag. Only used internally in zigzag calculation. Should not set the values explicitly
Fields:
newPivot (series bool) : true if the calculation resulted in new pivot
doublePivot (series bool) : true if the calculation resulted in two pivots on same bar
updateLastPivot (series bool) : true if new pivot calculated replaces the old one.
Zigzag
Zigzag object which contains whole zigzag calculation parameters and pivots
Fields:
length (series int) : Zigzag length. Default value is 5
numberOfPivots (series int) : max number of pivots to hold in the calculation. Default value is 20
offset (series int) : Bar offset to be considered for calculation of zigzag. Default is 0 - which means calculation is done based on the latest bar.
level (series int) : Zigzag calculation level - used in multi level recursive zigzags
zigzagPivots (Pivot ) : array which holds the last n pivots calculated.
flags (ZigzagFlags) : ZigzagFlags object which is required for continuous drawing of zigzag lines.
ZigzagObject
Zigzag Drawing Object
Fields:
zigzagLine (series line) : Line joining two pivots
zigzagLabel (series label) : Label which can be used for drawing the values, ratios, directions etc.
ZigzagProperties
Object which holds properties of zigzag drawing. To be used along with ZigzagDrawing
Fields:
lineColor (series color) : Zigzag line color. Default is color.blue
lineWidth (series int) : Zigzag line width. Default is 1
lineStyle (series string) : Zigzag line style. Default is line.style_solid.
showLabel (series bool) : If set, the drawing will show labels on each pivot. Default is false
textColor (series color) : Text color of the labels. Only applicable if showLabel is set to true.
maxObjects (series int) : Max number of zigzag lines to display. Default is 300
xloc (series string) : Time/Bar reference to be used for zigzag drawing. Default is Time - xloc.bar_time.
curved (series bool) : Boolean field to print curved zigzag - used only with polyline implementation
ZigzagDrawing
Object which holds complete zigzag drawing objects and properties.
Fields:
zigzag (Zigzag) : Zigzag object which holds the calculations.
properties (ZigzagProperties) : ZigzagProperties object which is used for setting the display styles of zigzag
drawings (ZigzagObject ) : array which contains lines and labels of zigzag drawing.
ZigzagDrawingPL
Object which holds complete zigzag drawing objects and properties - polyline version
Fields:
zigzag (Zigzag) : Zigzag object which holds the calculations.
properties (ZigzagProperties) : ZigzagProperties object which is used for setting the display styles of zigzag
zigzagLabels (label )
zigzagLine (series polyline) : polyline object of zigzag lines
ZigzagLibrary "Zigzag"
Zigzag related user defined types. Depends on DrawingTypes library for basic types
method tostring(this, sortKeys, sortOrder, includeKeys)
Converts ZigzagTypes/Pivot object to string representation
Namespace types: Pivot
Parameters:
this (Pivot) : ZigzagTypes/Pivot
sortKeys (bool) : If set to true, string output is sorted by keys.
sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
includeKeys (string ) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
Returns: string representation of ZigzagTypes/Pivot
method tostring(this, sortKeys, sortOrder, includeKeys)
Converts Array of Pivot objects to string representation
Namespace types: Pivot
Parameters:
this (Pivot ) : Pivot object array
sortKeys (bool) : If set to true, string output is sorted by keys.
sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
includeKeys (string ) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
Returns: string representation of Pivot object array
method tostring(this)
Converts ZigzagFlags object to string representation
Namespace types: ZigzagFlags
Parameters:
this (ZigzagFlags) : ZigzagFlags object
Returns: string representation of ZigzagFlags
method tostring(this, sortKeys, sortOrder, includeKeys)
Converts ZigzagTypes/Zigzag object to string representation
Namespace types: Zigzag
Parameters:
this (Zigzag) : ZigzagTypes/Zigzagobject
sortKeys (bool) : If set to true, string output is sorted by keys.
sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
includeKeys (string ) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
Returns: string representation of ZigzagTypes/Zigzag
method calculate(this, ohlc, indicators, indicatorNames)
Calculate zigzag based on input values and indicator values
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
ohlc (float ) : Array containing OHLC values. Can also have custom values for which zigzag to be calculated
indicators (matrix) : Array of indicator values
indicatorNames (string ) : Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
Returns: current Zigzag object
method calculate(this)
Calculate zigzag based on properties embedded within Zigzag object
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
Returns: current Zigzag object
method nextlevel(this)
Calculate Next Level Zigzag based on the current calculated zigzag object
Namespace types: Zigzag
Parameters:
this (Zigzag) : Zigzag object
Returns: Next Level Zigzag object
method clear(this)
Clears zigzag drawings array
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing ) : array
Returns: void
method drawplain(this)
draws fresh zigzag based on properties embedded in ZigzagDrawing object without trying to calculate
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
Returns: ZigzagDrawing object
method drawfresh(this, ohlc, indicators, indicatorNames)
draws fresh zigzag based on properties embedded in ZigzagDrawing object
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
ohlc (float ) : values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
indicators (matrix) : Array of indicator values
indicatorNames (string ) : Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
Returns: ZigzagDrawing object
method drawcontinuous(this, ohlc, indicators, indicatorNames)
draws zigzag based on the zigzagmatrix input
Namespace types: ZigzagDrawing
Parameters:
this (ZigzagDrawing) : ZigzagDrawing object
ohlc (float ) : values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
indicators (matrix) : Array of indicator values
indicatorNames (string ) : Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
Returns:
method getPrices(pivots)
Namespace types: Pivot
Parameters:
pivots (Pivot )
method getBars(pivots)
Namespace types: Pivot
Parameters:
pivots (Pivot )
Indicator
Indicator is collection of indicator values applied on high, low and close
Fields:
indicatorHigh (series float) : Indicator Value applied on High
indicatorLow (series float) : Indicator Value applied on Low
PivotCandle
PivotCandle represents data of the candle which forms either pivot High or pivot low or both
Fields:
_high (series float) : High price of candle forming the pivot
_low (series float) : Low price of candle forming the pivot
length (series int) : Pivot length
pHighBar (series int) : represents number of bar back the pivot High occurred.
pLowBar (series int) : represents number of bar back the pivot Low occurred.
pHigh (series float) : Pivot High Price
pLow (series float) : Pivot Low Price
indicators (Indicator ) : Array of Indicators - allows to add multiple
Pivot
Pivot refers to zigzag pivot. Each pivot can contain various data
Fields:
point (chart.point) : pivot point coordinates
dir (series int) : direction of the pivot. Valid values are 1, -1, 2, -2
level (series int) : is used for multi level zigzags. For single level, it will always be 0
componentIndex (series int) : is the lower level zigzag array index for given pivot. Used only in multi level Zigzag Pivots
subComponents (series int) : is the number of sub waves per each zigzag wave. Only applicable for multi level zigzags
microComponents (series int) : is the number of base zigzag components in a zigzag wave
ratio (series float) : Price Ratio based on previous two pivots
sizeRatio (series float)
subPivots (Pivot )
indicatorNames (string ) : Names of the indicators applied on zigzag
indicatorValues (float ) : Values of the indicators applied on zigzag
indicatorRatios (float ) : Ratios of the indicators applied on zigzag based on previous 2 pivots
ZigzagFlags
Flags required for drawing zigzag. Only used internally in zigzag calculation. Should not set the values explicitly
Fields:
newPivot (series bool) : true if the calculation resulted in new pivot
doublePivot (series bool) : true if the calculation resulted in two pivots on same bar
updateLastPivot (series bool) : true if new pivot calculated replaces the old one.
Zigzag
Zigzag object which contains whole zigzag calculation parameters and pivots
Fields:
length (series int) : Zigzag length. Default value is 5
numberOfPivots (series int) : max number of pivots to hold in the calculation. Default value is 20
offset (series int) : Bar offset to be considered for calculation of zigzag. Default is 0 - which means calculation is done based on the latest bar.
level (series int) : Zigzag calculation level - used in multi level recursive zigzags
zigzagPivots (Pivot ) : array which holds the last n pivots calculated.
flags (ZigzagFlags) : ZigzagFlags object which is required for continuous drawing of zigzag lines.
ZigzagObject
Zigzag Drawing Object
Fields:
zigzagLine (series line) : Line joining two pivots
zigzagLabel (series label) : Label which can be used for drawing the values, ratios, directions etc.
ZigzagProperties
Object which holds properties of zigzag drawing. To be used along with ZigzagDrawing
Fields:
lineColor (series color) : Zigzag line color. Default is color.blue
lineWidth (series int) : Zigzag line width. Default is 1
lineStyle (series string) : Zigzag line style. Default is line.style_solid.
showLabel (series bool) : If set, the drawing will show labels on each pivot. Default is false
textColor (series color) : Text color of the labels. Only applicable if showLabel is set to true.
maxObjects (series int) : Max number of zigzag lines to display. Default is 300
xloc (series string) : Time/Bar reference to be used for zigzag drawing. Default is Time - xloc.bar_time.
ZigzagDrawing
Object which holds complete zigzag drawing objects and properties.
Fields:
zigzag (Zigzag) : Zigzag object which holds the calculations.
properties (ZigzagProperties) : ZigzagProperties object which is used for setting the display styles of zigzag
drawings (ZigzagObject ) : array which contains lines and labels of zigzag drawing.
50 Point Stop & Take Profit**50 Point Stop & Take Profit**
This custom TradingView indicator is designed for instruments like US30 or any asset following a point system. It assists traders in setting precise stop-loss and take-profit levels based on different risk-reward ratios. It calculates and plots horizontal lines at various price levels above and below your specified entry price, with a 50-point difference between each ratio.
**How It Benefits Your Strategy:**
- Each risk-reward ratio, whether it's 1:1, 2:1, 3:1, and so on, is separated by precisely 50 points. This deliberate spacing is tailored to provide you with clear and consistent reference points for managing trades in instruments using a point-based system.
- The 50-point increments make it easy to adjust your positions, ensuring that your risk and reward levels align with your trading strategy and objectives.
**Usage:**
1. Set your desired entry price using the "Entry Price" input.
2. The indicator is ideally suited for instruments like US30, where each point represents a distinct price movement. It will automatically calculate and plot multiple lines at the following levels, both for Long (L) and Short (S) positions:
- 1:1 Risk-Reward Ratio (±50 points)
- 2:1 Risk-Reward Ratio (±100 points)
- 3:1 Risk-Reward Ratio (±150 points)
- 4:1 Risk-Reward Ratio (±200 points)
- 5:1 Risk-Reward Ratio (±250 points)
- 6:1 Risk-Reward Ratio (±300 points)
- 7:1 Risk-Reward Ratio (±350 points)
- 8:1 Risk-Reward Ratio (±400 points)
- 9:1 Risk-Reward Ratio (±450 points)
- 10:1 Risk-Reward Ratio (±500 points)
**Customization Options:**
- **Alerts:** You can set alerts for each level to receive notifications when the price reaches a specific risk-reward ratio.
- **Color Customization:** Customize the colors of the plotted lines to suit your chart preferences.
- **Toggle Ratios:** Easily toggle on/off different risk-reward ratios to focus on specific levels that align with your trading strategy.
**How to Use:**
- Use the plotted lines as reference points for setting stop-loss and take-profit orders at your preferred risk-reward ratios.
- The blue horizontal line represents your specified entry price.
This indicator simplifies your trading strategy by providing clear visual cues for managing risk and reward levels, with each level thoughtfully spaced 50 points apart to cater to your strategy's precision.
*Note: Always use risk management and proper trade sizing in your trading strategy.*
**Version:** Pine Script version 5
L.S.C : CF-SW ORG ORS ORIfor L.S.C Strategy
Green Curry with Chicken Ingredients:
Green curry paste: 70 grams
Chicken thigh meat: 300 grams
Coconut milk (thick): 250 milliliters
Coconut milk (thin): 400 milliliters
Sliced eggplant: 100 grams
Thai pea eggplant: 50 grams
Kaffir lime leaves: 3 leaves
Red bird's eye chili (sliced): 2 seeds
Holy basil leaves: 15 grams
Fish sauce: 1 tablespoon
Palm sugar: 1 tablespoon
TICK Strength Background ShadeThis indicator shades the background of each candle based on the strength off the current TICK.US chart. User can define the strength levels, which are by default set to 1-299 (lightest), 300-599, and 600+ (darkest). Best used on lower timeframe charts to help identify whether or not to remain in a trend, or if a trend is possibly reversing when you start to see the opposite color begin to appear following a trend.