Average Yield InversionDescription:
This script calculates and visualizes the average yield curve spread to identify whether the yield curve is inverted or normal. It takes into account short-term yields (1M, 3M, 6M, 2Y) and long-term yields (10Y, 30Y).
Positive values: The curve is normal, indicating long-term yields are higher than short-term yields. This often reflects economic growth expectations.
Negative values: The curve is inverted, meaning short-term yields are higher than long-term yields, a potential signal of economic slowdown or recession.
Key Features:
Calculates the average spread between long-term and short-term yields.
Displays a clear graph with a zero-line reference for quick interpretation.
Useful for tracking macroeconomic trends and potential market turning points.
This tool is perfect for investors, analysts, and economists who need to monitor yield curve dynamics at a glance.
Cari dalam skrip untuk "curve"
EMD Oscillator (Zeiierman)█ Overview
The Empirical Mode Decomposition (EMD) Oscillator is an advanced indicator designed to analyze market trends and cycles with high precision. It breaks down complex price data into simpler parts called Intrinsic Mode Functions (IMFs), allowing traders to see underlying patterns and trends that aren’t visible with traditional indicators. The result is a dynamic oscillator that provides insights into overbought and oversold conditions, as well as trend direction and strength. This indicator is suitable for all types of traders, from beginners to advanced, looking to gain deeper insights into market behavior.
█ How It Works
The core of this indicator is the Empirical Mode Decomposition (EMD) process, a method typically used in signal processing and advanced scientific fields. It works by breaking down price data into various “layers,” each representing different frequencies in the market’s movement. Imagine peeling layers off an onion: each layer (or IMF) reveals a different aspect of the price action.
⚪ Data Decomposition (Sifting): The indicator “sifts” through historical price data to detect natural oscillations within it. Each oscillation (or IMF) highlights a unique rhythm in price behavior, from rapid fluctuations to broader, slower trends.
⚪ Adaptive Signal Reconstruction: The EMD Oscillator allows traders to select specific IMFs for a custom signal reconstruction. This reconstructed signal provides a composite view of market behavior, showing both short-term cycles and long-term trends based on which IMFs are included.
⚪ Normalization: To make the oscillator easy to interpret, the reconstructed signal is scaled between -1 and 1. This normalization lets traders quickly spot overbought and oversold conditions, as well as trend direction, without worrying about the raw magnitude of price changes.
The indicator adapts to changing market conditions, making it effective for identifying real-time market cycles and potential turning points.
█ Key Calculations: The Math Behind the EMD Oscillator
The EMD Oscillator’s advanced nature lies in its high-level mathematical operations:
⚪ Intrinsic Mode Functions (IMFs)
IMFs are extracted from the data and act as the building blocks of this indicator. Each IMF is a unique oscillation within the price data, similar to how a band might be divided into treble, mid, and bass frequencies. In the EMD Oscillator:
Higher-Frequency IMFs: Represent short-term market “noise” and quick fluctuations.
Lower-Frequency IMFs: Capture broader market trends, showing more stable and long-term patterns.
⚪ Sifting Process: The Heart of EMD
The sifting process isolates each IMF by repeatedly separating and refining the data. Think of this as filtering water through finer and finer mesh sieves until only the clearest parts remain. Mathematically, it involves:
Extrema Detection: Finding all peaks and troughs (local maxima and minima) in the data.
Envelope Calculation: Smoothing these peaks and troughs into upper and lower envelopes using cubic spline interpolation (a method for creating smooth curves between data points).
Mean Removal: Calculating the average between these envelopes and subtracting it from the data to isolate one IMF. This process repeats until the IMF criteria are met, resulting in a clean oscillation without trend influences.
⚪ Spline Interpolation
The cubic spline interpolation is an advanced mathematical technique that allows smooth curves between points, which is essential for creating the upper and lower envelopes around each IMF. This interpolation solves a tridiagonal matrix (a specialized mathematical problem) to ensure that the envelopes align smoothly with the data’s natural oscillations.
To give a relatable example: imagine drawing a smooth line that passes through each peak and trough of a mountain range on a map. Spline interpolation ensures that line is as smooth and close to reality as possible. Achieving this in Pine Script is technically demanding and demonstrates a high level of mathematical coding.
⚪ Amplitude Normalization
To make the oscillator more readable, the final signal is scaled by its maximum amplitude. This amplitude normalization brings the oscillator into a range of -1 to 1, creating consistent signals regardless of price level or volatility.
█ Comparison with Other Signal Processing Methods
Unlike standard technical indicators that often rely on fixed parameters or pre-defined mathematical functions, the EMD adapts to the data itself, capturing natural cycles and irregularities in real-time. For example, if the market becomes more volatile, EMD adjusts automatically to reflect this without requiring parameter changes from the trader. In this way, it behaves more like a “smart” indicator, intuitively adapting to the market, unlike most traditional methods. EMD’s adaptive approach is akin to AI’s ability to learn from data, making it both resilient and robust in non-linear markets. This makes it a great alternative to methods that struggle in volatile environments, such as fixed-parameter oscillators or moving averages.
█ How to Use
Identify Market Cycles and Trends: Use the EMD Oscillator to spot market cycles that represent phases of buying or selling pressure. The smoothed version of the oscillator can help highlight broader trends, while the main oscillator reveals immediate cycles.
Spot Overbought and Oversold Levels: When the oscillator approaches +1 or -1, it may indicate that the market is overbought or oversold, signaling potential entry or exit points.
Confirm Divergences: If the price movement diverges from the oscillator's direction, it may indicate a potential reversal. For example, if prices make higher highs while the oscillator makes lower highs, it could be a sign of weakening trend strength.
█ Settings
Window Length (N): Defines the number of historical bars used for EMD analysis. A larger window captures more data but may slow down performance.
Number of IMFs (M): Sets how many IMFs to extract. Higher values allow for a more detailed decomposition, isolating smaller cycles within the data.
Amplitude Window (L): Controls the length of the window used for amplitude calculation, affecting the smoothness of the normalized oscillator.
Extraction Range (IMF Start and End): Allows you to select which IMFs to include in the reconstructed signal. Starting with lower IMFs captures faster cycles, while ending with higher IMFs includes slower, trend-based components.
Sifting Stopping Criterion (S-number): Sets how precisely each IMF should be refined. Higher values yield more accurate IMFs but take longer to compute.
Max Sifting Iterations (num_siftings): Limits the number of sifting iterations for each IMF extraction, balancing between performance and accuracy.
Source: The price data used for the analysis, such as close or open prices. This determines which price movements are decomposed by the indicator.
-----------------
Disclaimer
The information contained in my Scripts/Indicators/Ideas/Algos/Systems does not constitute financial advice or a solicitation to buy or sell any securities of any type. I will not accept liability for any loss or damage, including without limitation any loss of profit, which may arise directly or indirectly from the use of or reliance on such information.
All investments involve risk, and the past performance of a security, industry, sector, market, financial product, trading strategy, backtest, or individual's trading does not guarantee future results or returns. Investors are fully responsible for any investment decisions they make. Such decisions should be based solely on an evaluation of their financial circumstances, investment objectives, risk tolerance, and liquidity needs.
My Scripts/Indicators/Ideas/Algos/Systems are only for educational purposes!
[Sharpe projection SGM]Dynamic Support and Resistance: Traces adjustable support and resistance lines based on historical prices, signaling new market barriers.
Price Projections and Volatility: Calculates future price projections using moving averages and plots annualized standard deviation-based volatility bands to anticipate price dispersion.
Intuitive Coloring: Colors between support and resistance lines show up or down trends, making it easy to analyze quickly.
Analytics Dashboard: Displays key metrics such as the Sharpe Ratio, which measures average ROI adjusted for asset volatility
Volatility Management for Options Trading: The script helps evaluate strike prices and strategies for options, based on support and resistance levels and projected volatility.
Importance of Diversification: It is necessary to diversify investments to reduce risks and stabilize returns.
Disclaimer on Past Performance: Past performance does not guarantee future results, projections should be supplemented with other analyses.
The script settings can be adjusted according to the specific needs of each user.
The mean and standard deviation are two fundamental statistical concepts often represented in a Gaussian curve, or normal distribution. Here's a quick little lesson on these concepts:
Average
The mean (or arithmetic mean) is the result of the sum of all values in a data set divided by the total number of values. In a data distribution, it represents the center of gravity of the data points.
Standard Deviation
The standard deviation measures the dispersion of the data relative to its mean. A low standard deviation indicates that the data is clustered near the mean, while a high standard deviation shows that it is more spread out.
Gaussian curve
The Gaussian curve or normal distribution is a graphical representation showing the probability of distribution of data. It has the shape of a symmetrical bell centered on the middle. The width of the curve is determined by the standard deviation.
68-95-99.7 rule (rule of thumb): Approximately 68% of the data is within one standard deviation of the mean, 95% is within two standard deviations, and 99.7% is within three standard deviations.
In statistics, understanding the mean and standard deviation allows you to infer a lot about the nature of the data and its trends, and the Gaussian curve provides an intuitive visualization of this information.
In finance, it is crucial to remember that data dispersion can be more random and unpredictable than traditional statistical models like the normal distribution suggest. Financial markets are often affected by unforeseen events or changes in investor behavior, which can result in return distributions with wider standard deviations or non-symmetrical distributions.
The Investment ClockThe Investment Clock was most likely introduced to the general public in a research paper distributed by Merrill Lynch. It’s a simple yet useful framework for understanding the various stages of the US economic cycle and which asset classes perform best in each stage.
The Investment Clock splits the business cycle into four phases, where each phase is comprised of the orientation of growth and inflation relative to their sustainable levels:
Reflation phase (6:01 to 8:59): Growth is sluggish and inflation is low. This phase occurs during the heart of a bear market. The economy is plagued by excess capacity and falling demand. This keeps commodity prices low and pulls down inflation. The yield curve steepens as the central bank lowers short-term rates in an attempt to stimulate growth and inflation. Bonds are the best asset class in this phase.
Recovery phase (9:01 to 11:59): The central bank’s easing takes effect and begins driving growth to above the trend rate. Though growth picks up, inflation remains low because there’s still excess capacity. Rising growth and low inflation are the Goldilocks phase of every cycle. Stocks are the best asset class in this phase.
Overheat phase(12:01 to 2:59): Productivity growth slows and the GDP gap closes causing the economy to bump up against supply constraints. This causes inflation to rise. Rising inflation spurs the central banks to hike rates. As a result, the yield curve begins flattening. With high growth and high inflation, stocks still perform but not as well as in recovery. Volatility returns as bond yields rise and stocks compete with higher yields for capital flows. In this phase, commodities are the best asset class.
Stagflation phase (3:01 to 5:59): GDP growth slows but inflation remains high (sidenote: most bear markets are preceded by a 100%+ increase in the price of oil which drives inflation up and causes central banks to tighten). Productivity dives and a wage-price spiral develops as companies raise prices to protect compressing margins. This goes on until there’s a steep rise in unemployment which breaks the cycle. Central banks keep rates high until they reign in inflation. This causes the yield curve to invert. During this phase, cash is the best asset.
Additional notes from Merrill Lynch:
Cyclicality: When growth is accelerating (12 o'clock), Stocks and Commodities do well. Cyclical sectors like Tech or Steel outperform. When growth is slowing (6 o'clock), Bonds, Cash, and defensives outperform.
Duration: When inflation is falling (9 o'clock), discount rates drop and financial assets do well. Investors pay up for long duration Growth stocks. When inflation is rising (3 o'clock), real assets like Commodities and Cash do best. Pricing power is plentiful and short-duration Value stocks outperform.
Interest Rate-Sensitives: Banks and Consumer Discretionary stocks are interest-rate sensitive “early cycle” performers, doing best in Reflation and Recovery when central banks are easing and growth is starting to recover.
Asset Plays: Some sectors are linked to the performance of an underlying asset. Insurance stocks and Investment Banks are often bond or equity price sensitive, doing well in the Reflation or Recovery phases. Mining stocks are metal price-sensitive, doing well during an Overheat.
About the indicator:
This indicator suggests iShares ETFs for sector rotation analysis. There are likely other ETFs to consider which have lower fees and are outperforming their sector peers.
You may get errors if your chart is set to a different timeframe & ticker other than 1d for symbol/tickers GDPC1 or CPILFESL.
Investment Clock settings are based on a "sustainable level" of growth and inflation, which are each slightly subjective depending on the economist and probably have changed since the last time this indicator was updated. Hence, the sustainable levels are customizable in the settings. When I was formally educated I was trained to use average CPI of 3.1% for financial planning purposes, the default for the indicator is 2.5%, and the Medium article backtested and optimized a 2% sustainable inflation rate. Again, user-defined sustainable growth and rates are slightly subjective and will affect results.
I have not been trained or even had much experience with MetaTrader code, which is how this indicator was originally coded. See the original Medium article that inspired this indicator if you want to audit & compare code.
Hover over info panel for detailed information.
Features: Advanced info panel that performs Investment Clock analysis and offers additional hover info such as sector rotation suggestions. Customizable sustainable levels, growth input, and inflation input. Phase background coloring.
⚠ DISCLAIMER: Not financial advice. Not a trading system. DYOR. I am not affiliated with Medium, Macro Ops, iShares, or Merrill Lynch.
About the Author: I am a patent-holding inventor, a futures trader, a hobby PineScripter, and a former FINRA Registered Representative.
Bitcoin Risk Long Term indicatorOBJECTIVE:
The purpose of this indicator is to synthesize via an average several indicators from a wide choice with in order to simplify the reading of the bitcoin price and that on a long term vision.
Useful for those who want to see things simply, typically to make a smart DCA based on risk.
I originally used this script as a sandbox to understand and test the usefulness of several indicators, and to develop my PineScript skills, but finally the Risk Indicator output seems relevant so I decided to share it.
USAGE:
The selected indicators are the ones that I think give the best market bottoms, but the idea here is that anyone can try and use any set of indicators based on those preferences (post in comments if you find a relevant config)
Most of the indicator inputs are configurable. And some are not taken into account in the calculation of the Risk indicator because I consider them not relevant, this script is also a test more than a final version.
NOTES :
If you have any idea of adding an indicator, modification, criticism, bug found: share them, it is appreciated!
In the future I will create another more versatile Risk indicator that will not be focused on bitcoin in weekly. (this indicator is still usable on other assets and timeframe)
THANKS:
to Benjamin Cowen for inspiring me with his Bitcoin Risk metric
to Lazybear for his Wavetrend Indicator and all the scripts he shares
to Mabonyi for his Bitcoin Logarithmic Growth Curves & Zones script
to VuManChu for his VMC Cypher B Divergence
to the Trading view team for developing TV and PineScript
And to all the community for all the published codes that allowed me to progress and create this script
---- FR ----
OBJECTIF :
L'objectif de cet indicateur est de synthétiser via une moyenne plusieurs indicateurs parmi un large choix avec afin de simplifier la lecture du cours de bitcoin et cela sur une vision longue terme.
Utile pour ceux qui veulent voir les choses simplement, typiquement faire un DCA intelligent en fonction du risque.
À la base j'ai utilisé ce script comme un bac à sable pour comprendre puis tester l'utilité de plusieurs indicateurs, et développer mes compétences PineScript, mais finalement l'output Risk Indicateur me semble pertinent donc autant le partager.
UTILISATION :
Les indicateurs sélectionnés sont ceux qui permettent selon moi d'avoir les meilleurs point bas de marché, mais l'idée ici est que chacun puisse essayer et utiliser n'importe quel ensemble d'indicateur en fonction de ces préférences (poster en commentaire si vous trouvez une configuration pertinente)
La plupart des inputs indicateurs sont paramétrables. Et certains ne sont pas pris en compte dans le calcul du Risk indicateur car je les estime non pertinent, ce script est aussi un essai plus qu'une version finale.
NOTES :
Si vous avez la moindre idée d'ajout d'indicateur, modification, critique, bug trouvé : partagez-les, c'est apprécié !
à l'avenir je créerais un autre Risk indicator plus polyvalent qui ne sera pas focalisé sur bitcoin en weekly. (cet indicateur est tout de même utilisable sur d'autre actif et timeframe)
REMERCIEMENT :
à Benjamin Cowen pour m'avoir inspiré avec son Bitcoin Risk metric
à Lazybear pour son Wavetrend Indicator et globalement tout les scripts qu'il partage
à Mabonyi pour son script Bitcoin Logarithmic Growth Curves & Zones
à VuManChu pour son VMC Cypher B Divergence
à l'équipe Trading view pour avoir développé TV et PineScript
Et à toute la communauté pour tous les codes publiés qui m'ont permis de progresser et de créer ce script
72s Strat: Backtesting Adaptive HMA+ pt.1This is a follow up to my previous publication of Adaptive HMA+ few months ago, as a mean to provide some kind of initial backtesting tools. Which can be use to explore many possible strategies, optimise its settings to better conform user's pair/tf, and hopefully able to help tweaking your general strategy.
If you haven't read the study or use the indicator, kindly go here first to get the overall idea.
The first strategy introduce in this backtest is one most basic already described in the study; buy/sell is when movement is there and everything is on the right side; When RSI has turned to other side, we can use it as exit point (if in profit of course, else just let it hit our TP/SL, why would we exit before profit). Also, base on RSI when we make entry, we can further differentiate type of signals. --Please check all comments in code directly where the signals , entries , and exits section are.
Second additional strategy to check; is when we also use second faster Adaptive HMA+ for exit. So this is like a double orders on a signal but with different exit-rule (/more on this on snapshots below). Alternatively, you can also work the code so to only use this type of exit.
There's also an additional feature which you can enable its visuals, the Distance Zone , is to help measuring price distance to our xHMA+. It's just a simple atr based envelope really, I already put the sample code in study's comment section, but better gonna update it there directly for non-coder too, after this.
In this sample I use Lot for order quantity size just because that's what I use on my broker. Also what few friends use while we forward-testing it since the study is published, so we also checked/compared each profit/loss report by real number. To use default or other unit of measurement, change the entry code accordingly.
If you change your order size, you should also change the commission in Properties Tab. My broker commission is 5 USD per order/lot, so in there with example order size 0.1 lot I put commission 0.5$ per order (I'll put 2.5$ for 0.5 lot, 10$ for 2 lot, and so on). Crypto usually has higher charge. --It is important that you should fill it base on your broker.
SETTINGS
I'm trying to keep it short. Please explore it further again. (Beginner should also first get acquaintance with terms use here.)
ORDERS:
Base Minimum Profit Before Exit:
The number is multiplier of ongoing ATR. Means that when basic exit condition is met, algo will check whether you're already in minimum profit or not, if not, let it still run to TP or SL, or until it meets subsequent exit condition, then it will check again.
Default Target Profit:
Multiplier of ATR at signal. If reached before any eligible exit condition is met, exit TP.
Base StopLoss Point:
You can change directly in code to use other like ATR Trailing SL, fix percent SL, or whatever. In the sample, 4 options provided.
Maximum StopLoss:
This is like a safety-net, that if at some point your chosen SL point from input above happens to be exceeding this maximum input that you can tolerate, then this max point is the one will be use as SL.
Activate 2nd order...:
The additional doubling of certain buy/sell with different exits as described above. If enable, you should also set pyramiding to at least: 2. If not, it does nothing.
ADAPTIVE HMA+ PERIOD
Many users already have their own settings for these. So in here I only sample the default as first presented in the study. Make it to your adaptive.
MARKET MOVEMENT
(1) Now you can check in realtime how much slope degree is best to define your specific pair/tf is out of congestion (yellow) area. And (2) also able to check directly what ATR lengths are more suitable defining your pair's volatility.
DISTANCE ZONE
Distance Multiplier. Each pair/tf has its own best distance zone (in xHMA+ perspective). The zone also determine whether a signal should appear or not. (Or what type of signal, if you wanna go more detail in constructing your strategy)
USAGE
(Provided you already have your own comfortable settings for minimum-maximum period of Adaptive HMA+. Best if you already have backtested it manually too and/or apply as an add-on to your working strategy)
1. In our experiences, first most important to define is both elements in the Market Movement Settings . These also tend to be persistent for whole season since it's kinda describing that pair/tf overall behaviour. Don't worry if you still get a low Profit Factor here, but by tweaking you should start to see positive changes in one of Max Drawdown and Net Profit, or Percent Profitable.
2. Afterwards, find your pair/tf Distance Zone . When optimising this, what we seek is just a "not to bad" equity curves to start forming. At least Max Drawdown should lessen more. Doesn't have to be great already, but should be better, no red in Net Profit.
3. Then go manage the "Trailing Minimum Profit", TP, SL, and max SL.
4. Repeat 1,2,3. 👻
5. Manage order size, commission, and/or enable double-order (need pyramiding) if you like. Check if your equity can handle max drawdown before margin call.
6. After getting an acceptable backtest result, go to List of Trades tab and find the biggest loss or when many sequencing loss in a row happened. Click on it to go to exact point on chart, observe why the signal failed and get at least general idea how it can be prevented . The rest is yours, you should know your pair/tf more than other.
You can also re-explore your minimum-maximum period for both Major and minor xHMA+.
Keep in mind that all numbers in Setting are conceptually in a form of range . You don't want to get superb equity curves but actually a "fragile" , means one can easily turn it to disaster just by changing only a fraction in one/two of the setting.
---
If you just wanna test the strength of the indicator alone, you can disable "Use StopLoss" temporarily while optimising settings.
Using no SL might be tempting in overall result data in some cases, but NOTE: It is not recommended to not using SL, don't forget that we deliberately enter when it's in high volatility. If want to add flexibility or trading for long-term, just maximise your SL. ie.: chose SL Point>ATR only and set it maximum. (Check your max drawdown after this).
I think this is quite important specially for beginners, so here's an example; Hypothetically in below scenario, because of some settings, the buy order after the loss sell signal didn't appear. Let's say if our initial capital only 1000$ using leverage and order size 0,5 lot (risky position sizing already), moreover if this happens at the beginning of your trading season, that's half of account gone already in one trade . Your max SL should've made you exit after that pumping bar.
The Trailing Minimum Profit is actually look like this. Search in the code if you want to plot it. I just don't like too many lines on chart.
To maximise profit we can try enabling double-order. The only added rule coded is: RSI should rising when buy and falling when sell. 2nd signal will appears above or below default buy/sell signal. (Of course it's also prone to double-loss, re-check your max drawdown after. Profit factor play its part in here for a long run). Snapshot in comparison:
Two default sell signals on left closed at RSI exit, the additional sell signal closed later on when price crossover minor xHMA+. On buy side, price haven't met our minimum profit when first crossunder minor xHMA+. If later on we hit SL on this "+buy" signal, at least we already profited from default buy signal. You can also consider/treat this as multiple TP points.
For longer-term trading, what you need to maximise is the Minimum Profit , so it won't exit whenever an exit condition happened, it can happen several times before reaching minimum profit. Hopefully this snapshot can explain:
Notice in comparison default sell and buy signal now close in average after 3 days. What's best is when we also have confirmation from higher TF. It's like targeting higher TF by entering from smaller TF.
As also mention in the study, we can still experiment via original HMA by putting same value for minimum-maximum period setting. This is experimental EU 1H with Major xHMA+: 144-144, Flat market 13, Distance multiplier 3.6, with 2nd order activated.
Kiwi was a bit surprising for me. It's flat market is effectively below 6, with quite far distance zone of 3.5. Probably because I'm using big numbers in adaptive period.
---
The result you see in strategy tester report below for EURUSD 15m is using just default settings you see in code, as follow:
0,1 lot for each order (which is the smallest allowed by my broker).
No pyramiding. Commission: 0.5 usd per order. Slippage: 3
Opening position is only using basic strategy #1 (RSI exit). Additional exit not activated.
Minimum Profit: 1. TP: 3.
SL use: Half-distance zone. Max SL: 4.5.
Major xHMA+: 172-233. minor xHMA+: 89-121
Distance Zone Multiplier: 2.7
RSI: Standard 14.
(From our forward-testing, the difference we get from net profit is because of the spread, our entry isn't exactly at the close/open price. Not so much though, but not the same. If somebody can direct me to any example where we can code our entry via current bid/ask price, that would be awesome!)
It's already a long post (sorry), think I'm gonna pause here. Check out the code :)
---
DISCLAIMER: Past performance is no guarantee of future results , and so on.. you know the drill ;)
Please read whole description first before using, don't take 1-2 paragraph and claim it's the whole logic, you are responsible of your own actions and understanding.
Bear Market Probability Model# Bear Market Probability Model: A Multi-Factor Risk Assessment Framework
The Bear Market Probability Model represents a comprehensive quantitative framework for assessing systemic market risk through the integration of 13 distinct risk factors across four analytical categories: macroeconomic indicators, technical analysis factors, market sentiment measures, and market breadth metrics. This indicator synthesizes established financial research methodologies to provide real-time probabilistic assessments of impending bear market conditions, offering institutional-grade risk management capabilities to retail and professional traders alike.
## Theoretical Foundation
### Historical Context of Bear Market Prediction
Bear market prediction has been a central focus of financial research since the seminal work of Dow (1901) and the subsequent development of technical analysis theory. The challenge of predicting market downturns gained renewed academic attention following the market crashes of 1929, 1987, 2000, and 2008, leading to the development of sophisticated multi-factor models.
Fama and French (1989) demonstrated that certain financial variables possess predictive power for stock returns, particularly during market stress periods. Their three-factor model laid the groundwork for multi-dimensional risk assessment, which this indicator extends through the incorporation of real-time market microstructure data.
### Methodological Framework
The model employs a weighted composite scoring methodology based on the theoretical framework established by Campbell and Shiller (1998) for market valuation assessment, extended through the incorporation of high-frequency sentiment and technical indicators as proposed by Baker and Wurgler (2006) in their seminal work on investor sentiment.
The mathematical foundation follows the general form:
Bear Market Probability = Σ(Wi × Ci) / ΣWi × 100
Where:
- Wi = Category weight (i = 1,2,3,4)
- Ci = Normalized category score
- Categories: Macroeconomic, Technical, Sentiment, Breadth
## Component Analysis
### 1. Macroeconomic Risk Factors
#### Yield Curve Analysis
The inclusion of yield curve inversion as a primary predictor follows extensive research by Estrella and Mishkin (1998), who demonstrated that the term spread between 3-month and 10-year Treasury securities has historically preceded all major recessions since 1969. The model incorporates both the 2Y-10Y and 3M-10Y spreads to capture different aspects of monetary policy expectations.
Implementation:
- 2Y-10Y Spread: Captures market expectations of monetary policy trajectory
- 3M-10Y Spread: Traditional recession predictor with 12-18 month lead time
Scientific Basis: Harvey (1988) and subsequent research by Ang, Piazzesi, and Wei (2006) established the theoretical foundation linking yield curve inversions to economic contractions through the expectations hypothesis of the term structure.
#### Credit Risk Premium Assessment
High-yield credit spreads serve as a real-time gauge of systemic risk, following the methodology established by Gilchrist and Zakrajšek (2012) in their excess bond premium research. The model incorporates the ICE BofA High Yield Master II Option-Adjusted Spread as a proxy for credit market stress.
Threshold Calibration:
- Normal conditions: < 350 basis points
- Elevated risk: 350-500 basis points
- Severe stress: > 500 basis points
#### Currency and Commodity Stress Indicators
The US Dollar Index (DXY) momentum serves as a risk-off indicator, while the Gold-to-Oil ratio captures commodity market stress dynamics. This approach follows the methodology of Akram (2009) and Beckmann, Berger, and Czudaj (2015) in analyzing commodity-currency relationships during market stress.
### 2. Technical Analysis Factors
#### Multi-Timeframe Moving Average Analysis
The technical component incorporates the well-established moving average convergence methodology, drawing from the work of Brock, Lakonishok, and LeBaron (1992), who provided empirical evidence for the profitability of technical trading rules.
Implementation:
- Price relative to 50-day and 200-day simple moving averages
- Moving average convergence/divergence analysis
- Multi-timeframe MACD assessment (daily and weekly)
#### Momentum and Volatility Analysis
The model integrates Relative Strength Index (RSI) analysis following Wilder's (1978) original methodology, combined with maximum drawdown analysis based on the work of Magdon-Ismail and Atiya (2004) on optimal drawdown measurement.
### 3. Market Sentiment Factors
#### Volatility Index Analysis
The VIX component follows the established research of Whaley (2009) and subsequent work by Bekaert and Hoerova (2014) on VIX as a predictor of market stress. The model incorporates both absolute VIX levels and relative VIX spikes compared to the 20-day moving average.
Calibration:
- Low volatility: VIX < 20
- Elevated concern: VIX 20-25
- High fear: VIX > 25
- Panic conditions: VIX > 30
#### Put-Call Ratio Analysis
Options flow analysis through put-call ratios provides insight into sophisticated investor positioning, following the methodology established by Pan and Poteshman (2006) in their analysis of informed trading in options markets.
### 4. Market Breadth Factors
#### Advance-Decline Analysis
Market breadth assessment follows the classic work of Fosback (1976) and subsequent research by Brown and Cliff (2004) on market breadth as a predictor of future returns.
Components:
- Daily advance-decline ratio
- Advance-decline line momentum
- McClellan Oscillator (Ema19 - Ema39 of A-D difference)
#### New Highs-New Lows Analysis
The new highs-new lows ratio serves as a market leadership indicator, based on the research of Zweig (1986) and validated in academic literature by Zarowin (1990).
## Dynamic Threshold Methodology
The model incorporates adaptive thresholds based on rolling volatility and trend analysis, following the methodology established by Pagan and Sossounov (2003) for business cycle dating. This approach allows the model to adjust sensitivity based on prevailing market conditions.
Dynamic Threshold Calculation:
- Warning Level: Base threshold ± (Volatility × 1.0)
- Danger Level: Base threshold ± (Volatility × 1.5)
- Bounds: ±10-20 points from base threshold
## Professional Implementation
### Institutional Usage Patterns
Professional risk managers typically employ multi-factor bear market models in several contexts:
#### 1. Portfolio Risk Management
- Tactical Asset Allocation: Reducing equity exposure when probability exceeds 60-70%
- Hedging Strategies: Implementing protective puts or VIX calls when warning thresholds are breached
- Sector Rotation: Shifting from growth to defensive sectors during elevated risk periods
#### 2. Risk Budgeting
- Value-at-Risk Adjustment: Incorporating bear market probability into VaR calculations
- Stress Testing: Using probability levels to calibrate stress test scenarios
- Capital Requirements: Adjusting regulatory capital based on systemic risk assessment
#### 3. Client Communication
- Risk Reporting: Quantifying market risk for client presentations
- Investment Committee Decisions: Providing objective risk metrics for strategic decisions
- Performance Attribution: Explaining defensive positioning during market stress
### Implementation Framework
Professional traders typically implement such models through:
#### Signal Hierarchy:
1. Probability < 30%: Normal risk positioning
2. Probability 30-50%: Increased hedging, reduced leverage
3. Probability 50-70%: Defensive positioning, cash building
4. Probability > 70%: Maximum defensive posture, short exposure consideration
#### Risk Management Integration:
- Position Sizing: Inverse relationship between probability and position size
- Stop-Loss Adjustment: Tighter stops during elevated risk periods
- Correlation Monitoring: Increased attention to cross-asset correlations
## Strengths and Advantages
### 1. Comprehensive Coverage
The model's primary strength lies in its multi-dimensional approach, avoiding the single-factor bias that has historically plagued market timing models. By incorporating macroeconomic, technical, sentiment, and breadth factors, the model provides robust risk assessment across different market regimes.
### 2. Dynamic Adaptability
The adaptive threshold mechanism allows the model to adjust sensitivity based on prevailing volatility conditions, reducing false signals during low-volatility periods and maintaining sensitivity during high-volatility regimes.
### 3. Real-Time Processing
Unlike traditional academic models that rely on monthly or quarterly data, this indicator processes daily market data, providing timely risk assessment for active portfolio management.
### 4. Transparency and Interpretability
The component-based structure allows users to understand which factors are driving risk assessment, enabling informed decision-making about model signals.
### 5. Historical Validation
Each component has been validated in academic literature, providing theoretical foundation for the model's predictive power.
## Limitations and Weaknesses
### 1. Data Dependencies
The model's effectiveness depends heavily on the availability and quality of real-time economic data. Federal Reserve Economic Data (FRED) updates may have lags that could impact model responsiveness during rapidly evolving market conditions.
### 2. Regime Change Sensitivity
Like most quantitative models, the indicator may struggle during unprecedented market conditions or structural regime changes where historical relationships break down (Taleb, 2007).
### 3. False Signal Risk
Multi-factor models inherently face the challenge of balancing sensitivity with specificity. The model may generate false positive signals during normal market volatility periods.
### 4. Currency and Geographic Bias
The model focuses primarily on US market indicators, potentially limiting its effectiveness for global portfolio management or non-USD denominated assets.
### 5. Correlation Breakdown
During extreme market stress, correlations between risk factors may increase dramatically, reducing the model's diversification benefits (Forbes and Rigobon, 2002).
## References
Akram, Q. F. (2009). Commodity prices, interest rates and the dollar. Energy Economics, 31(6), 838-851.
Ang, A., Piazzesi, M., & Wei, M. (2006). What does the yield curve tell us about GDP growth? Journal of Econometrics, 131(1-2), 359-403.
Baker, M., & Wurgler, J. (2006). Investor sentiment and the cross‐section of stock returns. The Journal of Finance, 61(4), 1645-1680.
Baker, S. R., Bloom, N., & Davis, S. J. (2016). Measuring economic policy uncertainty. The Quarterly Journal of Economics, 131(4), 1593-1636.
Barber, B. M., & Odean, T. (2001). Boys will be boys: Gender, overconfidence, and common stock investment. The Quarterly Journal of Economics, 116(1), 261-292.
Beckmann, J., Berger, T., & Czudaj, R. (2015). Does gold act as a hedge or a safe haven for stocks? A smooth transition approach. Economic Modelling, 48, 16-24.
Bekaert, G., & Hoerova, M. (2014). The VIX, the variance premium and stock market volatility. Journal of Econometrics, 183(2), 181-192.
Brock, W., Lakonishok, J., & LeBaron, B. (1992). Simple technical trading rules and the stochastic properties of stock returns. The Journal of Finance, 47(5), 1731-1764.
Brown, G. W., & Cliff, M. T. (2004). Investor sentiment and the near-term stock market. Journal of Empirical Finance, 11(1), 1-27.
Campbell, J. Y., & Shiller, R. J. (1998). Valuation ratios and the long-run stock market outlook. The Journal of Portfolio Management, 24(2), 11-26.
Dow, C. H. (1901). Scientific stock speculation. The Magazine of Wall Street.
Estrella, A., & Mishkin, F. S. (1998). Predicting US recessions: Financial variables as leading indicators. Review of Economics and Statistics, 80(1), 45-61.
Fama, E. F., & French, K. R. (1989). Business conditions and expected returns on stocks and bonds. Journal of Financial Economics, 25(1), 23-49.
Forbes, K. J., & Rigobon, R. (2002). No contagion, only interdependence: measuring stock market comovements. The Journal of Finance, 57(5), 2223-2261.
Fosback, N. G. (1976). Stock market logic: A sophisticated approach to profits on Wall Street. The Institute for Econometric Research.
Gilchrist, S., & Zakrajšek, E. (2012). Credit spreads and business cycle fluctuations. American Economic Review, 102(4), 1692-1720.
Harvey, C. R. (1988). The real term structure and consumption growth. Journal of Financial Economics, 22(2), 305-333.
Kahneman, D., & Tversky, A. (1979). Prospect theory: An analysis of decision under risk. Econometrica, 47(2), 263-291.
Magdon-Ismail, M., & Atiya, A. F. (2004). Maximum drawdown. Risk, 17(10), 99-102.
Nickerson, R. S. (1998). Confirmation bias: A ubiquitous phenomenon in many guises. Review of General Psychology, 2(2), 175-220.
Pagan, A. R., & Sossounov, K. A. (2003). A simple framework for analysing bull and bear markets. Journal of Applied Econometrics, 18(1), 23-46.
Pan, J., & Poteshman, A. M. (2006). The information in option volume for future stock prices. The Review of Financial Studies, 19(3), 871-908.
Taleb, N. N. (2007). The black swan: The impact of the highly improbable. Random House.
Whaley, R. E. (2009). Understanding the VIX. The Journal of Portfolio Management, 35(3), 98-105.
Wilder, J. W. (1978). New concepts in technical trading systems. Trend Research.
Zarowin, P. (1990). Size, seasonality, and stock market overreaction. Journal of Financial and Quantitative Analysis, 25(1), 113-125.
Zweig, M. E. (1986). Winning on Wall Street. Warner Books.
Parsifal.Swing.TrendScoreThe Parsifal.Swing.TrendScore indicator is a module within the Parsifal Swing Suite, which includes a set of swing indicators such as:
• Parsifal Swing TrendScore
• Parsifal Swing Composite
• Parsifal Swing RSI
• Parsifal Swing Flow
Each module serves as an indicator facilitating judgment of the current swing state in the underlying market.
________________________________________
Background
Market movements typically follow a time-varying trend channel within which prices oscillate. These oscillations—or swings—within the trend are inherently tradable.
They can be approached:
• One-sidedly, aligning with the trend (generally safer), or
• Two-sidedly, aiming to profit from mean reversions as well.
Note: Mean reversions in strong trends often manifest as sideways consolidations, making one-sided trades more stable.
________________________________________
The Parsifal Swing Suite
The modules aim to provide additional insights into the swing state within a trend and offer various trigger points to assist with entry decisions.
All modules in the suite act as weak oscillators, meaning they fluctuate within a range but are not bounded like true oscillators (e.g., RSI, which is constrained between 0% and 100%).
________________________________________
The Parsifal.Swing.TrendScore – Specifics
The Parsifal.Swing.TrendScore module combines short-term trend data with information about the current swing state, derived from raw price data and classical technical indicators. It provides an indication of how well the short-term trend aligns with the prevailing swing, based on recent market behavior.
________________________________________
How Swing.TrendScore Works
The Swing.TrendScore calculates a swing score by collecting data within a bin (i.e., a single candle or time bucket) that signals an upside or downside swing. These signals are then aggregated together with insights from classical swing indicators.
Additionally, it calculates a short-term trend score using core technical signals, including:
• The Z-score of the price's distance from various EMAs
• The slope of EMAs
• Other trend-strength signals from additional technical indicators
These two components—the swing score and the trend score—are then combined to form the Swing.TrendScore indicator, which evaluates the short-term trend in context with swing behavior.
________________________________________
How to Interpret Swing.TrendScore
The trend component enhances Swing.TrendScore’s ability to provide stronger signals when the short-term trend and swing state align.
It can also override the swing score; for example, even if a mean reversion appears to be forming, a dominant short-term trend may still control the market behavior.
This makes Swing.TrendScore particularly valuable for:
• Short-term trend-following strategies
• Medium-term swing trading
Unlike typical swing indicators, Swing.TrendScore is designed to respond more to medium-term swings rather than short-lived fluctuations.
________________________________________
Behavior and Chart Representation
The Swing.TrendScore indicator fluctuates within a range, as most of its components are range-bound (though Z-score components may technically extend beyond).
• Historically high or low values may suggest overbought or oversold conditions
• The chart displays:
o A fast curve (orange)
o A slow curve (white)
o A shaded background representing the market state
• Extreme values followed by curve reversals may signal a developing mean reversion
________________________________________
TrendScore Background Value
The Background Value reflects the combined state of the short-term trend and swing:
• > 0 (shaded green) → Bullish mode: swing and short-term trend both upward
• < 0 (shaded red) → Bearish mode: swing and short-term trend both downward
• The absolute value represents the confidence level in the market mode
Notably, the Background Value can remain positive during short downswings if the short-term trend remains bullish—and vice versa.
________________________________________
How to Use the Parsifal.Swing.TrendScore
Several change points can act as entry triggers or aids:
• Fast Trigger: change in slope of the fast signal curve
• Trigger: fast line crosses slow line or the slope of the slow signal changes
• Slow Trigger: change in sign of the Background Value
Examples of these trigger points are illustrated in the accompanying chart.
Additionally, market highs and lows aligning with the swing indicator values may serve as pivot points in the evolving price process.
________________________________________
As always, this indicator should be used in conjunction with other tools and market context in live trading.
While it provides valuable insight and potential entry points, it does not predict future price action.
Instead, it reflects recent tendencies and should be used judiciously.
________________________________________
Extensions
The aggregation of information—whether derived from bins or technical indicators—is currently performed via simple averaging. However, this can be modified using alternative weighting schemes, based on:
• Historical performance
• Relevance of the data
• Specific market conditions
Smoothing periods used in calculations are also modifiable. In general, the EMAs applied for smoothing can be extended to reflect expectations based on relevance-weighted probability measures.
Since EMAs inherently give more weight to recent data, this allows for adaptive smoothing.
Additionally, EMAs may be further extended to incorporate negative weights, akin to wavelet transform techniques.
Credit Spread Monitor: HY & IG vs US10Y📉 Credit Spread Monitor: HY & IG vs US10Y
This indicator provides a dynamic and visual way to monitor credit spreads relative to the US Treasury benchmark. By comparing High Yield (HY) and Investment Grade (IG) corporate bond yields to the 10-Year US Treasury Yield (US10Y), it helps assess market stress, investor risk appetite, and potential macro turning points.
🔍 What It Does
-Calculates credit spreads:
HY Spread = BAMLH0A0HYM2EY − US10Y
IG Spread = BAMLC0A0CMEY − US10Y
-Detects macro risk regimes using statistical thresholds and yield curve signals:
🔴 HY Spread > +2σ → Potential financial stress
🟠 Inverted Yield Curve + HY Spread > 2% → Recession risk
🟢 HY Spread < 1.5% → Risk-on environment
-Visually highlights conditions with intuitive background colors for fast decision-making.
📊 Data Sources Explained
🔴 High Yield (HY): BAMLH0A0HYM2EY → ICE BofA US High Yield Index Effective Yield
🔵 Investment Grade (IG): BAMLC0A0CMEY → ICE BofA US Corporate Index Effective Yield
⚪ Treasury 10Y: US10Y → 10-Year US Treasury Yield
⚪ Treasury 2Y: US02Y → 2-Year US Treasury Yield (used to detect curve inversion)
✅ This Indicator Is Ideal For:
Macro traders looking to anticipate economic inflection points
Portfolio managers monitoring systemic risk or credit cycles
Fixed-income analysts tracking the cost of corporate borrowing
ETF/Asset allocators identifying shifts between risk-on and risk-off environments
🧠 Why It's Useful
This script helps visualize how tight or loose credit conditions are relative to government benchmarks. Since HY spreads typically widen before major downturns, this tool can provide early warning signals. Similarly, compressed spreads may indicate overheating or complacency in risk markets.
🛠️ Practical Use Case:
You’re managing a multi-asset portfolio. The HY spread jumps above +2σ while the yield curve remains inverted. You decide to reduce exposure to equities and high-yield bonds and rotate into cash or Treasuries as recession risk rises.
📎 Additional Notes
Sourced from FRED (Federal Reserve Economic Data) and TradingView’s bond feeds.
Designed to work best on daily resolution, using open prices to ensure consistency across series with different update timings.
This script is original, not based on built-in or public templates, and intended to offer educational, statistical, and visual insights for serious market participants.
Parsifal.Swing.CompositeThe Parsifal.Swing.Composite indicator is a module within the Parsifal Swing Suite, which includes a set of swing indicators such as:
• Parsifal Swing TrendScore
• Parsifal Swing Composite
• Parsifal Swing RSI
• Parsifal Swing Flow
Each module serves as an indicator facilitating judgment of the current swing state in the underlying market.
________________________________________
Background
Market movements typically follow a time-varying trend channel within which prices oscillate. These oscillations—or swings—within the trend are inherently tradable.
They can be approached:
• One-sidedly, aligning with the trend (generally safer), or
• Two-sidedly, aiming to profit from mean reversions as well.
Note: Mean reversions in strong trends often manifest as sideways consolidations, making one-sided trades more stable.
________________________________________
The Parsifal Swing Suite
The modules aim to provide additional insights into the swing state within a trend and offer various trigger points to assist with entry decisions.
All modules in the suite act as weak oscillators, meaning they fluctuate within a range but are not bounded like true oscillators (e.g., RSI, which is constrained between 0% and 100%).
________________________________________
The Parsifal.Swing.Composite – Specifics
This module consolidates multiple insights into price swing behavior, synthesizing them into an indicator reflecting the current swing state.
It employs layered bagging and smoothing operations based on standard price inputs (OHLC) and classical technical indicators. The module integrates several slightly different sub-modules.
Process overview:
1. Per candle/bin, sub-modules collect directional signals (up/down), with each signal casting a vote.
2. These votes are aggregated via majority counting (bagging) into a single bin vote.
3. Bin votes are then smoothed, typically with short-term EMAs, to create a sub-module vote.
4. These sub-module votes are aggregated and smoothed again to generate the final module vote.
The final vote is a score indicating the module’s assessment of the current swing state. While it fluctuates in a range, it's not a true oscillator, as most inputs are normalized via Z-scores (value divided by standard deviation over a period).
• Historically high or low values correspond to high or low quantiles, suggesting potential overbought or oversold conditions.
• The chart displays a fast (orange) and slow (white) curve against a solid background state.
• Extreme values followed by curve reversals may signal upcoming mean-reversions.
Background Value:
• Value > 0: shaded green → bullish mode
• Value < 0: shaded red → bearish mode
• The absolute value indicates confidence in the mode.
________________________________________
How to Use the Parsifal.Swing.Composite
Several change points in the indicator serve as potential entry triggers:
• Fast Trigger: change in slope of the fast curve
• Trigger: fast line crossing the slow line or change in the slow curve’s slope
• Slow Trigger: change in sign of the background value
These are illustrated in the introductory chart.
Additionally, market highs and lows aligned with swing values may act as pivot points, support, or resistance levels for evolving price processes.
________________________________________
As always, supplement this indicator with other tools and market information. While it provides valuable insights and potential entry points, it does not predict future prices. It reflects recent tendencies and should be used judiciously.
________________________________________
Extensions
All modules in the Parsifal Swing Suite are simple yet adaptable, whether used individually or in combination.
Customization options:
• Weights in EMAs for smoothing are adjustable
• Bin vote aggregation (currently via sum-of-experts) can be modified
• Alternative weighting schemes can be tested
Advanced options:
• Bagging weights may be historical, informational, or relevance-based
• Selection algorithms (e.g., ID3, C4.5, CAT) could replace the current bagging approach
• EMAs may be generalized into expectations relative to relevance-based probability
• Negative weights (akin to wavelet transforms) can be incorporated
SMA Strategy Builder: Create & Prove Profitability📄 Pine Script Strategy Description (For Publishing on TradingView)
🎯 Strategy Title:
SMA Strategy Builder: Create & Prove Profitability
✨ Description:
This tool is designed for traders who want to build, customize, and prove their own SMA-based trading strategies. The strategy tracks capital growth in real-time, providing clear evidence of profitability after each trade. Users can adjust key parameters such as SMA period, take profit levels, and initial capital, making it a flexible solution for backtesting and strategy validation.
🔍 Key Features:
✅ SMA-Based Logic:
Core trading logic revolves around the Simple Moving Average (SMA).
SMA period is fully adjustable to suit various trading styles.
🎯 Customizable Take Profit (TP):
User-defined TP percentages per position.
TP line displayed as a Step Line with Breaks for clear segmentation.
Visual 🎯TP label for quick identification of profit targets.
💵 Capital Tracking (Proof of Profitability):
Initial capital is user-defined.
Capital balance updates after each closed trade.
Shows both absolute profit/loss and percentage changes for every position.
Darker green profit labels for better readability and dark red for losses.
📈 Capital Curve (Performance Visualization):
Capital growth curve available (hidden by default, can be enabled via settings).
📏 Dynamic Label Positioning:
Label positions adjust dynamically based on the price range.
Ensures consistent visibility across low and high-priced assets.
⚡ How It Works:
Long Entry:
Triggered when the price crosses above the SMA.
TP level is calculated as a user-defined percentage above the entry price.
Short Entry:
Triggered when the price crosses below the SMA.
TP level is calculated as a user-defined percentage below the entry price.
TP Execution:
Positions close immediately once the TP level is reached (no candle close confirmation needed).
🔔 Alerts:
🟩 Long Signal Alert: When the price crosses above the SMA.
🟥 Short Signal Alert: When the price crosses below the SMA.
🎯 TP Alert: When the TP target is reached.
⚙️ Customization Options:
📅 SMA Period: Choose the moving average period that best fits your strategy.
🎯 Take Profit (%): Adjust TP percentages for flexible risk management.
💵 Initial Capital: Set the starting capital for realistic backtesting.
📈 Capital Curve Toggle: Enable or disable the capital curve to track overall performance.
🌟 Why Use This Tool?
🔧 Flexible Strategy Creation: Adjust core parameters and create tailored SMA-based strategies.
📈 Performance Proof: Capital tracking acts as real proof of profitability after each trade.
🎯 Immediate TP Execution: No waiting for candle closures; profits lock in as soon as targets are hit.
💹 Comprehensive Performance Insights: Percentage-based and absolute capital tracking with dynamic visualization.
🏦 Clean Visual Indicators: Strategy insights made clear with dynamic labeling and adjustable visuals.
⚠️ Disclaimer:
This script is provided for educational and informational purposes only. Trading financial instruments carries risk, and past performance does not guarantee future results. Always perform your own due diligence before making any trading decisions.
Intrabar DistributionThe Intrabar Distribution publication is an extension of the Intrabar BoxPlot publication. Besides a boxplot, it showcases price and volume distribution using intrabar Lower Timeframe (LTF) values (close) which can be displayed on the chart or in a separate pane.
🔶 USAGE
Intrabar Distribution has several features, users can display:
Recent candle for comparison against the other features
Boxplot of recent candle
Price distribution (optionally displayed as a curve)
Volume distribution
🔹 Recent candle / Boxplot
The middle 50% intrabar close values (Interquartile range, or IQR) are shown as a box, where the upper limit is percentile 75 (p75), and the lower limit is percentile 25 (p25). The dashed lines show the addition/subtraction of 1.5*IQR. All values out of range are considered outliers. They are displayed as white dots within the IQR*1.5 range or white X's when beyond the IQR*3 range (extreme outliers).
By showing the middle 50% intrabar values through a box, we can more easily see where the intrabar activity is mainly situated.
Note in the example above an upward-directed candle with a negative volume delta, displayed as a red box and dot (see further).
As seen in the following example, compared against the recent candle (grey candle at the left), most of the intrabar activity lies just beneath the opening price.
Note that results will be more accurate when more data is available, which can be done by making the difference between the current timeframe and the intrabar timeframe large enough.
🔹 Price / Volume distribution
The price and volume distribution can be helpful for highlighting areas of interest.
Here, we can see two areas where intrabar closing prices are mainly positioned.
The following example shows three successive bars. The recent bar is displayed on the left side, together with the volume distribution. The boxplot and price distribution are displayed on the right.
You can see the difference between volume and price distribution.
At the first bar, most price activity is at the top, while most of the volume was generated at the bottom; in other words, the price got briefly in the bottom region, with high volume before it returned.
At the second bar, price and volume are relatively equally distributed, which fits for indecisiveness.
The third bar shows more volume at a higher region; most intrabar closing prices are above the closing price.
Following example shows the same with 'Curve shaped' enabled (Settings: 'Price Distribution')
When 'Curve shaped' is enabled, lines/labels are shown with the standard deviation distance.
A blue 'guide line' can be enabled for easier interpretation.
🔹 Volume Delta
When there is a discrepancy between the delta volume and direction of the candle, this will be displayed as follows:
Red candle: when the sum of the volume of green intrabars is higher than the sum of the volume of red intrabars, the 'mean dot' will be coloured green.
Green candle: when the sum of the volume of red intrabars is higher than the sum of the volume of green intrabars, the 'mean dot' will be coloured red.
🔶 DETAILS
The intrabar values are sorted and split in parts/sections. The number of values in each section is displayed as a white line
The same principle applies to volume distribution, where the sum of volume per section is displayed as an orange area.
The boxplot displays several price values
Last close price
Highest / lowest intrabar close price
Median
p25 / p75
🔹 LTF settings
When 'Auto' is enabled (Settings, LTF), the LTF will be the nearest possible x times smaller TF than the current TF. When 'Premium' is disabled, the minimum TF will always be 1 minute to ensure TradingView plans lower than Premium don't get an error.
Examples with current Daily TF (when Premium is enabled):
500 : 3 minute LTF
1500 (default): 1 minute LTF
5000: 30 seconds LTF (1 minute if Premium is disabled)
🔶 SETTINGS
Location: Chart / Pane (when pane is opted, move the indicator to a separate pane as well)
Parts: divides the intrabar close values into parts/sections
Offset: offsets every drawing at once
Width: width of drawings, only applicable on "location: chart"
Label size: size of price labels
🔹 LTF
LTF: LTF setting
Auto + multiple: Adjusts the initial set LTF
Premium: Enable when your TradingView plan is Premium or higher
🔹 Current Bar
Display toggle + color setting
Offset: offsets only the 'Current Bar' drawing
🔹 Intrabar Boxplot
Display toggle + Colors, dependable on different circumstances.
Up: Price goes up, with more bullish than bearish intrabar volume.
Up-: Price goes up, with more bearish than bullish intrabar volume.
Down: Price goes down, with more bearish than bullish intrabar volume.
Down+: Price goes down, with more bullish than bearish intrabar volume.
Offset: offsets only the 'Boxplot' drawing
🔹 Price distribution
Display toggle + Color.
Curve Shaped
Guide Lines: Display 2 blue lines
Display Price: Show price of 'x' standard deviation
Offset: offsets only the 'Price distribution' drawing
Label size: size of price labels (standard deviation)
🔹 Volume distribution
Display toggle + Color.
Offset: offsets only the 'Volume distribution' drawing
🔹 Table
Show TF: Show intrabar Timeframe.
Textcolor
Size Table: Text Size
VIX Futures Spread StrategyThis script was an exercise in learning Pinescript and exploring the futures curve of the VIX in relation to SPY. Was deleted by TV, trying to republish it now with updated parameters for slippage and commission and a more detailed description.
"VIX Futures Spread Strategy" is a trading strategy that capitalizes on the spread between the 3-month VIX futures (VIX3M) and the spot VIX index. This strategy is based on the idea that the VIX futures spread can serve as a contrarian indicator of market sentiment, with extreme negative spreads potentially signaling oversold conditions and opportunities for long positions.
Ordinarily the VIX curve is in contango as futures contracts are priced at a premium to the current spot price and are used to hedge future uncertainty in the market. When the spot price of VIX spikes the curve can invert and enter backwardation; this strategy detects this condition and uses it as a trigger to open a long position in SPY. The spread going negative tends to correlate with excessive fear and uncertainty in the short term while expecting lower volatility in the long term, in this case 3 months out.
The strategy is designed to enter a long position when the VIX futures spread is negative and to exit the position when the spread rises above 3 -- when the curve is in contango again. The strategy employs a pyramiding approach, allowing up to 10 additional orders to be placed while the entry condition is met, with each order consisting of 10 contracts. This approach aims to maximize potential profits during periods of favorable market conditions.
In this strategy, the VIX futures spread is calculated as the difference between the 3-month VIX futures (VIX3M) and the spot VIX index. The spread is plotted as a histogram on the chart, with the zero line representing no spread, and horizontal lines at 0 and 3 indicating the entry and exit thresholds, respectively.
The strategy's backtesting settings use an initial capital of HKEX:10 ,000, a commission of 0.5% per trade, and a maximum of 10 pyramiding orders, and a slippage of 2 ticks.
Please note that this strategy is intended for educational purposes and should not be considered as financial advice. Before using this strategy in live trading, make sure to thoroughly test and optimize its parameters to suit your risk tolerance and specific trading conditions.
[blackcat] L2 Hann Ehanced DMILevel: 2
Background
Among the many indicators, it can be said that DMI is the only "super turning" indicator. This indicator can alone send out risk warning signals when extreme market conditions occur in the stock market, helping us to solve some problems.
If we can operate according to the instructions of DMI, firstly, we can avoid the mistake of buying stocks at the head. Secondly, in the process of falling fear of the market, we can follow the direction signal sent by DMI and catch every time on the way down. Opportunity to rebound to unwind.
If you look at the diagram of the DMI, you will think it is very complicated, because there are four lines in its diagram, and they are intertwined, and it is difficult to distinguish the complex signals in it. But don't worry about its complex structure, we will fully dissect this indicator.
Function
These four lines are: PDI, MDI, ADX and ADXR. The scale of the table is from 0-100, which means from very weak to very strong. The PDI curve and MDI curve on some software are called +DI curve and -DI curve , all have the same meaning.
PDI: Represents the position of multiple parties in the market.
In market movements, the higher the PDI, the stronger the current market. On the contrary, it is a weak market. The A-share market is easy to go to extremes. Therefore, we can see that in the past A-share market, the PDI sometimes fell to near zero, and at this time, it often indicated that a rebound and uptrend was about to start.
MDI: Represents the position of the bears in the market.
In the market movement, the higher the MDI goes, the weaker the current market is, and vice versa, it is a strong market. Before a big bull market comes, we can see the MDI drop to a position close to zero, and at this time, the bears in the market have no power to fight back.
The relationship between PDI and MDI:
In the operation of the market, PDI and MDI are intertwined with each other. If the PDI is above the MDI, the market at this time is a strong market. The MDI is above the PDI, which is a bear market. The closer the distance between the two, the market is in a stalemate of consolidation. On the contrary, the further apart the two lines are, the more obvious the unilateral nature of the market is, whether it is a bull market or a bear market. The so-called unilateral market means that there is no midway adjustment when it rises, and there is no rebound correction when it falls.
ADX: Fast steering pullback.
The difference between ADX and other analysis indicators is that whether it is rising or falling, as long as there is a unilateral market, it runs upwards, not like other indicators, the strong market runs upwards and the weak market runs downwards.
The thread is almost entwined with PDI and MDI in general market movement, which makes no sense at this time. However, once the market breaks out of the market and starts to go to extremes, whether the market is rising or falling, ADX will start to run upwards. At this time, ADX has a clear meaning, because DMI has begun to issue early warning of impending turn!
ADXR: slow pull back.
This line is matched to ADX and is a moving average of ADX values. When ADX goes up, ADXR goes up with it, just slower.
When a round of rapid decline ends, it usually needs to be corrected by a rebound, and ADX will take the lead in turning up. Once it crosses with ADXR, it is regarded as an effective breakthrough.
Numerical division. I set an input threshold for HEDMI, and users can set the optimal threshold to buy and sell according to different TFs.
When PDI crosses the threshold, no matter how strong the bull market is, we must beware of risks from happening at any time.
In order to distinguish more clearly, I slightly modified the formula of the system, and when this happens, the indicator will issue a green warning label, so as to avoid risks in time.
Comprehensive use of four lines:
If the four lines in the steering indicator DMI are intertwined below 50, it usually means that the market is in a state of mild consolidation at this time. The DMI indicator at this time is useless because it does not generate a strong pullback force. Don't worry about an unexpected turnaround in the market. As for the consolidation, it's not a turnaround, it's a breakout.
When PDI and MDI gradually separate, at this time, ADX and ADXR will also rise. At this time, the DIM that is usually messy like twine will be clearly separated. When rising, PDI rises along with ADX and ADXR, while MDI sinks weakly. On the contrary, when the market starts to fall, MDI will rise along with ADX and ADXR, and PDI will sink helplessly. At this time, the DMI will be like a "tiger's mouth", gradually opening its bloody mouth. The bigger the opening, the more lethal the bite.
Here comes a tactic, or technical trend, called double hooves, that is, PDI and MDI split, ADX and ADXR upward to produce golden forks, PDI and MDI are like the double front hooves of a horse, ADX and ADXR The golden fork is like the rear hooves of a steed ready to take off, and this trend of the four lines is like the four legs of a steed that is about to run.
If you think it is too complicated to look at DMI like this, then I can tell you the easiest way to judge, that is, just look at the PDI line. When the PDI line falls below 10, boldly buy the dip, because it is a dip, so you need to calculate the rebound At this time, combined with the golden section theory I often talk about, you can easily find the selling point by making the golden section of the downward trend for the previous trend.
This kind of bottom-hunting method uses the golden section theory, and basically there will be no losses. Remember that one thing is not to be greedy and strictly enforce discipline. This is bottom-hunting, and advancing with both hooves is chasing up. The two styles are different, and the operation styles are different. You also need to explore more in actual combat. Any kind of trick, if you practice it proficiently, it is a unique trick.
Remark
Hanning Window Enhanced DMI
Free and Open Source Indicator
Recession IndicatorThis script attempts to predict recessions four quarters ahead.
According to the New York Fed, "The yield curve—specifically, the spread between the interest rates on the ten-year Treasury
note and the three-month Treasury bill—is a valuable forecasting tool. It is simple to use
and significantly outperforms other financial and macroeconomic indicators in predicting
recessions two to six quarters ahead."
The paper offers Estimated Recession Probabilities Using the Yield Curve Spread:
Four Quarters Ahead
Recession Probability Value of Spread
(Percent) (Percentage Points)
5 1.21
10 0.76
15 0.46
20 0.22
25 0.02
30 -0.17
40 -0.50
50 -0.82
60 -1.13
70 -1.46
80 -1.85
90 -2.40
"Note: The yield curve spread is defined as the spread between the
interest rates on the ten-year Treasury note and the three-month
Treasury bill."
You can choose at which Recession Probability (percent) you want to display the signal (default value is 25%), as well as choose if you want to only display the signal at inversion (default) or at all times when the yield curve is inverted.
To use, just select your current timeframe from the menu.
Includes an option for repainting -- default value is true, meaning the script will repaint the current bar.
False = Not Repainting = Value for the current bar is not repainted, but all past values are offset by 1 bar.
True = Repainting = Value for the current bar is repainted, but all past values are correct and not offset by 1 bar.
In both cases, all of the historical values are correct, it is just a matter of whether you prefer the current bar to be realistically painted and the historical bars offset by 1, or the current bar to be repainted and the historical data to match their respective price bars.
As explained by TradingView,`f_security()` is for coders who want to offer their users a repainting/no-repainting version of the HTF data.
Right Sided Ricker Moving Average And The Gaussian DerivativesIn general gaussian related indicators are built by using the gaussian function in one way or another, for example a gaussian filter is built by using a truncated gaussian function as filter kernel (kernel refer to the set weights) and has many great properties, note that i say truncated because the gaussian function is not supposed to be finite. In general the gaussian function is represented by a symmetrical bell shaped curve, however the gaussian function is parametric, and the user might adjust the position of the peak as well as the width of the curve, an indicator using this parametric approach is the Arnaud Legoux moving average (ALMA) who posses a length parameter controlling the filter length, a peak parameter controlling the position of the peak of the gaussian function as well as a width parameter, those parameters can increase/decrease the lag and smoothness of the moving average output.
However what about the derivatives of the gaussian function ? We don't talk much about them and thats a pity because they are extremely interesting and have many great properties as well, therefore in this post i'll present a low lag moving average based on the modification of the 2nd order derivative of the gaussian function, i believe this post will be extremely informative and i hope you will enjoy reading it, if you are not a math person you can skip the introduction on gaussian derivatives and their properties used as filter kernel.
Gaussian Derivatives And The Ricker Wavelet
The notion of derivative is continuous, so we will stick with the term discrete derivative instead, which just refer to the rate of change in the function, we have a change function in pinescript, and we will be using it to show an approximation of the gaussian function derivatives.
Earlier i used the term 2nd order derivative, here the derivative order refer to the order of differentiation, that is the number of time we apply the change function. For example the 0 (zeroth) order derivative mean no differentiation, the 1st order derivative mean we use differentiation 1 time, that is change(f) , 2nd order mean we use differentiation 2 times, that is change(change(f)) , derivates based on multiple differentiation are called "higher derivative". It will be easier to show a graphic :
Here we can see a normal gaussian function in blue, its scaled 1st order derivative in orange, and its scaled 2nd derivative in green, note that i use scaled because i used multiplication in order for you to see each curve, else it would have been less easy to observe them. The number of time a gaussian function derivative cross 0 is based on the order of differentiation, that is 2nd order = the function crossing 0 two times.
Now we can explain what is the Ricker wavelet, the Ricker wavelet is just the normalized 2nd order derivative of a gaussian function with inverted sign, and unlike the gaussian function the only thing you can change is the width parameter. The formula of the Ricker wavelet is show'n here en.wikipedia.org , where sigma is the width parameter.
The Ricker wavelet has this look :
Because she is shaped like a sombrero the Ricker wavelet is also called "mexican hat wavelet", now what would happen if we used a Ricker wavelet as filter kernel ? The response is that we would end-up with a bandpass filter, in fact the derivatives of the gaussian function would all give the kernel of a bandpass filter, with higher order derivatives making the frequency response of the filter approximate a symmetrical gaussian function, if i recall a filter using the first order derivative of a gaussian function would give a frequency response that is left skewed, this skewness is removed when using higher order derivatives.
The Indicator
I didn't wanted to make a bandpass filter, as lately i'am more interested in low-lag filters, so how can we use the Ricker wavelet to make a low-lag low-pass filter ? The response is by taking the right side of the Ricker wavelet, and since values of the wavelets are negatives near the border we know that the filter passband is non-monotonic, that is we know that the filter will have low-lag as frequencies in the passband will be amplified.
So taking the right side of the Ricker wavelet only mean that t has to be greater than 0 and linearly increasing, thats easy, however the width parameter can be tricky to use, this was already the case with ALMA, so how can we work with it ? First it can be seen that values of width needs to be adjusted based on the filter length.
In red width = 14, in green width = 5. We can see that an higher values of width would give really low weights, when the number of negative weights is too important the filter can have a negative group delay thus becoming predictive, this simply mean that the overshoots/undershoots will be crazy wild and that a great fit will be impossible.
Here two moving averages using the previous described kernels, they don't fit the price well at all ! In order to fix this we can simply define width as a function of the filter length, therefore the parameter "Percentage Width" was introduced, and simply set the width of the Ricker wavelet as p percent of the filter length. Lower values of percent width reduce the lag of the moving average, but lets see precisely how this parameter influence the filter output :
Here the filter length is equal to 100, and the percent width is equal to 60, the fit is quite great, lower values of percent width will increase overshoots, in fact the filter become predictive once the percent width is equal or lower to 50.
Here the percent width is equal to 50. Higher values of percent width reduce the overshoots, and a value of 100 return a filter with no overshoots that is suited to act as a lagging moving average.
Above percent width is set to 100. In order to make use of the predictive side of the filter, it would be great to introduce a forecast option, however this require to find the best forecast horizon period based on length and width, this is no easy task.
Finally lets estimate a least squares moving average with the proposed moving average, you know me...a percent width set to 63 will return a relatively good estimate of the LSMA.
LSMA in green and the proposed moving in red with percent width = 63 and both length = 100.
Conclusion
A new low-lag moving average using a right sided Ricker wavelet as filter kernel has been introduced, we have also seen some properties of gaussian derivatives. You can see that lately i published more moving averages where the user can adjust certain properties of the filter kernel such as curve width for example, if you like those moving averages you can check the Parametric Corrective Linear Moving Averages indicator published last month :
I don't exclude working with pure forms of gaussian derivatives in the future, as i didn't published much oscillators lately.
Thx for reading !
Stability Max OverloadStability Max Overload was created in another script I have been working on found below.
I have broken the code down to only display the Stability features.
What this is:
I was trying to find a way that could in some form display the Stability or Instability of the US Treasuries Bond Market. To try and help me do that, I came up with 3 values.
*Stability
*Stability Overload
*Stability Max Overload.
I started with STABILITY. This value is generated based off the number of side by side inversions in the Bond Market. I wanted this value to range between 0 and 1 while 1 equaling all Bonds inverted and 0 equaling no Bonds inverted and any number of inversions in between would equal a percentage value based off the actual number.
STABILITY OVERLOAD was created based off the average of each inversion.
STABILITY MAX OVERLOAD was then created based off the total of each inversion.
The most stable Yield Curve would have no inversions and therefore would generate a 0 for Stability, Stability Overload and Stability Max Overload. The more inversions the Yield Curve has the higher in value Stability itself would have as Stability is weighted more per inversion. With each inversion, data is taken based off the amount with which the Yields are inverted.
This display shows where we currently stand since Dec 2018. It's a telling story so say the least. I do plan on continuing the mentioned above script but again wanted to release a standalone of the data generated.
Hope you enjoy,
OpptionsOnly
ATR RopeATR Rope is inspired by DonovanWall's "Range Filter". It implements a similar concept of filtering out smaller market movements and adjusting only for larger moves. In addition, this indicator goes one step deeper by producing actionable zones to determine market state. (Trend vs. Consolidation)
> Background
When reading up on the Range Filter indicator, it reminded me exactly of a Rope stabilization drawing tool in a program I use frequently. Rope stabilization essentially attaches a fixed length "rope" to your cursor and an anchor point (Brush). As you move your cursor, you are pulling the brush behind it. The cursor (of course) will not pull the brush until the rope is fully extended, this behavior filters out jittery movements and is used to produce smoother drawing curves.
If compared visually side-by-side, you will notice that this indicator bears striking resemblance to its inspiration.
> Goal
Other than simply distinguishing price movements between meaningful and noise, this indicator strives to create a rigid structure to frame market movements and lack-there-of, such as when to anticipate trend, and when to suspect consolidation.
Since the indicator works based on an ATR range, the resulting ATR Channel does well to get reactions from price at its extremes. Naturally, when consolidating, price will remain within the channel, neither pushing the channel significantly up or down. Likewise, when trending, price will continue to push the channel in a single direction.
With the goal of keeping it quick and simple, this indicator does not do any smoothing of data feeds, and is simply based on the deviation of price from the central rope. Adjusting the rope when price extends past the threshold created by +/- ATR from the rope.
> Features & Behaviors
- ATR Rope
ATR Rope is displayed as a 3 color single line.
This can be considered the center line, or the directional line, whichever you'd prefer.
The main point of the Rope display is to indicate direction, however it also is factually the center of the current working range.
- ATR Rope Color
When the rope's value moves up, it changes to green (uptrend), when down, red (downtrend).
When the source crosses the rope, it turns blue (flat).
With these simple rules, we've formed a structure to view market movements.
- Consolidation Zones
Consolidation Zones generate from "Flat" areas, and extend into subsequent trend areas. Consolidation is simply areas where price has crossed the Rope and remains inside the range. Over these periods, the upper and lower values are accumulated and averaged together to form the "Consolidation Zone" values. These zones are draw live, so values are averaged as the flat areas progress and don't repaint, so all values seen historically are as they would appear live.
- ATR Channel
ATR Channel displays the upper and lower bounds of the working range.
When the source moves beyond this range, the rope is adjusted based on the distance from the source to the channel. This range can be extremely useful to view, but by default it is hidden.
> Application
This indicator is not created to provide signals, or serve as a "complete" system.
(People who didn't read this far will still comment for signals. :) )
This is created to be used alongside manual interpretation and intuition. This indicator is not meant to constrain any users into a box, and I would actually encourage an open mind and idea generation, as the application of this indicator can take various forms.
> Examples
As you would probably already know, price movement can be fast impulses, and movement can be slow bleeds. In the screenshot below, we are using movements from and to consolidation zones to classify weak trend and strong trend. As you can see, there are also areas of consolidation which get broken out of and confirmed for the larger moves.
Author's Note: In each of these examples, I have outlined the start and end of each session. These examples come from 1 Min Future charts, and have specifically been framed with day trading in mind.
"Breakout Retest" or "Support/Resistance Flips" or "Structure Retests" are all generally the same thing, with different traders referring to them by different names, all of which can be seen throughout these examples.
In the next example, we have a day which started with an early reversal leading into long, slow, trend. Notice how each area throughout the trend essentially moves slightly higher, then consolidates while holding support of the previous zone. This day had a few sharp movements, however there was a large amount of neutrality throughout this day with continuous higher lows.
In contrast to the previous example, next up, we have a very choppy day. Throughout which we see a significant amount of retests before fast directional movements. We also see a few examples of places where previous zones remained relevant into the future. While the zones only display into the resulting trend area, they do not become immediately meaningless once they stop drawing.
> Abstract
In the screenshot below, I have stacked 2 of these indicators, using the high as the source for one and the low as the source for the other. I've hidden lines of the high and low channels to create a 4 lined channel based on the wicks of price.
This is not necessary to use the indicator, but should help provide an idea of creative ways the simple indicator could be used to produce more complicated analysis.
If you've made it this far, I would hope it's clear to you how this indicator could provide value to your trading.
Thank you to DonovonWall for the inspiration.
Enjoy!
Triple StochasticTriple Stochastic Elasticity Indicator
This custom indicator leverages the power of multi-timeframe analysis by combining three Stochastic Oscillators across different timeframes to identify potential trade entries based on elasticity and divergence between momentum curves.
📊 How It Works:
The indicator plots Stochastic values from three timeframes (e.g., 5m, 15m, and 1h), allowing you to observe how momentum behaves at different scales.
It highlights moments of elasticity—where the Stochastics stretch apart and then begin to converge—potentially signaling a reversion opportunity or trend continuation.
By identifying these stretches and snapbacks in momentum alignment, you can better time your entries and exits with improved confidence.
🔍 Use Case:
Look for divergence or convergence between the Stochastics.
Ideal for trend-following entries, pullback setups, and momentum reversal spotting.
Works best when combined with price action, S/R zones, or volume confirmation.
🛠 Customization:
Timeframes for each Stochastic are fully customizable.
Options to tweak %K, %D, and smoothing values to fit your strategy.
I recommend to remove the D%
And set the following settings
5 : 3 : 3
14 : 3 : 3
56 : 12 :12
Visual alerts can be added for when certain conditions are met (e.g., all three Stochs cross overbought/oversold levels).
Bitcoin Polynomial Regression ModelThis is the main version of the script. Click here for the Oscillator part of the script.
💡Why this model was created:
One of the key issues with most existing models, including our own Bitcoin Log Growth Curve Model , is that they often fail to realistically account for diminishing returns. As a result, they may present overly optimistic bull cycle targets (hence, we introduced alternative settings in our previous Bitcoin Log Growth Curve Model).
This new model however, has been built from the ground up with a primary focus on incorporating the principle of diminishing returns. It directly responds to this concept, which has been briefly explored here .
📉The theory of diminishing returns:
This theory suggests that as each four-year market cycle unfolds, volatility gradually decreases, leading to more tempered price movements. It also implies that the price increase from one cycle peak to the next will decrease over time as the asset matures. The same pattern applies to cycle lows and the relationship between tops and bottoms. In essence, these price movements are interconnected and should generally follow a consistent pattern. We believe this model provides a more realistic outlook on bull and bear market cycles.
To better understand this theory, the relationships between cycle tops and bottoms are outlined below:https://www.tradingview.com/x/7Hldzsf2/
🔧Creation of the model:
For those interested in how this model was created, the process is explained here. Otherwise, feel free to skip this section.
This model is based on two separate cubic polynomial regression lines. One for the top price trend and another for the bottom. Both follow the general cubic polynomial function:
ax^3 +bx^2 + cx + d.
In this equation, x represents the weekly bar index minus an offset, while a, b, c, and d are determined through polynomial regression analysis. The input (x, y) values used for the polynomial regression analysis are as follows:
Top regression line (x, y) values:
113, 18.6
240, 1004
451, 19128
655, 65502
Bottom regression line (x, y) values:
103, 2.5
267, 211
471, 3193
676, 16255
The values above correspond to historical Bitcoin cycle tops and bottoms, where x is the weekly bar index and y is the weekly closing price of Bitcoin. The best fit is determined using metrics such as R-squared values, residual error analysis, and visual inspection. While the exact details of this evaluation are beyond the scope of this post, the following optimal parameters were found:
Top regression line parameter values:
a: 0.000202798
b: 0.0872922
c: -30.88805
d: 1827.14113
Bottom regression line parameter values:
a: 0.000138314
b: -0.0768236
c: 13.90555
d: -765.8892
📊Polynomial Regression Oscillator:
This publication also includes the oscillator version of the this model which is displayed at the bottom of the screen. The oscillator applies a logarithmic transformation to the price and the regression lines using the formula log10(x) .
The log-transformed price is then normalized using min-max normalization relative to the log-transformed top and bottom regression line with the formula:
normalized price = log(close) - log(bottom regression line) / log(top regression line) - log(bottom regression line)
This transformation results in a price value between 0 and 1 between both the regression lines. The Oscillator version can be found here.
🔍Interpretation of the Model:
In general, the red area represents a caution zone, as historically, the price has often been near its cycle market top within this range. On the other hand, the green area is considered an area of opportunity, as historically, it has corresponded to the market bottom.
The top regression line serves as a signal for the absolute market cycle peak, while the bottom regression line indicates the absolute market cycle bottom.
Additionally, this model provides a predicted range for Bitcoin's future price movements, which can be used to make extrapolated predictions. We will explore this further below.
🔮Future Predictions:
Finally, let's discuss what this model actually predicts for the potential upcoming market cycle top and the corresponding market cycle bottom. In our previous post here , a cycle interval analysis was performed to predict a likely time window for the next cycle top and bottom:
In the image, it is predicted that the next top-to-top cycle interval will be 208 weeks, which translates to November 3rd, 2025. It is also predicted that the bottom-to-top cycle interval will be 152 weeks, which corresponds to October 13th, 2025. On the macro level, these two dates align quite well. For our prediction, we take the average of these two dates: October 24th 2025. This will be our target date for the bull cycle top.
Now, let's do the same for the upcoming cycle bottom. The bottom-to-bottom cycle interval is predicted to be 205 weeks, which translates to October 19th, 2026, and the top-to-bottom cycle interval is predicted to be 259 weeks, which corresponds to October 26th, 2026. We then take the average of these two dates, predicting a bear cycle bottom date target of October 19th, 2026.
Now that we have our predicted top and bottom cycle date targets, we can simply reference these two dates to our model, giving us the Bitcoin top price prediction in the range of 152,000 in Q4 2025 and a subsequent bottom price prediction in the range of 46,500 in Q4 2026.
For those interested in understanding what this specifically means for the predicted diminishing return top and bottom cycle values, the image below displays these predicted values. The new values are highlighted in yellow:
And of course, keep in mind that these targets are just rough estimates. While we've done our best to estimate these targets through a data-driven approach, markets will always remain unpredictable in nature. What are your targets? Feel free to share them in the comment section below.
Bitcoin Polynomial Regression OscillatorThis is the oscillator version of the script. Click here for the other part of the script.
💡Why this model was created:
One of the key issues with most existing models, including our own Bitcoin Log Growth Curve Model , is that they often fail to realistically account for diminishing returns. As a result, they may present overly optimistic bull cycle targets (hence, we introduced alternative settings in our previous Bitcoin Log Growth Curve Model).
This new model however, has been built from the ground up with a primary focus on incorporating the principle of diminishing returns. It directly responds to this concept, which has been briefly explored here .
📉The theory of diminishing returns:
This theory suggests that as each four-year market cycle unfolds, volatility gradually decreases, leading to more tempered price movements. It also implies that the price increase from one cycle peak to the next will decrease over time as the asset matures. The same pattern applies to cycle lows and the relationship between tops and bottoms. In essence, these price movements are interconnected and should generally follow a consistent pattern. We believe this model provides a more realistic outlook on bull and bear market cycles.
To better understand this theory, the relationships between cycle tops and bottoms are outlined below:https://www.tradingview.com/x/7Hldzsf2/
🔧Creation of the model:
For those interested in how this model was created, the process is explained here. Otherwise, feel free to skip this section.
This model is based on two separate cubic polynomial regression lines. One for the top price trend and another for the bottom. Both follow the general cubic polynomial function:
ax^3 +bx^2 + cx + d.
In this equation, x represents the weekly bar index minus an offset, while a, b, c, and d are determined through polynomial regression analysis. The input (x, y) values used for the polynomial regression analysis are as follows:
Top regression line (x, y) values:
113, 18.6
240, 1004
451, 19128
655, 65502
Bottom regression line (x, y) values:
103, 2.5
267, 211
471, 3193
676, 16255
The values above correspond to historical Bitcoin cycle tops and bottoms, where x is the weekly bar index and y is the weekly closing price of Bitcoin. The best fit is determined using metrics such as R-squared values, residual error analysis, and visual inspection. While the exact details of this evaluation are beyond the scope of this post, the following optimal parameters were found:
Top regression line parameter values:
a: 0.000202798
b: 0.0872922
c: -30.88805
d: 1827.14113
Bottom regression line parameter values:
a: 0.000138314
b: -0.0768236
c: 13.90555
d: -765.8892
📊Polynomial Regression Oscillator:
This publication also includes the oscillator version of the this model which is displayed at the bottom of the screen. The oscillator applies a logarithmic transformation to the price and the regression lines using the formula log10(x) .
The log-transformed price is then normalized using min-max normalization relative to the log-transformed top and bottom regression line with the formula:
normalized price = log(close) - log(bottom regression line) / log(top regression line) - log(bottom regression line)
This transformation results in a price value between 0 and 1 between both the regression lines.
🔍Interpretation of the Model:
In general, the red area represents a caution zone, as historically, the price has often been near its cycle market top within this range. On the other hand, the green area is considered an area of opportunity, as historically, it has corresponded to the market bottom.
The top regression line serves as a signal for the absolute market cycle peak, while the bottom regression line indicates the absolute market cycle bottom.
Additionally, this model provides a predicted range for Bitcoin's future price movements, which can be used to make extrapolated predictions. We will explore this further below.
🔮Future Predictions:
Finally, let's discuss what this model actually predicts for the potential upcoming market cycle top and the corresponding market cycle bottom. In our previous post here , a cycle interval analysis was performed to predict a likely time window for the next cycle top and bottom:
In the image, it is predicted that the next top-to-top cycle interval will be 208 weeks, which translates to November 3rd, 2025. It is also predicted that the bottom-to-top cycle interval will be 152 weeks, which corresponds to October 13th, 2025. On the macro level, these two dates align quite well. For our prediction, we take the average of these two dates: October 24th 2025. This will be our target date for the bull cycle top.
Now, let's do the same for the upcoming cycle bottom. The bottom-to-bottom cycle interval is predicted to be 205 weeks, which translates to October 19th, 2026, and the top-to-bottom cycle interval is predicted to be 259 weeks, which corresponds to October 26th, 2026. We then take the average of these two dates, predicting a bear cycle bottom date target of October 19th, 2026.
Now that we have our predicted top and bottom cycle date targets, we can simply reference these two dates to our model, giving us the Bitcoin top price prediction in the range of 152,000 in Q4 2025 and a subsequent bottom price prediction in the range of 46,500 in Q4 2026.
For those interested in understanding what this specifically means for the predicted diminishing return top and bottom cycle values, the image below displays these predicted values. The new values are highlighted in yellow:
And of course, keep in mind that these targets are just rough estimates. While we've done our best to estimate these targets through a data-driven approach, markets will always remain unpredictable in nature. What are your targets? Feel free to share them in the comment section below.
DeepSignalFilterHelpersLibrary "DeepSignalFilterHelpers"
filter_intraday_intensity(useIiiFilter)
Parameters:
useIiiFilter (bool)
filter_vwma(src, length, useVwmaFilter)
Parameters:
src (float)
length (int)
useVwmaFilter (bool)
filter_nvi(useNviFilter)
Parameters:
useNviFilter (bool)
filter_emv(length, emvThreshold, useEmvFilter, useMovingAvg)
EMV filter for filtering signals based on Ease of Movement
Parameters:
length (int) : The length of the EMV calculation
emvThreshold (float) : The EMV threshold
useEmvFilter (bool) : Whether to apply the EMV filter
useMovingAvg (bool) : Whether to use moving average as threshold
Returns: Filtered result indicating whether the signal should be used
filter_adi(length, threshold, useAdiFilter, useMovingAvg)
ADI filter for filtering signals based on Accumulation/Distribution Index
Parameters:
length (int) : The length of the ADI moving average calculation
threshold (float) : The ADI threshold
useAdiFilter (bool) : Whether to apply the ADI filter
useMovingAvg (bool) : Whether to use moving average as threshold
Returns: Filtered result indicating whether the signal should be used
filter_mfi(length, mfiThreshold, useMfiFilter, useMovingAvg)
MFI filter for filtering signals based on Money Flow Index
Parameters:
length (int) : The length of the MFI calculation
mfiThreshold (float) : The MFI threshold
useMfiFilter (bool) : Whether to apply the MFI filter
useMovingAvg (bool) : Whether to use moving average as threshold
Returns: Filtered result indicating whether the signal should be used
detect_obv_states(obvThresholdStrong, obvThresholdModerate, lookbackPeriod, obvMode)
detect_obv_states: Identify OBV states with three levels (Strong, Moderate, Weak) over a configurable period
Parameters:
obvThresholdStrong (float) : Threshold for strong OBV movements
obvThresholdModerate (float) : Threshold for moderate OBV movements
lookbackPeriod (int) : Number of periods to analyze OBV trends
obvMode (string) : OBV mode to filter ("Strong", "Moderate", "Weak")
Returns: OBV state ("Strong Up", "Moderate Up", "Weak Up", "Positive Divergence", "Negative Divergence", "Consolidation", "Weak Down", "Moderate Down", "Strong Down")
filter_obv(src, length, obvMode, threshold, useObvFilter, useMovingAvg)
filter_obv: Filter signals based on OBV states
Parameters:
src (float) : The source series (default: close)
length (int) : The length of the OBV moving average calculation
obvMode (string) : OBV mode to filter ("Strong", "Moderate", "Weak")
threshold (float) : Optional threshold for additional filtering
useObvFilter (bool) : Whether to apply the OBV filter
useMovingAvg (bool) : Whether to use moving average as threshold
Returns: Filtered result indicating whether the signal should be used
filter_cmf(length, cmfThreshold, useCmfFilter, useMovingAvg)
CMF filter for filtering signals based on Chaikin Money Flow
Parameters:
length (int) : The length of the CMF calculation
cmfThreshold (float) : The CMF threshold
useCmfFilter (bool) : Whether to apply the CMF filter
useMovingAvg (bool) : Whether to use moving average as threshold
Returns: Filtered result indicating whether the signal should be used
filter_vwap(useVwapFilter)
VWAP filter for filtering signals based on Volume-Weighted Average Price
Parameters:
useVwapFilter (bool) : Whether to apply the VWAP filter
Returns: Filtered result indicating whether the signal should be used
filter_pvt(length, pvtThreshold, usePvtFilter, useMovingAvg)
PVT filter for filtering signals based on Price Volume Trend
Parameters:
length (int) : The length of the PVT moving average calculation
pvtThreshold (float) : The PVT threshold
usePvtFilter (bool) : Whether to apply the PVT filter
useMovingAvg (bool) : Whether to use moving average as threshold
Returns: Filtered result indicating whether the signal should be used
filter_vo(shortLength, longLength, voThreshold, useVoFilter, useMovingAvg)
VO filter for filtering signals based on Volume Oscillator
Parameters:
shortLength (int) : The length of the short-term volume moving average
longLength (int) : The length of the long-term volume moving average
voThreshold (float) : The Volume Oscillator threshold
useVoFilter (bool) : Whether to apply the VO filter
useMovingAvg (bool) : Whether to use moving average as threshold
Returns: Filtered result indicating whether the signal should be used
filter_cho(shortLength, longLength, choThreshold, useChoFilter, useMovingAvg)
CHO filter for filtering signals based on Chaikin Oscillator
Parameters:
shortLength (int) : The length of the short-term ADI moving average
longLength (int) : The length of the long-term ADI moving average
choThreshold (float) : The Chaikin Oscillator threshold
useChoFilter (bool) : Whether to apply the CHO filter
useMovingAvg (bool) : Whether to use moving average as threshold
Returns: Filtered result indicating whether the signal should be used
filter_fi(length, fiThreshold, useFiFilter, useMovingAvg)
FI filter for filtering signals based on Force Index
Parameters:
length (int) : The length of the FI calculation
fiThreshold (float) : The Force Index threshold
useFiFilter (bool) : Whether to apply the FI filter
useMovingAvg (bool) : Whether to use moving average as threshold
Returns: Filtered result indicating whether the signal should be used
filter_garman_klass_volatility(length, useGkFilter)
Parameters:
length (int)
useGkFilter (bool)
filter_frama(src, length, useFramaFilter)
Parameters:
src (float)
length (int)
useFramaFilter (bool)
filter_bollinger_bands(src, length, stdDev, useBollingerFilter)
Parameters:
src (float)
length (int)
stdDev (float)
useBollingerFilter (bool)
filter_keltner_channel(src, length, atrMult, useKeltnerFilter)
Parameters:
src (float)
length (simple int)
atrMult (float)
useKeltnerFilter (bool)
regime_filter(src, threshold, useRegimeFilter)
Regime filter for filtering signals based on trend strength
Parameters:
src (float) : The source series
threshold (float) : The threshold for the filter
useRegimeFilter (bool) : Whether to apply the regime filter
Returns: Filtered result indicating whether the signal should be used
regime_filter_v2(src, threshold, useRegimeFilter)
Regime filter for filtering signals based on trend strength
Parameters:
src (float) : The source series
threshold (float) : The threshold for the filter
useRegimeFilter (bool) : Whether to apply the regime filter
Returns: Filtered result indicating whether the signal should be used
filter_adx(src, length, adxThreshold, useAdxFilter)
ADX filter for filtering signals based on ADX strength
Parameters:
src (float) : The source series
length (simple int) : The length of the ADX calculation
adxThreshold (int) : The ADX threshold
useAdxFilter (bool) : Whether to apply the ADX filter
Returns: Filtered result indicating whether the signal should be used
filter_volatility(minLength, maxLength, useVolatilityFilter)
Volatility filter for filtering signals based on volatility
Parameters:
minLength (simple int) : The minimum length for ATR calculation
maxLength (simple int) : The maximum length for ATR calculation
useVolatilityFilter (bool) : Whether to apply the volatility filter
Returns: Filtered result indicating whether the signal should be used
filter_ulcer(src, length, ulcerThreshold, useUlcerFilter)
Ulcer Index filter for filtering signals based on Ulcer Index
Parameters:
src (float) : The source series
length (int) : The length of the Ulcer Index calculation
ulcerThreshold (float) : The Ulcer Index threshold (default: average Ulcer Index)
useUlcerFilter (bool) : Whether to apply the Ulcer Index filter
Returns: Filtered result indicating whether the signal should be used
filter_stddev(src, length, stdDevThreshold, useStdDevFilter)
Standard Deviation filter for filtering signals based on Standard Deviation
Parameters:
src (float) : The source series
length (int) : The length of the Standard Deviation calculation
stdDevThreshold (float) : The Standard Deviation threshold (default: average Standard Deviation)
useStdDevFilter (bool) : Whether to apply the Standard Deviation filter
Returns: Filtered result indicating whether the signal should be used
filter_macdv(src, shortLength, longLength, signalSmoothing, macdVThreshold, useMacdVFilter)
MACD-V filter for filtering signals based on MACD-V
Parameters:
src (float) : The source series
shortLength (simple int) : The short length for MACD calculation
longLength (simple int) : The long length for MACD calculation
signalSmoothing (simple int) : The signal smoothing length for MACD
macdVThreshold (float) : The MACD-V threshold (default: average MACD-V)
useMacdVFilter (bool) : Whether to apply the MACD-V filter
Returns: Filtered result indicating whether the signal should be used
filter_atr(length, atrThreshold, useAtrFilter)
ATR filter for filtering signals based on Average True Range (ATR)
Parameters:
length (simple int) : The length of the ATR calculation
atrThreshold (float) : The ATR threshold (default: average ATR)
useAtrFilter (bool) : Whether to apply the ATR filter
Returns: Filtered result indicating whether the signal should be used
filter_candle_body_and_atr(length, bodyThreshold, atrThreshold, useFilter)
Candle Body and ATR filter for filtering signals
Parameters:
length (simple int) : The length of the ATR calculation
bodyThreshold (float) : The threshold for candle body size (relative to ATR)
atrThreshold (float) : The ATR threshold (default: average ATR)
useFilter (bool) : Whether to apply the candle body and ATR filter
Returns: Filtered result indicating whether the signal should be used
filter_atrp(length, atrpThreshold, useAtrpFilter)
ATRP filter for filtering signals based on ATR Percentage (ATRP)
Parameters:
length (simple int) : The length of the ATR calculation
atrpThreshold (float) : The ATRP threshold (default: average ATRP)
useAtrpFilter (bool) : Whether to apply the ATRP filter
Returns: Filtered result indicating whether the signal should be used
filter_jma(src, length, phase, useJmaFilter)
Parameters:
src (float)
length (simple int)
phase (float)
useJmaFilter (bool)
filter_cidi(src, rsiLength, shortMaLength, longMaLength, useCidiFilter)
Parameters:
src (float)
rsiLength (simple int)
shortMaLength (int)
longMaLength (int)
useCidiFilter (bool)
filter_rsi(src, length, rsiThreshold, useRsiFilter)
Parameters:
src (float)
length (simple int)
rsiThreshold (float)
useRsiFilter (bool)
filter_ichimoku_oscillator(length, threshold, useFilter)
Ichimoku Oscillator filter for filtering signals based on Ichimoku Oscillator
Parameters:
length (int) : The length of the Ichimoku Oscillator calculation
threshold (float) : The threshold for the filter (default: average Ichimoku Oscillator)
useFilter (bool) : Whether to apply the filter
Returns: Filtered result indicating whether the signal should be used
filter_cmb_composite_index(src, shortLength, longLength, threshold, useFilter)
CMB Composite Index filter for filtering signals based on CMB Composite Index
Parameters:
src (float) : The source series
shortLength (simple int) : The short length for CMB calculation
longLength (simple int) : The long length for CMB calculation
threshold (float) : The threshold for the filter (default: average CMB Composite Index)
useFilter (bool) : Whether to apply the filter
Returns: Filtered result indicating whether the signal should be used
filter_connors_rsi(src, rsiLength, rocLength, streakLength, threshold, useFilter)
Connors RSI filter for filtering signals based on Connors RSI
Parameters:
src (float) : The source series
rsiLength (simple int) : The length for RSI calculation
rocLength (int) : The length for ROC calculation
streakLength (simple int) : The length for streak calculation
threshold (float) : The threshold for the filter (default: average Connors RSI)
useFilter (bool) : Whether to apply the filter
Returns: Filtered result indicating whether the signal should be used
filter_coppock_curve(src, roc1Length, roc2Length, wmaLength, threshold, useFilter)
Coppock Curve filter for filtering signals based on Coppock Curve
Parameters:
src (float) : The source series
roc1Length (int) : The length for the first ROC calculation
roc2Length (int) : The length for the second ROC calculation
wmaLength (int) : The length for the WMA calculation
threshold (float) : The threshold for the filter (default: average Coppock Curve)
useFilter (bool) : Whether to apply the filter
Returns: Filtered result indicating whether the signal should be used
filter_pmo(src, pmoLength, smoothingLength, threshold, useFilter)
DecisionPoint Price Momentum Oscillator filter for filtering signals based on PMO
Parameters:
src (float) : The source series
pmoLength (simple int) : The length for PMO calculation
smoothingLength (simple int) : The smoothing length for PMO
threshold (float) : The threshold for the filter (default: average PMO Oscillator)
useFilter (bool) : Whether to apply the filter
Returns: Filtered result indicating whether the signal should be used
filter_macd(src, shortLength, longLength, signalSmoothing, threshold, useFilter)
MACD filter for filtering signals based on MACD
Parameters:
src (float) : The source series
shortLength (simple int) : The short length for MACD calculation
longLength (simple int) : The long length for MACD calculation
signalSmoothing (simple int) : The signal smoothing length for MACD
threshold (float) : The threshold for the filter (default: average MACD)
useFilter (bool) : Whether to apply the filter
Returns: Filtered result indicating whether the signal should be used
filter_macd_histogram(src, shortLength, longLength, signalSmoothing, threshold, useFilter)
MACD-Histogram filter for filtering signals based on MACD-Histogram
Parameters:
src (float) : The source series
shortLength (simple int) : The short length for MACD calculation
longLength (simple int) : The long length for MACD calculation
signalSmoothing (simple int) : The signal smoothing length for MACD
threshold (float) : The threshold for the filter (default: average MACD-Histogram)
useFilter (bool) : Whether to apply the filter
Returns: Filtered result indicating whether the signal should be used
filter_kst(src, r1, r2, r3, r4, sm1, sm2, sm3, sm4, signalLength, threshold, useFilter)
Pring's Know Sure Thing filter for filtering signals based on KST
Parameters:
src (float) : The source series
r1 (int) : The first ROC length
r2 (int) : The second ROC length
r3 (int) : The third ROC length
r4 (int) : The fourth ROC length
sm1 (int) : The first smoothing length
sm2 (int) : The second smoothing length
sm3 (int) : The third smoothing length
sm4 (int) : The fourth smoothing length
signalLength (int) : The signal line smoothing length
threshold (float) : The threshold for the filter (default: average KST Oscillator)
useFilter (bool) : Whether to apply the filter
Returns: Filtered result indicating whether the signal should be used
filter_special_k(src, r1, r2, r3, r4, sm1, sm2, sm3, sm4, threshold, useFilter)
Pring's Special K filter for filtering signals based on Special K
Parameters:
src (float) : The source series
r1 (int) : The first ROC length
r2 (int) : The second ROC length
r3 (int) : The third ROC length
r4 (int) : The fourth ROC length
sm1 (int) : The first smoothing length
sm2 (int) : The second smoothing length
sm3 (int) : The third smoothing length
sm4 (int) : The fourth smoothing length
threshold (float) : The threshold for the filter (default: average Special K)
useFilter (bool) : Whether to apply the filter
Returns: Filtered result indicating whether the signal should be used
filter_roc_momentum(src, rocLength, momentumLength, threshold, useFilter)
ROC and Momentum filter for filtering signals based on ROC and Momentum
Parameters:
src (float) : The source series
rocLength (int) : The length for ROC calculation
momentumLength (int) : The length for Momentum calculation
threshold (float) : The threshold for the filter (default: average ROC and Momentum)
useFilter (bool) : Whether to apply the filter
Returns: Filtered result indicating whether the signal should be used
filter_rrg_relative_strength(src, length, threshold, useFilter)
RRG Relative Strength filter for filtering signals based on RRG Relative Strength
Parameters:
src (float) : The source series
length (int) : The length for RRG Relative Strength calculation
threshold (float) : The threshold for the filter (default: average RRG Relative Strength)
useFilter (bool) : Whether to apply the filter
Returns: Filtered result indicating whether the signal should be used
filter_alligator(useFilter)
Parameters:
useFilter (bool)
filter_wyckoff(useFilter)
Parameters:
useFilter (bool)
filter_squeeze_momentum(bbLength, bbStdDev, kcLength, kcMult, useFilter)
Parameters:
bbLength (int)
bbStdDev (float)
kcLength (simple int)
kcMult (float)
useFilter (bool)
filter_atr_compression(length, atrThreshold, useFilter)
Parameters:
length (simple int)
atrThreshold (float)
useFilter (bool)
filter_low_volume(length, useFilter)
Parameters:
length (int)
useFilter (bool)
filter_nvi_accumulation(useFilter)
Parameters:
useFilter (bool)
filter_ma_slope(src, length, slopeThreshold, useFilter)
Parameters:
src (float)
length (int)
slopeThreshold (float)
useFilter (bool)
filter_adx_low(len, lensig, adxThreshold, useFilter)
Parameters:
len (simple int)
lensig (simple int)
adxThreshold (int)
useFilter (bool)
filter_choppiness_index(length, chopThreshold, useFilter)
Parameters:
length (int)
chopThreshold (float)
useFilter (bool)
filter_range_detection(length, useFilter)
Parameters:
length (int)
useFilter (bool)
Vesica Piscis Visualization-Secret Geometry-AYNETExplanation
Customization Options:
circle_radius: Adjust the size of the circles.
line_color: Choose the color of the circles.
line_width: Adjust the thickness of the circle lines.
segments: Increase or decrease the smoothness of the circles (higher values make smoother circles but use more computational resources).
Placement:
The first circle is centered at circle1_x and the second is offset horizontally by 2 * circle_radius to ensure their centers intersect each other's circumference.
Intersection Highlight:
The intersection area is visually emphasized with a semi-transparent background (bgcolor), which can be customized or removed if unnecessary.
Smoothness:
The segments input determines how many points are used to create each circle. Higher values create smoother curves.
Adjustments
Ensure the circles fit within the visible chart area by adjusting circle1_x and circle_radius.
If needed, you can add additional features, such as drawing lines to connect the centers or labeling the Vesica Piscis region.
Let me know if you want further refinements or additional features!