Log in to see Cloud of Tags

Wealth-Lab Wiki

Moving Average Envelope



public EnvelopeUpper(DataSeries ds, int period, double pct, ChoiceOfMA ma, string description)
public static EnvelopeUpper Series(DataSeries ds, int period, double pct, ChoiceOfMA ma)

public EnvelopeLower(DataSeries ds, int period, double pct, ChoiceOfMA ma, string description) public static EnvelopeLower Series(DataSeries ds, int period, double pct, ChoiceOfMA ma)

Parameter Description

ds Data series to be smoothed with a moving average
period Length used to calculate the moving average (center line)
pct Envelope percentage
ma Select between the moving average types: SMA, EMA or WMA


Moving average envelopes are lines plotted a certain percentage (default is 5%) above and below a moving average of price. They are also known as trading bands, moving average bands, price envelopes and percentage envelopes.


The logic behind envelopes is that overzealous buyers and sellers push the price to the extremes (i.e., the upper and lower bands), at which point the prices often stabilize by moving to more realistic levels. This is similar to the interpretation of Bollinger Bands.

When the security's price touches the upper band and turns down, the security might be at an overbought level. Conversely, when the security's price touches the lower band and turns up, the security might be at an oversold level.


using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
using Community.Indicators;

namespace WealthLab.Strategies { public class MAEnvelopeDemo : WealthScript { private StrategyParameter paramPeriod; private StrategyParameter paramMult; public MAEnvelopeDemo() { paramPeriod = CreateParameter("MA Period", 20, 5, 50, 1); paramMult = CreateParameter("Percent", 10, 1, 10, 0.5); } protected override void Execute() { int period = paramPeriod.ValueInt; double pct = paramMult.Value; SMA sma = SMA.Series( Close,period ); EnvelopeUpper eu = EnvelopeUpper.Series( Close,period,pct,ChoiceOfMA.SMA ); EnvelopeLower el = EnvelopeLower.Series( Close,period,pct,ChoiceOfMA.SMA ); PlotSeries( PricePane, sma, Color.Red, LineStyle.Solid, 1 ); PlotSeriesFillBand( PricePane, eu, el, Color.FromArgb( 30, Color.Blue ), Color.FromArgb( 30, Color.Blue ), LineStyle.Solid, 1 ); bool Trade = false; for(int bar = period; bar < Bars.Count; bar++) { Trade = false; if (IsLastPositionActive) { Position p = LastPosition; if( p.PositionType != PositionType.Long ) { if( CrossUnder( bar, Close, sma ) ) CoverAtMarket( bar+1, p ); } else { if( CrossOver( bar, Close, sma ) ) SellAtMarket( bar+1, p ); } } else { if( CrossOver( bar, Close, eu ) ) Trade = ( ShortAtMarket( bar+1 ) != null ); if( !Trade ) if( CrossUnder( bar, Close, el ) ) Trade = ( BuyAtMarket( bar+1 ) != null ); } } } } }

Important Disclaimer: The information provided by Wealth-Lab is strictly for informational purposes and is not to be construed as advice or solicitation to buy or sell any security.  The owner of Wealth-Lab.com assumes no liability resulting from the use of the material contained herein for investment purposes. By using this web site, you agree to the terms of this disclaimer and our Terms of Use.

ScrewTurn Wiki. Some of the icons created by FamFamFam.