Indicator · Pine Script v6 · On the chart

Moving Averages For All Timeframes

by peterdmv

Calculates and plots customizable sets of moving averages across intraday, daily, weekly, and monthly timeframes directly on the main price chart.

View on GitHub

Repaints

GitHub stars1on the repository
Pine versionv6current
Lines of code376
Settings40inputs
LicenceMPL-2.0
Last update2 months ago30 Aug 2026

Add It to Your TradingView Chart

  1. 1Copy the scriptPress Copy script above, or the copy button on the code below.
  2. 2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
  3. 3Paste over the templateCreate a new indicator, select all of the template text and paste. Press Save and give it a name.
  4. 4Add it to the chartPress Add to chart, then adjust the settings with the gear icon next to its name.

Source Code

376 lines of Pine Script v6 from indicators/MAAT.pine, published under MPL-2.0. Keep the author's credit and licence lines when you reuse it.

MAAT.pine
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © peterdmv
//
// Thanks to JohnMuchow for the original version of this indicator.
//
// Release: v1

//@version=6
indicator('Moving Averages For All Timeframes', shorttitle='MAAT', overlay=true)

//***************************************************************************************
// Inputs
//***************************************************************************************

//---------------------------------------------------
// Intraday
//---------------------------------------------------
iIntraMA1Visible = input.bool(title='', defval=true, inline='I1', group='Intraday Moving Averages', display=display.data_window)
iIntraMA1Length = input.int(title='Period', minval=1, maxval=5000, defval=8, inline='I1', group='Intraday Moving Averages', display=display.data_window)
iIntraMA1Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='EMA', inline='I1', group='Intraday Moving Averages', display=display.data_window)
iIntraMA1Source = input.source(title='', defval=close, inline='I1', group='Intraday Moving Averages', display=display.data_window)
iIntraMA1Color = input.color(title='', defval=color.green, inline='I1', group='Intraday Moving Averages', display=display.data_window)
iIntraMA1Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I1w', group='Intraday Moving Averages', display=display.data_window)

iIntraMA2Visible = input.bool(title='', defval=true, inline='I2', group='Intraday Moving Averages', display=display.data_window)
iIntraMA2Length = input.int(title='Period', minval=1, maxval=5000, defval=21, inline='I2', group='Intraday Moving Averages', display=display.data_window)
iIntraMA2Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='EMA', inline='I2', group='Intraday Moving Averages', display=display.data_window)
iIntraMA2Source = input.source(title='', defval=close, inline='I2', group='Intraday Moving Averages', display=display.data_window)
iIntraMA2Color = input.color(title='', defval=color.purple, inline='I2', group='Intraday Moving Averages', display=display.data_window)
iIntraMA2Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I2w', group='Intraday Moving Averages', display=display.data_window)

iIntraMA3Visible = input.bool(title='', defval=true, inline='I3', group='Intraday Moving Averages', display=display.data_window)
iIntraMA3Length = input.int(title='Period', minval=1, maxval=5000, defval=65, inline='I3', group='Intraday Moving Averages', display=display.data_window)
iIntraMA3Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='EMA', inline='I3', group='Intraday Moving Averages', display=display.data_window)
iIntraMA3Source = input.source(title='', defval=close, inline='I3', group='Intraday Moving Averages', display=display.data_window)
iIntraMA3Color = input.color(title='', defval=color.maroon, inline='I3', group='Intraday Moving Averages', display=display.data_window)
iIntraMA3Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I3w', group='Intraday Moving Averages', display=display.data_window)

iIntraMA4Visible = input.bool(title='', defval=true, inline='I4', group='Intraday Moving Averages', display=display.data_window)
iIntraMA4Length = input.int(title='Period', minval=1, maxval=5000, defval=144, inline='I4', group='Intraday Moving Averages', display=display.data_window)
iIntraMA4Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='EMA', inline='I4', group='Intraday Moving Averages', display=display.data_window)
iIntraMA4Source = input.source(title='', defval=close, inline='I4', group='Intraday Moving Averages', display=display.data_window)
iIntraMA4Color = input.color(title='', defval=color.gray, inline='I4', group='Intraday Moving Averages', display=display.data_window)
iIntraMA4Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I4w', group='Intraday Moving Averages', display=display.data_window)

iIntraMA5Visible = input.bool(title='', defval=false, inline='I5', group='Intraday Moving Averages', display=display.data_window)
iIntraMA5Length = input.int(title='Period', minval=1, maxval=5000, defval=377, inline='I5', group='Intraday Moving Averages', display=display.data_window)
iIntraMA5Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='EMA', inline='I5', group='Intraday Moving Averages', display=display.data_window)
iIntraMA5Source = input.source(title='', defval=close, inline='I5', group='Intraday Moving Averages', display=display.data_window)
iIntraMA5Color = input.color(title='', defval=color.gray, inline='I5', group='Intraday Moving Averages', display=display.data_window)
iIntraMA5Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I5w', group='Intraday Moving Averages', display=display.data_window)

iIntraCloud = input.bool(title='Show Moving Average Cloud', defval=false, inline='I6', display=display.data_window, tooltip='Fill area between two selected moving averages ' +
     '(pick which ones below). At a glance, you can see if the slower moving average is above or below the faster moving average.')
iIntraCloudColorUp = input.color(title='   Up', defval=color.new(color.green, transp=90), inline='I6', display=display.data_window)
iIntraCloudColorDown = input.color(title='Down', defval=color.new(color.red, transp=90), inline='I6', display=display.data_window)
iIntraCloudMA1 = input.int(title='Between MA #', defval=1, minval=1, maxval=5, inline='I6b', display=display.data_window)
iIntraCloudMA2 = input.int(title='and #', defval=2, minval=1, maxval=5, inline='I6b', display=display.data_window)

iIntraVWAPVisible = input.bool(title='', defval=true, inline='I7', group='Intraday Indicators', display=display.data_window)
iIntraVWAPSource = input.source(title='', defval=hlc3, inline='I7', group='Intraday Indicators', display=display.data_window)
iIntraVWAPColor = input.color(title='', defval=color.orange, inline='I7', group='Intraday Indicators', display=display.data_window)
iIntraVWAPWidth = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I7w', group='Intraday Indicators', display=display.data_window)


//---------------------------------------------------
// Daily
//---------------------------------------------------
iDailyMA1Visible = input.bool(title='', defval=true, inline='I7', group='Daily Moving Averages', display=display.none)
iDailyMA1Length = input.int(title='Period', minval=1, maxval=5000, defval=4, inline='I7', group='Daily Moving Averages', display=display.none)
iDailyMA1Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='EMA', inline='I7', group='Daily Moving Averages', display=display.none)
iDailyMA1Source = input.source(title='', defval=close, inline='I7', group='Daily Moving Averages', display=display.none)
iDailyMA1Color = input.color(title='', defval=color.silver, inline='I7', group='Daily Moving Averages', display=display.none)
iDailyMA1Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I7w', group='Daily Moving Averages', display=display.none)

iDailyMA2Visible = input.bool(title='', defval=true, inline='I8', group='Daily Moving Averages', display=display.data_window)
iDailyMA2Length = input.int(title='Period', minval=1, maxval=5000, defval=8, inline='I8', group='Daily Moving Averages', display=display.data_window)
iDailyMA2Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='EMA', inline='I8', group='Daily Moving Averages', display=display.data_window)
iDailyMA2Source = input.source(title='', defval=close, inline='I8', group='Daily Moving Averages', display=display.data_window)
iDailyMA2Color = input.color(title='', defval=color.green, inline='I8', group='Daily Moving Averages', display=display.data_window)
iDailyMA2Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I8w', group='Daily Moving Averages', display=display.data_window)

iDailyMA3Visible = input.bool(title='', defval=true, inline='I9', group='Daily Moving Averages', display=display.data_window)
iDailyMA3Length = input.int(title='Period', minval=1, maxval=5000, defval=21, inline='I9', group='Daily Moving Averages', display=display.data_window)
iDailyMA3Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='EMA', inline='I9', group='Daily Moving Averages', display=display.data_window)
iDailyMA3Source = input.source(title='', defval=close, inline='I9', group='Daily Moving Averages', display=display.data_window)
iDailyMA3Color = input.color(title='', defval=color.purple, inline='I9', group='Daily Moving Averages', display=display.data_window)
iDailyMA3Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I9w', group='Daily Moving Averages', display=display.data_window)

iDailyMA4Visible = input.bool(title='', defval=true, inline='I10', group='Daily Moving Averages', display=display.data_window)
iDailyMA4Length = input.int(title='Period', minval=1, maxval=5000, defval=50, inline='I10', group='Daily Moving Averages', display=display.data_window)
iDailyMA4Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='SMA', inline='I10', group='Daily Moving Averages', display=display.data_window)
iDailyMA4Source = input.source(title='', defval=close, inline='I10', group='Daily Moving Averages', display=display.data_window)
iDailyMA4Color = input.color(title='', defval=color.red, inline='I10', group='Daily Moving Averages', display=display.data_window)
iDailyMA4Width = input.int(title='Width', defval=2, minval=1, maxval=4, inline='I10w', group='Daily Moving Averages', display=display.data_window)

iDailyMA5Visible = input.bool(title='', defval=true, inline='I11', group='Daily Moving Averages', display=display.data_window)
iDailyMA5Length = input.int(title='Period', minval=1, maxval=500, defval=65, inline='I11', group='Daily Moving Averages', display=display.data_window)
iDailyMA5Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='EMA', inline='I11', group='Daily Moving Averages', display=display.data_window)
iDailyMA5Source = input.source(title='', defval=close, inline='I11', group='Daily Moving Averages', display=display.data_window)
iDailyMA5Color = input.color(title='', defval=color.maroon, inline='I11', group='Daily Moving Averages', display=display.data_window)
iDailyMA5Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I11w', group='Daily Moving Averages', display=display.data_window)

iDailyMA6Visible = input.bool(title='', defval=true, inline='I12', group='Daily Moving Averages', display=display.data_window)
iDailyMA6Length = input.int(title='Period', minval=1, maxval=500, defval=200, inline='I12', group='Daily Moving Averages', display=display.data_window)
iDailyMA6Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='SMA', inline='I12', group='Daily Moving Averages', display=display.data_window)
iDailyMA6Source = input.source(title='', defval=close, inline='I12', group='Daily Moving Averages', display=display.data_window)
iDailyMA6Color = input.color(title='', defval=color.gray, inline='I12', group='Daily Moving Averages', display=display.data_window)
iDailyMA6Width = input.int(title='Width', defval=2, minval=1, maxval=4, inline='I12w', group='Daily Moving Averages', display=display.data_window)

iDailyMA7Visible = input.bool(title='', defval=false, inline='I13', group='Daily Moving Averages', display=display.data_window)
iDailyMA7Length = input.int(title='Period', minval=1, maxval=500, defval=377, inline='I13', group='Daily Moving Averages', display=display.data_window)
iDailyMA7Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='EMA', inline='I13', group='Daily Moving Averages', display=display.data_window)
iDailyMA7Source = input.source(title='', defval=close, inline='I13', group='Daily Moving Averages', display=display.data_window)
iDailyMA7Color = input.color(title='', defval=color.gray, inline='I13', group='Daily Moving Averages', display=display.data_window)
iDailyMA7Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I13w', group='Daily Moving Averages', display=display.data_window)

iDailyCloud = input.bool(title='Show Moving Average Cloud', defval=false, inline='I14', display=display.data_window, tooltip='Fill area between two selected moving averages ' +
     '(pick which ones below). At a glance, you can see if the slower moving average is above or below the faster moving average.')
iDailyCloudColorUp = input.color(title='   Up', defval=color.new(color.green, transp=90), inline='I14', display=display.data_window)
iDailyCloudColorDown = input.color(title='Down', defval=color.new(color.red, transp=90), inline='I14', display=display.data_window)
iDailyCloudMA1 = input.int(title='Between MA #', defval=1, minval=1, maxval=7, inline='I14b', display=display.data_window)
iDailyCloudMA2 = input.int(title='and #', defval=2, minval=1, maxval=7, inline='I14b', display=display.data_window)

iWeeklyOnDaily = input.bool(title='Show Weekly on Daily', defval=false, inline='WeeklyOnDaily', display=display.data_window)
iWeeklyOnDailyLength = input.int(title='Period', minval=1, maxval=5000, defval=10, inline='WeeklyOnDaily', display=display.data_window)
iWeeklyOnDailyType = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='SMA', inline='WeeklyOnDaily', display=display.data_window)
iWeeklyOnDailyColor = input.color(title='', defval=color.olive, inline='WeeklyOnDaily', display=display.data_window)
iWeeklyOnDailyWidth = input.int(title='Width', defval=1, minval=1, maxval=4, inline='WeeklyOnDailyw', display=display.data_window)


//---------------------------------------------------
// Weekly
//---------------------------------------------------
iWeeklyMA1Visible = input.bool(title='', defval=true, inline='I14', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA1Length = input.int(title='Period', minval=1, maxval=5000, defval=10, inline='I14', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA1Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='SMA', inline='I14', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA1Source = input.source(title='', defval=close, inline='I14', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA1Color = input.color(title='', defval=color.lime, inline='I14', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA1Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I14w', group='Weekly Moving Averages', display=display.data_window)

iWeeklyMA2Visible = input.bool(title='', defval=true, inline='I15', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA2Length = input.int(title='Period', minval=1, maxval=5000, defval=30, inline='I15', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA2Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='SMA', inline='I15', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA2Source = input.source(title='', defval=close, inline='I15', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA2Color = input.color(title='', defval=color.purple, inline='I15', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA2Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I15w', group='Weekly Moving Averages', display=display.data_window)

iWeeklyMA3Visible = input.bool(title='', defval=true, inline='I16', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA3Length = input.int(title='Period', minval=1, maxval=5000, defval=50, inline='I16', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA3Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='SMA', inline='I16', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA3Source = input.source(title='', defval=close, inline='I16', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA3Color = input.color(title='', defval=color.red, inline='I16', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA3Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I16w', group='Weekly Moving Averages', display=display.data_window)

iWeeklyMA4Visible = input.bool(title='', defval=false, inline='I17', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA4Length = input.int(title='Period', minval=1, maxval=5000, defval=100, inline='I17', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA4Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='SMA', inline='I17', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA4Source = input.source(title='', defval=close, inline='I17', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA4Color = input.color(title='', defval=color.gray, inline='I17', group='Weekly Moving Averages', display=display.data_window)
iWeeklyMA4Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I17w', group='Weekly Moving Averages', display=display.data_window)

iWeeklyCloud = input.bool(title='Show Moving Average Cloud', defval=false, inline='I18', display=display.data_window, tooltip='Fill area between two selected moving averages ' +
     '(pick which ones below). At a glance, you can see if the slower moving average is above or below the faster moving average.')
iWeeklyCloudColorUp = input.color(title='   Up', defval=color.new(color.green, transp=90), inline='I18', display=display.data_window)
iWeeklyCloudColorDown = input.color(title='Down', defval=color.new(color.red, transp=90), inline='I18', display=display.data_window)
iWeeklyCloudMA1 = input.int(title='Between MA #', defval=1, minval=1, maxval=4, inline='I18b', display=display.data_window)
iWeeklyCloudMA2 = input.int(title='and #', defval=2, minval=1, maxval=4, inline='I18b', display=display.data_window)


//---------------------------------------------------
// Monthly
//---------------------------------------------------
iMonthlyMA1Visible = input.bool(title='', defval=true, inline='I19', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA1Length = input.int(title='Period', minval=1, maxval=5000, defval=10, inline='I19', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA1Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='SMA', inline='I19', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA1Source = input.source(title='', defval=close, inline='I19', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA1Color = input.color(title='', defval=color.green, inline='I19', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA1Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I19w', group='Monthly Moving Averages', display=display.data_window)

iMonthlyMA2Visible = input.bool(title='', defval=true, inline='I20', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA2Length = input.int(title='Period', minval=1, maxval=5000, defval=24, inline='I20', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA2Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='SMA', inline='I20', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA2Source = input.source(title='', defval=close, inline='I20', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA2Color = input.color(title='', defval=color.purple, inline='I20', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA2Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I20w', group='Monthly Moving Averages', display=display.data_window)

iMonthlyMA3Visible = input.bool(title='', defval=true, inline='I21', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA3Length = input.int(title='Period', minval=1, maxval=5000, defval=48, inline='I21', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA3Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='SMA', inline='I21', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA3Source = input.source(title='', defval=close, inline='I21', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA3Color = input.color(title='', defval=color.red, inline='I21', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA3Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I21w', group='Monthly Moving Averages', display=display.data_window)

iMonthlyMA4Visible = input.bool(title='', defval=false, inline='I22', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA4Length = input.int(title='Period', minval=1, maxval=5000, defval=96, inline='I22', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA4Type = input.string(title='', options=['SMA', 'EMA', 'RMA', 'VWMA', 'WMA'], defval='SMA', inline='I22', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA4Source = input.source(title='', defval=close, inline='I22', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA4Color = input.color(title='', defval=color.gray, inline='I22', group='Monthly Moving Averages', display=display.data_window)
iMonthlyMA4Width = input.int(title='Width', defval=1, minval=1, maxval=4, inline='I22w', group='Monthly Moving Averages', display=display.data_window)

iMonthlyCloud = input.bool(title='Show Moving Average Cloud', defval=false, inline='I23', display=display.data_window, tooltip='Fill area between two selected moving averages ' +
     '(pick which ones below). At a glance, you can see if the slower moving average is above or below the faster moving average.')
iMonthlyCloudColorUp = input.color(title='   Up', defval=color.new(color.green, transp=90), inline='I23', display=display.data_window)
iMonthlyCloudColorDown = input.color(title='Down', defval=color.new(color.red, transp=90), inline='I23', display=display.data_window)
iMonthlyCloudMA1 = input.int(title='Between MA #', defval=1, minval=1, maxval=4, inline='I23b', display=display.data_window)
iMonthlyCloudMA2 = input.int(title='and #', defval=2, minval=1, maxval=4, inline='I23b', display=display.data_window)

//***************************************************************************************
// Helper functions
//***************************************************************************************

// Single shared MA-type dispatcher, used by every MA slot below instead of
// repeating a type-selector chain per slot.
f_ma(src, len, maType) =>
    switch maType
        'SMA' => ta.sma(src, len)
        'EMA' => ta.ema(src, len)
        'RMA' => ta.rma(src, len)
        'VWMA' => ta.vwma(src, len)
        => ta.wma(src, len)

// Picks one of up to 7 MA values by slot number (1-based), for whichever cloud
// boundary the user selected. Timeframes with fewer than 7 MAs just pass na
// for the unused slots — those indices are unreachable since the matching
// "Between MA #" input's maxval caps out at that timeframe's actual MA count.
f_pick(idx, float v1, float v2, float v3, float v4, float v5, float v6, float v7) =>
    switch idx
        1 => v1
        2 => v2
        3 => v3
        4 => v4
        5 => v5
        6 => v6
        => v7

//***************************************************************************************
// Plot moving averages
//***************************************************************************************

//---------------------------------------------------
// Intraday
//---------------------------------------------------
intraMA1 = 0.0
intraMA2 = 0.0
intraMA3 = 0.0
intraMA4 = 0.0
intraMA5 = 0.0
intraVWAP = 0.0
if (timeframe.isintraday)
    intraMA1 := f_ma(iIntraMA1Source, iIntraMA1Length, iIntraMA1Type)
    intraMA2 := f_ma(iIntraMA2Source, iIntraMA2Length, iIntraMA2Type)
    intraMA3 := f_ma(iIntraMA3Source, iIntraMA3Length, iIntraMA3Type)
    intraMA4 := f_ma(iIntraMA4Source, iIntraMA4Length, iIntraMA4Type)
    intraMA5 := f_ma(iIntraMA5Source, iIntraMA5Length, iIntraMA5Type)
    intraVWAP := ta.vwap(iIntraVWAPSource)

i1 = plot(iIntraMA1Visible and timeframe.isintraday ? intraMA1 : na, title='Intraday Moving Average #1', color=iIntraMA1Color, linewidth=iIntraMA1Width)
i2 = plot(iIntraMA2Visible and timeframe.isintraday ? intraMA2 : na, title='Intraday Moving Average #2', color=iIntraMA2Color, linewidth=iIntraMA2Width)
i3 = plot(iIntraMA3Visible and timeframe.isintraday ? intraMA3 : na, title='Intraday Moving Average #3', color=iIntraMA3Color, linewidth=iIntraMA3Width)
i4 = plot(iIntraMA4Visible and timeframe.isintraday ? intraMA4 : na, title='Intraday Moving Average #4', color=iIntraMA4Color, linewidth=iIntraMA4Width)
i5 = plot(iIntraMA5Visible and timeframe.isintraday ? intraMA5 : na, title='Intraday Moving Average #5', color=iIntraMA5Color, linewidth=iIntraMA5Width)

// Show moving average cloud, between whichever two MAs were selected. Rather
// than trying to dynamically re-point a plot reference at one of the existing
// MA plots (Pine ties a plot to its original data series and won't let it be
// reassigned to a different one), two new invisible plots are drawn from the
// already-selected values, and the fill runs between those instead.
intraCloudValA = f_pick(iIntraCloudMA1, intraMA1, intraMA2, intraMA3, intraMA4, intraMA5, na, na)
intraCloudValB = f_pick(iIntraCloudMA2, intraMA1, intraMA2, intraMA3, intraMA4, intraMA5, na, na)
fillColor = color.rgb(0, 0, 0, 100)  // Transparent
if (iIntraCloud)
    fillColor := intraCloudValA < intraCloudValB ? iIntraCloudColorDown : iIntraCloudColorUp
intraCloudPlotA = plot(iIntraCloud and timeframe.isintraday ? intraCloudValA : na, title='Intraday Cloud Boundary A', display=display.none)
intraCloudPlotB = plot(iIntraCloud and timeframe.isintraday ? intraCloudValB : na, title='Intraday Cloud Boundary B', display=display.none)
fill(intraCloudPlotA, intraCloudPlotB, color=fillColor)

plot(iIntraVWAPVisible and timeframe.isintraday ? intraVWAP : na, title='Intraday Volume Weighted Average Price', color=iIntraVWAPColor, linewidth=iIntraVWAPWidth)

//---------------------------------------------------
// Daily
//---------------------------------------------------
dailyMA1 = 0.0
dailyMA2 = 0.0
dailyMA3 = 0.0
dailyMA4 = 0.0
dailyMA5 = 0.0
dailyMA6 = 0.0
dailyMA7 = 0.0
if (timeframe.isdaily)
    dailyMA1 := f_ma(iDailyMA1Source, iDailyMA1Length, iDailyMA1Type)
    dailyMA2 := f_ma(iDailyMA2Source, iDailyMA2Length, iDailyMA2Type)
    dailyMA3 := f_ma(iDailyMA3Source, iDailyMA3Length, iDailyMA3Type)
    dailyMA4 := f_ma(iDailyMA4Source, iDailyMA4Length, iDailyMA4Type)
    dailyMA5 := f_ma(iDailyMA5Source, iDailyMA5Length, iDailyMA5Type)
    dailyMA6 := f_ma(iDailyMA6Source, iDailyMA6Length, iDailyMA6Type)
    dailyMA7 := f_ma(iDailyMA7Source, iDailyMA7Length, iDailyMA7Type)

d1 = plot(iDailyMA1Visible and timeframe.isdaily ? dailyMA1 : na, title='Daily Moving Average #1', color=iDailyMA1Color, linewidth=iDailyMA1Width)
d2 = plot(iDailyMA2Visible and timeframe.isdaily ? dailyMA2 : na, title='Daily Moving Average #2', color=iDailyMA2Color, linewidth=iDailyMA2Width)
d3 = plot(iDailyMA3Visible and timeframe.isdaily ? dailyMA3 : na, title='Daily Moving Average #3', color=iDailyMA3Color, linewidth=iDailyMA3Width)
d4 = plot(iDailyMA4Visible and timeframe.isdaily ? dailyMA4 : na, title='Daily Moving Average #4', color=iDailyMA4Color, linewidth=iDailyMA4Width)
d5 = plot(iDailyMA5Visible and timeframe.isdaily ? dailyMA5 : na, title='Daily Moving Average #5', color=iDailyMA5Color, linewidth=iDailyMA5Width)
d6 = plot(iDailyMA6Visible and timeframe.isdaily ? dailyMA6 : na, title='Daily Moving Average #6', color=iDailyMA6Color, linewidth=iDailyMA6Width)
d7 = plot(iDailyMA7Visible and timeframe.isdaily ? dailyMA7 : na, title='Daily Moving Average #6', color=iDailyMA7Color, linewidth=iDailyMA7Width)

// Show weekly on daily
w = request.security(syminfo.tickerid, 'W', f_ma(close, iWeeklyOnDailyLength, iWeeklyOnDailyType), lookahead = barmerge.lookahead_on)
plot(iWeeklyOnDaily and timeframe.isdaily ? w : na, color=iWeeklyOnDailyColor, linewidth=iWeeklyOnDailyWidth)

// Show moving average cloud, between whichever two MAs were selected
dailyCloudValA = f_pick(iDailyCloudMA1, dailyMA1, dailyMA2, dailyMA3, dailyMA4, dailyMA5, dailyMA6, dailyMA7)
dailyCloudValB = f_pick(iDailyCloudMA2, dailyMA1, dailyMA2, dailyMA3, dailyMA4, dailyMA5, dailyMA6, dailyMA7)
fillColor := color.rgb(0, 0, 0, 100)  // Transparent
if (iDailyCloud)
    fillColor := dailyCloudValA < dailyCloudValB ? iDailyCloudColorDown : iDailyCloudColorUp
dailyCloudPlotA = plot(iDailyCloud and timeframe.isdaily ? dailyCloudValA : na, title='Daily Cloud Boundary A', display=display.none)
dailyCloudPlotB = plot(iDailyCloud and timeframe.isdaily ? dailyCloudValB : na, title='Daily Cloud Boundary B', display=display.none)
fill(dailyCloudPlotA, dailyCloudPlotB, color=fillColor)

//---------------------------------------------------
// Weekly
//---------------------------------------------------
weeklyMA1 = 0.0
weeklyMA2 = 0.0
weeklyMA3 = 0.0
weeklyMA4 = 0.0
if timeframe.isweekly
    weeklyMA1 := f_ma(iWeeklyMA1Source, iWeeklyMA1Length, iWeeklyMA1Type)
    weeklyMA2 := f_ma(iWeeklyMA2Source, iWeeklyMA2Length, iWeeklyMA2Type)
    weeklyMA3 := f_ma(iWeeklyMA3Source, iWeeklyMA3Length, iWeeklyMA3Type)
    weeklyMA4 := f_ma(iWeeklyMA4Source, iWeeklyMA4Length, iWeeklyMA4Type)

w1 = plot(iWeeklyMA1Visible and timeframe.isweekly ? weeklyMA1 : na, title='Weekly Moving Average #1', color=iWeeklyMA1Color, linewidth=iWeeklyMA1Width)
w2 = plot(iWeeklyMA2Visible and timeframe.isweekly ? weeklyMA2 : na, title='Weekly Moving Average #2', color=iWeeklyMA2Color, linewidth=iWeeklyMA2Width)
w3 = plot(iWeeklyMA3Visible and timeframe.isweekly ? weeklyMA3 : na, title='Weekly Moving Average #3', color=iWeeklyMA3Color, linewidth=iWeeklyMA3Width)
w4 = plot(iWeeklyMA4Visible and timeframe.isweekly ? weeklyMA4 : na, title='Weekly Moving Average #4', color=iWeeklyMA4Color, linewidth=iWeeklyMA4Width)

// Show moving average cloud, between whichever two MAs were selected
weeklyCloudValA = f_pick(iWeeklyCloudMA1, weeklyMA1, weeklyMA2, weeklyMA3, weeklyMA4, na, na, na)
weeklyCloudValB = f_pick(iWeeklyCloudMA2, weeklyMA1, weeklyMA2, weeklyMA3, weeklyMA4, na, na, na)
fillColor := color.rgb(0, 0, 0, 100)  // Transparent
if (iWeeklyCloud)
    fillColor := weeklyCloudValA < weeklyCloudValB ? iWeeklyCloudColorDown : iWeeklyCloudColorUp
weeklyCloudPlotA = plot(iWeeklyCloud and timeframe.isweekly ? weeklyCloudValA : na, title='Weekly Cloud Boundary A', display=display.none)
weeklyCloudPlotB = plot(iWeeklyCloud and timeframe.isweekly ? weeklyCloudValB : na, title='Weekly Cloud Boundary B', display=display.none)
fill(weeklyCloudPlotA, weeklyCloudPlotB, color=fillColor)


//---------------------------------------------------
// Monthly
//---------------------------------------------------
monthlyMA1 = 0.0
monthlyMA2 = 0.0
monthlyMA3 = 0.0
monthlyMA4 = 0.0
if (timeframe.ismonthly)
    monthlyMA1 := f_ma(iMonthlyMA1Source, iMonthlyMA1Length, iMonthlyMA1Type)
    monthlyMA2 := f_ma(iMonthlyMA2Source, iMonthlyMA2Length, iMonthlyMA2Type)
    monthlyMA3 := f_ma(iMonthlyMA3Source, iMonthlyMA3Length, iMonthlyMA3Type)
    monthlyMA4 := f_ma(iMonthlyMA4Source, iMonthlyMA4Length, iMonthlyMA4Type)

m1 = plot(iMonthlyMA1Visible and timeframe.ismonthly ? monthlyMA1 : na, title='Monthly Moving Average #1', color=iMonthlyMA1Color, linewidth=iMonthlyMA1Width)
m2 = plot(iMonthlyMA2Visible and timeframe.ismonthly ? monthlyMA2 : na, title='Monthly Moving Average #2', color=iMonthlyMA2Color, linewidth=iMonthlyMA2Width)
m3 = plot(iMonthlyMA3Visible and timeframe.ismonthly ? monthlyMA3 : na, title='Monthly Moving Average #3', color=iMonthlyMA3Color, linewidth=iMonthlyMA3Width)
m4 = plot(iMonthlyMA4Visible and timeframe.ismonthly ? monthlyMA4 : na, title='Monthly Moving Average #4', color=iMonthlyMA4Color, linewidth=iMonthlyMA4Width)

// Show moving average cloud, between whichever two MAs were selected
monthlyCloudValA = f_pick(iMonthlyCloudMA1, monthlyMA1, monthlyMA2, monthlyMA3, monthlyMA4, na, na, na)
monthlyCloudValB = f_pick(iMonthlyCloudMA2, monthlyMA1, monthlyMA2, monthlyMA3, monthlyMA4, na, na, na)
fillColor := color.rgb(0, 0, 0, 100)  // Transparent
if (iMonthlyCloud)
    fillColor := monthlyCloudValA < monthlyCloudValB ? iMonthlyCloudColorDown : iMonthlyCloudColorUp
monthlyCloudPlotA = plot(iMonthlyCloud and timeframe.ismonthly ? monthlyCloudValA : na, title='Monthly Cloud Boundary A', display=display.none)
monthlyCloudPlotB = plot(iMonthlyCloud and timeframe.ismonthly ? monthlyCloudValB : na, title='Monthly Cloud Boundary B', display=display.none)
fill(monthlyCloudPlotA, monthlyCloudPlotB, color=fillColor)

Overview

Supports SMA, EMA, RMA, VWMA, and WMA calculations with per-line width and color options, moving average clouds, intraday VWAP, and higher-timeframe overlays. Input options control periods, types, and visibility for each moving average set. Note that referencing higher-timeframe data may introduce lookahead bias on historical bars.

Details

Published by

peterdmv on GitHub

Draws

On the price chart

Markets

Any symbol

Timeframes

Any timeframe

Risk Notes

  • Reads higher-timeframe data with lookahead on, so the history can show signals that were not there in real time

Settings

The inputs you can change from the gear icon on the chart. Defaults are the author's.

SettingTypeDefaultVariable
iIntraMA1VisiblebooltrueiIntraMA1Visible
Periodint8iIntraMA1Length
iIntraMA1TypestringEMAiIntraMA1Type
iIntraMA1SourcesourcecloseiIntraMA1Source
iIntraMA1Colorcolorcolor.greeniIntraMA1Color
Widthint1iIntraMA1Width
iIntraMA2VisiblebooltrueiIntraMA2Visible
Periodint21iIntraMA2Length
iIntraMA2TypestringEMAiIntraMA2Type
iIntraMA2SourcesourcecloseiIntraMA2Source
iIntraMA2Colorcolorcolor.purpleiIntraMA2Color
Widthint1iIntraMA2Width
Show all 40 settings
SettingTypeDefaultVariable
iIntraMA3VisiblebooltrueiIntraMA3Visible
Periodint65iIntraMA3Length
iIntraMA3TypestringEMAiIntraMA3Type
iIntraMA3SourcesourcecloseiIntraMA3Source
iIntraMA3Colorcolorcolor.marooniIntraMA3Color
Widthint1iIntraMA3Width
iIntraMA4VisiblebooltrueiIntraMA4Visible
Periodint144iIntraMA4Length
iIntraMA4TypestringEMAiIntraMA4Type
iIntraMA4SourcesourcecloseiIntraMA4Source
iIntraMA4Colorcolorcolor.grayiIntraMA4Color
Widthint1iIntraMA4Width
iIntraMA5VisibleboolfalseiIntraMA5Visible
Periodint377iIntraMA5Length
iIntraMA5TypestringEMAiIntraMA5Type
iIntraMA5SourcesourcecloseiIntraMA5Source
iIntraMA5Colorcolorcolor.grayiIntraMA5Color
Widthint1iIntraMA5Width
Show Moving Average CloudboolfalseiIntraCloud
   Upcolorcolor.new(color.green, transp=90)iIntraCloudColorUp
Downcolorcolor.new(color.red, transp=90)iIntraCloudColorDown
Between MA #int1iIntraCloudMA1
and #int2iIntraCloudMA2
iIntraVWAPVisiblebooltrueiIntraVWAPVisible
iIntraVWAPSourcesourcehlc3iIntraVWAPSource
iIntraVWAPColorcolorcolor.orangeiIntraVWAPColor
Widthint1iIntraVWAPWidth
iDailyMA1VisiblebooltrueiDailyMA1Visible
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.

Similar Pine Scripts

947 stars

The Adaptive Laguerre Filter calculates a smoothed, dynamically adjusted trendline plotted directly on the main price chart. It dynamically adjusts its damping factor (alpha) based on recent price range variations and median percentile calculations over a spec

Indicator v4 TrendMoving averages
Updated 12 days ago · GPL-3.0 GitHub repository of Adaptive Laguerre Filter
330 stars

This script plots three moving averages on the price chart: a fast EMA or SMA with 10 periods, a slow EMA or SMA with 20 periods, and a trend EMA or SMA with 100 periods. It signals trend changes by drawing a white cross when the fast moving average crosses ab

Indicator v4 TrendMoving averages
Updated 2 months ago · None stated GitHub repository of 3 EMA/SMA + Cross [Alorse]
318 stars

This indicator plots four customizable moving averages directly on the main price chart using default lengths of 3, 8, 21, and 50 periods. It fills the space between adjacent averages in green or maroon depending on trend alignment. Additionally, it computes B

Indicator v5 Moving averagesTrend
Updated 2 months ago · MIT GitHub repository of Multiple Moving Averages

NVDA Trend Ribbon

by longsurf-ai
280 stars

This indicator plots three exponential moving averages and ATR volatility envelopes on the price chart. It compares the fast and slow EMAs to shade a trend ribbon and marks confirmed upward and downward crossovers with triangle labels. Settings change the thre

Indicator v6 TrendMoving averages
Updated 3 days ago · MIT GitHub repository of NVDA Trend Ribbon
257 stars

Donald SPX - Options Trading is an overlay indicator designed for intraday SPX analysis. It plots a 200-period Weighted Moving Average (WMA) on the price chart while evaluating multi-timeframe market structure across Daily, 15-minute, 5-minute, and 2-minute ba

Indicator v5 Moving averagesTrend Repaints
Updated 7 weeks ago · None stated GitHub repository of Donald SPX - Options Trading
228 stars

This indicator computes moving average and RSI bias signals across the current timeframe and four higher timeframes. It sums biases from the MA and RSI to derive an overall bullish or bearish signal. The results appear in a configurable table that displays eac

Indicator v6 TrendMoving averages
Updated 3 months ago · None stated GitHub repository of Multi-Timeframe Analysis Template

More Moving averages scripts

Related on ForexR

Trade Your Charts With a Regulated Broker

Compare brokers that connect to TradingView, with spreads, minimum deposits and leverage side by side.

Compare brokers