ATH Drawdown Indicator by Atilla YurtsevenThe ATH (All-Time High) Drawdown Indicator, developed by Atilla Yurtseven, is an essential tool for traders and investors who seek to understand the current price position in relation to historical peaks. This indicator is especially useful in volatile markets like cryptocurrencies and stocks, offering insights into potential buy or sell opportunities based on historical price action.
This indicator is suitable for long-term investors. It shows the average value loss of a price. However, it's important to remember that this indicator only displays statistics based on past price movements. The price of a stock can remain cheap for many years.
1. Utility of the Indicator:
The ATH Drawdown Indicator provides a clear view of how far the current price is from its all-time high. This is particularly beneficial in assessing the magnitude of a pullback or retracement from peak levels. By understanding these levels, traders can gauge market sentiment and make informed decisions about entry and exit points.
2. Risk Management:
This indicator aids in risk management by highlighting significant drawdowns from the ATH. Traders can use this information to adjust their position sizes or set stop-loss orders more effectively. For instance, entering trades when the price is significantly below the ATH could indicate a higher potential for recovery, while a minimal drawdown from the ATH may suggest caution due to potential overvaluation.
3. Indicator Functionality:
The indicator calculates the percentage drawdown from the ATH for each trading period. It can display this data either as a line graph or overlaid on candles, based on user preference. Horizontal lines at -25%, -50%, -75%, and -100% drawdown levels offer quick visual cues for significant price levels. The color-coding of candles further aids in visualizing bullish or bearish trends in the context of ATH drawdowns.
4. ATH Level Indicator (0 Level):
A unique feature of this indicator is the 0 level, which signifies that the price is currently at its all-time high. This level is a critical reference point for understanding the market's peak performance.
5. Mean Line Indicator:
Additionally, this indicator includes a 'Mean Line', representing the average percentage drawdown from the ATH. This average is calculated over more than a thousand past bars, leveraging the law of large numbers to provide a reliable mean value. This mean line is instrumental in understanding the typical market behavior in relation to the ATH.
Disclaimer:
Please note that this ATH Drawdown Indicator by Atilla Yurtseven is provided as an open-source tool for educational purposes only. It should not be construed as investment advice. Users should conduct their own research and consult a financial advisor before making any investment decisions. The creator of this indicator bears no responsibility for any trading losses incurred using this tool.
Please remember to follow and comment!
Trade smart, stay safe
Atilla Yurtseven
Statistics
Trend Shift ProThe indicator is designed to identify shifts or changes in trends as blocks, the indicator's focus on analyzing the Median of Means, Interquartile Range, and Practical Significance for potential trend changes in the market using non parametric Cohen's D. The script is designed to operate on blocks of 21 bars. The key parts of the script related to this are the conditions inside the "if" statements: The bar_index % 21 == 0 condition checks if the current bar index is divisible by 21, meaning it's the beginning of a new block of 21 bars. This condition is used to reset and calculate new values at the start of each block.
Therefore, signals or calculations related to the median of means (MoM), interquartile range (IQR), and Cohen's D are updated and calculated once every 21 bars. What this means is the frequency of signals is shown once every 21 bars.
Price Movements of Blocks:
Block-Based Analysis: This approach divides the price data into blocks or segments, often a fixed number of bars or candles. Each block represents a specific interval of time or price action. It involves No Smoothing: Unlike moving averages, block-based analysis does not apply any smoothing to the price data within each block. It directly examines the raw prices within each block.
Let's break down the key concepts and how they are used for trading:
Median of Means (MoM):
The script calculates the median of the means of seven subgroups, each consisting of three bars in shuffled order.
Each subgroup's mean is calculated based on the typical price (hlc3) of the bars within that subgroup.
The median is then computed from these seven means, representing a central tendency measure.
Note: The Median of Means provides a robust measure of central tendency, especially in situations where the dataset may have outliers or exhibit non-normal distribution characteristics. By calculating means within smaller subgroups, the method is less sensitive to extreme values that might unduly influence the overall average. This can make the Median of Means more robust than a simple mean or median when dealing with datasets that have heterogeneity or skewed distributions.
Interquartile Range (IQR):
The script calculates the IQR for each block of 21 bars.
The IQR is a measure of statistical dispersion, representing the range between the first quartile (Q1) and the third quartile (Q3) of the data.
Q1 and Q3 are calculated from the sorted array of closing prices of the 21 bars.
Non-Parametric Cohen's D Calculation:
Cohen's D is a measure of effect size, indicating the standardized difference between two means.
In this script, a non-parametric version of Cohen's D is calculated, comparing the MoM values of the current block with the MoM values of the previous block.
The calculation involves the MoM difference divided by the square root of the average squared IQR values.
Practical Significance Threshold:
The user can set a threshold for practical significance using the Threshold input.
The script determines practical significance by comparing the calculated Cohen's D with this threshold.
Plotting:
The script plots the MoM values using both straight lines and circles, with the color of the circles indicating the direction of the MoM change (green for upward, red for downward, and blue for no change).
Triangular shapes are plotted when the absolute value of Cohen's D is less than the practical significance threshold.
Overall Purpose for Trading:
The indicator is designed to help traders identify potential turning points or shifts in market sentiment. and use it as levels which needs to be crossed to have a new trend.
Changes in MoM, especially when accompanied by practical significance as determined by Cohen's D, may signal the start of a new trend or a significant move in the market.
Traders using this indicator would typically look for instances where the MoM values and associated practical significance suggest a high probability of a trend change, providing them with potential entry or exit signals. It's important for users to backtest and validate the indicator's effectiveness in different market conditions before relying on it for trading decisions.
COSTAR [SS]This idea came to me after I wrote the post about Co-Integration and pair trading. I wondered if you could use pair trading principles as a way to determine overbought and oversold conditions in a more neutral way than RSI or Stochastics.
The results were promising and this indicator resulted :-)!
About:
COSTAR provides another, more neutral way to determine whether an equity is overbought or oversold.
Instead of relying on the traditional oscillator based ways, such as using RSI, Stochastics and MFI, which can be somewhat biased and narrow sided, COSTAR attempts to take a neutral, unbiased approached to determine overbought and oversold conditions. It does this through using a co-integrated partner, or "pair" that is closely linked to the underlying equity and succeeds on both having a high correlation and a high t-statistic on the ADF test. It then references this underlying, co-integrated partner as the "benchmark" for the co-integration relationship.
How this succeeds as being "unbiased" and "neutral" is because it is responsive to underlying drivers. If there is a market catalyst or just general bullish or bearish momentum in the market, the indicator will be referencing the integrated relationship between the two pairs and referencing that as a baseline. If there is a sustained rally on the integrated partner of the underlying ticker that is holding, but the other ticker is lagging, it will indicate that the other ticker is likely to be under-valued and thus "oversold" because it is underperforming its benchmark partner.
This is in contrast to traditional approaches to determining overbought and oversold conditions, which rely completely on a single ticker, with no external reference to other tickers and no control over whether the move could potentially be a fundamental move based on an industry or sector, or whether it is a fluke or a squeeze.
The control for this giving "false" signals comes from its extent of modelling and assessment of the degree of integration of the relationship. The parameters are set by default to assess over a 1 year period, both the correlation and the integration. Anything that passes this degree of integration is likely to have a solid, co-integrated state and not likely to be a "fluke". Thus, the reliability of the assessment is augmented by the degree of statistical significance found within the relationship. The indicator is not going to prompt you to rely on a relationship that is statistically weak, and will warn you of such.
The indicator will show you all the information you require regarding the relationship and whether it is reliable or not, so you do not need to worry!
How to Use
The first step to use COSTAR is identifying which ticker has a strong relationship with the current ticker. In the main chart, you will see that SPY is overlaid with VIX. There is a strong, negative correlation between the VIX and SPY. When VIX is entered as the paired ticker, the indicator returns the data as stationary, indicating a compatible match.
Now you have 3 ways of viewing this relationship, 2 of which are going to be directly applicable to trading.
You can view them as
Price to Price Ratio (Not very useful for trading, but if you are curious)
Z-Score: Helpful for trading
Co-integration: Helpful for trading
Here is an example of all three:
Example of Z-Score Chart:
Example of Price Ratio:
Example of Co-Integration Pair:
Using for Trading
As stated above, the two best ways to use this for trading is to either use the Z-Score Chart or the Co-Integrated Pair chart.
The Z-Score chart is based off of the price ratio data and provides an assessment of both the independent and dependent data.
The co-integration shows the dependent (the ticker you are trading) in yellow and the independent (the ticker you are referencing) in teal. When teal is above yellow, you will see it is green. This means, based on your benchmark pair, there is still more up room and the ticker you are trading is actually lagging behind.
When the yellow crosses up, it will turn red. This means that your ticker is out-performing the benchmark pair and you likely will see pullback and a "regression to the mean" through re-integration.
The indicator is capable of plotting out entries and exits, which are guided by the z-score:
How Effective is it?
I created a basic strategy in Pinescript, and the back-test results vary. Trading ES1! using NQ1! as the co-integrated pair, results were around 78% effective.
With VIX, results were around 50% effective, but with a net profit.
Generally, the efficacy surpassed that of both stochastics and RSI.
I will be releasing the strategy version of this in the coming days, still just cleaning up that code and making it more "public use" friendly.
Other Applications
If you are a pair trader, you can technically use this for pair trading as well. That's essentially all this is doing :-).
Tips
If you are trading a ticker such as MSFT, AMD, KO etc., it's best to try to find an ETF or index that has that particular ticker as a large holding and use that as your benchmark. You will see on the indicator whether there is a high correlation and whether the data is indeed stationary.
If the indicator returns "Non-stationary", you can attempt to extend your regression range from 252 to 500. If this fixes the issue, ensure that the correlation is still >= 0.5 or <= -0.5. If this does not work still, you will need to find another pair, as its likely the result of incompatibility and an insignificant relationship.
To help you identify tickers with strong relationships, consider using a correlation heatmap indicator. I have one available and I think there are a couple of other similar ish ones out there. You want to make sure the relationship is stable over time (a correlation of >= 0.50 or <= -0.5 over the past 252 to 500 days).
IMPORTANT: The long and short exits delete the signal after one is signaled. Therefore, when you look back in the chart you will notice there are no signals to exit long or short. That is because they signal as they happen. This is to keep the chart clean.
'Tis all my friends!
Hope you enjoy and let me know your questions and suggestions below!
Side note:
COSTAR stands for Co-integration Statistical Analysis and Regression. ;)
Absolute Momentum (Time Series Momentum)Absolute momentum , also known as time series momentum , focuses on the trend of an asset's own past performance to predict its future performance. It involves analyzing an asset's own historical performance, rather than comparing it to other assets.
The strategy determines whether an asset's price is exhibiting an upward (positive momentum) or downward (negative momentum) trend by assessing the asset's return over a given period (standard look-back period: 12 months or approximately 250 trading days). Some studies recommend calculating momentum by deducting the corresponding Treasury bill rate from the measured performance.
Absolute Momentum Indicator
The Absolute Momentum Indicator displays the rolling 12-month performance (measured over 250 trading days) and plots it against a horizontal line representing 0%. If the indicator crosses above this line, it signifies positive absolute momentum, and conversely, crossing below indicates negative momentum. An additional, optional look-back period input field can be accessed through the settings.
Hint: This indicator is a simplified version, as some academic approaches measure absolute momentum by subtracting risk-free rates from the 12-month performance. However, even with higher rates, the values will still remain close to the 0% line.
Benefits of Absolute Momentum
Absolute momentum, which should not be confused with relative momentum or the momentum indicator, serves as a timing instrument for both individual assets and entire markets.
Gary Antonacci , a key contributor to the absolute momentum strategy (find study below), emphasizes its effectiveness in multi-asset portfolios and its importance in long-only investing. This is particularly evident in a) reducing downside volatility and b) mitigating behavioral biases.
Moskowitz, Ooi, and Pedersen document significant 'time series momentum' across various asset classes, including equity index, currency, commodity, and bond futures, in 58 liquid instruments (find study below). There's a notable persistence in returns ranging from one to 12 months, which tends to partially reverse over longer periods. This pattern aligns with sentiment theories suggesting initial under-reaction followed by delayed over-reaction.
Despite its surprising ease of implementation, the academic community has successfully measured the effects of absolute momentum across decades and in every major asset class, including stocks, bonds, commodities, and foreign exchange (FX).
Strategies for Implementing Absolute Momentum:
To Buy a Stock:
Select a Look-Back Period: Choose a historical period to analyze the stock's performance. A common period is 12 months, but this can vary based on your investment strategy.
Calculate Excess Return: Determine the stock's excess return over this period. You can also assume a risk-free rate of "0" to simplify the process.
Evaluate Momentum:
If the excess return is positive, it indicates positive absolute momentum. This suggests the stock is in an upward trend and could be a good buying opportunity.
If the excess return is negative, it suggests negative momentum, and you might want to delay buying.
Consider further conditions: Align your decision with broader market trends, economic indicators, or fundamental analysis, for additional context.
To Sell a Stock You Own:
Regularly Monitor Performance: Use the same look-back period as for buying (e.g., 12 months) to regularly assess the stock's performance.
Check for Negative Momentum: Calculate the excess return for the look-back period. Again, you can assume a risk-free rate of "0" to simplify the process. If the stock shows negative momentum, it might be time to consider selling.
Consider further conditions:Align your decision with broader market trends, economic indicators, or fundamental analysis, for additional context.
Important note: Note: Entering a position (i.e., buying) based on positive absolute momentum doesn't necessarily mean you must sell it if it later exhibits negative absolute momentum. You can initiate a position using positive absolute momentum as an entry indicator and then continue holding it based on other criteria, such as fundamental analysis.
General Tips:
Reassessment Frequency: Decide how often you will reassess the momentum (monthly, quarterly, etc.).
Remember, while absolute momentum provides a systematic approach, it's recommendable to consider it as part of a broader investment strategy that includes diversification, risk management, fundamental analysis, etc.
Relevant Capital Market Studies:
Antonacci, Gary. "Absolute momentum: A simple rule-based strategy and universal trend-following overlay." Available at SSRN 2244633 (2013)
Moskowitz, Tobias J., Yao Hua Ooi, and Lasse Heje Pedersen. "Time series momentum." Journal of financial economics 104.2 (2012): 228-250
Stx Monthly Trades ProfitMonthly profit displays profits in a grid and allows you to know the gain related to the investment during each month.
The profit could be computed in terms of gain/trade_cost or as percentage of equity update.
Settings:
- Profit: Monthly profit percentage or percentage of equity
- Table position
This strategy is intended only as a container for the code and for testing the script of the profit table.
Setting of strategy allows to select the test case for this snippet (percentage grid).
Money management: not relevant as strategy is a test case.
This script stand out as take in account the gain of each trade in relation to the capital invested in each trade. For example consider the following scenario:
Capital of 1000$ and we invest a fixed amount of 1000$ (I know is too risky but is a good example), we gain 10% every month.
After 10 months our capital is of 2000$ and our strategy is perfect as we have the same performance every month.
Instead, evaluating the percentage of equity we have 10% the first month, 9.9% the second (1200$/1100$ - 1) and 5.26% the tenth month. So seems that strategy degrade with times but this is not true.
For this reason, to evaluate my strategy I prefer to see the montly return of investment.
WARNING: The strategy provided with this script is only a test case and allows to see the behavior with different "trades" management, for these reason commision are set to zero.
At the moment only the provided test cases are handled:
test 1 - single entry and single exit;
test 2 - single entry and multiple exits;
test 3 - single entry and switch position;
Cryptocurrency Cointegration Matrix (SpiritualHealer117)This indicator plots a cointegration matrix for the pairings of 100 cryptocurrencies. The matrix is populated with ADF t-stats (from an ADF-test with 1 lag). An ADF-test (Augmented Dickey-Fuller test) tests the null hypothesis that an AR process has a unit root. If rejected, the alternative hypothesis is usually that the AR process is either stationary or trend-stationary. This model extends upon Lejmer's Cointegration Matrix for forex by enabling the indicator to use cryptocurrency pairs and allows for significantly more pairs to be analyzed using the group selection feature. This indicator arose from collaboration with TradingView user CryptoJuju.
This indicator runs an ADF-test on the residuals (spread) of each pairing (i.e. a cointegration test). It tests if there is a unit root in the spread between the two assets of a pairing. If there is a unit root in the spread, it means the spread varies randomly over time, and any mean reversion in the spread is very hard to predict. By contrast, if a unit root does not exist, the spread (distance between the assets) should remain more or less constant over time, or rise/fall in close to the same rate over time. The more negative the number from an ADF-test, the stronger the rejection of the idea that the spread has a unit root. In statistics, there are different levels which correspond with the confidence level of the test. For this indicator, -3.238 equals a confidence level of 90%, -3.589 equals a confidence level of 95% and -4.375 equals a confidence level of 99% that there is not a unit root. So the colors are based on the confidence level of the test statistic (the t-stat, i.e. the number of the pairing in the matrix). So if the number is greater than -3.238 it is green, if it's between -3.238 and -3.589 it's yellow, if it's between -3.589 and -4.375 it's orange, and if its lower than -4.375 it's red.
There are multiple ways to interpret the results. A strong rejection of the presence of a unit root (i.e. a value of -4.375 or below) is not a guarantee that there is no unit root, or that any of the two alternative hypotheses (that the spread is stationary or trend-stationary) are correct. It only means that in 99% of the cases, if the spread is an AR process, the test is right, and there is no unit root in the spread. Therefore, the results of this test is no guarantee that the result proves one of the alternative solutions. Green therefore means that a unit root cannot be ruled out (which can be interpreted as "the two cryptocurrencies probably don't move together over time"), and red means that a unit root is likely not present (which can be interpreted as "the two cryptocurrencies may move together over time").
One possible way to use this indicator is to make sure you don't trade two pairs that move together at the same time. So basically the idea is that if you already have a trade open in one of the currency pairs of the pairing, only enter a trade in the other currency pair of that pairing if the color is green, or you may be doubling your risk. Alternatively, you could implement this indicator into a pairs trading system, such as a simple strategy where you buy the spread between two cryptocurrencies with a red result when the spread's value drops one standard deviation away from its moving average, and conversely sell when it moves up one standard deviation above the moving average. However, this strategy is not guaranteed to work, since historical data does not guarantee the future.
Specific to this indicator, there are 100 different cryptocurrency tickers which are included in the matrix, and the cointegration matrices between all the tickers can be checked by switching asset group 1 and asset group 2 to different asset groups. The ADF test is computed using a specified length, and if there is insufficient data for the length, the test produces a grayed out box.
NOTE: The indicator can take a while to load since it computes the value of 400 ADF tests each time it is run.
Ranges With Targets [ChartPrime]The Ranges With Targets indicator is a tool designed to assist traders in identifying potential trading opportunities on a chart derived from breakout trading. It dynamically outlines ranges with boxes in real-time, providing a visual representation of price movements. When a breakout occurs from a range, the indicator will begin coloring the candles. A green candle signals a long breakout, suggesting a potential upward movement, while a red candle indicates a short breakout, suggesting a potential downward movement. Grey candles indicate periods with no active trade. Ranges are derived from daily changes in price action.
This indicator builds upon the common breakout theory in trading whereby when price breaks out of a range; it may indicate continuation in a trend.
Additionally, users have the ability to customize their risk-reward settings through a multiplier referred to as the Target input. This allows traders to set their Take Profit (TP) and Stop Loss (SL) levels according to their specific risk tolerance and trading strategy.
Furthermore, the indicator offers an optional stop loss setting that can automatically exit losing trades, providing an additional layer of risk management for users who choose to utilize this feature.
A dashboard is provided in the top right showing the statistics and performance of the indicator; winning trades; losing trades, gross profit and loss and PNL. This can be useful when analyzing the success of breakout trading on a particular asset or timeframe.
Expected Move by Option's Implied Volatility High Liquidity
This script plots boxes to reflect weekly, monthly and yearly expected moves based on "At The Money" put and call option's implied volatility.
Symbols in range: This script will display Expected Move data for Symbols with high option liquidity.
Weekly Updates: Each weekend, the script is updated with fresh expected move data, a job that takes place every Saturday following the close of the markets on Friday.
In the provided script, several boxes are created and plotted on a price chart to represent the expected price moves for various timeframes.
These boxes serve as visual indicators to help traders and analysts understand the expected price volatility.
Definition of Expected Move: Expected Move refers to the anticipated range within which the price of an underlying asset is expected to move over a specific time frame, based on the current implied volatility of its options. Calculation: Expected Move is typically calculated by taking the current stock price and applying a multiple of the implied volatility. The most commonly used multiple is the one-standard-deviation move, which encompasses approximately 68% of potential price outcomes.
Example: Suppose a stock is trading at $100, and the implied volatility of its options is 20%. The one-standard-deviation expected move would be $100 * 0.20 = $20.
This suggests that there is a 68% probability that the stock's price will stay within a range of $80 to $120 over the specified time frame. Usage: Traders and investors use the expected move as a guideline for setting trading strategies and managing risk. It helps them gauge the potential price swings and make informed decisions about buying or selling options.There is a 68% chance that the underlying asset stock or ETF price will be within the boxed area at option expiry. The data on this script is updating weekly at the close of Friday, calculating the implied volatility for the week/month/year based on the "at the money" put and call options with the relevant expiry. This script will display Expected Move data for Symbols within the range of JBL-NOTE in alphabetical order.
In summary, implied volatility reflects market expectations about future price volatility, especially in the context of options. Expected Move is a practical application of implied volatility, helping traders estimate the likely price range for an asset over a given period. Both concepts play a vital role in assessing risk and devising trading strategies in the options and stock markets.
StrategyDashboardLibrary ”StrategyDashboard”
Hey, everybody!
I haven’t done anything here for a long time, I need to get better ^^.
In my strategies, so far private, but not about that, I constantly use dashboards, which clearly show how my strategy is working out.
Of course, you can also find a number of these parameters in the standard strategy window, but I prefer to display everything on the screen, rather than digging through a bunch of boxes and dropdowns.
At the moment I am using 2 dashboards, which I would like to share with you.
1. monthly(isShow)
this is a dashboard with the breakdown of profit by month in per cent. That is, it displays how much percentage you made or lost in a particular month, as well as for the year as a whole.
Parameters:
isShow (bool) - determine allowance to display or not.
2. total(isShow)
The second dashboard displays more of the standard strategy information, but in a table format. Information from the series “number of consecutive losers, number of consecutive wins, amount of earnings per day, etc.”.
Parameters:
isShow (bool) - determine allowance to display or not.
Since I prefer the dark theme of the interface, now they are adapted to it, but in the near future for general convenience I will add the ability to adapt to light.
The same goes for the colour scheme, now it is adapted to the one I use in my strategies (because the library with more is made by cutting these dashboards from my strategies), but will also make customisable part.
If you have any wishes, feel free to write in the comments, maybe I can implement and add them in the next versions.
Statistics TableStrategy Statistics
This library will add a table with statistics from your strategy. With this library, you won't have to switch to your strategy tester tab to view your results and positions.
Usage:
You can choose whether to set the table by input fields by adding the below code to your strategy or replace the parameters with the ones you would like to use manually.
// Statistics table options.
statistics_table_enabled = input.string(title='Show a table with statistics', defval='YES', options= , group='STATISTICS')
statistics_table_position = input.string(title='Position', defval='RIGHT', options= , group='STATISTICS')
statistics_table_margin = input.int(title='Table Margin', defval=10, minval=0, maxval=100, step=1, group='STATISTICS')
statistics_table_transparency = input.int(title='Cell Transparency', defval=20, minval=1, maxval=100, step=1, group='STATISTICS')
statistics_table_text_color = input.color(title='Text Color', defval=color.new(color.white, 0), group='STATISTICS')
statistics_table_title_cell_color = input.color(title='Title Cell Color', defval=color.new(color.gray, 80), group='STATISTICS')
statistics_table_cell_color = input.color(title='Cell Color', defval=color.new(color.purple, 0), group='STATISTICS')
// Statistics table init.
statistics.table(strategy.initial_capital, close, statistics_table_enabled, statistics_table_position, statistics_table_margin, statistics_table_transparency, statistics_table_text_color, statistics_table_title_cell_color, statistics_table_cell_color)
Sample:
If you are interested in the strategy used for this statistics table, you can browse the strategies on my profile.
Backtest Strategy Optimizer AdapterBacktest Strategy Optimizer Adapter
With this library, you will be able to run one or multiple backtests with different variables (combinations). For example, you can run 100 backtests of Supertrend at once with an increment factor of 0.1. This way, you can easily fetch the most profitable settings and apply them to your strategy.
To get a better understanding of the code, you can check the code below.
Single backtest results
= backtest.results(date_start, date_end, long_entry, long_exit, take_profit_percentage, stop_loss_percentage, atr_length, initial_capital, order_size, commission)
Add backtest results to a table
backtest.table(initial_capital, profit_and_loss, open_balance, winrate, entries, exits, wins, losses, backtest_table_position, backtest_table_margin, backtest_table_transparency, backtest_table_cell_color, backtest_table_title_cell_color, backtest_table_text_color)
Backtest result without chart labels
= backtest.run(date_start, date_end, long_entry, long_exit, take_profit_percentage, stop_loss_percentage, atr_length, initial_capital, order_size, commission)
Backtest result profit
profit = backtest.profit(date_start, date_end, long_entry, long_exit, take_profit_percentage, stop_loss_percentage, atr_length, initial_capital, order_size, commission)
Backtest result winrate
winrate = backtest.winrate(date_start, date_end, long_entry, long_exit, take_profit_percentage, stop_loss_percentage, atr_length, initial_capital, order_size, commission)
Start Date
You can set the start date either by using a timestamp or a number that refers to the number of bars back.
Stop Loss / Take Profit Issue
Unfortunately, I did not manage to achieve 100% accuracy for the take profit and stop loss. The original TradingView backtest can stop at the correct position within a bar using the strategy.exit stop and limit variables. However, it seems unachievable with a crossunder/crossover function in PineScript unless it is calculated on every tick (which would make the backtesting results invalid). So far, I have not found a workaround, and I would be grateful if someone could solve this issue, if it is even possible. If you have any solutions or fixes, please let me know!
Multiple Backtest Results / Optimizer
You can run multiple backtests in a single strategy or indicator, but there are certain requirements for placing the correct code in the right way. To view examples of running multiple backtests, you can refer to the links provided in the updates I posted below. In the samples I have also explained how you can auto-generate code for your backtest strategy.
Financial PlusFinancial Plus is an indicator designed to provide users with the flexibility to select up to 10 different financial metrics within four key categories: Statistics, Income Statements, Balance Sheets, and Cash Flow. Powered by Pine Script's request.financial() function, this library offers access to over 200 financial metrics.
You can choose from multiple frequency options, such as FQ (quarterly) , FY (yearly) , TTM (trailing twelve months) , and FH (semiannual) , depending on the availability of each metric. For detailed information regarding specific metrics and their supported frequencies, please consult Financial IDs .
BarChangeDeltaThe "BarChangeDelta" indicator, facilitates the calculation of price delta or percent changes between user-defined start and end points within the current or between preceding and current bars. It offers several customizable options to fit various trading strategies.
// ================================================== INFO ==================================================
This indicator provides the following key functionalities:
- Two Modes:
* PreviousToCurrentBarDelta: Compares user-selected start points from the previous bar to the end points of the current bar.
* CurrentBarDelta: Compares user-selected start and end points within the current bar.
- Start Point/End Point Customization: Allows users to define the source for start and end points used in the delta calculations.
- ABS Mode: Option to display only absolute values, reflected on the histogram drawn.
- Show delta in percents: Enables users to calculate delta in percentage changes instead of price delta.
- Moving Average (MA) Plot: A plot of the MA of the last user-defined number of delta prices or percents.
// ================================================== NOTES ==================================================
The "BarChangeDelta" indicator finds practical application in various trading scenarios. It can be particularly useful for assessing daily price changes between open/close or high/low for determining strike prices, especially for 0DTE trading.
Z-ScoreThe "Z-Score" indicator is a unique and powerful tool designed to help traders identify overbought and oversold conditions in the market. Below is an explanation of its features, usefulness, and what makes it special:
Features:
Z-Score Calculation: The indicator calculates the Z-Score, a statistical measure that represents how far the current price is from the moving average (MA) in terms of standard deviations. It helps identify extreme price movements.
Customizable Parameters: Traders can adjust key parameters such as the Z-Score threshold, the type of MA (e.g., SMA, EMA), and the length of the moving average to suit their trading preferences.
Signal Options: The indicator offers flexibility in terms of signaling. Traders can choose whether to trigger signals when the Z-Score crosses the specified threshold or when it moves away from the threshold.
Visual Signals : Z-Score conditions are represented visually on the chart with color-coded background highlights. Overbought conditions are marked with a red background, while oversold conditions are indicated with a green background.
Information Table: A dynamic information table displays essential details, including the MA type, MA length, MA value, standard deviation, current price, and Z-Score. This information table helps traders make informed decisions.
Usefulness:
Overbought and Oversold Signals: Z-Score is particularly valuable for identifying overbought and oversold market conditions. Traders can use this information to potentially enter or exit positions.
Statistical Analysis: The Z-Score provides a statistical measure of price deviation, offering a data-driven approach to market analysis.
Customization: Traders can customize the indicator to match their trading strategies and preferences, enhancing its adaptability to different trading styles.
Visual Clarity: The visual signals make it easy for traders to quickly spot potential trade opportunities on the price chart.
In summary, the Z-Score indicator is a valuable tool for traders looking to incorporate statistical analysis into their trading strategies. Its customizability, visual signals, and unique statistical approach make it an exceptional choice for identifying overbought and oversold market conditions and potential trading opportunities.
Expected Move by Option's Implied Volatility Symbols: EAT - GBDC
This script plots boxes to reflect weekly, monthly and yearly expected moves based on "At The Money" put and call option's implied volatility.
Symbols in range: This script will display Expected Move data for Symbols within the range of EAT-GDBC in alphabetical order.
Weekly Updates: Each weekend, the script is updated with fresh expected move data, a job that takes place every Saturday following the close of the markets on Friday.
In the provided script, several boxes are created and plotted on a price chart to represent the expected price moves for various timeframes.
These boxes serve as visual indicators to help traders and analysts understand the expected price volatility.
Definition of Expected Move: Expected Move refers to the anticipated range within which the price of an underlying asset is expected to move over a specific time frame, based on the current implied volatility of its options. Calculation: Expected Move is typically calculated by taking the current stock price and applying a multiple of the implied volatility. The most commonly used multiple is the one-standard-deviation move, which encompasses approximately 68% of potential price outcomes.
Example: Suppose a stock is trading at $100, and the implied volatility of its options is 20%. The one-standard-deviation expected move would be $100 * 0.20 = $20.
This suggests that there is a 68% probability that the stock's price will stay within a range of $80 to $120 over the specified time frame. Usage: Traders and investors use the expected move as a guideline for setting trading strategies and managing risk. It helps them gauge the potential price swings and make informed decisions about buying or selling options. There is a 68% chance that the underlying asset stock or ETF price will be within the boxed area at option expiry. The data on this script is updating weekly at the close of Friday, calculating the implied volatility for the week/month/year based on the "at the money" put and call options with the relevant expiry.
In summary, implied volatility reflects market expectations about future price volatility, especially in the context of options. Expected Move is a practical application of implied volatility, helping traders estimate the likely price range for an asset over a given period. Both concepts play a vital role in assessing risk and devising trading strategies in the options and stock markets.
Expected Move by Option's Implied Volatility Symbols: CLFD-EARN This script plots boxes to reflect weekly, monthly and yearly expected moves based on "At The Money" put and call option's implied volatility.
Symbols in range: This script will display Expected Move data for Symbols within the range of CLFD - EARN in alphabetical order.
Weekly Updates: Each weekend, the script is updated with fresh expected move data, a job that takes place every Saturday following the close of the markets on Friday.
In the provided script, several boxes are created and plotted on a price chart to represent the expected price moves for various timeframes.
These boxes serve as visual indicators to help traders and analysts understand the expected price volatility.
Definition of Expected Move: Expected Move refers to the anticipated range within which the price of an underlying asset is expected to move over a specific time frame, based on the current implied volatility of its options. Calculation: Expected Move is typically calculated by taking the current stock price and applying a multiple of the implied volatility. The most commonly used multiple is the one-standard-deviation move, which encompasses approximately 68% of potential price outcomes.
Example: Suppose a stock is trading at $100, and the implied volatility of its options is 20%. The one-standard-deviation expected move would be $100 * 0.20 = $20.
This suggests that there is a 68% probability that the stock's price will stay within a range of $80 to $120 over the specified time frame. Usage: Traders and investors use the expected move as a guideline for setting trading strategies and managing risk. It helps them gauge the potential price swings and make informed decisions about buying or selling options. There is a 68% chance that the underlying asset stock or ETF price will be within the boxed area at option expiry. The data on this script is updating weekly at the close of Friday, calculating the implied volatility for the week/month/year based on the "at the money" put and call options with the relevant expiry.
In summary, implied volatility reflects market expectations about future price volatility, especially in the context of options. Expected Move is a practical application of implied volatility, helping traders estimate the likely price range for an asset over a given period. Both concepts play a vital role in assessing risk and devising trading strategies in the options and stock markets.
Expected Move by Option's Implied Volatility Symbols: B - CLF
This script plots boxes to reflect weekly, monthly and yearly expected moves based on "At The Money" put and call option's implied volatility.
Symbols in range: This script will display Expected Move data for Symbols within the range of B - CLF in alphabetical order.
Weekly Updates: Each weekend, the script is updated with fresh expected move data, a job that takes place every Saturday following the close of the markets on Friday.
In the provided script, several boxes are created and plotted on a price chart to represent the expected price moves for various timeframes.
These boxes serve as visual indicators to help traders and analysts understand the expected price volatility.
Definition of Expected Move: Expected Move refers to the anticipated range within which the price of an underlying asset is expected to move over a specific time frame, based on the current implied volatility of its options. Calculation: Expected Move is typically calculated by taking the current stock price and applying a multiple of the implied volatility. The most commonly used multiple is the one-standard-deviation move, which encompasses approximately 68% of potential price outcomes.
Example: Suppose a stock is trading at $100, and the implied volatility of its options is 20%. The one-standard-deviation expected move would be $100 * 0.20 = $20.
This suggests that there is a 68% probability that the stock's price will stay within a range of $80 to $120 over the specified time frame. Usage: Traders and investors use the expected move as a guideline for setting trading strategies and managing risk. It helps them gauge the potential price swings and make informed decisions about buying or selling options. There is a 68% chance that the underlying asset stock or ETF price will be within the boxed area at option expiry. The data on this script is updating weekly at the close of Friday, calculating the implied volatility for the week/month/year based on the "at the money" put and call options with the relevant expiry.
In summary, implied volatility reflects market expectations about future price volatility, especially in the context of options. Expected Move is a practical application of implied volatility, helping traders estimate the likely price range for an asset over a given period. Both concepts play a vital role in assessing risk and devising trading strategies in the options and stock markets.
OI Visible Range Ladder [Kioseff Trading]Hello!
This Script “OI Visible Range Ladder” calculates open interest profiles for the visible range alongside an OI ladder for the visible period!
Features
OI Profile Anchored to Visible Range
OI Ladder Anchored to Visible Range
Standard POC and Value Area Lines, in Addition to Separated POCs and Value Area Lines for each category of OI x Price
Configurable Value Area Targets
Curved Profiles
Up to 9999 Profile Rows per Visible Range
Stylistic Options for Profiles
Up to 9999 volume profile levels (Price levels) can be calculated for each profile, thanks to the new polyline feature, allowing for less aggregation / more precision of open interest at price.
The image above shows primary functionality!
Green profiles = Up OI / Up Price
Yellow profiles = Down OI / Up Price
Purple profiles = Up OI / Down Price
Red profiles = Down OI / Down Price
The image above shows POCs for each OI x Price category!
Profiles can be anchored on the left side for a more traditional look.
The indicator is robust enough to calculate on “small price periods”, or for a price period spanning your entire chart fully zoomed out!
That’s about it :D
This indicator is Part of a series titled “Bull vs. Bear” - a suite of profile-like indicators.
Thanks for checking this out!
If you have any suggestions please feel free to share!
SPTS_StatsPakLibFinally getting around to releasing the library component to the SPTS indicator!
This library is packed with a ton of great statistics functions to supplement SPTS, these functions add to the capabilities of SPTS including a forecast function.
The library includes the following functions
1. Linear Regression (single independent and single dependent)
2. Multiple Regression (2 independent variables, 1 dependent)
3. Standard Error of Residual Assessment
4. Z-Score
5. Effect Size
6. Confidence Interval
7. Paired Sample Test
8. Two Tailed T-Test
9. Qualitative assessment of T-Test
10. T-test table and p value assigner
11. Correlation of two arrays
12. Quadratic correlation (curvlinear)
13. R Squared value of 2 arrays
14. R Squared value of 2 floats
15. Test of normality
16. Forecast function which will push the desired forecasted variables into an array.
One of the biggest added functionalities of this library is the forecasting function.
This function provides an autoregressive, trainable model that will export forecasted values to 3 arrays, one contains the autoregressed forecasted results, the other two contain the upper confidence forecast and the lower confidence forecast.
Hope you enjoy and find use for this!
Library "SPTS_StatsPakLib"
f_linear_regression(independent, dependent, len, variable)
TODO: creates a simple linear regression model between two variables.
Parameters:
independent (float)
dependent (float)
len (int)
variable (float)
Returns: TODO: returns 6 float variables
result: The result of the regression model
pear_cor: The pearson correlation of the regresion model
rsqrd: the R2 of the regression model
std_err: the error of residuals
slope: the slope of the model (coefficient)
intercept: the intercept of the model (y = mx + b is y = slope x + intercept)
f_multiple_regression(y, x1, x2, input1, input2, len)
TODO: creates a multiple regression model between two independent variables and 1 dependent variable.
Parameters:
y (float)
x1 (float)
x2 (float)
input1 (float)
input2 (float)
len (int)
Returns: TODO: returns 7 float variables
result: The result of the regression model
pear_cor: The pearson correlation of the regresion model
rsqrd: the R2 of the regression model
std_err: the error of residuals
b1 & b2: the slopes of the model (coefficients)
intercept: the intercept of the model (y = mx + b is y = b1 x + b2 x + intercept)
f_stanard_error(result, dependent, length)
x TODO: performs an assessment on the error of residuals, can be used with any variable in which there are residual values (such as moving averages or more comlpex models)
param x TODO: result is the output, for example, if you are calculating the residuals of a 200 EMA, the result would be the 200 EMA
dependent: is the dependent variable. In the above example with the 200 EMA, your dependent would be the source for your 200 EMA
Parameters:
result (float)
dependent (float)
length (int)
Returns: x TODO: the standard error of the residual, which can then be multiplied by standard deviations or used as is.
f_zscore(variable, length)
TODO: Calculates the z-score
Parameters:
variable (float)
length (int)
Returns: TODO: returns float z-score
f_effect_size(array1, array2)
TODO: Calculates the effect size between two arrays of equal scale.
Parameters:
array1 (float )
array2 (float )
Returns: TODO: returns the effect size (float)
f_confidence_interval(array1, array2, ci_input)
TODO: Calculates the confidence interval between two arrays
Parameters:
array1 (float )
array2 (float )
ci_input (float)
Returns: TODO: returns the upper_bound and lower_bound cofidence interval as float values
paired_sample_t(src1, src2, len)
TODO: Performs a paired sample t-test
Parameters:
src1 (float)
src2 (float)
len (int)
Returns: TODO: Returns the t-statistic and degrees of freedom of a paired sample t-test
two_tail_t_test(array1, array2)
TODO: Perofrms a two tailed t-test
Parameters:
array1 (float )
array2 (float )
Returns: TODO: Returns the t-statistic and degrees of freedom of a two_tail_t_test sample t-test
t_table_analysis(t_stat, df)
TODO: This is to make a qualitative assessment of your paired and single sample t-test
Parameters:
t_stat (float)
df (float)
Returns: TODO: the function will return 2 string variables and 1 colour variable. The 2 string variables indicate whether the results are significant or not and the colour will
output red for insigificant and green for significant
t_table_p_value(df, t_stat)
TODO: This performs a quantaitive assessment on your t-tests to determine the statistical significance p value
Parameters:
df (float)
t_stat (float)
Returns: TODO: The function will return 1 float variable, the p value of the t-test.
cor_of_array(array1, array2)
TODO: This performs a pearson correlation assessment of two arrays. They need to be of equal size!
Parameters:
array1 (float )
array2 (float )
Returns: TODO: The function will return the pearson correlation.
quadratic_correlation(src1, src2, len)
TODO: This performs a quadratic (curvlinear) pearson correlation between two values.
Parameters:
src1 (float)
src2 (float)
len (int)
Returns: TODO: The function will return the pearson correlation (quadratic based).
f_r2_array(array1, array2)
TODO: Calculates the r2 of two arrays
Parameters:
array1 (float )
array2 (float )
Returns: TODO: returns the R2 value
f_rsqrd(src1, src2, len)
TODO: Calculates the r2 of two float variables
Parameters:
src1 (float)
src2 (float)
len (int)
Returns: TODO: returns the R2 value
test_of_normality(array, src)
TODO: tests the normal distribution hypothesis
Parameters:
array (float )
src (float)
Returns: TODO: returns 4 variables, 2 float and 2 string
Skew: the skewness of the dataset
Kurt: the kurtosis of the dataset
dist = the distribution type (recognizes 7 different distribution types)
implication = a string assessment of the implication of the distribution (qualitative)
f_forecast(output, input, train_len, forecast_length, output_array, upper_array, lower_array)
TODO: This performs a simple forecast function on a single dependent variable. It will autoregress this based on the train time, to the desired length of output,
then it will push the forecasted values to 3 float arrays, one that contains the forecasted result, 1 that contains the Upper Confidence Result and one with the lower confidence
result.
Parameters:
output (float)
input (float)
train_len (int)
forecast_length (int)
output_array (float )
upper_array (float )
lower_array (float )
Returns: TODO: Will return 3 arrays, one with the forecasted results, one with the upper confidence results, and a final with the lower confidence results. Example is given below.
Global Leaders M2Introducing the Global Leaders M2 Indicator
The Global Leaders M2 indicator is a comprehensive tool designed to provide you with crucial insights into the money supply (M2) of the world's top 10 economic powerhouses. This powerful indicator offers a wealth of information to help you make informed decisions in the financial markets.
Key Features:
Multi-Country M2 Data: Access M2 data for the world's top 10 economic leaders, including China, the United States, Japan, Germany, the United Kingdom, France, Italy, Canada, Russia, and India.
Rate of Change Analysis: Understand the rate of change in M2 data for each country and the overall global aggregate, allowing you to gauge the momentum of monetary supply.
Customizable Display: Tailor your chart to display the data of specific countries, or focus on the total global M2 value based on your preferences.
Currency Selection: Choose your preferred currency for displaying the M2 data, making it easier to work with data in your currency of choice.
Interactive Overview Table: Get an overview of M2 data for each country and the global total in an interactive table, complete with color-coded indicators to help you quickly spot trends.
Precision and Clarity: The indicator provides precision to two decimal places and uses color coding to differentiate between positive and negative rate of change.
Whether you're a seasoned investor or a newcomer to the world of finance, the Global Leaders M2 indicator equips you with valuable data and insights to guide your financial decisions. Stay on top of global monetary supply trends, and trade with confidence using this user-friendly and informative tool.
Gap Statistics (Zeiierman)█ Overview
The Gap Statistics (Zeiierman) indicator is crafted to monitor, analyze, and visually present price gaps on a trading chart. Price gaps are areas on a chart where the price jumps up or down from the previous close to the next open, creating a "gap" in the normal price pattern. This script delivers an extensive range of statistics related to these gaps, encompassing their size, direction (whether bullish or bearish), frequency of getting filled, as well as the average number of bars it takes for a gap to be filled. The indicator also visually represents the gaps, making it easier for traders to spot and analyze them.
█ How It Works
Gap Identification: The script identifies gaps by comparing the open price of a bar to the close price of the previous bar. If there is a discrepancy between the two, it is recognized as a gap.
Gap Classification: Once a gap is identified, it is classified based on its size (as a percentage of the previous close price) and direction (bullish or bearish). The gap is then added to a specific category based on its size.
Gap Tracking: The script keeps track of all identified gaps using arrays and user-defined types, storing details like their size, direction, and whether they have been filled.
Gap Filling: The script continuously monitors the price to check if any previously identified gaps get filled. A gap is considered filled if the price moves back into the gap area.
Statistics and Alerts: The script calculates various statistics like the total number of gaps, the number of filled gaps, the average number of bars it takes for a gap to fill, and the percentage of gaps that get filled. It also generates alerts when a new gap is identified or an existing gap gets filled.
█ How to Use
Gaps are often classified into four main types:
Common Gaps: These are not associated with any major news and are likely to get filled quickly.
Breakaway Gaps: These occur at the end of a price pattern and signal the beginning of a new trend.
Runaway Gaps: Also known as continuation gaps, these occur in the middle of a trend and signal a surge in interest in the stock.
Exhaustion Gaps: These occur near the end of a price pattern and signal a final attempt to hit new highs or lows.
The Gap Statistics (Zeiierman) indicator enhances a trader's ability to use gaps in their trading strategy in several ways:
Statistical Analysis: Traders get comprehensive statistics on gaps, such as their size, direction, and how often they get filled.
Performance Tracking: The indicator tracks how many bars it typically takes for a gap to fill, providing traders with an average timeframe for gap closure.
█ Settings
Display Gaps: Choose to display "All Gaps," "Active Gaps," or "None."
Show Gap Size: Toggle on/off the display of the gap size.
-----------------
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!
RSI Heatmap Screener [ChartPrime]The RSI Heatmap Screener is a versatile trading indicator designed to provide traders and investors with a deep understanding of their selected assets' market dynamics. It offers several key features to facilitate informed decision-making:
█ Custom Asset Selection:
The user can choose up to 30 assets that you want to analyze, allowing for a tailored experience.
█ Adjustable RSI Length:
Customize your analysis by adjusting the RSI length to align with your trading strategy.
█ RSI Heatmap:
The heatmap feature uses various colors to represent RSI values:
█ Color coding for labels:
Grey: Signifies a neutral RSI, indicating a balanced market.
Yellow: Suggests overbought conditions, advising caution.
Pale Red: Indicates mild overbought conditions in a strong area.
Bright Red: Represents strong overbought conditions, hinting at a potential downturn.
Pale Green: Signals mild oversold conditions with signs of recovery.
Dark Green: Denotes full oversold conditions, with potential for a bounce.
Purple: Highlights extremely oversold conditions, pointing to an opportunity for a relief bounce.
█ Levels:
Central Plot and Zones: The central plot displays the average RSI of the selected assets, offering an overview of market sentiment. Overbought and oversold zones in red and green provide clear reference points.
█ Hover Labels:
Hover over an asset to access details on various indicators like VWAP, Stochastic, SMA, TradingView ranking, and Volume Rating. Bullish and bearish indicators are marked with ticks and crosses, and a fire emoji denotes heavily overextended assets.
█ TradingView Ranking:
Utilize the TradingView ranking metric to assess an asset's performance and popularity.
Thank you to @tradingview for this ranking metric.
█ Volume Rating:
Gain insights into trading volumes for more informed decision-making.
█ Oscillator at the Bottom:
The RSI average for the entire market, presented in a normalized format, offers a broader market perspective. Green indicates a favorable buying area, while red suggests market overextension and potential short or sell opportunities.
█ Heatmap Visualization:
Historical RSI values for each selected asset are displayed. Red indicates overbought conditions, while green signals oversold conditions, helping you spot trends and potential turning points.
This screener is designed to make entering the market simpler and more comprehensive for all traders and investors.
Intraday Volume Rating [Honestcowboy]The Intraday Volume Rating aims to provide a clearer picture of what volume is telling you on intraday charts.
What is different to other forms of volume analysis
While Volume averages and other measures of volume base their calculations on the previous bars on the chart (for example bars 1954 to 1968). The average volume in this indicator measures expected volume during that time of the day.
🔷 Why would you take this approach?
Markets behave different during certain times of the day, also called sessions.
Here are a couple examples.
Asian Session (generally low volatility)
London Session (bigger volatility starts)
New York Session (overlap of New York with London creates huge volatility)
Generally when using other types of volume averaging it does not take into account these sessions and that the market has a pattern for volume in an intraday chart.
🔷 CALCULATION
Think of this script like an average of volume but instead it uses past days data instead of previous bars data.
This is a chart explaining the indicator this script is based on The same principle applies but instead we measure volume at each bar of the day.
The script also counts the number of bars that exist in a day on your current timeframe chart. After knowing that number it creates the matrix used in it's calculations and data storage.
See how it works perfectly on a lower timeframe chart below:
Getting this right was the hardest part, check the coding if you are interested in this type of stuff. I commented every step in the coding process.
Every setting of the script is commented so no need for further explanation, enjoy!