Curso de Programación. 10.2. Divergencias con el TRIX.

El estudio de las divergencias en los osciladores es una de las herramientas de trading más extendidas dentro del análisis técnico. Sin embargo, su incorporación en el diseño de sistemas automáticos no es tarea baladí, puesto que requiere de un proceso algo más complejo que, por ejemplo, la búsqueda de cruces o rupturas de precios.

En el presente artículo vamos a plantear un método para la detección de divergencias del oscilador TRIX. Pero antes, haremos un pequeño repaso sobre lo que significan las divergencias y el uso que hacemos de las mismas.

Divergencia del TRIX con el precio
Si nos centramos en el indicador TRIX, diremos que aparece una divergencia cuando comparamos el movimiento del precio con el movimiento del propio indicador. Si ambos movimientos se dan en direcciones opuestas, entonces consideraremos que estamos ante una divergencia del TRIX.

El estudio de las divergencias nos pueden servir tanto para detectar un cambio en la tendencia actual del activo como una continuación de dicha tendencia. Esto dependerá del tipo de divergencia que se observe.

Aclarar que aquí nos centraremos en las divergencias de carácter alcista, si bien es posible encontrar divergencias de cambio o continuación de tendencia bajista.

Veamos los dos tipos de divergencia que podemos encontrar:

1) Divergencia Regular Alcista
Hablaremos de divergencia regular alcista cuando el indicador TRIX marque nuevos mínimos crecientes y el precio marque mínimos decrecientes o iguales. Este tipo de divergencia sirve para detectar cuándo los precios están perdiendo su impulso actual. La señal que aporta es de reversión de tendencia bajista a una tendencia alcista.



2) Divergencia Oculta Alcista
Hablaremos de divergencia oculta alcista cuando el indicador TRIX marque nuevos mínimos decrecientes y el precio maque mínimos crecientes. Este tipo de divergencia sirve para detectar el fallo de pequeños retrocesos que no terminan de cuajar. La señal que aporta es de continuación de tendencia alcista.


De los dos tipos de divergencias, vamos a analizar en profundidad la divergencia regular, ya que será la que utilizaremos como señal de trading para el sistema de ejemplo.

Estudio de la divergencia regular alcista
Como hemos dicho al principio, trasladar el análisis de las divergencia a condiciones de trading, las cuales a su vez puedan ser expresadas mediante código máquina, requiere de cierto nivel de complejidad. Veamos el proceso a seguir.

Para detectar una divergencia regular alcista consideraremos que debe darse el siguiente escenario:

1) Los dos últimos pivotes mínimos del TRIX son ascendentes. Es decir, que el último es mayor que el penúltimo.

2) Los precios mínimos del activo en el momento de detección de dichos pivotes son descendentes. Es decir, que los mínimos en ambos instantes de tiempo marcan una pendiente bajista.

Necesitamos, por tanto, una herramienta que busque los pivotes dentro del TRIX y otra herramienta que busque los valores mínimos del activo.

Para ello, nos vamos a apoyar en el indicador PivotDown y el indicador GetLowest. Ambos indicadores los pueden encontrar dentro del listado de indicadores públicos de Visual Chart.

Si aplicamos estos indicadores a la gráfica, obtendremos el siguiente resultado:



Como ven, el momento de detección del último pivote del TRIX siempre se da pasadas un número determinado de barras. Guardaríamos éste valor y el previo. En el ejemplo, ambos valores trazan una recta con una pendiente alcista, cumpliendo el primero de los requisitos.

Ahora nos fijamos en los valores que marca el indicador GLI en la barra donde se ha detectado cada uno de los pivotes. La recta que trazan dichos mínimos tiene una pendiente bajista. Por tanto, cumple el segundo de los requisitos y confirma la señal de divergencia:


Como ven, hemos trasladado la teoría de la divergencia a la práctica utilizando herramientas cuantificables. Esto nos va a permitir desarrollar un sistema en base a lo explicado.

Estrategia Divergencia TRIX
Por último, vamos a ver cómo diseñar un sistema usando las reglas de trading previamente expuestas.

Este sistema va a requerir de los siguientes elementos:

1) El indicador TRIX.
2) El indicador GetLowestIndicator. Este indicador incluye un parámetro llamado Length que dejaremos con el valor fijo de 4 barras.
3) En lugar de usar el indicador PivotDown usaremos la función GetSwighLowBar(n).

Esta función de Visual Chart no devuelve un precio, sino la distancia en barras hasta el n-ésimo pivote más reciente. Aplicaremos dicha función al DataIdentifier del TRIX y le pediremos que nos devuelva el valor para el último pivote (GetSwingLowBar(1)) y el penúltimo pivote (GetSwingLowBar(2)). El uso de ésta función en lugar de la homónima GetSwingLow() (que sí devuelve un precio) es sencillamente para poder controlar el número de barra donde se sitúan ambos pivotes y luego poder comprobar el precio del activo en dichas barras.

En el código pueden ver cómo se gestiona el proceso de detección de la divergencia. Una vez dada la señal, el sistema enviará una orden en stop al precio máximo de la barra correspondiente, a fin de confirmar el crecimiento del precio del activo.

El diseño del sistema sería el siguiente:

Código PDV


Código VBA
NOTA: Les recordamos que el código presentado es sólo la parte correspondiente a los métodos de cálculo. En caso de que quieran copiar el código, debe crear un archivo en blanco y sobrescribir únicamente dichas partes.

'¡¡ Parameters
Dim Contratos As Long '1
Dim HoraInicio As Integer '900
Dim HoraFin As Integer '1900
Dim Periodo1 As Integer '12
Dim Periodo2 As Integer '12
Dim Periodo3 As Integer '12
Dim PeriodoC As Integer '1
Dim StopLoss As Double '50
Dim TrailingStop As Double '30
'Parameters !!
Dim trixdata As DataIdentifier
Dim mindata As DataIdentifier
Dim preciostop As Double
Dim preciots As Double
Dim nbulpivot As Double
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
    trixdata = .GetIndicatorIdentifier(Trix, Data, Periodo1, Periodo2, Periodo3, PeriodoC, PriceClose, 0)
    mindata = .GetIndicatorIdentifier(GLI, Data, 4)
    nbulpivot = -1
    preciots = 0
    preciostop = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
 
    If (.Time >= HoraInicio And .Time < HoraFin) Then
        Dim nbtrixinf1 As Double
        Dim nbtrixinf2 As Double
        Dim pcompra As Double
     
        nbtrixinf1 = .GetSwingLowBar(trixdata, 1, Strength:=2)
        nbtrixinf2 = .GetSwingLowBar(trixdata, 2, Strength:=2, Length:=100)
     
        If (nbtrixinf2 <> NullValue And nbtrixinf1 <> NullValue) Then
            If ((Bar - nbtrixinf1) > nbulpivot) Then
                If (.GIV(trixdata, nbtrixinf1) > .GIV(trixdata, nbtrixinf2)) Then
                    Dim precioinf1 As Double
                    Dim precioinf2 As Double
                 
                    precioinf1 = .GetIndicatorValue(mindata, nbtrixinf1)
                    precioinf2 = .GetIndicatorValue(mindata, nbtrixinf2)
                 
                    If (precioinf1 <= precioinf2) Then
                        pcompra = .High()
                    End If
                End If
             
                nbulpivot = (Bar - nbtrixinf1)
            End If
        End If
             
        If .GetMarketPosition = 1 Then
            If (.GetBarsSinceEntry = 0) Then
                preciots = .GetEntryPrice()
                preciostop = preciots - StopLoss
            End If
            If (.High() > preciots) Then
                preciots = .High()
                preciostop = preciots - TrailingStop
            End If
            .ExitLong AtStop, Contratos, preciostop
        Else
            If (pcompra <> 0) Then
                .Buy AtStop, Contratos, pcompra
                .ExitLong AtStop, Contratos, pcompra - StopLoss
            End If
        End If
    Else
        If .GetMarketPosition = 1 Then
            .ExitLong AtClose, Contratos
        End If
    End If
End With
End Sub

Comentarios

  1. Buenos días,
    Al programar este sistema me ocurre un problema:
    mindata = .GetIndicatorIdentifier(GLI, Data, 4)

    Al querer poner la variable mindata de esta manera, el indicador GLI no está entre los asociados a .GetIndicatorIdentifier( . No aparece por defecto como lo habían hecho el resto de indicadores.
    Se me ocurren formas de solucionar este sistema sin utilizar el indicador GLI pero no sería el sistema tal y como se plantea.
    Por tanto mi consulta es la siguiente. ¿Cómo puedo hacer para que dentro de .GetIndicatorIdentifier( me aparezca GLI o cualquier otro indicador de la lista de mi Visual Chart y que no aparezca en código VBA?

    ResponderEliminar
  2. Efectivamente, la lista de elementos que pueden asignarse al campo DataName del método GetIndicatorIdentifier sólo incluye a los principales indicadores que aparecen en Visual Chart, dejando fuera cualquier indicador diseñado en VBA. No obstante, si en dicho campo especificamos GLI y dicho indicador está compilado, entonces el método va a permitir esta asignación. Por tanto, la regla que debemos seguir es la siguiente: Cuando usemos el método GetIndicatorIdentifier y queramos asignarlo a un indicador VBA, sencillamente escribimos con el teclado el código de dicho indicador, el cual, obviamente, deberá haber estado compilado previamente.

    ResponderEliminar

Publicar un comentario

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