Moving Average Envelope
Posted by Mohammad Rahhal, Last modified by Abdullah Almasharfah on 15 December 2018 11:51 AM

Moving Average Envelopes consist of moving averages calculated from the underlying price, shifted up and down by a fixed percentage.

Moving Average Envelopes (or trading bands) can be imposed over an actual price or another indicator. 
When prices rise above the upper band or fall below the lower band, a change in direction may occur when the price penetrates the band after a small reversal from the opposite direction.

The shift is a double value specifying the percentage of shift for each moving average from the actual values.
MAType is an integer specifying the moving average type to be used (Simple = 1, Exponential = 2, TimeSeries = 3, Variable = 4, Triangular = 5, Weighted = 6, VIDYA = 7).

Class: Bands


Public function MovingAverageEnvelope(ByRef Data As Database, ByRef Source As Field, ByVal Periods As IntegerByVal MAType As Integer, ByVal Shift As DoubleAs RecordSet


Return Type Return object of type Recordset                                    
Default Field Name(s) EnvelopeTop, EnvelopeBottom


Public Sub main()


        Dim _symbolInfo As VTLGeneral.CSymbol=ClientCode.GetSymbolByName("GOLD")

        Dim DB As New VTLGeneral.Database()

        Dim rsOHLCV As New VTLGeneral.RecordSet()

        Dim RecordCount As Integer

        Dim m_Recordset As VTLGeneral.RecordSet

        Dim _historyData As object()

        Dim output As String

        Dim Record As Integer

        Dim m_Date As VTLGeneral.Field

        Dim m_Open As VTLGeneral.Field

        Dim m_High As VTLGeneral.Field

        Dim m_Low As VTLGeneral.Field

        Dim m_Close As VTLGeneral.Field

        Dim j As Integer = 0

        Dim i As Integer = 0

        Dim _recordCount As Integer =ClientCode.Bars(_symbolInfo.ID,VTLGeneral.ENUM_PERIOD.Day)

        m_Recordset = DB.CreateRecord

        m_Open = New VTLGeneral.Field

        m_High = New VTLGeneral.Field

        m_Low = New VTLGeneral.Field

        m_Close = New VTLGeneral.Field

        DB.RecordCount = _recordCount

        RecordCount = _recordCount

        'Initialize Recordsets

        m_Open.initialize(_recordCount -1 , "Open")

        m_High.initialize(_recordCount-1, "High")

        m_Low.initialize(_recordCount-1, "Low")

        m_Close.initialize(_recordCount-1, "Close")

        'load high, low ,open and data

         _historyData = ClientCode.GetChartHistory(_symbolInfo.ID, VTLGeneral.ENUM_PERIOD.Day,VTLGeneral.ENUM_HISTORY_TYPE.HIS_HIGH, _recordCount)

         For i  = 0 To _recordCount-1



        _historyData = ClientCode.GetChartHistory(_symbolInfo.ID, VTLGeneral.ENUM_PERIOD.Day,VTLGeneral.ENUM_HISTORY_TYPE.HIS_LOW, _recordCount)

        For i  = 0 To _recordCount-1



        _historyData = ClientCode.GetChartHistory(_symbolInfo.ID, VTLGeneral.ENUM_PERIOD.Day,VTLGeneral.ENUM_HISTORY_TYPE.HIS_OPEN, _recordCount)

        For i  = 0 To _recordCount-1



        _historyData = ClientCode.GetChartHistory(_symbolInfo.ID, VTLGeneral.ENUM_PERIOD.Day,VTLGeneral.ENUM_HISTORY_TYPE.HIS_CLOSE, _recordCount)

        For i  = 0 To _recordCount-1







        'MovingAverageEnvelope indicator

        Dim _indRecord As New  VTLGeneral.RecordSet()

        Dim bnd As New VTLGeneral.Bands()

        _indRecord = bnd.MovingAverageEnvelope(DB,m_Close,14,1,1)

        For i = 0 To DB.getRecordCount-1

                output = output  &  CSTR(_indRecord.getValue("EnvelopeTop", i) ) & vbcrlf




End Sub


See Also

Back to VTL Server Script Index


(0 vote(s))
Not helpful

Comments (0)
Post a new comment
Full Name:
CAPTCHA Verification 
Please enter the text you see in the image into the textbox below (we use this to prevent automated submissions).

Help Desk Software by Hybrid Solutions