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

Concluimos el estudio del oscilador estocástico hablando de la segunda media asociada al indicador: la media %SD.

5.6. La Media %SD

La segunda línea del estocástico (línea discontinua) se obtiene calculando una media respecto al valor principal del estocástico, esto es, el %SK.

El tamaño de la muestra utilizada para calcular la media se obtiene mediante el parámetro sd que aparece en la lista de parámetros. Asimismo, el tipo de cálculo que se usa dependerá del parámetro Media, pudiendo elegir entre el cálculo exponencial, simple o aplanado.

La función de ésta segunda media es similar a la que se aplica a la Media de Señal del MACD: El valor que se obtiene con el %SD suaviza la curva generada por el propio estocástico (%SK), lo cual permite obtener una muestra más general del oscilador. Es decir, representa los valores estocásticos a medio/largo plazo, mientras que el %SK lo hace a corto plazo.




Al igual que sucede con el MACD, se considera que el cruce entre ambos valores (%SK y %SD) sirve como método de detección del cambio de tendencia.

5.7. Cruce entre Medias VS Cruce con Bandas

En el apartado 5.4 vimos cómo utilizar el cruce con las bandas de agotamiento del estocástico como método para anticiparnos a los cambios de tendencia.

Ahora, planteamos el uso del cruce de medias como estrategia a seguir. Lo cual nos lleva a la siguiente cuestión: ¿Qué método proporciona mejores resultados? Esta pregunta queda sin una respuesta obvia, puesto que la aplicación de uno u otro método mejorará las prestaciones de la estrategia en función del comportamiento de los precios.

En términos generales, los puntos a favor y en contra de aplicar éste nuevo método frente al cruce con las bandas serían los siguientes:

A favor
Si en las zonas de agotamiento, observamos un cruce entre las medias del estocástico, consideramos que esta señal nos está informando de un inminente cambio de tendencia. Por tanto, podemos tomar esta información como señal de giro, sin necesidad de tener que esperar a que el indicador salga de las zonas de agotamiento. Conclusión: Si se confirma el giro, con el cruce de medias podemos actuar más rápido y por tanto obtener un mejor posicionamiento.



En contra
Si nos encontramos en el mismo escenario planteado antes, pero tras el cruce de las medias el estocástico permanece en la zona de agotamiento, observaremos continuos cruces entre las dos líneas, hasta que finalmente se inicie el nuevo impulso. Conclusión: Si no se confirma el giro, con el cruce de medias vamos a obtener una mayor cantidad de señales falsas.



5.8. Estrategia Cruce de Medias

Como acabamos de ver, las señales de cruce que tomaremos como momentos de entrada para la estrategia, serán aquellas que aparezcan en las zonas de agotamiento, siempre y cuando el cruce sea a favor del cambio de dirección.

La relación por tanto sería la siguiente:
1) Si nos encontramos en la zona de Sobreventa, nos fijaremos en los cruces alcistas (orden a largo).
2) Si nos encontramos en la zona de Sobrecompra, nos fijaremos en los cruces bajistas (orden a corto).

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

5.9 Código Fuente

Este sistema no supone especial dificultad ya que se trata de detectar nuevamente un cruce entre medias, con la particularidad de que deberemos acceder a la segunda línea del indicador y que además deberemos filtrar las señales de cruce en función de la posición del estocástico respecto a sus bandas.

Los pasos a seguir serían los siguientes:
1. Detectar la posición del estocástico en función de sus bandas. Para ello, comparamos el valor del indicador con los parámetros BandaSuperior y BandaInferior que habremos añadido.
2. Detectar el cruce alcista cuando el indicador sea menor que la BandaInferior.
3. Detectar el cruce bajista cuando el indicador sea mayor que la BandaSuperior.

Diseño en PDV:



Diseño en VBA:



'¡¡ Parameters
Dim Contratos 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
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    STKData = .GetIndicatorIdentifier(Stochastic, Data, Periodo, Sk, Sd, AvgExponential, UpperBand, LowerBand)
    .StartBar = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    Dim SKact As Double
    Dim SKant As Double
    Dim SDact As Double
    Dim SDant As Double
    SKact = .GetIndicatorValue(STKData)
    SKant = .GetIndicatorValue(STKData, 1, 1)
    SDact = .GetIndicatorValue(STKData, 0, 2)
    SDant = .GetIndicatorValue(STKData, 1, 2)
    '---- Reglas de entrada
    If SKact < LowerBand Then
        If SKact > SDact And SKant <= SDant Then
            .Buy AtClose, Contratos
        End If
    ElseIf SKact > UpperBand Then
        If SKact < SDact And SKant >= SDant Then
            .Sell AtClose, Contratos
        End If
    End If
End With
End Sub

5.10 Estrategia Alternativa

En ocasiones, la señal de nuevo impulso generada por el estocástico es frenada por un cambio de dirección en los precios. Como consecuencia, el estocástico realiza un reajuste cambiando de dirección nuevamente. Si se da la circunstancia y tenemos alguna posición abierta, nos encontraremos que nuestra posición entrará en pérdidas.

A fin de intentar cubrir esta corrección del precio, vamos a incluir en el sistema una nueva regla que seguirá el siguiente patrón:

1) Si tras cruzar la banda de sobrecompra, las medias vuelven a cruzarse al alza, corregimos la posición y entramos a largo.

2) Si tras cruzar la banda de sobreventa, las medias vuelven a cruzarse a la baja, corregimos la posición y entramos a corto.



Veamos a continuación cómo diseñar esta modificación.

5.11 Código Fuente Regla Alternativa

Para poder aplicar ésta regla, debemos gestionar cual ha sido el último cruce de bandas que se ha dado respecto al momento actual. Para poder obtener esto, tenemos dos opciones:

1) Recorrer con un bucle las barras anteriores hasta dar con un cruce de bandas.
2) Almacenar en una variable cual ha sido el último cruce de bandas.

Nos quedamos con la segunda opción, ya que es la más eficiente, puesto que no tendremos que realizar búsquedas innecesarias.

Por tanto, añadiremos al código una variable que vamos  a llamar UlCruceBandas. Esta variable cambiará de 1 a -1 en función del cruce que detectemos:

1. Si rompemos a la baja la banda de SobreCompra, entonces UlCruceBandas = -1.
2. Si rompemos al alza la banda de SobreVenta, entonces UlCruceBandas = 1.

Seguidamente estudiaremos las reglas de entrada. Cuando el estocático se encuentre situado entre las bandas de agotamiento, observaremos si se da un cruce entre las medias, y en función de cómo haya sea el valor de la variable UlCruceBandas, permitiremos comprar o vender.

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 UlCruceBandas As Integer
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    STKData = .GetIndicatorIdentifier(Stochastic, Data, Periodo, Sk, Sd, AvgExponential, UpperBand, LowerBand)
    UlCruceBandas = 0
    .StartBar = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    Dim SKact As Double
    Dim SKant As Double
    Dim SDact As Double
    Dim SDant As Double
    SKact = .GetIndicatorValue(STKData)
    SKant = .GetIndicatorValue(STKData, 1, 1)
    SDact = .GetIndicatorValue(STKData, 0, 2)
    SDant = .GetIndicatorValue(STKData, 1, 2)
    '--- Control cruce bandas
    If SKact > LowerBand And SKant <= LowerBand Then
        UlCruceBandas = 1
    ElseIf SKact < UpperBand And SKant >= UpperBand Then
        UlCruceBandas = -1
    End If
    '---- Reglas de entrada
    If SKact < LowerBand Then
        If SKact > SDact And SKant <= SDant Then
            .Buy AtClose, Contratos
        End If
    ElseIf SKact > UpperBand Then
        If SKact < SDact And SKant >= SDant Then
            .Sell AtClose, Contratos
        End If
    Else
        If UlCruceBandas = -1 Then
            If SKact > SDact And SKant <= SDant Then
                .Buy AtClose, Contratos
            End If
        ElseIf UlCruceBandas = 1 Then
            If SKact < SDact And SKant >= SDant 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