The Amplifier - Two Day Historical Bitcoin Volatility PlotThe 3rd piece to the other two pieces to our CoT study. This is the Amplifier, which turns select signals into 'Super' Buys/Sells
The other two being the 'Bitcoin Insider CoT Delta', and the on chart Price indicator most will have, if no others the 'Hunt Bitcoin CoT Buy/Sell Signals' that will indicate the key signals, ave 4 a year on the chart as they occur.
Why Bother another CoT signal?
Its different & focused on the Insider's.
Performance -
This Indicator provided a
1. Signal 1 = 26th March 2019 = SUPER LONG at $4,500 that saw a near $14,000 run up
2. Signal 2 = 18th & 24th June 2019 = SHORT at the second & final level $11,700 after repeated attempts & failure in the $13K range, the mini Echo Bitcoin Bull of 2019
3. Signal 3 = 17th December 2019 = LONG $6,900, Bitcoin rallied to Mid $10,500's
4. Signal 4 = 18th Feb 2020 = SUPER SHORT from $9,700's to a final extreme Low of $3,000, calling the CV-19 collapse
5. Signal 5 = 17th March 2020 = LONG from $5,400 no closure point yet
6. Signal 6 = 29th June 2020 = SUPER LONG reiterate from $10,700 no closure sell signal yet
7. Signal 7 = 17th May 2020 = LONG another accumulate LONG with no sell signal yet generated at Post H&S's low of $33,000
Note - This indicator only commences March 2019, as Bitcoin futures were a recent introduction and needed to settle for 6 months in both use and data, no signals were meaningful prior & data was light.
What is Provided. - Please note the need to also add the Hunt Bitcoin Historical Volatility Indicator for full understanding.
We provide 3 things with the 3 indicators.
'Insider' indications from Largest players in the futures market.
1. Bitcoin Macro Buy Signals.
a) The Bitcoin Commitment of Traders results see us focus solely on Largest 4 Short Open Interest & Largest 4 Long Open Interest aspects of the CoT Release data.
When the difference - is tight, a kind of pinch, these have been great Buy signals in Bitcoin.
We call this difference the Delta & When Delta is 5% or less Bitcoin is a Buy.
2. Bitcoin Macro Sells.
a) A sell signal is Triggered in Bitcoin at any point the Largest 4 short OI > or = to 70
3. AMPLIFIER Trade signals 'Super' Longs or Shorts -
Extreme low volatility events leads to highly impulsive & volatile subsequent moves, if either of 1 or 2 above occur, combined with extreme low volatility
a 'Super Long' or 'SUPER SELL' is generated. In the case of the short side, given Bitcoins general expansive and MACRO Bull trend since inception, we seek an additional component
that is an extreme differential/Delta reading between 4 biggest Longs & Shorts OI.
Namely CoT Delta also must be > 47.5%
We also have a Cautionary level, where it is not necessarily a good idea to accumulate Bitcon, as a better opportunity lower may avail itself, see conditions below.
So the required logic explicitly stated below for all Signals.
1. Long - Hunt Bitcoin CoT Delta < or = 5
2. SUPER Long - Hunt Bitcoin CoT Delta < or = 5; and 2 Day Historical Bitcoin Volatility = or < 20
3. Short - Largest 4 Sellers OI = or > 70
4. SUPER Short - Largest 4 Sellers OI = or > 70; AND..
Hunt Bitcoin CoT Delta = or > 47.5 AND 2 Day Historical BTC Volatility = or < 20
5. Caution - Largest 4 Sellers OI = or > 67.5 AND Hunt Bitcoin CoT Delta = or > 45
WARNING SEE Notes Below
Note 1 - = Largest 4 Open Interest Shorts
Note 2 - = Largest 4 Open Interest Longs
Note 3 - = Hunt Cot Delta = (Largest 4 sellers OI) -( Largest 4 Buyers OI)
Caution = Avoid new Bitcoin Accumulation Right Now, A sell signal might follow Enter on next Long
Note 4 - The Hunt Bitcoin COT Delta signal is a Largest 'Insider' Tracking tool based on a segment of Commitment of Traders data on Bitcoin Futures, released once a week on a Friday.
It is a Macro Timeframe signal , and should not be used for Day trading and Short Timeframe analysis , Entries may be optimised after a Hunt Bitcoin CoT Signal is generated by separate shorter Timeframe analysis.
Note 5 - The Historical Bitcoin Volatility is an additional 'Amplifier' component to the 'Hunt Bitcoin Cot Delta' Insider Signal
Note 6 - The Historical Bitcoin Volatility criteria varies by timeframe, the above levels are those applying on a Two Day TF Chart, select this custom timeframe in Trading View.
if additional criteria are met for LONG & SHORT insider signals, they may become 'Super Longs/Shorts', see conditions box above.
Search in scripts for "沪深主板45度上升的股票"
Hunt Bitcoin CoT Buy/Sell signalWhy Bother another CoT signal?
Its different & focused on the Insider's.
Performance -
This Indicator provided a
1. Signal 1 = 26th March 2019 = SUPER LONG at $4,500 that saw a near $14,000 run up
2. Signal 2 = 18th & 24th June 2019 = SHORT at the second & final level $11,700 after repeated attempts & failure in the $13K range, the mini Echo Bitcoin Bull of 2019
3. Signal 3 = 17th December 2019 = LONG $6,900, Bitcoin rallied to Mid $10,500's
4. Signal 4 = 18th Feb 2020 = SUPER SHORT from $9,700's to a final extreme Low of $3,000, calling the CV-19 collapse
5. Signal 5 = 17th March 2020 = LONG from $5,400 no closure point yet
6. Signal 6 = 29th June 2020 = SUPER LONG reiterate from $10,700 no closure sell signal yet
7. Signal 7 = 17th May 2020 = LONG another accumulate LONG with no sell signal yet generated at Post H&S's low of $33,000
Note - This indicator only commences March 2019, as Bitcoin futures were a recent introduction and needed to settle for 6 months in both use and data, no signals were meaningful prior & data was light.
What is Provided. - Please note the need to also add the Hunt Bitcoin Historical Volatility Indicator for full understanding.
We provide 3 things with the 3 indicators.
'Insider' indications from Largest players in the futures market.
1. Bitcoin Macro Buy Signals.
a) The Bitcoin Commitment of Traders results see us focus solely on Largest 4 Short Open Interest & Largest 4 Long Open Interest aspects of the CoT Release data.
When the difference - is tight, a kind of pinch, these have been great Buy signals in Bitcoin.
We call this difference the Delta & When Delta is 5% or less Bitcoin is a Buy.
2. Bitcoin Macro Sells.
a) A sell signal is Triggered in Bitcoin at any point the Largest 4 short OI > or = to 70
3. AMPLIFIER Trade signals 'Super' Longs or Shorts -
Extreme low volatility events leads to highly impulsive & volatile subsequent moves, if either of 1 or 2 above occur, combined with extreme low volatility
a 'Super Long' or 'SUPER SELL' is generated. In the case of the short side, given Bitcoins general expansive and MACRO Bull trend since inception, we seek an additional component
that is an extreme differential/Delta reading between 4 biggest Longs & Shorts OI.
Namely CoT Delta also must be > 47.5%
We also have a Cautionary level, where it is not necessarily a good idea to accumulate Bitcon, as a better opportunity lower may avail itself, see conditions below.
So the required logic explicitly stated below for all Signals.
1. Long - Hunt Bitcoin CoT Delta < or = 5
2. SUPER Long - Hunt Bitcoin CoT Delta < or = 5; and 2 Day Historical Bitcoin Volatility = or < 20
3. Short - Largest 4 Sellers OI = or > 70
4. SUPER Short - Largest 4 Sellers OI = or > 70; AND..
Hunt Bitcoin CoT Delta = or > 47.5 AND 2 Day Historical BTC Volatility = or < 20
5. Caution - Largest 4 Sellers OI = or > 67.5 AND Hunt Bitcoin CoT Delta = or > 45
WARNING SEE Notes Below
Note 1 - = Largest 4 Open Interest Shorts
Note 2 - = Largest 4 Open Interest Longs
Note 3 - = Hunt Cot Delta = (Largest 4 sellers OI) -( Largest 4 Buyers OI)
Caution = Avoid new Bitcoin Accumulation Right Now, A sell signal might follow Enter on next Long
Note 4 - The Hunt Bitcoin COT Delta signal is a Largest 'Insider' Tracking tool based on a segment of Commitment of Traders data on Bitcoin Futures, released once a week on a Friday.
It is a Macro Timeframe signal , and should not be used for Day trading and Short Timeframe analysis , Entries may be optimised after a Hunt Bitcoin CoT Signal is generated by separate shorter Timeframe analysis.
Note 5 - The Historical Bitcoin Volatility is an additional 'Amplifier' component to the 'Hunt Bitcoin Cot Delta' Insider Signal
Note 6 - The Historical Bitcoin Volatility criteria varies by timeframe, the above levels are those applying on a Two Day TF Chart, select this custom timeframe in Trading View.
if additional criteria are met for LONG & SHORT insider signals, they may become 'Super Longs/Shorts', see conditions box above.
Hunt Bitcoin CoT Open Interest DeltaWhy Bother another CoT signal?
Its different & focused on the Insider's.
Performance -
This Indicator provided a
1. Signal 1 = 26th March 2019 = SUPER LONG at $4,500 that saw a near $14,000 run up
2. Signal 2 = 18th & 24th June 2019 = SHORT at the second & final level $11,700 after repeated attempts & failure in the $13K range, the mini Echo Bitcoin Bull of 2019
3. Signal 3 = 17th December 2019 = LONG $6,900, Bitcoin rallied to Mid $10,500's
4. Signal 4 = 18th Feb 2020 = SUPER SHORT from $9,700's to a final extreme Low of $3,000, calling the CV-19 collapse
5. Signal 5 = 17th March 2020 = LONG from $5,400 no closure point yet
6. Signal 6 = 29th June 2020 = SUPER LONG reiterate from $10,700 no closure sell signal yet
7. Signal 7 = 17th May 2020 = LONG another accumulate LONG with no sell signal yet generated at Post H&S's low of $33,000
Note - This indicator only commences March 2019, as Bitcoin futures were a recent introduction and needed to settle for 6 months in both use and data, no signals were meaningful prior & data was light.
What is Provided. - Please note the need to also add the Hunt Bitcoin Historical Volatility Indicator for full understanding.
We provide 3 things with the 3 indicators.
'Insider' indications from Largest players in the futures market.
1. Bitcoin Macro Buy Signals.
a) The Bitcoin Commitment of Traders results see us focus solely on Largest 4 Short Open Interest & Largest 4 Long Open Interest aspects of the CoT Release data.
When the difference - is tight, a kind of pinch, these have been great Buy signals in Bitcoin.
We call this difference the Delta & When Delta is 5% or less Bitcoin is a Buy.
2. Bitcoin Macro Sells.
a) A sell signal is Triggered in Bitcoin at any point the Largest 4 short OI > or = to 70
3. AMPLIFIER Trade signals 'Super' Longs or Shorts -
Extreme low volatility events leads to highly impulsive & volatile subsequent moves, if either of 1 or 2 above occur, combined with extreme low volatility
a 'Super Long' or 'SUPER SELL' is generated. In the case of the short side, given Bitcoins general expansive and MACRO Bull trend since inception, we seek an additional component
that is an extreme differential/Delta reading between 4 biggest Longs & Shorts OI.
Namely CoT Delta also must be > 47.5%
We also have a Cautionary level, where it is not necessarily a good idea to accumulate Bitcon, as a better opportunity lower may avail itself, see conditions below.
So the required logic explicitly stated below for all Signals.
1. Long - Hunt Bitcoin CoT Delta < or = 5
2. SUPER Long - Hunt Bitcoin CoT Delta < or = 5; and 2 Day Historical Bitcoin Volatility = or < 20
3. Short - Largest 4 Sellers OI = or > 70
4. SUPER Short - Largest 4 Sellers OI = or > 70; AND..
Hunt Bitcoin CoT Delta = or > 47.5 AND 2 Day Historical BTC Volatility = or < 20
5. Caution - Largest 4 Sellers OI = or > 67.5 AND Hunt Bitcoin CoT Delta = or > 45
WARNING SEE Notes Below
Note 1 - = Largest 4 Open Interest Shorts
Note 2 - = Largest 4 Open Interest Longs
Note 3 - = Hunt Cot Delta = (Largest 4 sellers OI) -( Largest 4 Buyers OI)
Caution = Avoid new Bitcoin Accumulation Right Now, A sell signal might follow Enter on next Long
Note 4 - The Hunt Bitcoin COT Delta signal is a Largest 'Insider' Tracking tool based on a segment of Commitment of Traders data on Bitcoin Futures, released once a week on a Friday.
It is a Macro Timeframe signal , and should not be used for Day trading and Short Timeframe analysis , Entries may be optimised after a Hunt Bitcoin CoT Signal is generated by separate shorter Timeframe analysis.
Note 5 - The Historical Bitcoin Volatility is an additional 'Amplifier' component to the 'Hunt Bitcoin Cot Delta' Insider Signal
Note 6 - The Historical Bitcoin Volatility criteria varies by timeframe, the above levels are those applying on a Two Day TF Chart, select this custom timeframe in Trading View.
if additional criteria are met for LONG & SHORT insider signals, they may become 'Super Longs/Shorts', see conditions box above.
[jav] HeikinAshized OscillatorsThis script allows to HeikinAshize different commonly used centered oscillators.
It plots them like Heikin Ashi candles. In this way, we can eliminate some of the noise and uncertainty that is inherent to applying only one calculation period to the oscillators.
Applying Heikin Ashi to an oscillator might be advantageous compared to applying it directly to the chart, because you are not altering price readings. The obvious advantage is the clear visualization of the trend directions without noise.
INPUTS
The oscillators included are:
Relative Strength Index (RSI)
Stochastic
Stochastic RSI
Fisher transform
Inverse Fisher Transform of RSI (IFTRSI)
Commodity Channel Index (CCI)
Money Flow Index (MFI)
Chande Momentum Oscillator (CMO)
Momentum (MOM)
True Strength Index (TSI)
Williams' Percent Range (WPR).
Apart from the choice of one of these indicators, only two more inputs are required:
the main (median) period and
the % of variability of this period.
RESULTS
The script calculates 4 evenly spaced periods from that data (period and variability), e.g. for a period of 50 and a variability of 30%, the script calculates oscillator values for 4 different periods evenly spaced around 50, (35, 45, 55, 65) and uses these 4 values to draw the Heikin Ashi candle.
The script also plots the usual upper/lower (overbought/oversold) values, as well as the central line.
CREDITS
The interesting concept of applying Heikin Ashi to an oscillator was recently introduced in Tradingview by @JayRogers . Many thanks for the idea.
For Heikin Ashi calculations, the useful script by @allanster was taken as a reference.
Any improvements, modifications or suggestions are welcome.
All in One Strategy no RSI Label - For higher dollar cryptoThis is the All in One Strategy without the RSI suggestion label that will work well for any of the crypto currencies trading above $500 so the overlay shows up better. I am using ETH as an example on this.
Based on some comments on my previously published script that has been replaced I have added Alert Conditions to this version that can be used in other bots. You can also copy and paste these alert conditions into the other All in One script I published for the lower priced cryptocurrencies.
To use the alert conditions I have in here, you will need to convert this strategy into a study to do so. Delete the entry and exit logic at the end (lines 299 through 351), delete line 18 and paste the following in place of line 18:
study(shorttitle='Ain1 No Label',title='All in One Strategy no RSI Label', overlay=true, scale=scale.left)
Here are the settings to mimic what you see here in the back test strategy I am publishing. Remember that previous results do not guarantee future results.
Chart Time = 30 Minutes (if you didn't read my original All in One post, read it. Shorter isn't better. You lose your money faster in a shorter amount of time and I learned that the hard way)
Start Time = 1 April 2021 00:00
End Time = 31 December 2021 00:00
Trade Type = Long/Short
Stop Loss % = 20.1
Take Profit % = 14.57
RSI Length = 20
Overbought = 44
Oversold = 45
EMA Fast Length = 5
EMA Slow Length = 15
Overbought Lookback Minimum Value = 62
Overbought Lookback Bars = 3
Oversold Minimum Value = 43
Oversold Lookback Bars = 5
Source = Close
Max Lookback Period = 5
Use EMA Only = True (check the box)
K = 9
D = 17
K Mode = SMA
High Source = ohlc4
Low Source = ohlc4
Properties - Starting Amount is $3500, everything else is the same.
Any questions, feel free to ask. I will answer as soon as I can.
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)
RSI Div at Daily VWAP StDevMean Reversion indicator based on RSI Divergences at Overbought/Oversold conditions with Price above/below a Standard Deviation from Daily VWAP. Useful for intra-day trading.
Signal criteria:
1. RSI is at Overbought/Oversold
2. RSI Divergence present (not hidden)
3. RSI has not reached Neutral level (i.e. 50)
4. Price has crossed above/below a Standard Deviation from Daily VWAP
Config Options:
- RSI length (default:14)
- Divergence Lookback Period (default:14)
- RSI Oversold/Overbought tresholds (default: 70/30)
- RSI Reset Level (default: 55/45)
- Use VWAP Std Dev (default: yes)
- Standard Deviation from Daily VWAP (default: 1.51)
Use with discretion.
Nifty 20 VolumeThis script computes the volume for Nifty 50 index. I am using top 20 stocks here that constitute about 75% of the Nifty 50. I had used the script created by @shijithlal as a base for this. He has used all 45-50 stocks in his script. You can look that up if you want a more accurate volume.
CCI45/SMA50 indy for 30 min SP500SPCFD:SPX
The script determines entry points using 45 period CCI and 50 period SMA.
Long condition: When CCI crosses up 150 treshold while price above 50 period SMA
Short condition: When CCI crosses down -150 treshold while price below 50 period SMA
Trades are executed above/below 1 point of high/low for long/short positions. Stops are just 1 point below/above of SMA. After 4 points of profit stops should be tightened. If you do not plan to hold the position for a long time, it can produce quick profit within 5-6 bars namely 2.5-3 hour. Otherwise you can manage the trade using SMA as trailing stop. This can be treated as a strategy of scalping which turns out a trend trading eventually if conditions good.
Have a nice trading
Redbear MACD + RSIHello . I make script that combine MACD and RSI
Green area is BUY SELL signal when rsi >45
you can custom parameter .
clock analog/digitalclock with analog/digital options.
The hour hand moves up with the minutes
(for example instead of moving directly from 3h to 4h it gradually moves when minutes are 15', 30', 45')
Time can be adjusted with UTC (+/-)
Colors of the hands and numbers can be changed,
together with the size of the hands
Cheers!
MTF RenkoThis indicator Should be opened on a 15 min chart
It will display the Renko Highs and lows of:
30 min chart
45 min chart
60 min chart
and
120 min chart
Easy TrendThis signal is completely based on analysis and transformation of a single simple moving average. As with all signals and indicators, it should be combined with others.
This is how the signal is built:
1. First it takes the SMA of the closing price.
2. It then takes the ROC of that SMA using a length of 1.
3. It takes an 8-period SMA and also a 64-period SMA of that ROC.
4. These are plotted as follows:
- the ROC is plotted in green when above 0 (trending up) and red when below 0 (trending down).
- the 8-period SMA is plotted as a thin white line within the ROC signal
- the 64-period SMA is plotted as a thick white line within the ROC signal
When the trendline is green, this is a bullish zone. When the trendline is red, this is a bearish zone.
Moving averages (all types of moving averages) are inherently lagging signals. To compensate for that, I am offsetting each SMA series by half of its period. This may be confusing to some, but the end result is a mathematically accurate SMA signal, centered on the signal that it is providing the moving average of. It doesn't stop the lag, but it directly and obviously shows how lagged each signal is, which I personally find better to trade against.
Symbols on the top and bottom of indicator:
Yellow triangle at bottom of indicator shows where a downward trend is starting to bottom out and a buy/long opening may be available soon.
Green triangle at bottom of indicator shows that a downward trend has switched to an upward trend. This indicates a good time to buy.
Yellow triangle at top of indicator shows where an upward trend is starting to plateau and a sell/short opening may be available soon.
Red triangle at top of indicator shows that an upward trend has switched to a downward trend. This indicates a good time to sell.
Note: You may see multiple yellow triangles before seeing a green or red triangle. This can happen when multiple trend accelerations or decelerations occur within an overall green or red zone.
In addition there is a dotted line connecting the end of the 64-period SMA to the end of the 8-period SMA. This indicates the direction the trend is moving towards. When the dotted line crosses the zero line, this portrays a rough estimate of where the trend may switch from a downtrend to an uptrend or vice versa. This is the "best" time to buy or sell, depending on your strategy.
I recommend placing a SMA on your candles set to the same window size as this indicator, and also to offset that SMA to the left by half its window size. For example, a 90-period SMA should be offset by -45 periods. That will cause it to be correctly aligned with this trend signal.
rushs bottom feeder and peak eaterThis script works well on the 45 minute and higher charts. Pairs nicely with a DCA bot with trailing stops. Uses RSI over bought and over sold indicators with bullish engulfing or bearish engulfing candle signals, plotted with the EMA 20 and EMA 100.
Ehlers Instantaneous Trend Line VS Kalman 1-dimensional filterThis indicator is showing difference between Ehlers Instantaneous Trend Line and Kalman 1-dimensional filter.
It is useful to see overbought and oversold areas of the chart.
I am using it on BTCUSD pair on 30, 45, 1H intervals.
I hope you will find it as useful as I do.
Session break 225The default session break line for the NIKKEI 225 INDEX FUTURES (NK225) is drawn at 16:30 (GMT+9), the start of the night session.
This indicator draws a vertical line at 8:45 a.m (GMT+9), the start of the day session.
It is also possible to change the time at which the vertical line is drawn.
Multi-Timeframe Stoch RSIGood evening folks!
Today I want to share with you a simple variant of the Stochastic-RSI built-in indicator.
Nothing too complex: by enabling the relative checkbox and setting the desired (k, d or the RSI ) source and timeframes, you can see higher timeframes data plotted on your screen.
Everything you need to do is enabling the indicator on the lowest timeframe (in this case 15 minutes), then you will see in YELLOW the information retrieved from the next higher timeframe (in this case 30 minutes) and in RED the information retrieved from the highest timeframe (in this case 45 minutes).
IT'S IMPORTANT THAT YOU DISPLAY THE INDICATOR ON THE LOWEST TIMEFRAME!
You can play with the overbought and oversold heights in order to have the best configuration you want (in oversold conditions is suggested to buy while in overbought conditions is suggested to sell)
The higher timeframes data are retrieved avoiding repainting since the method used for taking them is the 10th method described in this PineCoders Article , so, if you want to enable alerts, you SHOULD ignore the disclaimer message related to it without any problem.
Good Trading!
John Carter Pivot Points
This script is based on John Carter Mastering The Trade book. Pivot calculation is based on the previous day high, low, and close.
What Are the Trading Rules for Pivot Buys on Trending Days?
Sells are reversed.
1. Each day I update the appropriate pivot levels on the charts to reflect the previous day’s action. On Mondays, I also
update the weekly pivots, and on the first trading day of a new month, I update the monthly pivots.
2. The first pivot play is done in conjunction with the gap, if there is one. If there is a gap down, then I buy a decline into
the closest pivot level. If there isn’t a playable gap (more than 10 YM points or 1 ES point), then I will wait until
9:45 a.m. eastern to initiate the first play.
3. If the volume on the five-minute ES chart is more than 25,000 contracts, then I’ll wait for the markets to penetrate a
pivot level and move up at least a quarter of the way to the next pivot level. Once this happens, I will then set up a
bid to buy the first retracement back to the violated pivot level.
4. I enter my trades with limit orders only. I place orders “just in front of” the pivot. For the YM, I use 3 points; for the
ES, 0.25 point; for the NQ, 0.50 point; for the TF, 0.20 point; and for individual stocks, 5 cents. For example, if I’m
trading the YM and the pivot level is 10,000, then I would buy a decline to 10,003 and short a rally to 9997
.Sometimes the pivot will be an odd number, such as 1117.38 on the ES. In this case, I always round in the direction of
the trade. So, if I’m bidding for a long, I will round 1117.38 to 1117.50, and my bid will be 1117.75. If I’m offering a
short, I will round 1117.38 down to 1117.25 and place my offer at 1117.00. My stops and targets, then, would be “just
in front of” these appropriate long and short levels.
5. Once filled, I place an order to close the first half at the next pivot level and the second half at the pivot level after
that, using the same “just in front of” parameters.
6. I place a stop at 20 points for the YM, 2 points for the ES, 4 points for the NQ, and 1.50 points for the Russell. For
stocks, I will use a stop based roughly on the price of the stock. If the stock is under $10 a share, I will use a stop of
20 cents. If it is between $10 and $20, I will use a stop of 30 cents; if it is between $20 and $30, I will use a stop of
40 cents, and so on, adding another 10 cents for each $10 increment in price. (A $75 stock would have an 80-cent
stop, for example.)
7. If the first target is hit, I will then move up the stop to my entry-level pivot, minus the “just in front of” fractions
discussed in rule 3. For example, if I get in a YM long at 10,003 and the pivot is at 10,000, then my new stop would
be 9997 once the first target is hit.
8. If I am in a trade at the market close and neither my stop nor my target has been hit, I will close out my position “at the
market” at 4:10 p.m. eastern for futures, and at 3:58 p.m. eastern for stocks.
9. I don’t initiate any new positions after 3:30 p.m. eastern, but I will manage existing positions into the close.
10. The markets rarely have a sustained move above R3 or below S3. If I trade to those levels, I will always fade the
move.
11. After two losers in a row, I’m done with pivots for the day.
What Are the Trading Rules for Pivot Buys on Choppy Days?
Once again, sells are the same, just reversed. The rules for choppy days are identical except for the targets. On choppy days, I
just focus on the YM and the ES. My first target is mechanical: 10 points for the YM and 1 point for the ES on half of my
position. Once this is hit, I will trail up my stop in the same way I would for a trending trade. The second target becomes the
“just in front of” level for the actual next pivot level
Strategy- Double Decker RSIThis Strategy was LIVE coded during a webinar conducted by the author on 16-Jan-21 titled Backtesting in Tradingview. The system is named " Double Decker RSI ".
The rules of this strategy are:
LONG - RSI(5)>70 and RSI(14)>50 -- EXIT: RSI(5)<55
SHORT - RSI(5)<40 and RSI(14)<50 -- EXIT: RSI(5)>45
Instrument - BANKNIFTY - 1 HR Chart
The code is open source for you to edit and make changes as needed. For details on the strategy and webinar, you can refer to the website in signature of this strategy.
Multiple Time Frames Moving Averages (x3)This indicator is a set of 3 moving averages for which you can configure the type of the moving averages , their length , and of course the time frame . The moving averages you can choose from are:
- Simple Moving Average ( SMA )
- Exponential Moving Average ( EMA )
- Weighted Moving Average ( WMA )
- Running Moving Average (RMA)
- Hull Moving Average ( HMA )
- Volume Weighted Moving Average ( VWMA )
- Arnaud Legoux Moving Average ( ALMA )
The time-frames you can choose from - minutes (1, 3, 5, 15, 45), hours (1, 2, 3, 4, 12), days (1, 3), weekly or monthly .
Overall, it is a minimalistic indicator. No major improvements or trading logic like some of my other indicators, but I did make it slightly easier to use and visually appealing. The MAs' colors change from light to dark green/blue/red depending on the trend - bullish or bearish respectively. Initially, those were changing from green to red (based on direction) but it became a bit confusing when they started crossing each other. Anyway, feel free to change those colors to whatever you like.
If you have suggestions on how to improve this indicator or ideas about new ones, please drop me a line. Thanks.
[blackcat] L2 Ehlers Sine Wave Coupled Eight Planetary CycleLevel: 2
Background
Have you considered that factors outside the Earth will be related to macro market trends? Let’s discuss the relationship between the planetary movement in the Galaxy and the market movement on Earth today! Although I said that, you may have laughed out in front of the screen, but the calculations in this script are entirely based on astronomical data and mathematical relationships.
Your next question may be why you compare the movements of the eight planets and the laws of the market on the earth together? My answer comes from a Cybernetic Sine Wave indicator proposed by Dr. John F. Ehlers.
Function
L2 Ehlers Sine Wave Coupled Eight Planetary Cycle first converts the astronomical data of the eight major planets into planetary aspects/phases through mathematical relationships. Planetary aspects/phases can provide the historical and current relative positions of each planet in the mathematical triangle relationship. We can use a simple mathematical sine formula to constrain the planet's trajectory between -1 and 1, which is what we often call a sine wave.
The relationship between the sine wave and the market can be extracted from the theory of John F. Ehlers. In Ehlers' theory, market price can be modeled by the trend and cycle modes. And in his works, there are many indicators of how to completely remove the trend in the market price and only leave the cycle mode data. The Cybernetic Sine Wave indicator is exactly the cycle mode data after the market trend is stripped, and expressed in the form of a sine wave.
If you can read to here with patience, you must also be aware of the premise that the trajectories of the eight planets and the laws of the earth market can be coupled: the trajectory of the sine wave mode. Therefore, this indicator is a tool for comparing and analyzing the two in the same chart. I hope you like it.
Finally, in order to benchmark the trajectories of the eight planets and the specific market on the earth, a starting point in time is particularly important. This is the base date of the market index to be analyzed. It is the year, month, and day data specified by the index, which needs to be input by the user when analyzing a specific stock index. For example, the base date of the S&P 500 index is January 3, 1928. This date needs to be entered into the indicator to analyze the SPX500.
Key Signal
Mercury_trail ---> smoothed Mercury orbit sine wave
Venus_trail ---> smoothed Venus orbit sine wave
Earth_trail ---> smoothed Earth orbit sine wave
Earth_mirror ---> smoothed Earth mirrored orbit sine wave
Mars_trail ---> smoothed Mars orbit sine wave
Jupiter_trail ---> smoothed Jupiter orbit sine wave
Saturn_trail ---> smoothed Saturn orbit sine wave
Uranus_trail ---> smoothed Uranus orbit sine wave
Neptune_trail ---> smoothed Neptune orbit sine wave
Aspect 0, 45, 90, 225, 270 deg ---> key planet aspects
ehlersine ---> Ehlers Cybernetic Sine Wave
ehlerslsine ---> Ehlers Cybernetic Lead Sine Wave
Pros and Cons
This is a technical indicator that I have come up with on a whim, and the laws of planetary operation and the operation of the Earth market are still being explored. Hope that interested friends will share your new discoveries.
Remarks
To celebrate I released the 50th technical indicator script on TV!
Courtesy of @sal157011 John Ehlers "Cybernetic Sine Wave" indicator, I converted it from pine v2 to pine v4 in this script.
Readme
In real life, I am a prolific inventor. I have successfully applied for more than 60 international and regional patents in the past 12 years. But in the past two years or so, I have tried to transfer my creativity to the development of trading strategies. Tradingview is the ideal platform for me. I am selecting and contributing some of the hundreds of scripts to publish in Tradingview community. Welcome everyone to interact with me to discuss these interesting pine scripts.
The scripts posted are categorized into 5 levels according to my efforts or manhours put into these works.
Level 1 : interesting script snippets or distinctive improvement from classic indicators or strategy. Level 1 scripts can usually appear in more complex indicators as a function module or element.
Level 2 : composite indicator/strategy. By selecting or combining several independent or dependent functions or sub indicators in proper way, the composite script exhibits a resonance phenomenon which can filter out noise or fake trading signal to enhance trading confidence level.
Level 3 : comprehensive indicator/strategy. They are simple trading systems based on my strategies. They are commonly containing several or all of entry signal, close signal, stop loss, take profit, re-entry, risk management, and position sizing techniques. Even some interesting fundamental and mass psychological aspects are incorporated.
Level 4 : script snippets or functions that do not disclose source code. Interesting element that can reveal market laws and work as raw material for indicators and strategies. If you find Level 1~2 scripts are helpful, Level 4 is a private version that took me far more efforts to develop.
Level 5 : indicator/strategy that do not disclose source code. private version of Level 3 script with my accumulated script processing skills or a large number of custom functions. I had a private function library built in past two years. Level 5 scripts use many of them to achieve private trading strategy.
CC - Consolidated Interval Display (CID)Ever wish you didn't have to rapidly flip between 6 different intervals to get the full picture?
Yeah, me too. Do you also wish that you kind of understood how the shift / unshift function works for arrays?
Yeah, I did too. Both of those birds are taken care of with one stone!
The Consolidated Interval Display uses the new Array structure and security to display data for 5m, 15m, 45m, 1h, 4h and 1d intervals SIMUTANEOUSLY! Regardless of which interval you're looking at you can get the full picture of numerical data without flipping around to get it.
This is my first script trying to use arrays. It basically shows the following for the given ticker:
ATR14, RSI7, RSI14, SMA50, SMA200 and VWAP at the 5 minute level.
ATR14, RSI7, RSI14, SMA50, SMA200 and VWAP at the 15 minute level.
ATR14, RSI7, RSI14, SMA50, SMA200 and VWAP at the 45 minute level.
ATR14, RSI7, RSI14, SMA50, SMA200 and VWAP at the 1 hour level.
ATR14, RSI7, RSI14, SMA50, SMA200 and VWAP at the 4 hour level.
ATR14, RSI7, RSI14, SMA50, SMA200 and VWAP at the 1 day level.
To make it more or less busy, I've allowed you to toggle off any of the levels you wish. I've also chosen to leave this as open source, as it's nothing too experimental, and I hope that it can gain some traction as an Array example that the public can use! If you don't like the different values that are shown, use this source code example as a spring-board to put values that you do care about onto the labels.
If this code has helped you at all please drop me a like or some constructive criticism if you do not think it's worth a like.
Good luck and happy trading friends.
If this gets traction, I will post something similar for a combination of SPY, VIX, GOLD, QQQ, IWM and TLT.