S&P 500 Growth CurvesThese curves are based on the growth of the money supply and the Fibonacci retracement levels. You can use this indicator to determine when the market is undervalued or overvalued. You can also see how often the price reacts to these curves.
ค้นหาในสคริปต์สำหรับ "美股标普500指数基金中国"
[CP]Pivot Boss Candlestick Scanner - No Repainting This indicator is based on the high probability candlestick patterns described in the ’Secrets of a Pivot Boss’ book.
The indicator does not suffer from repainting.
I have kept this indicator open source, so that you can take this indicator and design a complete trading system around it.
Although the patterns have some statistical edge in the markets, blindly using them as Buy/Sell Indicators will certainly result in a heavy loss.
I like some of these setups more than others, and I have listed them in the order of my likeness.
The first one I like the most, the last one, I like the least.
The patterns are universal and work well in both intraday, daily and even larger timeframes.
Signals in the example charts are manually marked by,
Hammer - profitable short signal
Rocket - profitable long signal
X - unprofitable long or short signal
GENERAL USER INPUTS:
These settings exist as the indicator uses ‘Labels’ to mark the patterns and Pine Script limits a maximum of 500 labels on a chart.
If you want to go back in the past and check how the indicator was doing, set the Start and End dates both and check the ’Use the date range above to mark the Candlestick Setups?’ option.
EXTREME REVERSAL SETUP:
This is by far my favorite setup in the lot. Classic Mean Reversion setup.
The logic, as explained in the book, goes like this,
1. The first bar of the pattern is about two times larger than the average size of the candles in the lookback period.
2. The body of the first bar of the pattern should encompass more than 50 percent of the bar’s total range, but usually not more than 85 percent.
3. The second bar of the pattern opposes the first.
The setup works extremely well in high beta stocks like Vedanta VEDL.
Feel free to play with the settings in order to better align this pattern with your favorite stock.
Check out the examples below,
No indicator is perfect, failed patterns are marked with an X.
OUTSIDE REVERSAL SETUP:
My second favorite setup, it is quite good at catching intraday trends.
Here’s the logic,
1. The engulfing bar of a bullish outside reversal setup has a low that is below the prior bar’s low and a close that is above the prior bar’s high. Reverse the conditions for bearish outside reversal.
2. The engulfing bar is usually 5 to 25 percent larger than the size of the average bar in the lookback period.
Settings for this pattern simply reflect these conditions. Feel free to modify them as you wish.
The pattern is pretty powerful and will sometimes help you catch literally all the highs and lows of the market, as shown in the examples of Vedanta VEDL and RELIANCE stocks below.
As usual, this pattern is not PERFECT either.
DOJI REVERSAL SETUP:
Doji candles signify market indecision and this pattern tries to profit off these market conditions.
Logic:
1. The open and close price of the doji should fall within 10 percent of each other, as measured by the total range of the candlestick.
2. For a bullish doji, the high of the doji candlestick should be below the ten-period simple moving average. Vice-versa for bearish.
3. For a bullish doji setup, one of the two bars following the doji must close above the high of the doji. Vice-versa for bearish.
Feel free to modify the settings and optimize according to the stock you are trading.
Don't optimize too much :)
This pattern works brilliantly well on larger intraday timeframes, like 15m/30m/60m.
This pattern also has a higher propensity to give false indications than the two described above.
Doji reversal typically helps to catch larger trend reversals. Check out the examples below from RELIANCE and NIFTY charts,
Note that the RELIANCE chart below is the same as shown for the Outside Reversal Setup above, notice the confluence of Outside
Reversal and Doji Reversal on the 31st August.
Confluence of patterns usually increases the probability of success.
RELIANCE 15m Chart - Pattern can catch nice trends on higher timeframes
NIFTY 15m Chart
WICK REVERSAL SETUP:
This pattern tries to capture candlesticks with large wick sizes, as they often indicate trend reversal when coupled with significant support and resistance levels.
Logic:
1. The body is used to determine the size of the reversal wick. A wick that is between 2.5 to 3.5 times larger than the size of the body is ideal.
2. For a bullish reversal wick to exist, the close of the bar should fall within the top 35 percent of the overall range of the candle.
3. For a bearish reversal wick to exist, the close of the bar should fall within the bottom 35 percent of the overall range of the candle.
This pattern must always be coupled with important support resistance levels, else there will be a lot of false signals.
The chart below is the same NIFTY chart as above with the Wick Reversal candles marked as well.
You can see that there are a lot of false signals, but the price also indicates ’pausing’ at important levels by printing a wick reversal setup.
You can use this information to your advantage when riding a trend.
FINAL WORDS:
Settings for various patterns simply reflect the logic described.
You will probably need to tweak and optimize the pattern settings for the stock that you are trading.
Higher Beta/Higher Volatility stocks are a great choice for these patterns.
Using these patterns at critical support and resistance levels will result in dramatically high accuracy.
Be creative and try to develop a proper system around this indicator, with rules for position sizing, stop loss etc.
You do not have to trade all the patterns. Even trading just one pattern with a proper system is good enough.
DO NOT USE THIS INDICATOR AS A BUY/SELL SYSTEM, YOU WILL LOSE MONEY.
Feel free to drop any feedback in the comments section below, or if you have any unique candlestick patterns that you would like me to code.
Relative Strength 3D Indicator [CC]This is a custom indicator of mine loosely based on the work by James Garofallou (Stocks and Commodities Sep 2020 pg 14) and this is meant for medium to long term trend confirmations. The idea behind this indicator is to capture 3 different dimensions of trend strength. The first dimension captures the overall strength of the underlying stock vs the market (in this case the S&P 500). The second dimension captures the overall trend strength by assigning a scoring system so when all faster moving averages are stronger than slower moving averages then it gets the max points. The final dimension is the strength of the overall strength of everything so far. Buy when the indicator line turns green and sell when it turns red.
Let me know if there are any other indicators or scripts you would like to see me publish!
CFD Ticks LevelsSimple but very effective script that finds areas of support and resistance through ticks exchange. Only works with CFDs
(You must enter in the settings the value corresponding to the CFD, example: US500 = 500, DAX30 = 30, FRANCE40 = 40 etc ...)
As usual, if you have any suggestions or bug reports don't hesitate.
Cheers
[BCT] Can BTC be predicted or is it purely random?Variance Ratio**This indicator can be applied to the ticker of your choice (not just BTC)**
Markets are said to be "efficient". An efficient market is by definition unpredictable - no matter the amount of ML, computation, or indicators thrown at it. In particular, in an efficient market, TA will not be of help.
An illustration of efficient markets is the WSJ's longstanding monkey vs. human contest:Blindfolded Monkey Beats Humans With Stock Picks, granted there are several flaws to it.
BTC is a relatively new market. New markets are typically highly inefficient (easier to make money) and become more and more efficient over time (harder to make money). How much more efficient is BTC becoming?
We apply the Variance Ratio method and apply it to BTC.
BACKGROUND ON THE VARIANCE RATIO METHOD
Based on 1988 MacKinlay's seminal paper "Stock Market Prices do not Follow a Random Walk", the idea is to exploit a phenomenon called "variance scaling".
For those keen on looking into the math, the short version of it is under the assumption of iid (random walk) we have the following:
H0: Var(Sum(returns over K bars))=Sum(Var(returns over 1 bar))=k*Var(return over 1 bar)
We look to reject or not H0 depending on the observations.
In this script, we compare the variance of the (log) returns for the chart selected between:
(1) The (average) variance over k bars (call this Vk)
(2) The (average) variance over 1 bar (call this V1)
H0 simply says that Vk=k*V1 if the stock follows a random walk.
We compute the Variance Ratio VR(k)=Variance(returns over k bar)/(Sum(Var(returns over 1 bar)))-1
We then compute the associated Z-score which we chart out for a configurable k number of bars.
HOW TO INTERPRET THE CHART
The line drawn is the Z-Score for VR(k). It represents the number of standard deviations of VR(k) from 0 - the further out, the less random.
- If the line is close / hovers around 0, the ticker appears to follow a random walk (i.e. may not be predictable)
- If the line is consistently > 2 or <-2, the ticker likely does not follow a random walk (i.e. may have predictable features)
- If the line is positive, it means that the Variance on the k bars is larger than the variance on 1 bar (more variance on longer timeframes)
- If the line is negative, it means that the Variance on the k bars is smaller than the variance on 1 bar (more variance on smaller timeframes)
USE CASES
- Identify timeframes where you won't be able to make money
- Identify whether a stock cannot be predicted (forget about TA, indicators etc. -- a random walk is not predictable)
- Identify whether a stock is becoming less and less predictable (Z-score amplitude will decrease over time)
FEATURES
- select the number of K bar to compare vs. 1 bar (default = 16) - ideally a power of 2 but any other number will work. The chart is based off this selection
- select the lookback period for the analysis (500 bars by default)
- select the source to analyze (default = close, but you may select other inputs to calculate the returns from)
- results form the statistical tests on different K's in the table on the right/bottom side of the chart (H0 rejected = not random walk; H0 not rejected = it essentially looks rather random and we can't conclude that it's not a random walk)
COMMENTARY ON BTC
- It appears BTC's absolute value of the ZScore on the Variance Ratio is declining year after year - corroborating an increasingly efficient market as new participants join.
- However, we can still detect a fair amount of potential inefficiency using this simple test.
As usual, this is not investment advice. DYOR.
With love,
🐵BCT🐵
Combo Backtest 123 Reversal & Smart Money Index (SMI) This is combo strategies for get a cumulative signal.
First strategy
This System was created from the Book "How I Tripled My Money In The
Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
The strategy buys at market, if close price is higher than the previous close
during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50.
The strategy sells at market, if close price is lower than the previous close price
during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
Second strategy
Smart money index (SMI) or smart money flow index is a technical analysis indicator demonstrating investors sentiment.
The index was invented and popularized by money manager Don Hays. The indicator is based on intra-day price patterns.
The main idea is that the majority of traders (emotional, news-driven) overreact at the beginning of the trading day
because of the overnight news and economic data. There is also a lot of buying on market orders and short covering at the opening.
Smart, experienced investors start trading closer to the end of the day having the opportunity to evaluate market performance.
Therefore, the basic strategy is to bet against the morning price trend and bet with the evening price trend. The SMI may be calculated
for many markets and market indices (S&P 500, DJIA, etc.)
The SMI sends no clear signal whether the market is bullish or bearish. There are also no fixed absolute or relative readings signaling
about the trend. Traders need to look at the SMI dynamics relative to that of the market. If, for example, SMI rises sharply when the
market falls, this fact would mean that smart money is buying, and the market is to revert to an uptrend soon. The opposite situation
is also true. A rapidly falling SMI during a bullish market means that smart money is selling and that market is to revert to a downtrend
soon. The SMI is, therefore, a trend-based indicator.
Some analysts use the smart money index to claim that precious metals such as gold will continually maintain value in the future.
WARNING:
- For purpose educate only
- This script to change bars colors.
Momentum Performance This Indicator displays the momentum (performance) of the symbol in percent.
You can compare the performance with other symbols.
The default benchmarks are the S&P 500, the MSCI World and the FTSE All World EX US.
The default length corresponds to one year in the timeframes monthly, weekly and daily.
In intraday the default length is 200, but you can also set your own setting.
You have also the opportunity to display a average momentum performance of the main symbol.
Relative Strength ComparisonThis indicator compares the difference in percentage change between two symbols
over a user-specified number of bars.
Default settings will show the difference between the current symbol and the
S&P 500 ETF (SPY) over 10 bars. It can be used to determine if the stock is
showing relative strength or weakness compared to the overall market.
SPX Intraday Mood IndicatorThe SPX Intraday Mood Indicator tries to gauge the intraday market direction of the S&P 500 (SPX) by focusing on internal market data.
Based on the 0DTE Mood Indicator concept. Overall strength/weakness is converted into a directional Mood Percentage which can help with choosing a trade type.
Use at your own risk and discretion. Potential trade ideas offer no guarantees. Intraday Charts Only. Turn off extended hours data. Only works on SPX.
This first version is untested and I am only sharing it to gather feedback on its accuracy, use at your own risk.
5MA_X_LThis is a 5 day moving average crossing long strategy in 10 min. chart, used in short term momentum trading strategy.
Momentum trading Strategy: When S&P 500 index is at up trend (or above 60 sma ), buy 10+ stocks in top 20% stock RS ranking at equal weight using this MA5X_L strategy. Change stocks when any stock exited by algorithm.
Back test start since 2020/7/1, each long entry for condition 1 is $30000, condition 2 is $20000, with max of 2 long positions.
Setup: 10 minutes chart
Buy condition 1) 3 wma cross up 195 wma (5day) 2) 3wma > 78wma > 195wma UP Trend Arrangement (UTA)
Exit condition 1) 3 wma cross under 195 wma 2) position profit > 20% and 3 wma cross under 6 ATRs line (green)
Stochastic Optimized Trend Tracker *Strategy*Stochastic OTT is Anıl Özekşi's latest derived version of Optimized Trend Tracker on Stochastic Oscillator.
He tried to solve the fake signals of Stochastic Oscillator by adopting OTT on the indicator.
He advised users to set the stochastic smoothing parameters to 500 and 200 on his latest video about SOTT.
He personally uses 1 min charts on stock market so the parameters of the indicator might have to be optimized for other time frames nad markets.
He exaggerated the Stochastic to 1000's to have better signals of percent values of OTT .
Also hes used VIDYA in both calculations of OTT and Stochastic smoothing.
Said, Kıvanç Özbilgiç.
I just made a Strategy version of the script so that we lads can backtest it. The codes for that are yet again from Kıvanç Özbilgiç :) I just copy-pasted a few and did some adjustments. Hope you enjoy!
#betonyetmez
Stochastic OTTStochastic OTT is Anıl Özekşi's latest derived version of Optimized Trend Tracker on Stochastic Oscillator.
You might like to view the original version of the indicator if you don't know about OTT yet:
He tried to solve the fake signals of Stochastic Oscillator by adopting OTT on the indicator.
He advised users to set the stochastic smoothing parameters to 500 and 200 on his latest video about SOTT.
He personally uses 1 min charts on stock market so the parameters of the indicator might have to be optimized for other time frames nad markets.
He exaggerated the Stochastic to 1000's to have better signals of percent values of OTT.
Also hes used VIDYA in both calculations of OTT and Stochastic smoothing.
Hope you'll enjoy the SOTT in your profitable trades.
Kıvanç
stop out or margin call price levelsAbstract
This script finds the potential stop out or margin call price levels without considering timeframe.
This script computes stop out or margin call price levels that over leveraged positions buy cheap enough.
You can use this indicator to follow stop hunters.
Introduction
Stop hunting exists because of benefit conflict.
When most of retails traders are in the correct direction, big banks do not want to buy more expensive then retail traders.
Therefore, Big banks create sell pressure to make retail traders misunderstand their trade decisions are wrong.
When retail traders decide to cut loss, it is time big banks buy cheaper.
Many courses recommend average true range as a stop loss reference.
However, in different timeframe, average true ranges are different.
Therefore, we need to have a method to measure potential stop hunting levels which is not relative to timeframe.
There is a method because there are observable levels where over leveraged positions must cut loss.
For example, for a 100 leverage position, its margin call level is 0.005, so 0.005 drawdown is a potential stop hunting level.
Computing
For buy
potential stop out or margin call price level = low * ( 1 - ratio )
For sell
potential stop out or margin call price level = high * ( 1 + ratio )
Parameters
There are 4 levels available for adjusting.
The default values are :
(1) 0.001 : 500 leverage , 50% margin call
(2) 0.0025 : 200 leverage , 50% margin call
(3) 0.005 : 100 leverage , 50% margin call
(4) 0.010 : 50 leverage , 50% margin call
Usage
(1) Find an oversold price level. If you don't want to use an another indicator, you can use previous low.
(2) Memorize their stop out or margin call price levels of that level.
(2) Consider buy near those levels.
(3) If there are quick price rejection near those levels, better entry opportunities.
(4) Take profit and stop loss : you decide.
Conclusion
This script can find potential stop out or margin call price levels that over leveraged positions buy cheap enough.
If you are bored, you can consider find 100 signals you are interested in and share your observation.
Reference
Brokers, leverage and margin call threshold
Main MAs and EMAs multi-timeframe for supportObjective is to map out different multi-timeframe support/resistance , all at once. Includes weekly, daily and 4H EMAs and MAs, as per the follow (allowing customization)
WEEKLY (in pink/purple variations):
- 13 EMA
- 21 EMA
- 34 EMA
- 50 M.A
DAILY (in green variations):
- 21 EMA
- 50 EMA
- 120 M.A.
- 200 M.A.
4H (in yellow/golden colors):
- 400 EMA
- 500 EMA
- 675 EMA
- 715 EMA
- 920 EMA
- 1150 EMA
Notes:
- Quite useful to all types of assets; crypto, commodities , stocks, etc...
- Ideally not to be visible all the time, as it can "pollute" the charts. But very helpful in moments of great volatility
Pinescript - Common Label & Line Array Functions Library by RRBPinescript - Common Label & Line Array Functions Library by RagingRocketBull 2021
Version 1.0
This script provides a library of common array functions for arrays of label and line objects with live testing of all functions.
Using this library you can easily create, update, delete, join label/line object arrays, and get/set properties of individual label/line object array items.
You can find the full list of supported label/line array functions below.
There are several libraries:
- Common String Functions Library
- Standard Array Functions Library
- Common Fixed Type Array Functions Library
- Common Label & Line Array Functions Library
- Common Variable Type Array Functions Library
Features:
- 30 array functions in categories create/update/delete/join/get/set with support for both label/line objects (45+ including all implementations)
- Create, Update label/line object arrays from list/array params
- GET/SET properties of individual label/line array items by index
- Join label/line objects/arrays into a single string for output
- Supports User Input of x,y coords of 5 different types: abs/rel/rel%/inc/inc% list/array, auto transforms x,y input into list/array based on type, base and xloc, translates rel into abs bar indexes
- Supports User Input of lists with shortened names of string properties, auto expands all standard string properties to their full names for use in functions
- Live Output for all/selected functions based on User Input. Test any function for possible errors you may encounter before using in script.
- Output filters: hide all excluded and show only allowed functions using a list of function names
- Output Panel customization options: set custom style, color, text size, and line spacing
Usage:
- select create function - create label/line arrays from lists or arrays (optional). Doesn't affect the update functions. The only change in output should be function name regardless of the selected implementation.
- specify num_objects for both label/line arrays (default is 7)
- specify common anchor point settings x,y base/type for both label/line arrays and GET/SET items in Common Settings
- fill lists with items to use as inputs for create label/line array functions in Create Label/Line Arrays section
- specify label/line array item index and properties to SET in corresponding sections
- select label/line SET function to see the changes applied live
Code Structure:
- translate x,y depending on x,y type, base and xloc as specified in UI (required for all functions)
- expand all shortened standard property names to full names (required for create/update* from arrays and set* functions, not needed for create/update* from lists) to prevent errors in label.new and line.new
- create param arrays from string lists (required for create/update* from arrays and set* functions, not needed for create/update* from lists)
- create label/line array from string lists (property names are auto expanded) or param arrays (requires already expanded properties)
- update entire label/line array or
- get/set label/line array item properties by index
Transforming/Expanding Input values:
- for this script to work on any chart regardless of price/scale, all x*,y* are specified as % increase relative to x0,y0 base levels by default, but user can enter abs x,price values specific for that chart if necessary.
- all lists can be empty, contain 1 or several items, have the same/different lengths. Array Length = min(min(len(list*)), mum_objects) is used to create label/line objects. Missing list items are replaced with default property values.
- when a list contains only 1 item it is duplicated (label name/tooltip is also auto incremented) to match the calculated Array Length
- since this script processes user input, all x,y values must be translated to abs bar indexes before passing them to functions. Your script may provide all data internally and doesn't require this step.
- at first int x, float y arrays are created from user string lists, transformed as described below and returned as x,y arrays.
- translated x,y arrays can then be passed to create from arrays function or can be converted back to x,y string lists for the create from lists function if necessary.
- all translation logic is separated from create/update/set functions for the following reasons:
- to avoid redundant code/dependency on ext functions/reduce local scopes and to be able to translate everything only once in one place - should be faster
- to simplify internal logic of all functions
- because your script may provide all data internally without user input and won't need the translation step
- there are 5 types available for both x,y: abs, rel, rel%, inc, inc%. In addition to that, x can be: bar index or time, y is always price.
- abs - absolute bar index/time from start bar0 (x) or price (y) from 0, is >= 0
- rel - relative bar index/time from cur bar n (x) or price from y0 base level, is >= 0
- rel% - relative % increase of bar index/time (x) or price (y) from corresponding base level (x0 or y0), can be <=> 0
- inc - relative increment (step) for each new level of bar index/time (x) or price (y) from corresponding base level (x0 or y0), can be <=> 0
- inc% - relative % increment (% step) for each new level of bar index/time (x) or price (y) from corresponding base level (x0 or y0), can be <=> 0
- x base level >= 0
- y base level can be 0 (empty) or open, close, high, low of cur bar
- single item x1_list = "50" translates into:
- for x type abs: "50, 50, 50 ..." num_objects times regardless of xloc => x = 50
- for x type rel: "50, 50, 50 ... " num_objects times => x = x_base + 50
- for x type rel%: "50%, 50%, 50% ... " num_objects times => x_base * (1 + 0.5)
- for x type inc: "0, 50, 100 ... " num_objects times => x_base + 50 * i
- for x type inc%: "0%, 50%, 100% ... " num_objects times => x_base * (1 + 0.5 * i)
- when xloc = xloc.bar_index each rel*/inc* value in the above list is then subtracted from n: n - x to convert rel to abs bar index, values of abs type are not affected
- x1_list = "0, 50, 100, ..." of type rel is the same as "50" of type inc
- x1_list = "50, 50, 50, ..." of type abs/rel/rel% produces a sequence of the same values and can be shortened to just "50"
- single item y1_list = "2" translates into (ragardless of yloc):
- for y type abs: "2, 2, 2 ..." num_objects times => y = 2
- for y type rel: "2, 2, 2 ... " num_objects times => y = y_base + 2
- for y type rel%: "2%, 2%, 2% ... " num_objects times => y = y_base * (1 + 0.02)
- for y type inc: "0, 2, 4 ... " num_objects times => y = y_base + 2 * i
- for y type inc%: "0%, 2%, 4% ... " num_objects times => y = y_base * (1 + 0.02 * i)
- when yloc != yloc.price all calculated values above are simply ignored
- y1_list = "0, 2, 4" of type rel% is the same as "2" with type inc%
- y1_list = "2, 2, 2" of type abs/rel/rel% produces a sequence of the same values and can be shortened to just "2"
- you can enter shortened property names in lists. To lookup supported shortened names use corresponding dropdowns in Set Label/Line Array Item Properties sections
- all shortened standard property names must be expanded to full names (required for create/update* from arrays and set* functions, not needed for create/update* from lists) to prevent errors in label.new and line.new
- examples of shortened property names that can be used in lists: bar_index, large, solid, label_right, white, left, left, price
- expanded to their corresponding full names: xloc.bar_index, size.large, line.style_solid, label.style_label_right, color.white, text.align_left, extend.left, yloc.price
- all expanding logic is separated from create/update* from arrays and set* functions for the same reasons as above, and because param arrays already have different types, implying the use of final values.
- all expanding logic is included in the create/update* from lists functions because it seemed more natural to process string lists from user input directly inside the function, since they are already strings.
Creating Label/Line Objects:
- use study max_lines_count and max_labels_count params to increase the max number of label/line objects to 500 (+3) if necessary. Default number of label/line objects is 50 (+3)
- all functions use standard param sequence from methods in reference, except style always comes before colors.
- standard label/line.get* functions only return a few properties, you can't read style, color, width etc.
- label.new(na, na, "") will still create a label with x = n-301, y = NaN, text = "" because max default scope for a var is 300 bars back.
- there are 2 types of color na, label color requires color(na) instead of color_na to prevent error. text_color and line_color can be color_na
- for line to be visible both x1, x2 ends must be visible on screen, also when y1 == y2 => abs(x1 - x2) >= 2 bars => line is visible
- xloc.bar_index line uses abs x1, x2 indexes and can only be within 0 and n ends, where n <= 5000 bars (free accounts) or 10000 bars (paid accounts) limit, can't be plotted into the future
- xloc.bar_time line uses abs x1, x2 times, can't go past bar0 time but can continue past cur bar time into the future, doesn't have a length limit in bars.
- xloc.bar_time line with length = exact number of bars can be plotted only within bar0 and cur bar, can't be plotted into the future reliably because of future gaps due to sessions on some charts
- xloc.bar_index line can't be created on bar 0 with fixed length value because there's only 1 bar of horiz length
- it can be created on cur bar using fixed length x < n <= 5000 or
- created on bar0 using na and then assigned final x* values on cur bar using set_x*
- created on bar0 using n - fixed_length x and then updated on cur bar using set_x*, where n <= 5000
- default orientation of lines (for style_arrow* and extend) is from left to right (from bar 50 to bar 0), it reverses when x1 and x2 are swapped
- price is a function, not a line object property
Variable Type Arrays:
- you can't create an if/function that returns var type value/array - compiler uses strict types and doesn't allow that
- however you can assign array of any type to another array of any type creating an arr pointer of invalid type that must be reassigned to a matching array type before used in any expression to prevent error
- create_any_array2 uses this loophole to return an int_arr pointer of a var type array
- this works for all array types defined with/without var keyword and doesn't work for string arrays defined with var keyword for some reason
- you can't do this with var type vars, only var type arrays because arrays are pointers passed by reference, while vars are actual values passed by value.
- you can only pass a var type value/array param to a function if all functions inside support every type - otherwise error
- alternatively values of every type must be passed simultaneously and processed separately by corresponding if branches/functions supporting these particular types returning a common single type result
- get_var_types solves this problem by generating a list of dummy values of every possible type including the source type, tricking the compiler into allowing a single valid branch to execute without error, while ignoring all dummy results
Notes:
- uses Pinescript v3 Compatibility Framework
- uses Common String Functions Library, Common Fixed Type Array Functions Library, Common Variable Type Array Functions Library
- has to be a separate script to reduce the number of local scopes/compiled file size, can't be merged with another library.
- lets you live test all label/line array functions for errors. If you see an error - change params in UI
- if you see "Loop too long" error - hide/unhide or reattach the script
- if you see "Chart references too many candles" error - change x type or value between abs/rel*. This can happen on charts with 5000+ bars when a rel bar index x is passed to label.new or line.new instead of abs bar index n - x
- create/update_label/line_array* use string lists, while create/update_label/line_array_from_arrays* use array params to create label/line arrays. "from_lists" is dropped to shorten the names of the most commonly used functions.
- create_label/line_array2,4 are preferable, 5,6 are listed for pure demonstration purposes only - don't use them, they don't improve anything but dramatically increase local scopes/compiled file size
- for this reason you would mainly be using create/update_label/line_array2,4 for list params or create/update_label/line_array_from_arrays2 for array params
- all update functions are executed after each create as proof of work and can be disabled. Only create functions are required. Use update functions when necessary - when list/array params are changed by your script.
- both lists and array item properties use the same x,y_type, x,y_base from common settings
- doesn't use pagination, a single str contains all output
- why is this so complicated? What are all these functions for?
- this script merges standard label/line object methods with standard array functions to create a powerful set of label/line object array functions to simplify manipulation of these arrays.
- this library also extends the functionality of Common Variable Type Array Functions Library providing support for label/line types in var type array functions (any_to_str6, join_any_array5)
- creating arrays from either lists or arrays adds a level of flexibility that comes with complexity. It's very likely that in your script you'd have to deal with both string lists as input, and arrays internally, once everything is converted.
- processing user input, allowing customization and targeting for any chart adds a whole new layer of complexity, all inputs must be translated and expanded before used in functions.
- different function implementations can increase/reduce local scopes and compiled file size. Select a version that best suits your needs. Creating complex scripts often requires rewriting your code multiple times to fit the limits, every line matters.
P.S. Don't rely too much on labels, for too often they are fables.
List of functions*:
* - functions from other libraries are not listed
1. Join Functions
Labels
- join_label_object(label_, d1, d2)
- join_label_array(arr, d1, d2)
- join_label_array2(arr, d1, d2, d3)
Lines
- join_line_object(line_, d1, d2)
- join_line_array(arr, d1, d2)
- join_line_array2(arr, d1, d2, d3)
Any Type
- any_to_str6(arr, index, type)
- join_any_array4(arr, d1, d2, type)
- join_any_array5(arr, d, type)
2. GET/SET Functions
Labels
- label_array_get_text(arr, index)
- label_array_get_xy(arr, index)
- label_array_get_fields(arr, index)
- label_array_set_text(arr, index, str)
- label_array_set_xy(arr, index, x, y)
- label_array_set_fields(arr, index, x, y, str)
- label_array_set_all_fields(arr, index, x, y, str, xloc, yloc, label_style, label_color, text_color, text_size, text_align, tooltip)
- label_array_set_all_fields2(arr, index, x, y, str, xloc, yloc, label_style, label_color, text_color, text_size, text_align, tooltip)
Lines
- line_array_get_price(arr, index, bar)
- line_array_get_xy(arr, index)
- line_array_get_fields(arr, index)
- line_array_set_text(arr, index, width)
- line_array_set_xy(arr, index, x1, y1, x2, y2)
- line_array_set_fields(arr, index, x1, y1, x2, y2, width)
- line_array_set_all_fields(arr, index, x1, y1, x2, y2, xloc, extend, line_style, line_color, width)
- line_array_set_all_fields2(arr, index, x1, y1, x2, y2, xloc, extend, line_style, line_color, width)
3. Create/Update/Delete Functions
Labels
- delete_label_array(label_arr)
- create_label_array(list1, list2, list3, list4, list5, d)
- create_label_array2(x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- create_label_array3(x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- create_label_array4(x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- create_label_array5(x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- create_label_array6(x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- update_label_array2(label_arr, x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- update_label_array4(label_arr, x_list, y_list, str_list, xloc_list, yloc_list, style_list, color1_list, color2_list, size_list, align_list, tooltip_list, d)
- create_label_array_from_arrays2(x_arr, y_arr, str_arr, xloc_arr, yloc_arr, style_arr, color1_arr, color2_arr, size_arr, align_arr, tooltip_arr, d)
- create_label_array_from_arrays4(x_arr, y_arr, str_arr, xloc_arr, yloc_arr, style_arr, color1_arr, color2_arr, size_arr, align_arr, tooltip_arr, d)
- update_label_array_from_arrays2(label_arr, x_arr, y_arr, str_arr, xloc_arr, yloc_arr, style_arr, color1_arr, color2_arr, size_arr, align_arr, tooltip_arr, d)
Lines
- delete_line_array(line_arr)
- create_line_array(list1, list2, list3, list4, list5, list6, d)
- create_line_array2(x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- create_line_array3(x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- create_line_array4(x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- create_line_array5(x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- create_line_array6(x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- update_line_array2(line_arr, x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- update_line_array4(line_arr, x1_list, y1_list, x2_list, y2_list, xloc_list, extend_list, style_list, color_list, width_list, d)
- create_line_array_from_arrays2(x1_arr, y1_arr, x2_arr, y2_arr, xloc_arr, extend_arr, style_arr, color_arr, width_arr, d)
- update_line_array_from_arrays2(line_arr, x1_arr, y1_arr, x2_arr, y2_arr, xloc_arr, extend_arr, style_arr, color_arr, width_arr, d)
Bollinger DCA v1Simple "benchmark" strategy for ETFs, Stocks and Crypto! Super-easy to implement for beginners, a BTD (buy-the-dip) strategy means that you buy a fixed amount of an ETF / Stock / Crypto every time it falls. For instance, to BTD the S&P 500 ( SPY ), you could purchase $500 USD each time the price falls. Assuming the macro-economic conditions of the underlying country remain favourable, BTD strategies will result in capital gains over a period of many years, e.g. 10 years.
Recommended Chart Settings:
Asset Class: ETF / Stocks / Crypto
Time Frame: H1 (Hourly) / D1 (Daily) / W1 (Weekly) / M1 (Monthly)
Necessary ETF Macro Conditions:
1. Country must have healthy demographics, good ratio of young > old
2. Country population must be increasing
3. Country must be experiencing price-inflation
Necessary Stock Conditions:
1. Growing revenue
2. Growing net income
3. Consistent net margins
4. Higher gross/net profit margin compared to its peers in the industry
5. Growing share holders equity
6. Current ratios > 1
7. Debt to equity ratio (compare to peers )
8. Debt servicing ratio < 30%
9. Wide economic moat
10. Products and services used daily, and will stay relevant for at least 1 decade
Necessary Crypto Conditions:
1. Honest founders
2. Competent technical co-founders
3. Fair or non-existent pre-mine
4. Solid marketing and PR
5. Legitimate use-cases / adoption
Default Robot Settings:
Contribution (USD): $500
When: Dips below lower Bollinger Band
*Robot buys $500 worth of ETF , Stock, Crypto, every time price falls below the lower Bollinger Band
*Equity curve can be seen from the bottom panel*
Risk Warning:
This strategy is low-risk, however it assumes you have a long time horizon of at least 5 to 10 years. The longer your holding-period, the better your returns. The only thing the user has to keep-in-mind are the macro-economic conditions as stated above. If unsure, please stick to ETFs rather than buying individual stocks or cryptocurrencies.
Fixed price Stop Loss [Takazudo]This strategy is a demo for fixed price stop loss.
This strategy enables you to specify fixed price stop loss. Let's say your deposit is USD. When you trade EURCAD, you need to specify the quantity for trade. Here comes three chances for trade.
A: SL pips: 500
B: SL pips: 200
C: SL pips: 100
In these trade, the risk is different for each. ABC risk ratio is 5:2:1. And, you cannot know how much to lose if the price hits the stop loss. This is a huge problem.
With this strategy, You can specify the fixed risk price for each trade. If you specify 100 USD for the risk, this strategy calculates how much quantity to buy or sell for each entry. In the case above, this strategy guides you how much quantity to buy or sell like below.
A: 2,000 qty (SL: 500pips)
B: 5,000 qty (SL: 200pips)
C: 10,000 qty (SL: 100pips)
If you make entries with those quantity and the price hits the stop loss, You will lose the money like below.
A: 100 USD
B: 100 USD
C: 100 USD
This is what this script does. Fixed price SL.
I tested this caliculation for OANDA's main 28 currency pairs forex listed below.
AUDUSD, EURUSD, GBPUSD, NZDUSD, USDCAD, USDCHF, USDJPY, AUDCAD, AUDCHF, AUDJPY, AUDNZD, CADCHF, CADJPY, CHFJPY, EURAUD, EURCAD, EURCHF, EURGBP, EURJPY, EURNZD, GBPAUD, GBPCAD, GBPCHF, GBPJPY, GBPNZD, NZDCAD, NZDCHF, NZDJPY
I may add more pairs later.
Note: The entry strategy in this script is not intented to win. Check the result. Be careful.
Implied Volatility Range ProjectionThis script plots an expected future range estimation based on implied volatilities, using a specified volatility index as proxy for ATM implied volatilities.
For example the S&P 500 could use the VIX.
Key SR Levels. I am the original creator of this indicator for tradingview, it can be used separately now, it is a PVSRA indicator, where it marks the key points of support and resistance.
Market makers pull the market above the key level for distribution in bearish and pull below the key level for accumulation in bullish
Mainly used for
We have Whole level: main resistance ended in 000
We have a Key level ending in 250
We have half level finished in 500
And we have a Key level ending in 750.
Enjoy the indicator, share with friends. If it happens to be dented, pull until the graph stretches.
Note. This indicator works only for Forex, it can make a difference in pairs with Japanese Yen.
Combo VIX and DXYHello traders
It's been a while :)
I wanted to share a cool script that you can use for any asset class.
The script isn't really special - though what it displays is super helpful
Volatility Index $VIX
(Source: Wikipedia)
VIX is the ticker symbol and the popular name for the Chicago Board Options Exchange's CBOE Volatility Index, a popular measure of the stock market's expectation of volatility based on S&P 500 index options.
It is calculated and disseminated on a real-time basis by the CBOE, and is often referred to as the fear index or fear gauge.
I consider that a $VIX above 30% is a very bearish signal.
Above 30% translating investors selling in masse their assets. #blood #on #the #street
Dollar Index $DXY
(Source: Wikipedia)
The U.S. Dollar Index (USDX, DXY, DX, or, informally, the "Dixie") is an index (or measure) of the value of the United States dollar relative to a basket of foreign currencies, often referred to as a basket of U.S. trade partners' currencies.
The Index goes up when the U.S. dollar gains "strength" (value) when compared to other currencies.
The index is designed, maintained, and published by ICE (Intercontinental Exchange, Inc.), with the name "U.S. Dollar Index" a registered trademark.
It is a weighted geometric mean of the dollar's value relative to following select currencies:
Euro (EUR), 57.6% weight
Japanese yen (JPY) 13.6% weight
Pound sterling (GBP), 11.9% weight
Canadian dollar (CAD), 9.1% weight
Swedish krona (SEK), 4.2% weight
Swiss franc (CHF) 3.6% weight
In "bear markets", the $DXY usually goes up.
People are selling their hard assets to get some $USD in return - pumping the $DXY higher
Corollary
I'm not sure which one happens first between a bearish $DXY or bearish $DXY... though both are usually correlated
If:
- $VIX goes above 30%, usually $DXY increases and assets versus the good old' $USD drop
- $VIX goes below 30%, usually $DXY decreases and assets versus the good old' $USD increases
This is a nice lever effect between both the $VIX, $DXY and the assets versus the $USD
That's being said, I don't only use those 2 information to enter in a trade.
It gives me though a strong confirmation whenever I'm long or short
Imagine I get a LONG signal but the combo $VIX + $DXY is bearish... this tells me to be cautious and to:
- enter at a pullback
- protect my position quickly at breakeven
- take my profit quick
For a mega bull market (some called it hyperinflation), you want your fiat to drop in value for the counter-asset to increase in value.
And before you ask.... yes I look at what $DXY is doing before taking a trade on $BTCUSD :)
In other words, $DXY going down is quite bullish for Bitcoin.
Settings and Alerts
The settings by default are the ones I use for my trading.
The background colors will be colored whenever the COMBO is bullish (green) or bearish (red)
Alerts are enabled using the brand new alert function published last week by @TradingView
That's it for today, I hope you'll like it :)
PS: In this chart above, I'm using the Supertrend indicator from @KivancOzbilgic
Dave
Price Action - Support & Resistance by DGTSᴜᴘᴘᴏʀᴛ ᴀɴᴅ Rᴇꜱɪꜱᴛᴀɴᴄᴇ , is undoubtedly one of the key concepts of technical analysis
█ Sᴜᴘᴘᴏʀᴛ ᴀɴᴅ Rᴇꜱɪꜱᴛᴀɴᴄᴇ Dᴇꜰɪɴɪᴛɪᴏɴ
Support and Resistance terms are used by traders to refer to price levels on charts that tend to act as barriers, preventing the price of an financial instrument from getting pushed in a certain direction.
A support level is a price level where buyers are more aggressive than sellers. This means that the price is more likely to "bounce" off this level rather than break through it. However, once the price has breached this level it is likely to continue falling until meeting another support level.
A resistance level is the opposite of a support level. It is where the price tends to find resistance as it rises. Again, this means that the price is more likely to "bounce" off this level rather than break through it. However, once the price has breached this level it is likely to continue rising until meeting another resistance level.
A previous support level will sometimes become a resistance level when the price attempts to move back up, and conversely, a resistance level will become a support level as the price temporarily falls back.
█ Iᴅᴇɴᴛɪꜰʏɪɴɢ Sᴜᴘᴘᴏʀᴛ ᴀɴᴅ Rᴇꜱɪꜱᴛᴀɴᴄᴇ
Support and resistance can come in various forms, and the concept is more difficult to master than it first appears. Identification of key support and resistance levels is an essential ingredient to successful technical analysis.
If the price stalls and reverses in the same price area on minimum of two different occasions, then a horizontal line is drawn to show that the market is struggling to move past that area. Those areas are static barriers, one of the most popular forms of support/resistance and are highlighted with horizontal lines.
Repeated test , the more often a support/resistance level is "tested" over an extended period of time (touched and bounced off by price), the more significance is given to that specific level
High volume , the more buying and selling that has occurred at a particular price level, the stronger the support or resistance level is likely to be
Market psychology , plays a major role as traders and investors remember the past and react to changing conditions to anticipate future market movement.
Psychological levels , is a price level that significantly affects the price of an underlying financial instrument. Typically, near round numbers often serve as support and resistance
The following support and resistance related topics are beyond the scope of this study, so they will be mentioned roughly only as a reference for support and resistance concept
Trendlines , Support and resistance levels in trends are dynamic. Throughout an uptrend, levels of support tend to look like a trendline, usually clustering around higher lows. As the price rises, the price where buyers consider the stock to be “too cheap” also changes, which creates new support levels on the way up. The same is also true for resistance levels. In an uptrend, a stock is continuously breaking through perceived resistance levels and making new highs
Moving Averages , is a constantly changing line that smooths out past price data while also allowing the trader to identify support and resistance. In the example Notice how the price of the asset finds support at the moving average when the trend is up, and how it acts as resistance when the trend is down
The Fibonacci Retracement/Extension tool , is a favorite among many short-term traders because it clearly identifies levels of potential support and resistance
Pivot Point Calculations , is another common technical analysis technique, where pivot point is calculated based on the high, low, and closing prices of previous trading session/day and support & resistance levels are projected based on the pivot point, different calculation techniques are available, as presented in this example of an pivot point indicator : PVTvX by DGT
█ Tʀᴀᴅɪɴɢ Bᴀꜱᴇᴅ ᴏɴ Sᴜᴘᴘᴏʀᴛ ᴀɴᴅ Rᴇꜱɪꜱᴛᴀɴᴄᴇ
Once an area or "zone" of support or resistance has been identified, those price levels can serve as potential entry or exit points because, as a price reaches a point of support or resistance, it will do one of two things—bounce back away from the support or resistance level (trading ranges), or violate the price level and continue in its direction (trading breakouts) —until it hits the next support or resistance level
The basic trading method for using support and resistance is to buy near support in uptrends or the parts of ranges or chart patterns where prices are moving up and to sell/sell short near resistance in downtrends or the parts of ranges and chart patterns where prices are moving down. Buying near support or selling near resistance can pay off, but there is no assurance that the support or resistance will hold. Therefore, consider waiting for some confirmation that the market is still respecting that area
Trading breakouts, a breakout is a potential trading opportunity that occurs when an asset's price moves above a resistance level or moves below a support level on increasing volume. The first step in trading breakouts is to identify current price trend patterns along with support and resistance levels in order to plan possible entry and exit points. Once the asset trades beyond the price barrier, volatility tends to increase and prices usually trend in the breakout's direction. Breakouts are such an important trading strategy since these setups are the starting point for future volatility increases, large price swings and, in many circumstances, major price trends. When trading breakouts, it is important to consider the underlying asset's support and resistance levels. The more times an asset price has touched these areas, the more valid these levels are and the more important they become. At the same time, the longer these support and resistance levels have been in play, the better the outcome when the asset price finally breaks out. Asset prices will often move slightly further than we expect them to. This doesn't happen all the time, but when it does it is called a false breakout. Therefore it is important to consider waiting for some confirmation while trading breakouts. It’s also popular for traders to sell 50% of their positions at the resistance level, and hold the rest in anticipation of a breakout above resistance
█ Pʀɪᴄᴇ Aᴄᴛɪᴏɴ - Sᴜᴘᴘᴏʀᴛ & Rᴇꜱɪꜱᴛᴀɴᴄᴇ ʙʏ DGT Sᴛᴜᴅʏ
This experimental study attempts to identify the support and resistance levels. Assumes a simple logic to discover moments where the price is rising or falling consecutively for minimum 3 bars with the condition volume increases on each bar and the last bar’s volume should be bigger than the long term volume moving average. A line will be drawn at the end of the move (highest or lowest, depending on the move direction), the line will be drawn at minimum on the 3rd bar and if condition holds for other consecutive bars the line will switch to 4th, 5th etc bar.
Lines will not be deleted so the historical ones will remain and will emphasis the levels significance when they overlap in feature. Strong levels are more likely to hold and cause the price to move in the other direction, whereas the minor levels may only cause the price to pause and keep moving in the same direction. Determining future levels of support and resistance can drastically improve the returns of a short-term investing strategy
Bar colors will be painted based on the volume of the specific bar to its long term volume moving average. This will help identifying the support and resistance levels significance and emphasis the sings of breakouts
Finally, Volume spikes will be marked on top of the price chart. A high volume usually indicates more interest in the security and the presence of institutional traders. However, a rapidly rising price in an uptrend accompanied by a huge volume may be a sign of exhaustion. Traders usually look for breaks of support and resistance to enter positions. When security break critical levels without volume , you should consider the breakout suspect and prime for a reversal off the highs/lows. Volume spikes are often the result of news-driven events. Volume spike will often lead to sharp reversals since the moves are unsustainable due to the imbalance of supply and demand
A good example with many support and resistance concepts observed on a stock chart and detected by the study
Settings:
Length of volume moving average, where volume moving average is used to detect support and resistance levels, is used as reference to compare with threshold values for volume spikes and colors of the bars
Hint, to get more historical lines scrolling chart to left will enable visualization of them. Please note they may appear to much all 500 line limit is used 😉
Special thanks to @HEMANT Telegram user, for his observations and suggestions
Disclaimer:
Trading success is all about following your trading strategy and the indicators should fit within your trading strategy, and not to be traded upon solely
The script is for informational and educational purposes only. Use of the script does not constitute professional and/or financial advice. You alone have the sole responsibility of evaluating the script output and risks associated with the use of the script. In exchange for using the script, you agree not to hold dgtrd TradingView user liable for any possible claim for damages arising from any decision you make based on use of the script
Trend Reversal Indicator (EMA of slopes)Good morning Traders
Inspirated by lukescream EMA-slope strategy, today I want to share with you this simple indicator whose possible use-case would be for detecting in advance possible trend reversals, specially on higher timeframes.
Once that you've chosen the desired source (RSI, EMA or Stochastic k or d), the indicator will calculate its "slope" approximating its first order derivative by the division between the last variation of the series and its last value.
You can see the slope as a white line by enabling the relative checkmark (it's disabled by default since it simply messes up the the graph)
Then, the slope itself becomes the source for two exponential moving averages: the fast one (in blue) has a period of 20 while the slow one (in red, it becomes similiar to a horizontal line actually) has a period of 500
Why the slope? Since all the sources mentioned before are directly or indirectly calculated on the price action, a more aggressiveness in the price movement would be translated into a more (positive/negative) steepness of those indicator (of course this effect would be far more evident if the indicators are calculated on low periods, but really low periods could compromise the consistency of the signals).
In this way, the slope would mirror the decisiveness of price movements and a comparison between two averages calculated from it (the first one based on more recent values, the second one that conisders also older values) could tell you in advance what direction the market is possibly about to take
The usage is simple: once that the fast moving average crosses upward the slow one, this could be a sign of potential trend reversal from bearish to bullish. On the contrary, if the fast EMA crosses downward the slow one, this could be a sign of potential trend reversal from bullish to bearish.
What I suggest you is to integrate this indicator with Exponential Moving Averages plotted on the price candles, in order to have a general bias for opening long or short positions, and with an oscillator as well such as the Stochastisc RSI in order to detect the overbought/oversold zones for opening/closing positions at the right moment.
Happy Trading!
Relative Volume at Time█ OVERVIEW
This indicator calculates relative volume, which is the ratio of present volume over an average of past volume.
It offers two calculation modes, both using a time reference as an anchor.
█ CONCEPTS
Calculation modes
The simplest way to calculate relative volume is by using the ratio of a bar's volume over a simple moving average of the last n volume values.
This indicator uses one of two, more subtle ways to calculate both values of the relative volume ratio: current volume:past volume .
The two calculations modes are:
1 — Cumulate from Beginning of TF to Current Bar where:
current volume = the cumulative volume since the beginning of the timeframe unit, and
past volume = the mean of volume during that same relative period of time in the past n timeframe units.
2 — Point-to-Point Bars at Same Offset from Beginning of TF where:
current volume = the volume on a single chart bar, and
past volume = the mean of volume values from that same relative bar in time from the past n timeframe units.
Timeframe units
Timeframe units can be defined in three different ways:
1 — Using Auto-steps, where the timeframe unit automatically adjusts to the timeframe used on the chart:
— A 1 min timeframe unit will be used on 1sec charts,
— 1H will be used for charts at 1min and less,
— 1D will be used for other intraday chart timeframes,
— 1W will be used for 1D charts,
— 1M will be used for charts at less than 1M,
— 1Y will be used for charts at greater or equal than 1M.
2 — As a fixed timeframe that you define.
3 — By time of day (for intraday chart timeframes only), which you also define. If you use non-intraday chart timeframes in this mode, the indicator will switch to Auto-steps.
Relative Relativity
A relative volume value of 1.0 indicates that current volume is equal to the mean of past volume , but how can we determine what constitutes a high relative volume value?
The traditional way is to settle for an arbitrary threshold, with 2.0 often used to indicate that relative volume is worthy of attention.
We wanted to provide traders with a contextual method of calculating threshold values, so in addition to the conventional fixed threshold value,
this indicator includes two methods of calculating a threshold channel on past relative volume values:
1 — Using the standard deviation of relative volume over a fixed lookback.
2 — Using the highs/lows of relative volume over a variable lookback.
Channels calculated on relative volume provide meta-relativity, if you will, as they are relative values of relative volume.
█ FEATURES
Controls in the "Display" section of inputs determine what is visible in the indicator's pane. The next "Settings" section is where you configure the parameters used in the calculations. The "Column Coloring Conditions" section controls the color of the columns, which you will see in three of the five display modes available. Whether columns are plotted or not, the coloring conditions also determine when markers appear, if you have chosen to show the markers in the "Display" section. The presence of markers is what triggers the alerts configured on this indicator. Finally, the "Colors" section of inputs allows you to control the color of the indicator's visual components.
Display
Five display modes are available:
• Current Volume Columns : shows columns of current volume , with past volume displayed as an outlined column.
• Relative Volume Columns : shows relative volume as a column.
• Relative Volume Columns With Average : shows relative volume as a column, with the average of relative volume.
• Directional Relative Volume Average : shows a line calculated using the average of +/- values of relative volume.
The positive value of relative volume is used on up bars; its negative value on down bars.
• Relative Volume Average : shows the average of relative volume.
A Hull moving average is used to calculate the average used in the three last display modes.
You can also control the display of:
• The value or relative volume, when in the first three display modes. Only the last 500 values will be shown.
• Timeframe transitions, shown in the background.
• A reminder of the active timeframe unit, which appears to the right of the indicator's last bar.
• The threshold used, which can be a fixed value or a channel, as determined in the next "Settings" section of inputs.
• Up/Down markers, which appear on transitions of the color of the volume columns (determined by coloring conditions), which in turn control when alerts are triggered.
• Conditions of high volatility.
Settings
Use this section of inputs to change:
• Calculation mode : this is where you select one of this indicator's two calculation modes for current volume and past volume , as explained in the "Concepts" section.
• Past Volume Lookback in TF units : the quantity of timeframe units used in the calculation of past volume .
• Define Timeframes Units Using : the mode used to determine what one timeframe unit is. Note that when using a fixed timeframe, it must be higher than the chart's timeframe.
Also, note that time of day timeframe units only work on intraday chart timeframes.
• Threshold Mode : Five different modes can be selected:
— Fixed Value : You can define the value using the "Fixed Threshold" field below. The default value is 2.0.
— Standard Deviation Channel From Fixed Lookback : This is a channel calculated using the simple moving average of relative volume
(so not the Hull moving average used elsewhere in the indicator), plus/minus the standard deviation multiplied by a user-defined factor.
The lookback used is the value of the "Channel Lookback" field. Its default is 100.
— High/Low Channel From Beginning of TF : in this mode, the High/Low values reset at the beginning of each timeframe unit.
— High/Low Channel From Beginning of Past Volume Lookback : in this mode, the High/Low values start from the farthest point back where we are calculating past volume ,
which is determined by the combination of timeframe units and the "Past Volume Lookback in TF units" value.
— High/Low Channel From Fixed Lookback : In this mode the lookback is fixed. You can define the value using the "Channel Lookback" field. The default value is 100.
• Period of RelVol Moving Average : the period of the Hull moving average used in the "Directional Relative Volume Average" and the "Relative Volume Average".
• High Volatility is defined using fast and slow ATR periods, so this represents the volatility of price.
Volatility is considered to be high when the fast ATR value is greater than its slow value. Volatility can be used as a filter in the column coloring conditions.
Column Coloring Conditions
• Eight different conditions can be turned on or off to determine the color of the volume columns. All "ON" conditions must be met to determine a high/low state of relative volume,
or, in the case of directional relative volume, a bull/bear state.
• A volatility state can also be used to filter the conditions.
• When the coloring conditions and the filter do not allow for a high/low state to be determined, the neutral color is used.
• Transitions of the color of the volume columns determined by coloring conditions are used to plot the up/down markers, which in turn control when alerts are triggered.
Colors
• You can define your own colors for all of the oscillator's plots.
• The default colors will perform well on light or dark chart backgrounds.
Alerts
• An alert can be defined for the script. The alert will trigger whenever an up/down marker appears in the indicator's display.
The particular combination of coloring conditions and the display settings for up/down markers when you create the alert will determine which conditions trigger the alert.
After alerts are created, subsequent changes to the conditions controlling the display of markers will not affect existing alerts.
• By configuring the script's inputs in different ways before you create your alerts, you can create multiple, functionally distinct alerts from this script.
When creating multiple alerts, it is useful to include in the alert's message a reminder of the particular conditions you used for each alert.
• As is usually the case, alerts triggering "Once Per Bar Close" will prevent repainting.
Error messages
Error messages will appear at the end of the chart upon the following conditions:
• When the combination of the timeframe units used and the "Past Volume Lookback in TF units" value create a lookback that is greater than 5000 bars.
The lookback will then be recalculated to a value such that a runtime error does not occur.
• If the chart's timeframe is higher than the timeframe units. This error cannot occur when using Auto-steps to calculate timeframe units.
• If relative volume cannot be calculated, for example, when no volume data is available for the chart's symbol.
• When the threshold of relative volume is configured to be visible but the indicator's scale does not allow it to be visible (in "Current Volume Columns" display mode).
█ NOTES
For traders
The chart shown here uses the following display modes: "Current Volume Columns", "Relative Volume Columns With Average", "Directional Relative Volume Average" and "Relative Volume Average". The last one also shows the threshold channel in standard deviation mode, and the TF Unit reminder to the right, in red.
Volume, like price, is a value with a market-dependent scale. The only valid reference for volume being its past values, any improvement in the way past volume is calculated thus represents a potential opportunity to traders. Relative volume calculated as it is here can help traders extract useful information from markets in many circumstances, markets with cyclical volume such as Forex being one, obvious case. The relative nature of the values calculated by this indicator also make it a natural fit for cross-market and cross-sector analysis, or to identify behavioral changes in the different futures contracts of the same market. Relative volume can also be put to more exotic uses, such as in evaluating changes in the popularity of exchanges.
Relative volume alone has no directional bias. While higher relative volume values always indicate higher trading activity, that activity does not necessarily translate into significant price movement. In a tightly fought battle between buyers and sellers, you could theoretically have very large volume for many bars, with no change whatsoever in bid/ask prices. This of course, is unlikely to happen in reality, and so traders are justified in considering high relative volume values as indicating periods where more attention is required, because imbalances in the strength of buying/selling power during high-volume trading periods can amplify price variations, providing traders with the generally useful gift of volatility.
Be sure to give the "Directional Relative Volume Average" a try. Contrary to the always-positive ratio widely used in this indicator, the "Directional Relative Volume Average" produces a value able to determine a bullish/bearish bias for relative volume.
Note that realtime bars must be complete for the relative volume value to be confirmed. Values calculated on historical or elapsed realtime bars will not recalculate unless historical volume data changes.
Finally, as with all indicators using volume information, keep in mind that some exchanges/brokers supply different feeds for intraday and daily data, and the volume data on both feeds can sometimes vary quite a bit.
For coders
Our script was written using the PineCoders Coding Conventions for Pine .
The description was formatted using the techniques explained in the How We Write and Format Script Descriptions PineCoders publication.
Bits and pieces of code were lifted from the MTF Selection Framework and the MTF Oscillator Framework , also by PineCoders.
█ THANKS
Thanks to dgtrd for suggesting to add the channel using standard deviation.
Thanks to adolgov for helpful suggestions on calculations and visuals.
Look first. Then leap.