Advanced MACD [CryptoSea]Advanced MACD (AMACD) enhances the traditional MACD indicator, integrating innovative features for traders aiming for deeper insights into market momentum and sentiment. It's crafted for those seeking to explore nuanced behaviors of the MACD histogram, thus offering a refined perspective on market dynamics.
Divergence moves can offer insight into continuation or potential reversals in structure, the example below is a clear continuation signal.
Key Features
Enhanced Histogram Analysis: Precisely tracks movements of the MACD histogram, identifying growth or decline periods, essential for understanding market momentum.
High/Low Markers: Marks the highest and lowest points of the histogram within a user-defined period, signaling potential shifts in the market.
Dynamic Averages Calculation: Computes average durations of histogram phases, providing a benchmark against historical performance.
Color-Coded Histogram: Dynamically adjusts the histogram's color intensity based on the current streak's duration relative to its average, offering a visual cue of momentum strength.
Customisable MACD Settings: Enables adjustments to MACD parameters, aligning with individual trading strategies.
Interactive Dashboard: Showcases an on-chart table with average durations for each phase, aiding swift decision-making.
Settings & Customisation
MACD Settings: Customise fast length, slow length, and signal smoothing to tailor the MACD calculations to your trading needs.
Reset Period: Determine the number of bars to identify the histogram's significant high and low points.
Histogram High/Lows: Option to display critical high and low levels of the histogram for easy referencing.
Candle Colours: Select between neutral or traditional candle colors to match your analytical preferences.
When in strong trends, you can use the average table to determine when to look to get into a position. This example we are in a strong downtrend, we then see the histogram growing above the average in these conditions which is where we should look to get into a shorting position.
Strategic Applications
The AMACD serves not just as an indicator but as a comprehensive analytical tool for spotting market trends, momentum shifts, and potential reversal points. It's particularly useful for traders to:
Spot Momentum Changes Utilise dynamic coloring and streak tracking to alert shifts in momentum, helping anticipate market movements.
Identify Market Extremes Use high and low markers to spot potential market turning points, aiding in risk management and decision-making.
Alert Conditions
Above Average Movement Alerts: Triggered when the duration of the MACD histogram's growth or decline is unusually long, these alerts signal sustained momentum:
Above Zero: Alerts for both growing and declining movements above zero, indicating either continued bullish trends or potential bearish reversals.
Below Zero: Alerts for growth and decline below zero, pointing to potential bullish reversals or confirmed bearish trends.
High/Low Break Alerts: Activated when the histogram reaches new highs or falls to new lows beyond the set thresholds, these alerts are crucial for identifying shifts in market dynamics:
Break Above Last High: Indicates a potential upward trend as the histogram surpasses recent highs.
Break Below Last Low: Warns of a possible downward trend as the histogram drops below recent lows.
These alert conditions enable traders to automate part of their market monitoring or potential to automate the signals to take action elsewhere.
在腳本中搜尋"track"
Pivot Point Target Prices [SS]Hey everyone,
Back with another indicator!
I have been trying to do this indicator for like months (over 6 months). I gave up on it a few times and then finally reapproached it in a different way and was able to get it working successfully!
This is the pivot point target price indicator, let's get into how it works!
How it works:
The indicator keeps track of previous pivot highs and lows within your designated lookback timeframe. Using this data, it calculates the average difference between the pivot highs and pivot lows to give you an ATR range.
In addition to this, it tracks the standard deviation of this range. This allows the indicator to give us 3 price targets, 2 standard deviations below the anticipated target, the anticipated target (middle value) and 2 standard deviations above the anticipated target.
Here is a diagram:
I usually only look for the first target, which is the -2 standard deviation below the actual target, but having the added 2 gives some buffer room if a stock is particularly bullish or bearish.
How to use it:
You use this the same way you would pivot points, the only difference is this will show you target ranges to look for on a pivot low or pivot high.
There is some customizability, which I will explain below:
Customize bars: You have the ability to customize left and right bars for your pivot points. I personally like 15 and 15 but I know the most commonly used are 10 and 10.
ATR Length: The ATR Length is defaulted at 500. If you want to tighten up the length and give more conservative targets, you can shorten to between 75 and 150. If you want to be very aggressive with the targets, you can extend to 750 to 1,000.
Toggle on/off labels: You can choose to turn off the pivot labels if you wish.
Important note:
Many pivot indicators will show you pivot levels and use these as support and resistance. This indicator isn't doing that. Its combining ATR and Pivot Points. The ATR gives us the price targets by calculating the average range between pivot highs and pivot lows, and the pivot points are operating as usual.
And that's the indicator!
I hope you enjoy it, like I said it took me forever to get a functioning version of this, so hope you find it helpful!
Safe trades everyone!
Adaptive Fisherized Z-scoreHello Fellas,
It's time for a new adaptive fisherized indicator of me, where I apply adaptive length and more on a classic indicator.
Today, I chose the Z-score, also called standard score, as indicator of interest.
Special Features
Advanced Smoothing: JMA, T3, Hann Window and Super Smoother
Adaptive Length Algorithms: In-Phase Quadrature, Homodyne Discriminator, Median and Hilbert Transform
Inverse Fisher Transform (IFT)
Signals: Enter Long, Enter Short, Exit Long and Exit Short
Bar Coloring: Presents the trade state as bar colors
Band Levels: Changes the band levels
Decision Making
When you create such a mod you need to think about which concepts are the best to conclude. I decided to take Inverse Fisher Transform instead of normalization to make a version which fits to a fixed scale to avoid the usual distortion created by normalization.
Moreover, I chose JMA, T3, Hann Window and Super Smoother, because JMA and T3 are the bleeding-edge MA's at the moment with the best balance of lag and responsiveness. Additionally, I chose Hann Window and Super Smoother because of their extraordinary smoothing capabilities and because Ehlers favours them.
Furthermore, I decided to choose the half length of the dominant cycle instead of the full dominant cycle to make the indicator more responsive which is very important for a signal emitter like Z-score. Signal emitters always need to be faster or have the same speed as the filters they are combined with.
Usage
The Z-score is a low timeframe scalper which works best during choppy/ranging phases. The direction you should trade is determined by the last trend change. E.g. when the last trend change was from bearish market to bullish market and you are now in a choppy/ranging phase confirmed by e.g. Chop Zone or KAMA slope you want to do long trades.
Interpretation
The Z-score indicator is a momentum indicator which shows the number of standard deviations by which the value of a raw score (price/source) is above or below the mean value of what is being observed or measured. Easily explained, it is almost the same as Bollinger Bands with another visual representation form.
Signals
B -> Buy -> Z-score crosses above lower band
S -> Short -> Z-score crosses below upper band
BE -> Buy Exit -> Z-score crosses above 0
SE -> Sell Exit -> Z-score crosses below 0
If you were reading till here, thank you already. Now, follows a bunch of knowledge for people who don't know the concepts I talk about.
T3
The T3 moving average, short for "Tim Tillson's Triple Exponential Moving Average," is a technical indicator used in financial markets and technical analysis to smooth out price data over a specific period. It was developed by Tim Tillson, a software project manager at Hewlett-Packard, with expertise in Mathematics and Computer Science.
The T3 moving average is an enhancement of the traditional Exponential Moving Average (EMA) and aims to overcome some of its limitations. The primary goal of the T3 moving average is to provide a smoother representation of price trends while minimizing lag compared to other moving averages like Simple Moving Average (SMA), Weighted Moving Average (WMA), or EMA.
To compute the T3 moving average, it involves a triple smoothing process using exponential moving averages. Here's how it works:
Calculate the first exponential moving average (EMA1) of the price data over a specific period 'n.'
Calculate the second exponential moving average (EMA2) of EMA1 using the same period 'n.'
Calculate the third exponential moving average (EMA3) of EMA2 using the same period 'n.'
The formula for the T3 moving average is as follows:
T3 = 3 * (EMA1) - 3 * (EMA2) + (EMA3)
By applying this triple smoothing process, the T3 moving average is intended to offer reduced noise and improved responsiveness to price trends. It achieves this by incorporating multiple time frames of the exponential moving averages, resulting in a more accurate representation of the underlying price action.
JMA
The Jurik Moving Average (JMA) is a technical indicator used in trading to predict price direction. Developed by Mark Jurik, it’s a type of weighted moving average that gives more weight to recent market data rather than past historical data.
JMA is known for its superior noise elimination. It’s a causal, nonlinear, and adaptive filter, meaning it responds to changes in price action without introducing unnecessary lag. This makes JMA a world-class moving average that tracks and smooths price charts or any market-related time series with surprising agility.
In comparison to other moving averages, such as the Exponential Moving Average (EMA), JMA is known to track fast price movement more accurately. This allows traders to apply their strategies to a more accurate picture of price action.
Inverse Fisher Transform
The Inverse Fisher Transform is a transform used in DSP to alter the Probability Distribution Function (PDF) of a signal or in our case of indicators.
The result of using the Inverse Fisher Transform is that the output has a very high probability of being either +1 or –1. This bipolar probability distribution makes the Inverse Fisher Transform ideal for generating an indicator that provides clear buy and sell signals.
Hann Window
The Hann function (aka Hann Window) is named after the Austrian meteorologist Julius von Hann. It is a window function used to perform Hann smoothing.
Super Smoother
The Super Smoother uses a special mathematical process for the smoothing of data points.
The Super Smoother is a technical analysis indicator designed to be smoother and with less lag than a traditional moving average.
Adaptive Length
Length based on the dominant cycle length measured by a "dominant cycle measurement" algorithm.
Happy Trading!
Best regards,
simwai
---
Credits to
@cheatcountry
@everget
@loxx
@DasanC
@blackcat1402
Goertzel Adaptive JMA T3Hello Fellas,
The Goertzel Adaptive JMA T3 is a powerful indicator that combines my own created Goertzel adaptive length with Jurik and T3 Moving Averages. The primary intention of the indicator is to demonstrate the new adaptive length algorithm by applying it on bleeding-edge MAs.
It is useable like any moving average, and the new Goertzel adaptive length algorithm can be used to make own indicators Goertzel adaptive.
Used Adaptive Length Algorithms
Normalized Goertzel Power: This uses the normalized power of the Goertzel algorithm to compute an adaptive length without the special operations, like detrending, Ehlers uses for his DFT adaptive length.
Ehlers Mod: This uses the Goertzel algorithm instead of the DFT, originally used by Ehlers, to compute a modified version of his original approach, which sticks as close as possible to the original approach.
Scoring System
The scoring system determines if bars are red or green and collects them.
Then, it goes through all collected red and green bars and checks how big they are and if they are above or below the selected MA. It is positive when green bars are under MA or when red bars are above MA.
Then, it accumulates the size for all positive green bars and for all positive red bars. The same happens for negative green and red bars.
Finally, it calculates the score by ((positiveGreenBars + positiveRedBars) / (negativeGreenBars + negativeRedBars)) * 100 with the scale 0–100.
Signals
Is the price above MA? -> bullish market
Is the price below MA? -> bearish market
Usage
Adjust the settings to reach the highest score, and enjoy an outstanding adaptive MA.
It should be useable on all timeframes. It is recommended to use the indicator on the timeframe where you can get the highest score.
Now, follows a bunch of knowledge for people who don't know about the concepts used here.
T3
The T3 moving average, short for "Tim Tillson's Triple Exponential Moving Average," is a technical indicator used in financial markets and technical analysis to smooth out price data over a specific period. It was developed by Tim Tillson, a software project manager at Hewlett-Packard, with expertise in Mathematics and Computer Science.
The T3 moving average is an enhancement of the traditional Exponential Moving Average (EMA) and aims to overcome some of its limitations. The primary goal of the T3 moving average is to provide a smoother representation of price trends while minimizing lag compared to other moving averages like Simple Moving Average (SMA), Weighted Moving Average (WMA), or EMA.
To compute the T3 moving average, it involves a triple smoothing process using exponential moving averages. Here's how it works:
Calculate the first exponential moving average (EMA1) of the price data over a specific period 'n.'
Calculate the second exponential moving average (EMA2) of EMA1 using the same period 'n.'
Calculate the third exponential moving average (EMA3) of EMA2 using the same period 'n.'
The formula for the T3 moving average is as follows:
T3 = 3 * (EMA1) - 3 * (EMA2) + (EMA3)
By applying this triple smoothing process, the T3 moving average is intended to offer reduced noise and improved responsiveness to price trends. It achieves this by incorporating multiple time frames of the exponential moving averages, resulting in a more accurate representation of the underlying price action.
JMA
The Jurik Moving Average (JMA) is a technical indicator used in trading to predict price direction. Developed by Mark Jurik, it’s a type of weighted moving average that gives more weight to recent market data rather than past historical data.
JMA is known for its superior noise elimination. It’s a causal, nonlinear, and adaptive filter, meaning it responds to changes in price action without introducing unnecessary lag. This makes JMA a world-class moving average that tracks and smooths price charts or any market-related time series with surprising agility.
In comparison to other moving averages, such as the Exponential Moving Average (EMA), JMA is known to track fast price movement more accurately. This allows traders to apply their strategies to a more accurate picture of price action.
Goertzel Algorithm
The Goertzel algorithm is a technique in digital signal processing (DSP) for efficient evaluation of individual terms of the Discrete Fourier Transform (DFT). It's particularly useful when you need to compute a small number of selected frequency components. Unlike direct DFT calculations, the Goertzel algorithm applies a single real-valued coefficient at each iteration, using real-valued arithmetic for real-valued input sequences. This makes it more numerically efficient when computing a small number of selected frequency components¹.
Discrete Fourier Transform
The Discrete Fourier Transform (DFT) is a mathematical technique used in signal processing to convert a finite sequence of equally-spaced samples of a function into a same-length sequence of equally-spaced samples of the discrete-time Fourier transform (DTFT), which is a complex-valued function of frequency . The DFT provides a frequency domain representation of the original input sequence .
Usage of DFT/Goertzel In Adaptive Length Algorithms
Adaptive length algorithms are automated trading systems that can dynamically adjust their parameters in response to real-time market data. This adaptability enables them to optimize their trading strategies as market conditions fluctuate. Both the Goertzel algorithm and DFT can be used in these algorithms to analyze market data and detect cycles or patterns, which can then be used to adjust the parameters of the trading strategy.
The Goertzel algorithm is more efficient than the DFT when you need to compute a small number of selected frequency components. However, for covering a full spectrum, the Goertzel algorithm has a higher order of complexity than fast Fourier transform (FFT) algorithms.
I hope this can help you somehow.
Thanks for reading, and keep it up.
Best regards,
simwai
---
Credits to:
@ClassicScott
@yatrader2
@cheatcountry
@loxx
Median Proximity Percentile [AlgoAlpha]📊🚀 Introducing the "Median Proximity Percentile" by AlgoAlpha, a dynamic and sophisticated trading indicator designed to enhance your market analysis! This tool efficiently tracks median price proximity over a specified lookback period and finds it's percentile between 2 dynamic standard deviation bands, offering valuable insights for traders looking to make informed decisions.
🌟 Key Features:
Color-Coded Visuals: Easily interpret market trends with color-coded plots indicating bullish or bearish signals.
Flexibility: Customize the indicator with your preferred price source and lookback lengths to suit your trading strategy.
Advanced Alert System: Stay ahead with customizable alerts for key trend shifts and market conditions.
🔍 Deep Dive into the Code:
Choose your preferred price data source and define lookback lengths for median and EMA calculations. priceSource = input.source(close, "Source") and lookbackLength = input.int(21, minval = 1, title = "Lookback Length")
Calculate median value, price deviation, and normalized value to analyze market position relative to the median. medianValue = ta.median(priceSource, lookbackLength)
Determine upper and lower boundaries based on standard deviation and EMA. upperBoundary = ta.ema(positiveValues, lookbackLength) + ta.stdev(positiveValues, lookbackLength) * stdDevMultiplier
lowerBoundary = ta.ema(negativeValues, lookbackLength) - ta.stdev(negativeValues, lookbackLength) * stdDevMultiplier
Compute the percentile value to track market position within these boundaries. percentileValue = 100 * (normalizedValue - lowerBoundary)/(upperBoundary - lowerBoundary) - 50
Enhance your analysis with Hull Moving Average (HMA) for smoother trend identification. emaValue = ta.hma(percentileValue, emaLookbackLength)
Visualize trends with color-coded plots and characters for easy interpretation. plotColor = percentileValue > 0 ? colorUp : percentileValue < 0 ? colorDown : na
Set up advanced alerts to stay informed about significant market movements. // Alerts
alertcondition(ta.crossover(emaValue, 0), "Bullish Trend Shift", "Median Proximity Percentile Crossover Zero Line")
alertcondition(ta.crossunder(emaValue, 0), "Bearish Trend Shift", "Median Proximity Percentile Crossunder Zero Line")
alertcondition(ta.crossunder(emaValue,emaValue ) and emaValue > 90, "Bearish Reversal", "Median Proximity Percentile Bearish Reversal")
alertcondition(ta.crossunder(emaValue ,emaValue) and emaValue < -90, "Bullish Reversal", "Median Proximity Percentile Bullish Reversal")
🚨 Remember, the "Median Proximity Percentile " is a tool to aid your analysis. It’s essential to combine it with other analysis techniques and market understanding for best results. Happy trading! 📈📉
Fair Value Gap Absorption Indicator [LuxAlgo]The Fair Value Gap Absorption Indicator aims to detect fair value gap imbalances and tracks the mitigation status of the detected fair value gap by highlighting the mitigation level till a new fair value gap is detected.
The Fair Value Gap (FVG) is a widely utilized tool among price action traders to detect market inefficiencies or imbalances. These imbalances arise when buying or selling pressure is significant, resulting in a large upward or downward move, leaving behind an imbalance in the market.
🔶 USAGE
A fair value gap appears in a triple-candle pattern when there is a large candle whose previous candle’s high and subsequent candle’s low do not fully overlap the large candle. The space between these wicks is known as the fair value gap.
Price can come back to these imbalance areas and mitigate them, however, this is sometimes a process involving multiple bars, the displayed imbalances by the indicator allow tracking the current mitigation level of a displayed imbalance.
Fair value gaps can become a magnet for the price before continuing in the same direction. Traders commonly wait for the price to revert toward the fair value gap to clear out the imbalance before continuing to move toward the prevailing trend.
🔶 SETTINGS
🔹Fair Value Gaps
Fair Value Gap Width Filter: defines the filtering multiplier, please refer to the tooltip of the input option for further details.
Bullish, Imbalance and Mitigation: color customization option.
Bearish, Imbalance and Mitigation: color customization option.
Display Percentage of Mitigation: Display the percentage of the mitigation areas.
Historical Fair Value Gaps: toggles the visibility of the historical fair value gaps.
🔶 LIMITATIONS
Please note that filtering cannot be applied for the first 144 (atr fixed-length) candles since the atr value won't be present that is used for filtering.
🔶 RELATED SCRIPTS
Fair-Value-Gap
HTF-Fair-Value-Gap
Liquidity-Voids-FVG
Major Currency RSI Indicator (MCRSI)Experience the power of multi-dimensional analysis with our Multi-Currency RSI Indicator (MCRSI). This innovative tool allows traders to simultaneously track and compare the Relative Strength Index (RSI) of eight different currencies in a single chart.
The MCRSI calculates the RSI for USD (DXY), EUR (EXY), JPY (JXY), CAD (CXY), AUD (AXY), NZD (ZXY), GBP (BXY), and CHF (SXY), covering a broad range of the forex market. Each RSI line is color-coded for easy differentiation and equipped with labels at the last bar for a clutter-free view.
Our indicator is designed with user-friendly customization features. You can easily adjust the length of the RSI and the time frame according to your trading strategy. It also handles gaps in the chart data with the barmerge.gaps_on option, ensuring accurate and consistent RSI calculations.
Whether you are a novice trader seeking to understand market dynamics better or an experienced trader wanting to diversify your technical analysis, the MCRSI offers a unique perspective of the forex market. This multi-currency approach can help identify potential trading opportunities that could be missed when analyzing currencies in isolation.
Harness the power of multi-currency RSI analysis with our MCRSI Indicator. It's time to step up your trading game!
Features:
Tracks 8 different currencies simultaneously
Color-coded RSI lines for easy identification
Customizable RSI length and time frame
Handles gaps in chart data
Last bar labels for a clutter-free view
Ideal for forex traders of all experience levels
How to Use:
Add the MCRSI to your TradingView chart.
Adjust the RSI length and time frame as needed.
Monitor the RSI lines and their intersections for potential trading signals.
Happy trading!
Re-Anchoring VWAP TripleThe Triple Re-Anchoring VWAP (Volume Weighted Average Price) indicator is a tool designed for traders seeking a deeper understanding of market trends and key price levels. This indicator dynamically recalibrates VWAP calculations based on significant market pivot points, offering a unique perspective on potential support and resistance levels.
Key Features:
Dynamic Re-anchoring at All-Time Highs (ATH) : The first layer of this indicator continuously tracks the all-time high and recalibrates the VWAP from each new ATH. This VWAP line, typically acting as a dynamic resistance level, offers insights into the overbought conditions and potential reversal zones.
Adaptive Re-anchoring to Post-ATH Lows : The second component of the indicator shifts focus to the market's reaction post-ATH. It identifies the lowest low following an ATH and re-anchors the VWAP calculation from this point. This VWAP line often serves as a dynamic support level, highlighting key areas where the market finds value after a significant high.
Re-anchoring to Highs After Post-ATH Lows : The third element of this tool takes adaptation one step further by tracking the highest high achieved after the lowest low post-ATH. This VWAP line can act as either support or resistance, providing a nuanced view of the market's valuation in the recovery phase or during consolidation after a significant low.
Applications:
Trend Confirmation and Reversal Signals : By comparing the price action relative to the dynamically anchored VWAP lines, traders can gauge the strength of the trend and anticipate potential reversals.
Entry and Exit Points : By highlighting significant support and resistance areas, it assists in determining optimal entry and exit points, particularly in swing trading and mean reversion strategies.
Enhanced Market Insight : The dynamic nature of the indicator, with its shifting anchor points, offers a refined understanding of market sentiment and valuation changes over time.
Why Triple Re-Anchoring VWAP?
Traditional VWAP tools offer a linear view, often missing out on the intricacies of market fluctuations. The Triple Re-Anchoring VWAP addresses this by providing a multi-faceted view of the market, adapting not just to daily price changes but pivoting around significant market events. Whether you're a day trader, swing trader, or long-term investor, this indicator adds depth to your market analysis, enabling more informed trading decisions.
Examples:
VWAP Balance ZonesVWAP Balance Zones (VBZ) Is based on 3 concepts.
Many Traders use VWAP to help determine Price Trends.
Trends are typically identified by new Highs or new Lows.
Balanced is found when Supply and Demand are mostly Equal.
VBZ tracks the daily, weekly, and monthly highs and lows; Then plots the average (50%) between the VWAP and the respective extremes.
50% VWAP Zones can be considered significant since they attempt to identify the equilibrium between market participants within the current trend, serving as key reference points to consider for decision making. >While in an uptrend, Buyers may see price falling to the Hi 50% as an attractive value entry for the continuation upwards.
>While ALSO in an uptrend, Sellers may see price falling to the Hi 50% as a change in sentiment with more downwards movement on the way.
Because of these conflicting mindsets, these zones are thought to display areas of balance between buyers and sellers, which can serve as potential decision points throughout the day.
VBZ Draws Zones from the Daily (High/Low/Close) VWAPs and the Day's (High/Low/Close) extremes as seen below.
Technically speaking, an average between vwap and extreme is a single point, to make these into zones I am using multiple sources for vwap and tracking different points of the bar throughout the day (ex. Close VWAP & Daily Highest Close)
Weekly and Monthly are only displaying the Average Price between the VWAP and the (Weekly or Monthly) High/Low.
These hold up as important levels for speculation; however, since most action will be discovered at the daily zones, I am not displaying the zones for the Weekly and Monthly to keep noise to a minimum.
Unique Behaviors:
- Weekly values are hidden on the first day of the week since they are similar to the daily values on the first day of the week.
- Monthly values are hidden in the first week of the month for the same reason.
DP_52W_HIGH_LOW_INDICATORThis indicator tracks the 52W High and Low of any script and provides a visual interpretation of the stock price movement.
It can be used as a quick tracking indicator for trading stocks / ETFs at their 52W Low.
A typical strategy will include buying such stocks at 52W Low and selling at 52W High.
CE - 42MACRO Fixed Income and Macro This is Part 2 of 2 from the 42MACRO Recreation Series
However, there will be a bonus Indicator coming soon!
The CE - 42MACRO Fixed Income and Macro Table is a next level Macroeconomic and market analysis indicator.
It aims to provide a probabilistic insight into the market realized GRID Macro regimes,
track a multiplex of important Assets, Indices, Bonds and ETF's to derive extra market insights by showing the most important aggregates and their performance over multiple timeframes... and what that might mean for the whole market direction.
For traders and especially investors, the unique functionalities will be of high value.
Quick guide on how to use it:
docs.google.com
WARNING
By the nature of the macro regimes, the outcomes are more accurate over longer Chart Timeframes (Week to Months).
However, it is also a valuable tool to form an advanced,
market realized, short to medium term bias.
NOTE
This Indicator is intended to be used alongside the 1nd part "CE - 42MACRO Equity Factor"
for a more wholistic approach and higher accuracy.
Methodology:
The Equity Factor Table tracks specifically chosen Assets to identify their performance and add the combined performances together to visualize 42MACRO's GRID Equity Model.
For this it uses the below Assets:
Convertibles ( AMEX:CWB )
Leveraged Loans ( AMEX:BKLN )
High Yield Credit ( AMEX:HYG )
Preferreds ( NASDAQ:PFF )
Emerging Market US$ Bonds ( NASDAQ:EMB )
Long Bond ( NASDAQ:TLT )
5-10yr Treasurys ( NASDAQ:IEF )
5-10yr TIPS ( AMEX:TIP )
0-5yr TIPS ( AMEX:STIP )
EM Local Currency Bonds ( AMEX:EMLC )
BDCs ( AMEX:BIZD )
Barclays Agg ( AMEX:AGG )
Investment Grade Credit ( AMEX:LQD )
MBS ( NASDAQ:MBB )
1-3yr Treasurys ( NASDAQ:SHY )
Bitcoin ( AMEX:BITO )
Industrial Metals ( AMEX:DBB )
Commodities ( AMEX:DBC )
Gold ( AMEX:GLD )
Equity Volatility ( AMEX:VIXM )
Interest Rate Volatility ( AMEX:PFIX )
Energy ( AMEX:USO )
Precious Metals ( AMEX:DBP )
Agriculture ( AMEX:DBA )
US Dollar ( AMEX:UUP )
Inverse US Dollar ( AMEX:UDN )
Functionalities:
Fixed Income and Macro Table
Shows relative market Asset performance
Comes with different Calculation options like RoC,
Sharpe ratio, Sortino ratio, Omega ratio and Normalization
Allows for advanced market (health) performance
Provides the calculated, realized GRID market regimes
Informs about "Risk ON" and "Risk OFF" market states
Visuals - for your best experience only use one (+ BarColoring) at a time:
You can visualize all important metrics:
- GRID regimes of the currently chosen calculation type
- Risk On/Risk Off with background colouring and additional +1/-1 values
- a smoother GRID model
- a smoother Risk On/ Risk Off metric
- Barcoloring for enabled metric of the above
If you have more suggestions, please write me
Fixed Income and Macro:
The visualisation of the relative performance of the different assets provides valuable information about the current market environment and the actual market performance.
It furthermore makes it possible to obtain a deeper understanding of how the interconnected market works and makes it simple to identify the actual market direction,
thus also providing all the information to derive overall market health, market strength or weakness.
Utility:
The Fixed Income and Macro Table is divided in 4 Columns which are the GRID regimes:
Economic Growth:
Goldilocks
Reflation
Economic Contraction:
Inflation
Deflation
Top 5 Fixed Income/ Macro Factors:
Are the values green for a specific Column?
If so then the market reflects the corresponding GRID behavior.
Bottom 5 Fixed Income/ Macro Factors:
Are the values red for a specific Column?
If so then the market reflects the corresponding GRID behavior.
So if we have Goldilocks as current regime we would see green values in the Top 5 Goldilocks Cells and red values in the Bottom 5 Goldilocks Cells.
You will find that Reflation will look similar, as it is also a sign of Economic Growth.
Same is the case for the two Contraction regimes.
******
This Indicator again is based to a majority on 42MACRO's models.
I only brought them into TV and added things on top of it.
If you have questions or need a more in-depth guide DM me.
GM
Bitwise, Encode, DecodeLibrary "Bitwise, Encode, Decode"
Bitwise, Encode, Decode, and more Library
docs()
Hover-Over Documentation for inside Text Editor
bAnd(a, b)
Returns the bitwise AND of two integers
Parameters:
a : `int` - The first integer
b : `int` - The second integer
Returns: `int` - The bitwise AND of the two integers
bOr(a, b)
Performs a bitwise OR operation on two integers.
Parameters:
a : `int` - The first integer.
b : `int` - The second integer.
Returns: `int` - The result of the bitwise OR operation.
bXor(a, b)
Performs a bitwise Xor operation on two integers.
Parameters:
a : `int` - The first integer.
b : `int` - The second integer.
Returns: `int` - The result of the bitwise Xor operation.
bNot(n)
Performs a bitwise NOT operation on an integer.
Parameters:
n : `int` - The integer to perform the bitwise NOT operation on.
Returns: `int` - The result of the bitwise NOT operation.
bShiftLeft(n, step)
Performs a bitwise left shift operation on an integer.
Parameters:
n : `int` - The integer to perform the bitwise left shift operation on.
step : `int` - The number of positions to shift the bits to the left.
Returns: `int` - The result of the bitwise left shift operation.
bShiftRight(n, step)
Performs a bitwise right shift operation on an integer.
Parameters:
n : `int` - The integer to perform the bitwise right shift operation on.
step : `int` - The number of bits to shift by.
Returns: `int` - The result of the bitwise right shift operation.
bRotateLeft(n, step)
Performs a bitwise right shift operation on an integer.
Parameters:
n : `int` - The int to perform the bitwise Left rotation on the bits.
step : `int` - The number of bits to shift by.
Returns: `int`- The result of the bitwise right shift operation.
bRotateRight(n, step)
Performs a bitwise right shift operation on an integer.
Parameters:
n : `int` - The int to perform the bitwise Right rotation on the bits.
step : `int` - The number of bits to shift by.
Returns: `int` - The result of the bitwise right shift operation.
bSetCheck(n, pos)
Checks if the bit at the given position is set to 1.
Parameters:
n : `int` - The integer to check.
pos : `int` - The position of the bit to check.
Returns: `bool` - True if the bit is set to 1, False otherwise.
bClear(n, pos)
Clears a particular bit of an integer (changes from 1 to 0) passes if bit at pos is 0.
Parameters:
n : `int` - The integer to clear a bit from.
pos : `int` - The zero-based index of the bit to clear.
Returns: `int` - The result of clearing the specified bit.
bFlip0s(n)
Flips all 0 bits in the number to 1.
Parameters:
n : `int` - The integer to flip the bits of.
Returns: `int` - The result of flipping all 0 bits in the number.
bFlip1s(n)
Flips all 1 bits in the number to 0.
Parameters:
n : `int` - The integer to flip the bits of.
Returns: `int` - The result of flipping all 1 bits in the number.
bFlipAll(n)
Flips all bits in the number.
Parameters:
n : `int` - The integer to flip the bits of.
Returns: `int` - The result of flipping all bits in the number.
bSet(n, pos, newBit)
Changes the value of the bit at the given position.
Parameters:
n : `int` - The integer to modify.
pos : `int` - The position of the bit to change.
newBit : `int` - na = flips bit at pos reguardless 1 or 0 | The new value of the bit (0 or 1).
Returns: `int` - The modified integer.
changeDigit(n, pos, newDigit)
Changes the value of the digit at the given position.
Parameters:
n : `int` - The integer to modify.
pos : `int` - The position of the digit to change.
newDigit : `int` - The new value of the digit (0-9).
Returns: `int` - The modified integer.
bSwap(n, i, j)
Switch the position of 2 bits of an int
Parameters:
n : `int` - int to manipulate
i : `int` - bit pos to switch with j
j : `int` - bit pos to switch with i
Returns: `int` - new int with bits switched
bPalindrome(n)
Checks to see if the binary form is a Palindrome (reads the same left to right and vice versa)
Parameters:
n : `int` - int to check
Returns: `bool` - result of check
bEven(n)
Checks if n is Even
Parameters:
n : `int` - The integer to check.
Returns: `bool` - result.
bOdd(n)
checks if n is Even if not even Odd
Parameters:
n : `int` - The integer to check.
Returns: `bool` - result.
bPowerOfTwo(n)
Checks if n is a Power of 2.
Parameters:
n : `int` - number to check.
Returns: `bool` - result.
bCount(n, to_count)
Counts the number of bits that are equal to 1 in an integer.
Parameters:
n : `int` - The integer to count the bits in.
to_count `string` - the bits to count
Returns: `int` - The number of bits that are equal to 1 in n.
GCD(a, b)
Finds the greatest common divisor (GCD) of two numbers.
Parameters:
a : `int` - The first number.
b : `int` - The second number.
Returns: `int` - The GCD of a and b.
LCM(a, b)
Finds the least common multiple (LCM) of two integers.
Parameters:
a : `int` - The first integer.
b : `int` - The second integer.
Returns: `int` - The LCM of a and b.
aLCM(nums)
Finds the LCM of an array of integers.
Parameters:
nums : `int ` - The list of integers.
Returns: `int` - The LCM of the integers in nums.
adjustedLCM(nums, LCM)
adjust an array of integers to Least Common Multiple (LCM)
Parameters:
nums : `int ` - The first integer
LCM : `int` - The second integer
Returns: `int ` - array of ints with LCM
charAt(str, pos)
gets a Char at a given position.
Parameters:
str : `string` - string to pull char from.
pos : `int` - pos to get char from string (left to right index).
Returns: `string` - char from pos of string or "" if pos is not within index range
decimalToBinary(num)
Converts a decimal number to binary
Parameters:
num : `int` - The decimal number to convert to binary
Returns: `string` - The binary representation of the decimal number
decimalToBinary(num, to_binary_int)
Converts a decimal number to binary
Parameters:
num : `int` - The decimal number to convert to binary
to_binary_int : `bool` - bool to convert to int or to string (true for int, false for string)
Returns: `string` - The binary representation of the decimal number
binaryToDecimal(binary)
Converts a binary number to decimal
Parameters:
binary : `string` - The binary number to convert to decimal
Returns: `int` - The decimal representation of the binary number
decimal_len(n)
way of finding decimal length using arithmetic
Parameters:
n `float` - floating decimal point to get length of.
Returns: `int` - number of decimal places
int_len(n)
way of finding number length using arithmetic
Parameters:
n : `int`- value to find length of number
Returns: `int` - lenth of nunber i.e. 23 == 2
float_decimal_to_whole(n)
Converts a float decimal number to an integer `0.365 to 365`.
Parameters:
n : `string` - The decimal number represented as a string.
Returns: `int` - The integer obtained by removing the decimal point and leading zeroes from s.
fractional_part(x)
Returns the fractional part of a float.
Parameters:
x : `float` - The float to get the fractional part of.
Returns: `float` - The fractional part of the float.
form_decimal(a, b, zero_fix)
helper to form 2 ints into 1 float seperated by the decimal
Parameters:
a : `int` - a int
b : `int` - b int
zero_fix : `bool` - fix for trailing zeros being truncated when converting to float
Returns: ` ` - float = float decimal of ints | string = string version of b for future use to ref length
bEncode(n1, n2)
Encodes two numbers into one using bit OR. (fastest)
Parameters:
n1 : `int` - The first number to Encodes.
n2 : `int` - The second number to Encodes.
Returns: `int` - The result of combining the two numbers using bit OR.
bDecode(n)
Decodes an integer created by the bCombine function.(fastest)
Parameters:
n : `int` - The integer to decode.
Returns: ` ` - A tuple containing the two decoded components of the integer.
Encode(a, b)
Encodes by seperating ints into left and right of decimal float
Parameters:
a : `int` - a int
b : `int` - b int
Returns: `float` - new float of encoded ints one on left of decimal point one on right
Decode(encoded)
Decodes float of 2 ints seperated by decimal point
Parameters:
encoded : `float` - the encoded float value
Returns: ` ` - tuple of the 2 ints from encoded float
encode_heavy(a, b)
Encodes by combining numbers and tracking size in the
decimal of a floating number (slowest)
Parameters:
a : `int` - a int
b : `int` - b int
Returns: `float` - new decimal of encoded ints
decode_heavy(encoded)
Decodes encoded float that tracks size of ints in float decimal
Parameters:
encoded : `float` - encoded float
Returns: ` ` - tuple of decoded ints
decimal of float (slowest)
Parameters:
encoded : `float` - the encoded float value
Returns: ` ` - tuple of the 2 ints from encoded float
Bitwise, Encode, Decode Docs
In the documentation you may notice the word decimal
not used as normal this is because when referring to
binary a decimal number is a number that
can be represented with base 10 numbers 0-9
(the wiki below explains better)
A rule of thumb for the two integers being
encoded it to keep both numbers
less than 65535 this is because anything lower uses 16 bits or less
this will maintain 100% accuracy when decoding
although it is possible to do numbers up to 2147483645 with
this library doesnt seem useful enough
to explain or demonstrate.
The functions provided work within this 32-bit range,
where the highest number is all 1s and
the lowest number is all 0s. These functions were created
to overcome the lack of built-in bitwise functions in Pinescript.
By combining two integers into a single number,
the code can access both values i.e when
indexing only one array index
for a matrices row/column, thus improving execution time.
This technique can be applied to various coding
scenarios to enhance performance.
Bitwise functions are a way to use integers in binary form
that can be used to speed up several different processes
most languages have operators to perform these function such as
`<<, >>, &, ^, |, ~`
en.wikipedia.org
Buyer to Seller Volume (BSV) Indicator As promised, here is the buyer to seller volume indicator!
About it/How it works:
The indicator tracks buying and selling volume. It does it simplistically but effectively simply by looking at red vs green candles and averaging out the volume of each respective candle.
It uses the SMA of buying/selling and overall volume to track buyers to sellers and also display the average volume traded over a designated period of time.
Legend:
Green lines = buying volume
Red lines = selling volume
Yellow lines = SMA over designated period of time (user input defined, default is 14 candles).
Buyers are shown in green and sellers are shown in red:
How to Use it:
Default, the indicator goes to 1 Day, 14 candle period.
My preference personally is to use to have it go to "chart" but you can view any time period on the chart that you want and designate the time period of volume you want to view independently.
This can be used for:
1. Identify trends: When buying or selling volume is above selling volume and above the SMA, you know that this persuasively supports a bullish trend. Inverse for the opposite (see below):
2. To identify fakeouts and whether there is volume backing a move:
3. To identify potential changes in trends via a cross:
Its also a great reference when you are unsure of a move. This indicator literally just saved me from wrongfully shorting the FOMC bear flag today:
Probably many other uses you can find, but these are the things I like to use it for!
As always, I have posted a tutorial video for your reference:
As always though, if you have any questions, comments or suggestions for the indicator, please share them below!
Safe trades and best of luck to all!
Jurik-Filtered, Adaptive Laguerre PPO [Loxx]Jurik-Filtered, Adaptive Laguerre PPO is an indicator used to find reversals. Smoothing with a Jurik Filter reduces noise and better identifies reversal points.
What is Laguerre Filter?
The Adaptive Laguerre is based on the Laguerre filter, described by John Ehlers in his paper “Time Warp – Without Space Travel”. It applies a variable gamma factor, based on how well the filter is tracking previous price movement. As with other adaptive moving averages, the Adaptive Laguerre tracks trending markets closely but will see less changes in range-bound markets.
The Adaptive Laguerre filter allows for an adjustment of the simple Laguerre filter. When price moves away from the filter, it becomes faster. When price moves sideward, the filter gets slower. Accordingly, this indicator belongs to the same class of moving average as the Kaufman Adaptive Moving Average (KAMA). It similar to the Volatility Index Dynamic Average (VIDYA) developed by Tushar Chande. The Adaptive Laguerre filter is smoother than the VIDYA and will adjust slower to price action after consolidations.
What is Jurik Volty?
One of the lesser known qualities of Juirk smoothing is that the Jurik smoothing process is adaptive. "Jurik Volty" (a sort of market volatility ) is what makes Jurik smoothing adaptive. The Jurik Volty calculation can be used as both a standalone indicator and to smooth other indicators that you wish to make adaptive.
What is the Jurik Moving Average?
Have you noticed how moving averages add some lag (delay) to your signals? ... especially when price gaps up or down in a big move, and you are waiting for your moving average to catch up? Wait no more! JMA eliminates this problem forever and gives you the best of both worlds: low lag and smooth lines.
Ideally, you would like a filtered signal to be both smooth and lag-free. Lag causes delays in your trades, and increasing lag in your indicators typically result in lower profits. In other words, late comers get what's left on the table after the feast has already begun.
Included:
-Toggle on/off bar coloring
[RedK] Stepped Moving Average Channel (SMAC)The Stepping Moving Average Channel (SMAC) is not an indicator - It is more of a trading tool that was put together to enable a trader to take advantage of relatively fast price moves with quick incremental gain - maybe by exploiting opportunities to trade basic options (Calls, Puts) or to help with in/out-type swing trades. This is more a price-level visualization tool so please use it with this in mind, and not as a trading tool by itself.
While it looks very similar to a Donchian channel, SMAC plots a stepping channel of the moving average of the high & low prices (channel borders) - with an envelope that is at a user-specified % distance from the channel borders.
This setup, when combined with other Moving Averages and lower indicators, may make it easier for a trader to prepare for a trade with clear entry and exit price levels being planned upfront.
For example, a trader wants to capture 2% of the next move, will set the envelope to 2% and have clearer view of entry/exit price levels for such a scenario. once the trader receives confirmation (from other indicators or charts) that the price is heading in the way expected, the SMAC may make it simpler and quicker to estimate (and visualize) the entry/exit price levels and track the movement.
* The stepping feature helps remove price noise and the auto-stepping feature is designed to "snap to" those mental price levels that trader gravitate towards.
* The moving average type I used here is the Compound Ratio MA (CoRA_Wave) .
* This MA type was selected because it has a very high responsiveness and good smoothness, and tracks the price values very closely.
* The MA type can be replaced within the code with any other MA as preferred.
The auto-stepping feature:
----------------------------------
User can override the auto-stepping by entering a manual step value
when the auto-stepping is active, it will attempt to pick the best step size based on the underlying price range and the timeframe selected.
The step selection may not be ideal in some combination of value / TF - i will continue to improve these combinations
Stepping can also be completely disabled - this bring SMAC back to a regular (though highly responsive) Hi/Lo MA channel with envelope
The Excel table snippet in the chart above shows the various step value / TF combinations.
Also the stepping values can be further customized by changing the appropriate part in the script.
Other features:
--------------------
* Rounding Options: The stepping calculations uses one of 2 selectable methods:
1 -- regular rounding (uses the round() function): which rounds the price up & down depending on where it is compared to the half-step value
example: a value of 17 with a step of 10 will be rounded to 20. a value of 13 in that case will be rounded to 10
2 -- Whole Step (uses the int() function): this will only consider whole/fully completed steps - if the average (hi or low) does not explicitly exceed the next step level, we will not get that next value.
example: both values of 17 and 13 with a step of 10 will be rounded to 10.
* The "Quick Table":
The Quick Table shows on the top-left - and can be disabled in the script settings - It shows the currently selected stepping mode and value - since the auto-step changes dynamically with the selected chart timeframe, this makes it easier for the trader to view the active "configuration"
overall, i hope some traders find this quick utility useful - if not to use, maybe to inspire other ideas
- please feel free to use or customize in any way you need. Feel free to share feedback and observations.
RedK Magic RibbonRedK Magic Ribbon is simple script that combines a fast and a slow moving averages to create a 2-Moving Average Cross-over / trend visualization tool.
We utilize the Compound Ratio Weighted Average (CoRa Wave) as the fast MA line and the RedK Slow Smooth Weighted Moving Average (RSS_WMA) aka LazyLine as the slow MA line.
i put this script together when i found that i started using these 2 moving average lines in my trading charts most of the time. thought others may find it useful.
The simple idea is that when the 2 lines "agree" on direction, then this is possibly a confirmed trend in that direction.
Visually, when the 2 lines agree on a trend direction, Magic Ribbon gives either a green (up) or red (down) fill, when they disagree, it gives a gray fill - Gray areas are considered "no trade" or "get ready" zones depending on the situation.
This ribbon can be used to support trend-following trades, swing trading, or as a visual trend tracking tool
Suggested Usage Tips:
----------------------------
* Position entry should be made as close to the RSS_WMA/LazyLine as possible to maximize gain.
* The RSS_WMA can act as a guide for Stop Loss
* An aggressive (or swing) trader may consider entries as soon as the CoRa Wave line changes color, but in context of the prevailing trend.
* if you intend to use this tool for trading, please test it using the PaperTrading or Rewind features of TV to get used to how it behaves and adjust accordingly.
* The Magic Ribbon should work on any timeframe.
* The basic settings are available - they enable adjusting the length and smoothness of the CoRa Wave and the Smoothness of the RSS_WMA - as well as the source price for each. Style settings enable to adjust color, line width, or hide/show various elements as needed.
* The most important tip for using the Magic Ribbon: when you first add it to your chart, is to fine-tune the length settings to your preference. start by adjusting the LazyLine (RSS_WMA) Smoothness value, so it tracks and barely touches the highs / lows of price bars - with the least amount of lag possible - then adjust the CoRa Wave length to make it as responsive as you need. Keep smoothness to the lowest you can use (i like 3 or 4 max) - the default settings are generic usable values based on my testing.
* as usual, please use this tool only as a guide - make your own detailed chart analysis and support your trading decision with signals and confirmations from other indicators .
*** This script does not repaint.
PercentChannelSimilar to my "DollarChannel" script, this keeps track of lows and highs, but snaps a line whenever A) the high exceeds low+(low*ratio), or B) low falls under high-(high*ratio).
This results in a channel that tracks percent-changes rather than absolute dollar-value changes.
Liquidation Levels
I got sick of calculating leverage all of the time, so I made this real time calculator. It is primarily for crypto derivatives.
It tracks and displays the liquidation price for 5 customisable leverage levels and plots them either historically and/or in real time, with labels beside each including the estimated price.
These calculations include maintenance margin and can be configured for linear futures (USDT) or non-linear futures. Never again make dumb mistakes that are obvious with a bit of maths.
To jazz it up, you can customise the colours, disable various labels, set different leverage multiples, and change the offsets and number of bars to plot in the past.
Alternatively, you can change the offset to 24 on an hourly chart and change show last bars to 0. By doing this, you can see which levels most often get liquidated. It is crude, I know, and there are better tools for tracking liquidation hunts. This is not an attempt to replace or compete with them.
Enjoy and trade safely.
Using `varip` variables [PineCoders]█ OVERVIEW
The new varip keyword in Pine can be used to declare variables that escape the rollback process, which is explained in the Pine User Manual's page on the execution model . This publication explains how Pine coders can use variables declared with varip to implement logic that was impossible to code in Pine before, such as timing events during the realtime bar, or keeping track of sequences of events that occur during successive realtime updates. We present code that allows you to calculate for how much time a given condition is true during a realtime bar, and show how this can be used to generate alerts.
█ WARNINGS
1. varip is an advanced feature which should only be used by coders already familiar with Pine's execution model and bar states .
2. Because varip only affects the behavior of your code in the realtime bar, it follows that backtest results on strategies built using logic based on varip will be meaningless,
as varip behavior cannot be simulated on historical bars. This also entails that plots on historical bars will not be able to reproduce the script's behavior in realtime.
3. Authors publishing scripts that behave differently in realtime and on historical bars should imperatively explain this to traders.
█ CONCEPTS
Escaping the rollback process
Whereas scripts only execute once at the close of historical bars, when a script is running in realtime, it executes every time the chart's feed detects a price or volume update. At every realtime update, Pine's runtime normally resets the values of a script's variables to their last committed value, i.e., the value they held when the previous bar closed. This is generally handy, as each realtime script execution starts from a known state, which simplifies script logic.
Sometimes, however, script logic requires code to be able to save states between different executions in the realtime bar. Declaring variables with varip now makes that possible. The "ip" in varip stands for "intrabar persist".
Let's look at the following code, which does not use varip :
//@version=4
study("")
int updateNo = na
if barstate.isnew
updateNo := 1
else
updateNo := updateNo + 1
plot(updateNo, style = plot.style_circles)
On historical bars, barstate.isnew is always true, so the plot shows a value of "1". On realtime bars, barstate.isnew is only true when the script first executes on the bar's opening. The plot will then briefly display "1" until subsequent executions occur. On the next executions during the realtime bar, the second branch of the if statement is executed because barstate.isnew is no longer true. Since `updateNo` is initialized to `na` at each execution, the `updateNo + 1` expression yields `na`, so nothing is plotted on further realtime executions of the script.
If we now use varip to declare the `updateNo` variable, the script behaves very differently:
//@version=4
study("")
varip int updateNo = na
if barstate.isnew
updateNo := 1
else
updateNo := updateNo + 1
plot(updateNo, style = plot.style_circles)
The difference now is that `updateNo` tracks the number of realtime updates that occur on each realtime bar. This can happen because the varip declaration allows the value of `updateNo` to be preserved between realtime updates; it is no longer rolled back at each realtime execution of the script. The test on barstate.isnew allows us to reset the update count when a new realtime bar comes in.
█ OUR SCRIPT
Let's move on to our script. It has three parts:
— Part 1 demonstrates how to generate alerts on timed conditions.
— Part 2 calculates the average of realtime update prices using a varip array.
— Part 3 presents a function to calculate the up/down/neutral volume by looking at price and volume variations between realtime bar updates.
Something we could not do in Pine before varip was to time the duration for which a condition is continuously true in the realtime bar. This was not possible because we could not save the beginning time of the first occurrence of the true condition.
One use case for this is a strategy where the system modeler wants to exit before the end of the realtime bar, but only if the exit condition occurs for a specific amount of time. One can thus design a strategy running on a 1H timeframe but able to exit if the exit condition persists for 15 minutes, for example. REMINDER: Using such logic in strategies will make backtesting their complete logic impossible, and backtest results useless, as historical behavior will not match the strategy's behavior in realtime, just as using `calc_on_every_tick = true` will do. Using `calc_on_every_tick = true` is necessary, by the way, when using varip in a strategy, as you want the strategy to run like a study in realtime, i.e., executing on each price or volume update.
Our script presents an `f_secondsSince(_cond, _resetCond)` function to calculate the time for which a condition is continuously true during, or even across multiple realtime bars. It only works in realtime. The abundant comments in the script hopefully provide enough information to understand the details of what it's doing. If you have questions, feel free to ask in the Comments section.
Features
The script's inputs allow you to:
• Specify the number of seconds the tested conditions must last before an alert is triggered (the default is 20 seconds).
• Determine if you want the duration to reset on new realtime bars.
• Require the direction of alerts (up or down) to alternate, which minimizes the number of alerts the script generates.
The inputs showcase the new `tooltip` parameter, which allows additional information to be displayed for each input by hovering over the "i" icon next to it.
The script only displays useful information on realtime bars. This information includes:
• The MA against which the current price is compared to determine the bull or bear conditions.
• A dash which prints on the chart when the bull or bear condition is true.
• An up or down triangle that prints when an alert is generated. The triangle will only appear on the update where the alert is triggered,
and unless that happens to be on the last execution of the realtime bar, it will not persist on the chart.
• The log of all triggered alerts to the right of the realtime bar.
• A gray square on top of the elapsed realtime bars where one or more alerts were generated. The square's tooltip displays the alert log for that bar.
• A yellow dot corresponding to the average price of all realtime bar updates, which is calculated using a varip array in "Part 2" of the script.
• Various key values in the Data Window for each parts of the script.
Note that the directional volume information calculated in Part 3 of the script is not plotted on the chart—only in the Data Window.
Using the script
You can try running the script on an open market with a 30sec timeframe. Because the default settings reset the duration on new realtime bars and require a 20 second delay, a reasonable amount of alerts will trigger.
Creating an alert on the script
You can create a script alert on the script. Keep in mind that when you create an alert from this script, the duration calculated by the instance of the script running the alert will not necessarily match that of the instance running on your chart, as both started their calculations at different times. Note that we use alert.freq_all in our alert() calls, so that alerts will trigger on all instances where the associated condition is met. If your alert is being paused because it reaches the maximum of 15 triggers in 3 minutes, you can configure the script's inputs so that up/down alerts must alternate. Also keep in mind that alerts run a distinct instance of your script on different servers, so discrepancies between the behavior of scripts running on charts and alerts can occur, especially if they trigger very often.
Challenges
Events detected in realtime using variables declared with varip can be transient and not leave visible traces at the close of the realtime bar, as is the case with our script, which can trigger multiple alerts during the same realtime bar, when the script's inputs allow for this. In such cases, elapsed realtime bars will be of no use in detecting past realtime bar events unless dedicated code is used to save traces of events, as we do with our alert log in this script, which we display as a tooltip on elapsed realtime bars.
█ NOTES
Realtime updates
We have no control over when realtime updates occur. A realtime bar can open, and then no realtime updates can occur until the open of the next realtime bar. The time between updates can vary considerably.
Past values
There is no mechanism to refer to past values of a varip variable across realtime executions in the same bar. Using the history-referencing operator will, as usual, return the variable's committed value on previous bars. If you want to preserve past values of a varip variable, they must be saved in other variables or in an array .
Resetting variables
Because varip variables not only preserve their values across realtime updates, but also across bars, you will typically need to plan conditions that will at some point reset their values to a known state. Testing on barstate.isnew , as we do, is a good way to achieve that.
Repainting
The fact that a script uses varip does not make it necessarily repainting. A script could conceivably use varip to calculate values saved when the realtime bar closes, and then use confirmed values of those calculations from the previous bar to trigger alerts or display plots, avoiding repaint.
timenow resolution
Although the variable is expressed in milliseconds it has an actual resolution of seconds, so it only increments in multiples of 1000 milliseconds.
Warn script users
When using varip to implement logic that cannot be replicated on historical bars, it's really important to explain this to traders in published script descriptions, even if you publish open-source. Remember that most TradingViewers do not know Pine.
New Pine features used in this script
This script uses three new Pine features:
• varip
• The `tooltip` parameter in input() .
• The new += assignment operator. See these also: -= , *= , /= and %= .
Example scripts
These are other scripts by PineCoders that use varip :
• Tick Delta Volume , by RicadoSantos .
• Tick Chart and Volume Info from Lower Time Frames by LonesomeTheBlue .
Thanks
Thanks to the PineCoders who helped improve this publication—especially to bmistiaen .
Look first. Then leap.
DollarChannelThis indicator just tracks lows/highs and "snaps a line" when the delta exceeds a buck (or whatever you configure) and starts tracking again from that new point.
Particle Physics Moving AverageThis indicator simulates the physics of a particle attracted by a distance-dependent force towards the evolving value of the series it's applied to.
Its parameters include:
The mass of the particle
The exponent of the force function f=d^x
A "medium damping factor" (viscosity of the universe)
Compression/extension damping factors (for simulating spring-damping functions)
This implementation also adds a second set of all of these parameters, and tracks 16 particles evenly interpolated between the two sets.
It's a kind of Swiss Army Knife of Moving Average-type functions; For instance, because the position and velocity of the particle include a "historical knowlege" of the series, it turns out that the Exponential Moving Average function simply "falls out" of the algorithm in certain configurations; instead of being configured by defining a period of samples over which to calculate an Exponential Moving Average, in this derivation, it is tuned by changing the mass and/or medium damping parameters.
But the algorithm can do much more than simply replicate an EMA... A particle acted on by a force that is a linear function of distance (force exponent=1) simulates the physics of a sprung-mass system, with a mass-dependent resonant frequency. By altering the particle mass and damping parameters, you can simulate something like an automobile suspension, letting your particle track a stock's price like a Cadillac or a Corvette (or both, including intermediates) depending on your setup. Particles will have a natural resonance with a frequency that depends on its mass... A higher mass particle (i.e. higher inertia) will resonate at a lower frequency than one with a lower mass (and of course, in this indicator, you can display particles that interpolate through a range of masses.)
The real beauty of this general-purpose algorithm is that the force function can be extended with other components, affecting the trajectory of the particle; For instance "volume" could be factored into the current distance-based force function, strengthening or weakening the impulse accordingly. (I'll probably provide updates to the script that incoroprate different ideas I come up with.)
As currently pictured above, the indicator is interpolating between a medium-damped EMA-like configuration (red) and a more extension-damped suspension-like configuration (blue).
This indicator is merely a tool that provides a space to explore such a simulation, to let you see how tweaking parameters affects the simulations. It doesn't provide buy or sell signals, although you might find that it could be adapted into an MACD-like signal generator... But you're on your own for that.
Mega Trend Plus - S&P 500 Trend Follower / Market GaugeFirstly, 100% of the credit goes to Greg Morris @ Stockcharts.com for the article detailing the concept and most of the settings/components. I've simply implemented his idea. I haven't sought permission from him, but given that he was open with the components of the indicator I'm assuming he's happy for me to go ahead and code this in pinescript. See the article here: stockcharts.com
Okay, so this is part of a system/indicator Greg outlined in the article that he calls Trend Gauge. The idea is fairly simple: take a group of indexes that cover the breadth of the market you want to trade, track their relationship/position to their 200 period Exponential Moving Average (EMA), and assign scores to bull/bear crosses + relative location to the EMA. Once you've normalized and aggregated the scores you finish up with a trend following indicator that works surprisingly well.
This part is called Mega Trend Plus, and tracks whether an index is above or below its 200 period EMA. I'll be releasing the second part ("Trend Strength") soon. Once that's done I'll combine them to form the full "Trend Gauge" indicator.
I decided to provide the base version that people can then experiment with and tweak to their liking, so Greg's version shown in the article is smoother than the one provided here. It's up to you to play with smoothing options, and potentially tweak the weightings of the various components. Please see the script for info on what the various inputs are - I've added notes there.
So, how does it do? Well, as you can see from the chart above it works pretty well overall. The S&P 500 has been fairly trendy over the last few decades, so it's been prime territory for a system like this. It would have kept you out of the big bear markets (particularly GFC & 2015-16), and that's the goal of any trend-based system. They thrive on how little they lose, not necessarily on how much they make.
As you can see, the indicator is pretty choppy. So it's not designed (in the current configuration) to provide accurate buy/hold/sell signals. It currently functions more as a market gauge / strength indicator.
Hopefully you find this concept interesting. It's simple, but the best systems often are.
Please add comments below if you come up with an interesting configuration or variation.
Let me know if you have any queries.
DD
Canadian Dollar Currency IndexCanadian Dollar Currency Index updates in real time and doesn't close like tradingview.com's currency indexes. Based off of the Bank of Canada's CEER methodology and tracks it quite closely, although not perfectly. It seems to be higher than the Bank of Canada's index by 2 points. This could be due to using different data for the currencies and as I am not proficient in PineScript, I don't think I was able to replicate the formula exactly...? Regardless ,it works well and is more than close enough to suit one's purpose of tracking the Canadian dollar against a basket of currencies that are weighted according to the Bank of Canada's total weights (The total weight of a country j in year t is a weighted average of the their import, export and third-market competition weights). For more information on the actual Bank of Canada's index: www.bankofcanada.ca