Curso de Programación. 5. Oscilador Estocástico

Esta semana continuaremos el estudio de algunos de los osciladores más conocidos, centrándonos en este caso en el oscilador estocástico.

Antes de iniciar la teoría, les facilitamos un enlace al ejercicio propuesto para este tema. Pueden acceder desde el siguiente enlace: Ejercicio STOCHASTIC.

5. OSCILADOR ESTOCASTICO

5.1. Definición

Los orígenes de éste oscilador porcentual están basados en los estudios realizados por George C. Lane, el cual diseñó (entre otros) a los osciladores %K y %D. Más adelante, Larry Williams mejoraría la fórmula.

La interpretación básica del estocástico sería la siguiente: Una variable estadística que representa la posición del precio actual respecto al máximo y mínimo del periodo estimado.

5.2 Interpretación

Esta posición relativa está expresada en términos porcentuales, de modo que:

1. Un valor igual o cercano al 100% indica que la posición actual equivale al máximo del periodo.
2. Un valor igual o cercano al 0% indica que la posición actual equivale al mínimo del periodo.



En lo que concierne a Visual Chart, éste oscilador está representado por dos líneas cuyo valor depende los parámetros de entrada:

1. El valor %SK equivale a la media suavizada (de periodo Sk) de la posición relativa porcentual para un rango de barras estimado (parámetro Periodo).
2. El valor %SD equivale a la media suavizada (de periodo Sd) de la media anterior %SK.

5.3. Diferencias respecto al RSI

La semana anterior vimos otro oscilador llamado RSI cuyo uso es similar al que podamos aplicarle al indicador estocástico. Por tanto, ¿qué diferencias existen entre utilizar un tipo de oscilador u otro?

La principal diferencia que se observa entre un indicador y otro surge como consecuencia del modo en el que se calculan ambos: En función de esto, el indicado estocástico es más sensible a los cambios de tendencia.

Partiendo de esta diferencia se observan los siguientes puntos a favor y en contra:

1. A FAVOR: Mejora los resultados en los movimientos laterales.
2. EN CONTRA: No deja correr las ganancias cunado un impulso se prolonga en el tiempo.


5.4. Estrategia Ruptura de Bandas

Como decíamos, al tratarse de un oscilador, la principal estrategia asociada al estocástico depende nuevamente de la ruptura de las zonas de agotamiento. Por tanto, la estrategia a seguir sería la siguiente:

Operar AL SALIR de las zonas de sobrecompra y sobreventa:

1) Si el STK cruza al alza la banda de sobreventa (20), se ejecuta la orden a largo.
2) Si el STK cruza a la baja la banda de sobrecompra (80), se ejecuta la orden a corto.

Sin embargo, en esta ocasión vamos a incluir un filtro de confirmación antes de operar a fin de asegurar la entrada y evitar los cruces falsos. El filtro va a consistir en lo siguiente:

Esperar una vela que supere el MAXIMO/MINIMO de la vela de ruptura:

1)Si el STK sale de sobreventa y un cierre supera el máximo de la vela de cruce, ejecutar orden a largo.
2) Si el STK sale de sobrecompra y un cierre supera el mínimo de la vela de cruce, ejecutar orden a corto.


Veamos a continuación cómo diseñar el sistema.

5.5. Código Fuente

La principal dificultad de éste sistema la encontramos en el filtro de confirmación que hemos añadido. Para poder gestionarlo, deberemos seguir los siguientes pasos.

1. Crear el parámetro ActivarFiltro para gestionar si activamos o no el filtro de confirmación.
2. Crear la variable SignoUlCruce, donde guardaremos el último cruce de bandas que se haya producido.
3. Crear la variable PrecioFiltro, donde guardaremos el máximo o mínimo de la vela de cruce.
4. Gestionar los momentos de cruce de bandas. De modo que cada vez que aparezca uno de estos cruces, actualizamos las variables SignoUlCruce y PrecioFiltro.
5. Definir las reglas de entrada en función de SignoUlCruce y Precio Filtro. Además, debemos confirmar
que el estocástico mantiene la dirección de la señal de cruce.

Diseño en PDV:



Diseño en VBA:

'¡¡ Parameters
Dim Contratos As Double '1
Dim ActivarFiltro As Double '1
Dim Periodo As Integer '14
Dim Sk As Integer '3
Dim Sd As Integer '3
Dim UpperBand As Double '80
Dim LowerBand As Double '20
'Parameters !!
Dim STKData As Long
Dim SignoUlCruce As Integer
Dim PrecioFiltro As Double
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    STKData = .GetIndicatorIdentifier(Stochastic, Data, Periodo, Sk, Sd, AvgExponential, UpperBand, LowerBand)
    PrecioFiltro = 0
    SignoUlCruce = 0
    .StartBar = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    Dim STKact As Double
    Dim STKant As Double
    STKact = .GetIndicatorValue(STKData)
    STKant = .GetIndicatorValue(STKData, 1, 1)
    If STKant <= LowerBand And STKact > LowerBand Then
        SignoUlCruce = 1
        PrecioFiltro = .High
    ElseIf STKant >= UpperBand Then
        SignoUlCruce = -1
        PrecioFiltro = .Low
    End If
    If SignoUlCruce = 1 Then
        If STKact > LowerBand Then
            If .Close > PrecioFiltro Or ActivarFiltro = 0 Then
                .Buy AtClose, Contratos
            End If
        End If
    ElseIf SignoUlCruce = -1 Then
        If STKact < UpperBand Then
            If .Close < PrecioFiltro Or ActivarFiltro = 0 Then
                .Sell AtClose, Contratos
            End If
        End If
    End If
End With
End Sub

Comentarios

Entradas populares de este blog

Como consultar el GAP % de un conjunto de valores

MANEJO DE PLANTILLAS. Eliminar plantilla de un gráfico activa

Estudio de las divergencias en el RSI