Aplicación de la línea de tendencia sobre un sistema

Como sabemos, la línea de tendencia marca la dirección de los precios en un determinado intervalo de tiempo, siempre y cuando se cumpla una serie de requisitos para poder trazarla.

En el siguiente artículo vamos a explicar cómo podemos hacer uso de ella en cualquier sistema previamente diseñado, de modo que puede servir como filtro para las señales dadas por el sistema.

Antes de explicar cómo puede afectar en un sistema, vamos a definir qué reglas seguiremos para determinar la existencia de una tendencia alcista o bajista.

Reglas de tendencia

A efectos de nuestro estudio, consideraremos que existe tendencia alcista cuando tengamos dos mínimos consecutivos crecientes, esto es, que el segundo de los mínimos sea superior al primero.

Del mismo modo, consideraremos que existe tendencia bajista cuando tengamos dos máximos consecutivos decrecientes.

En caso de encontrarnos en una situación en la que contamos con ambos escenarios, se impone la tendencia cuyo pívot esté más próximo a los precios actuales:


Lo más importante a la hora de definir estas reglas a nivel de programación, es determinar qué velas van a ser consideradas como pivots y cuales no. El método que usaremos para discriminar velas será el que nos aportan las funciones GetSwingHigh y GetSwingLow, disponibles dentro del catálogo de funciones de Visual Chart.

El aspecto fundamental de estas dos funciones es que no se confirma un valor como pívot hasta que no ha pasado un determinado número de barras, valor que establece el usuario mediante un parámetro.

Utilización del indicador ZIGZAG Indicator Real 

Acabamos de ver qué reglas vamos a seguir para marcar las tendencias. Estas reglas son similares a las utilizadas en los indicadores ZIGZAG que muchos usuarios conocerán. Aprovechando esta circunstancia, derivaremos el estudio de los pivots al indicador ZIGZAG Indicator Real, lo que nos va a permitir centrarnos en aspectos más concretos del estudio de la tendencia. Por tanto lo que haremos será directamente extraer la información de dicho indicador.

Para aquellos usuarios que no dispongan de esta herramienta, pueden acceder a ella pulsando aquí.

Una vez descarguemos dicho indicador, podemos ver cómo, efectivamente, este indicador se ha encargado de filtrar aquellos valores extremos que deseamos estudiar:



Tendencias y Sistemas

Como decíamos al inicio del artículo, podemos usar las tendencias como elementos de apoyo en cualquier sistema. Existen dos métodos sobre los que pueden influir:

1. Como filtro de confirmación de señal

2. Como señal para cerrar la posición abierta.

Es decir, que no usaremos las tendencias como elementos de entrada básicos, dejando que cada sistema siga manteniendo sus propias reglas de entrada.


Programación de la tendencia dentro de un sistema

Aclaradas las bases sobre las que nos vamos a apoyar, pasaremos a explicar cómo incluir en nuestro sistema todo el código necesario. Cabe destacar que lo haremos programando en Visual Basic, ya que cuando la programación se vuelve más compleja, es difícil desarrollarla utilizando la Plataforma Visual, pensada principalmente para sistemas sencillos o de iniciación.

A modo de ejemplo, hemos desarrollado una variante del sistema base de Visual Chart Stochastic Cross, al que le hemos incluido el estudio de la tendencia que estamos viendo en este artículo. Usaremos este ejemplo para explicar la programación. También pueden descargar dicho archivo desde el siguiente enlace:

Stochastic Cross With TrendLine

Puesto que vamos a usar como base el indicador ZIGZAG Real, el primer punto que deberíamos incluir en nuestro código es la llamada a dicho indicador dentro del método OnInitCalculate

ZZData = .GII(ZIGZAGINDREAL, Data, PriceHigh, PriceLow, nBars, 3, 0, Percentage)

Vamos  a necesitar por tanto incluir dentro de los parámetros de nuestro sistema los parámetros definidos en este indicador. Esto nos va a permitir también optimizar la tendencia.

Además de los parámetros del ZIGZAG, vamos a añadir dos parámetros más:

1. TrendLineType. Que nos va a servir para decidir si el uso que haremos de la línea de tendencia será como filtro de entrada (0) o como filtro de salida (1)
2. CloseFilter. En caso de usar la tendencia como filtro de salida, incluimos un filtro para dar mayor margen a la ruptura de la tendencia, que será lo que determine el cierre de la posición abierta.

Por tanto, tendremos los siguientes parámetros añadidos al sistema:

Dim nBars As Double '4
Dim Percentage As Double '10
Dim TrendLineType As Integer '0
Dim CloseFilter As Double '5
'Parameters !!

Una vez dentro del método OnCalculateBar, realizamos al inicio del método la llamada al procedimiento encargado de estudiar la tendencia:

Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP

    Call EstudioDeLaTendencia(Bar)

Dentro del procedimiento EstudioDeLaTendencia se realizan las gestiones necesarias para poder aplicar los filtros posteriormente en el sistema. Lo principal es que en este procedimiento se modifica el valor de tres variables globales que habremos declarado:

1. PermiteOperC. Esta variable indica si la tendencia permite lanzar Compras.
2. PermiteOperV. Esta variable indica si la tendencia permite lanzar Ventas.
3. CierraOper. Esta variable indica si en la barra actual se debe de cerrar la operación abierta.

El cambio de las dos primeras o de la segunda dependerán del parámetro TrendLineType. La gestión de dichas variables se hace del siguiente modo:

'dependiendo del tipo de uso de la linea de tendencia influirá en una cosa u otra
If TrendLineType = 0 Then '<--- filtro entrada
    If uppe < 0 Then PermiteOperV = True
    If dope > 0 Then PermiteOperC = True
Else '<---- filtro cierra posicion
    PermiteOperC = True: PermiteOperV = True '<-- permite oper en cualquier caso
    If gmp = 1 Then
        If dope > 0 Then
            If .Low < doval - CloseFilter And .Low(1) >= dovalant - CloseFilter Then
                CierraOper = True
            End If
        End If
    ElseIf gmp = -1 Then
        If uppe < 0 Then
            If .High > upval + CloseFilter And .High(1) <= upvalant + CloseFilter Then
                CierraOper = True
            End If
        End If
    End If
End If


Por último, y ya nuevamente dentro del método OnCalculateBar, dependiendo del valor de dichas variables dejaremos que el sistema compre o venda o cierre la posición.

' Si modo = 0 ent. operamos a largo y corto
Private Sub TradeLongShort()
With APP
    ' A continuación se ponen las órdenes de c/v
    If .GetMarketPosition = 0 Then
        If PermiteOperC Then .Buy AtStop, ContractsNumber, PBuy
        If PermiteOperV Then .Sell AtStop, ContractsNumber, PSell
    Else
        If .GetMarketPosition = 1 Then
            If PermiteOperV Then .Sell AtStop, ContractsNumber, PSell
        Else
            If .GetMarketPosition = -1 Then
                If PermiteOperC Then .Buy AtStop, ContractsNumber, PBuy
            End If
        End If
    End If
End With
End Sub


If (EndofDay = 1 And .Time = EndSession) Or (CierraOper) Then
    .ExitLong AtClose, ContractsNumber
    .ExitShort AtClose, ContractsNumber
End If

Conclusiones

Hemos visto por tanto cómo incluir en un sistema concreto el estudio de la tendencia. No obstante, es posible añadir dicho estudio a cualquier sistema, permitiendo usar los dos tipos de filtros.

Invitamos a los usuarios a que comparen los resultados del sistema base aquí visto con los resultados de este sistema aplicando el filtro de entrada. Como pueden ver en el siguiente gráfico las mejoras son considerables:


Comentarios

Entradas populares de este blog

Como consultar el GAP % de un conjunto de valores

Bollinger Volatility Oscillator N

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