Función VBA para elegir entre varias medias

A la hora de diseñar sistemas automáticos basados en medias móviles, uno de los dilemas con el que nos solemos encontrar consiste en decidir qué tipo de media puede sernos más útil o darnos los mejores resultados. A priori, podemos deducir qué media será la más adecuada en función del tipo de estrategia que vayamos a realizar, si bien estas decisión no siempre tiene por qué ser la que arroje mejores resultados.

Sin embargo, cuando se trata de determinar el periodo de estudio de la media móvil no tenemos tantos problemas, puesto que normalmente se incluye dicho periodo como parámetro de entrada del sistema para posteriormente optimizarlo y así obtener el valor más rentable.

Una idea interesante consiste en seguir el mismo proceso pero, en este caso, que el proceso de optimización nos facilite qué tipo de media es la que ofrece mejores garantías.

Veamos cómo llevarlo a cabo a través del diseño mediante VBA.

Supongamos que un sistema utiliza una media móvil y queremos probar con distintas clases de medias. Para conseguir este propósito, debemos seguir los siguientes pasos:

1) Incluir en el sistema la función SeleccionaMedia().
2) Incluir en la lista de parámetros el parámetro TipoMedia, cuyo valor oscilará entre 0 y 4.
3) Incluir un objeto de tipo DataIdentifier al que le asignaremos el valor devuelto por la función.
4) Por último, haremos uso en las reglas de nuestro sistema a dicho DataIdentifier.

Función para elegir el tipo de media
La función SeleccionaMedia(Tipo,Periodo) es la base sobre la que vamos a poder modificar el tipo de media en nuestro sistema.

Esta función la debemos incluir en la estrategia al final del código, justo debajo del último método, llamado SysUserAppInstance_OnConnection().

El código de dicha función sería el siguiente:



'-- TIPO: 0)exponencial, 1)simple, 2)ponderada, 3)aplanada, 4)triangular.
Private Function SeleccionaMedia(TIPO As Integer, PERIODO As Integer) As DataIdentifier
With APP
    Select Case TIPO
        Case 0
            SeleccionaMedia = .GII(AvExponential, Data, PERIODO, PriceClose)
        Case 1
            SeleccionaMedia = .GII(AvSimple, Data, PERIODO, PriceClose)
        Case 2
            SeleccionaMedia = .GII(AvWeighted, Data, PERIODO, PriceClose)
        Case 3
            SeleccionaMedia = .GII(AvFlat, Data, PERIODO, PriceClose)
        Case Else
            SeleccionaMedia = .GII(AvTriangular, Data, PERIODO, PriceClose)
    End Select
End With
End Function

Como vemos, según sea el valor del parámetro TIPO, la función asigna al DataIdentifier de salida un tipo de media u otro. Las medias incluidas son: media exponencial (0), media simple (1), media ponderada (2), media aplanada (3) y media triangular (4). Obviamente, esta función es susceptible de ser modificada, de manera que puede incluir tantos tipos de medias como el programador desee.

Aplicación de la función dentro del sistema
Una vez tenemos incluida la función dentro del sistema, incluimos el objeto DataIdentifier y le asignamos el resultado de la función desde el método OnInitCalculate(). A continuación podemos ver un ejemplo:

'¡¡ Parameters
Dim PeriodoMedia As Integer '30
Dim TipoMedia As Integer '0
'Parameters !!
Dim AvData As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    AvData = SeleccionaMedia(TipoMedia, PeriodoMedia)
End With
End Sub

Comentarios

Entradas populares de este blog

Trading Tools: Descarga de históricos para Visual Chart 6

KDJ - Indicador Stochastic %J

El indicador Relative Strength Mansfield with Index