OPEN-SOURCE SCRIPT

Multi SMA EMA WMA HMA BB (4x5 MAs Bollinger Bands) Adv MTF - RRB

Updated
Multi SMA EMA WMA HMA 4x5 Moving Averages with Bollinger Bands Advanced MTF by RagingRocketBull 2019
Version 1.0

This indicator shows multiple MAs of any type SMA EMA WMA HMA etc with BB and MTF support, can show MAs as dynamically moving levels.
There are 4 MA groups + 1 BB group, a total of 4 TFs * 5 MAs = 20 MAs. You can assign any type/timeframe combo to a group, for example:
- EMAs 12,26,50,100,200 x H1, H4, D1, W1 (4 TFs x 5 MAs x 1 type)
- EMAs 8,10,13,21,30,50,55,100,200,400 x M15, H1 (2 TFs x 10 MAs x 1 type)
- D1 EMAs and SMAs 8,10,12,26,30,50,55,100,200,400 (1 TF x 10 MAs x 2 types)
- H1 WMAs 7,77,89,167,231; H4 HMAs 12,26,50,100,200; D1 EMAs 89,144,169,233,377; W1 SMAs 12,26,50,100,200 (4 TFs x 5 MAs x 4 types)
- +1 extra MA type/timeframe for BB

There are several versions: Simple, MTF, Pro MTF, Advanced MTF and Ultimate MTF. This is the Advanced MTF version. The Differences are listed below. All versions have BB
- Simple: you have 2 groups of MAs that can be assigned any type (5+5)
- MTF: +2 custom Timeframes for each group (2x5 MTF) +1 TF for BB, TF XY smoothing
- Pro MTF: 4 custom Timeframes for each group (4x3 MTF), 1 TF for BB, MA levels and show max bars back options
- Advanced MTF: +2 extra MAs/group (4x5 MTF), custom Ticker/Symbols, Timeframe <>= filter, Remove Duplicates Option
- Ultimate MTF: +individual settings for each MA, custom Ticker/Symbols

Features:
- 4x5 = 20 MAs of any type
- 4x MTF groups with XY step line smoothing
- +1 extra TF/type for BB MAs
- 4x5 = 20 MA levels with adjustable group offsets, indents and shift
- supports any existing type of MA: SMA, EMA, WMA, Hull Moving Average (HMA)
- custom tickers/symbols for each group - you can compare MAs of the same symbol across exchanges
- show max bars back option
- show/hide both groups of MAs/levels/BB and individual MAs
- timeframe filter: show only MAs/Levels with TFs <>= Current TF
- hide MAs/Levels with duplicate TFs
- support for custom TFs that are not available in free accounts: 2D, 3D etc
- support for timeframes in H: H, 2H, 4H etc

Notes:
- Uses timeframe textbox instead of input resolution dropdown to allow for 240 120 and other custom TFs
- Uses symbol textbox instead of input symbol to avoid establishing multiple dummy security connections to the current ticker - otherwise empty symbols will prevent script from running
- Possible reasons for missing MAs on a chart:
- there may not be enough bars in history to start plotting it. For example, W1 EMA200 needs at least 200 bars on a weekly chart.
- price << default Y smoothing step 5. For charts with low/fractional prices (i.e. 0.00002 << 5) adjust X Y smoothing as needed (set Y = 0.0000001) or disable it completely (set X,Y to 0,0)
- TradingView Replay Mode UI and Pinescript security calls are limited to TFs >= D (D,2D,W,MN...) for free accounts
- attempting to plot any TF < D1 in Replay Mode will only result in straight lines, but all TFs will work properly in history and real-time modes. This is not a bug.
- Max Bars Back (num_bars) is limited to 5000 for free accounts (10000 for paid), will show error when exceeded. To plot on all available history set to 0 (default)
- Slow load/redraw times. This indicator becomes slower, its UI less responsive when:
- Pinescript Node.js graphics library is too slow and inefficient at plotting bars/objects in a browser window. Code optimization doesn't help much - the graphics engine is the main reason for general slowness.
- the chart has a long history (10000+ bars) in a browser's cache (you have scrolled back a couple of screens in a max zoom mode).
- Reload the page/Load a fresh chart and then apply the indicator or
- Switch to another Timeframe (old TF history will still remain in cache and that TF will be slow)
- in max possible zoom mode around 4500 bars can fit on 1 screen - this also slows down responsiveness. Reset Zoom level
- initial load and redraw times after a param change in UI also depend on TF. For example:
D1/W1 - 2 sec, H1/H4 - 5-6 sec, M30 - 10 sec, M15/M5 - 4 sec, M1 - 5 sec.
M30 usually has the longest history (up to 16000 bars) and W1 - the shortest (1000 bars).
- when indicator uses more MAs (plots) and timeframes it will redraw slower. Seems that up to 5 Timeframes is acceptable, but 6+ Timeframes can become very slow.
- show_last=last_bars plot limit doesn't affect load/redraw times, so it was removed from MA plot
- Max Bars Back (num_bars) default/custom set UI value doesn't seem to affect load/redraw times
- In max zoom mode all dynamic levels disappear (they behave like text)

1. based on 3EmaBB, uses plot*, barssince and security functions
2. you can't set certain constants from input due to Pinescript limitations - change the code as needed, recompile and use as a private version
3. Levels = trackprice implementation
4. Show Max Bars Back = show_last implementation
5. swma has a fixed length = 4, alma and linreg have additional offset and smoothing params
6. Smoothing is applied by default for visual aesthetics on MTF. To use exact ma mtf values (lines with stair stepping) - disable it


Good Luck! You can explore, modify/reuse the code to build your own indicators.

Release Notes
Changes in ver 2.0:
- 4x7 = 28 MAs - added 2 more MAs for each TF group
- dupe check now also includes symbol: symbol, tf, type - all must match for a duplicate group
- for the dupe check to work correctly a custom symbol must always include the exchange prefix. BB is not checked for dupes
Release Notes

Changes in ver 3.0:

WARNING:
- compilation time has increased to 1 min. If you don't need backreferences use the faster ver 2.0
- depending on the number of references used/call stack depth/timeframe expect an up to 50% increase in load/redraw times after an UI parameter change (4-5 sec => 9-10 sec)
- compiled code size has reached the max limit of 50kb, adding more features will exceed this limit and won't compile

Features:
- added group backreferences for symbols, timeframes and types (use [1],[2],[3],[4] to reference corresponding values in prior groups),
- added group restricted backreferences for individual ma lengths (use -1,-2,.. etc)

Notes:
- backreferences are computationally very expensive (Pinescript doesn't support recursion), but still can be implemented. Different possible workarounds are explained
- only back references will work, forward/self/circular references are not supported i.e. MA15=-7 is a valid reference to MA7; MA15=-15 or MA15=-20 will produce an error
- the negative ma value reference is resolved to the value of the prior ma with the same abs number i.e. -5 is a reference to MA5 value, -15 is MA15 value
- 4-level deep call stack with recursive references is supported (MA28=-21, MA21=-14, MA14=-7, MA7=400 will all resolve to 400)
- first 7 mas (group 1) must have fixed values and can't be references (there's nothing to reference before group 1)
- group 2 mas can reference any group 1 mas; group 3 mas - any mas in groups 1,2; group 4 mas - any mas in groups 1-3 etc
- bb ma must have a fixed value and can't be a reference - this last extra line exceeds the 50k size limit for the compiled byte code and won't compile
- deltaX_tf_ref must have a fixed tf value and can't be a reference

Release Notes

Changes in ver 4.0:

WARNING:
- compilation time is reduced slightly to 50 sec
- If you don't need backreferences use the faster ver 2.0
- If you want individual ma lengths backreferences use the slower ver 3.0

- depending on the number of references used/call stack depth/timeframe expect an increase in load/redraw times after an UI parameter change compared to values in ver 2.0
- compiled code size reduced, no more script too long errors (max limit 50kb)

Features:
- removed the more precise individual ma lengths backreferences (don't use -1,-2,.. any more) as too computationally expensive
- replaced it with a simple MA group override dropdown for all ma lengths in the current group (use [1],[2],[3] to reference corresponding values in prior groups) as most users would probably prefer

Notes:
- when MA Group references another MA Group it works similar to backreferences for types:
- each ma length in the current group is substituted with a corresponding ma length in a referenced group i.e. MAs[1] <= MAs[2] means that MA8-MA14 will all get their respective values from MA1-MA7 range: MA8=MA1, MA9=MA2...,MA14=MA7
- all current MA Group values are ignored when a reference is used
- MA backreferences work only for the whole groups. Individual MA backreferences (negative abs values) don't work in this version

- only MA Group back references will work, MA Groups can't contain forward/self/circular references to subsequent MA Groups
- recursive call stack occurs when the referenced MA Group is itself a reference to another MA Group and must be resolved first
- 4-level deep call stack with potential recursive references must be resolved (MAs[1] <= MAs[2] <= MAs[3] <= MAs[4]) - acceptable
- first 7 mas must have fixed values - there's nothing to reference before Group [1]
- MA Group [2] can reference MA Group [1]; MA Group [3] => MA Groups [1],[2]; MA Group [4] => MA Groups [1-3]
- bb ma must have a fixed value and can't be a reference
Bollinger Bands (BB)Exponential Moving Average (EMA)exponentialmovingaveragesHMAhullmovingaveragemtfmulti-timeframeSimple Moving Average (SMA)sma

Open-source script

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in publication is governed by House rules. You can favorite it to use it on a chart.

Want to use this script on a chart?

Disclaimer