II Curso de Programación. Sistema Tema 4 y 5.
Continuamos con la publicación de los sistemas de ejemplo que estamos elaborando a través de nuestro 2º Curso de Programación para Visual Chart 5.
Sistema Tema 4 y 5: Sistema RSI cruce niveles sobrecompra/sobreventa
Con éste sistema tratamos de explicar cómo desarrollar sistemas basados en osciladores. Para ello, usamos el indicador Relative Strength Index (RSI) como ejemplo. En éste sistema, vemos la típica regla de entrada basada en la salida de los niveles de agotamiento.
Además, el sistema incluye los métodos de salida más comunes: Un stop de pérdidas fijo, un objetivo de ganancias y por último, un stop dinámico o trailing stop:
Las reglas del sistema eran las siguientes:
1. Comprar al pasar el RSI de estar sobrevendido (por encima de 70) a estar fuera de sobreventa (por debajo de 70).
2. Vender al pasar el RSI de estar sobrecomprado (por debajo de 30) a estar fuera de sobrecompra (por encima de 30).
Lo interesante de éste tipo de sistemas es que en caso de acierto, se adelantan a la nueva tendencia, permitiendo obtener un buen momento de entrada.
Por el contrario, cuando un oscilador falla, puede generar una pérdida de largo recorrido si no se controla. Para ello, incluimos en el sistema un stop de pérdida máxima.
Además, incluimos también un objetivo de ganancia, de modo que al alcanzar una cantidad determinada de puntos, el sistema liquidaba el negocio abierto.
Por último, incluimos un trailing stop. Mediante éste tipo de stop dinámico, buscamos aprovechar el movimiento del precio favorable a la operación, aún si finalmente dicho impulso no alcance el punto objetivo.
El desarrollo de éste sistema sería el siguiente:
Código PDV
Código VBA
Sistema Tema 4 y 5: Sistema RSI cruce niveles sobrecompra/sobreventa
Con éste sistema tratamos de explicar cómo desarrollar sistemas basados en osciladores. Para ello, usamos el indicador Relative Strength Index (RSI) como ejemplo. En éste sistema, vemos la típica regla de entrada basada en la salida de los niveles de agotamiento.
Además, el sistema incluye los métodos de salida más comunes: Un stop de pérdidas fijo, un objetivo de ganancias y por último, un stop dinámico o trailing stop:
Las reglas del sistema eran las siguientes:
1. Comprar al pasar el RSI de estar sobrevendido (por encima de 70) a estar fuera de sobreventa (por debajo de 70).
2. Vender al pasar el RSI de estar sobrecomprado (por debajo de 30) a estar fuera de sobrecompra (por encima de 30).
Lo interesante de éste tipo de sistemas es que en caso de acierto, se adelantan a la nueva tendencia, permitiendo obtener un buen momento de entrada.
Por el contrario, cuando un oscilador falla, puede generar una pérdida de largo recorrido si no se controla. Para ello, incluimos en el sistema un stop de pérdida máxima.
Además, incluimos también un objetivo de ganancia, de modo que al alcanzar una cantidad determinada de puntos, el sistema liquidaba el negocio abierto.
Por último, incluimos un trailing stop. Mediante éste tipo de stop dinámico, buscamos aprovechar el movimiento del precio favorable a la operación, aún si finalmente dicho impulso no alcance el punto objetivo.
El desarrollo de éste sistema sería el siguiente:
Código PDV
Código VBA
'¡¡ Parameters
Dim PeriodoRSI As Integer '14
Dim UpperBand As Double '70
Dim LowerBand As Double '30
Dim StopPerdidas As Double '50
Dim Objetivo As Double '100
Dim TrailingStop As Double '40
'Parameters !!
Dim rsidata As DataIdentifier
Dim precio_ts As Double
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
precio_ts = 0
rsidata = .GetIndicatorIdentifier(RSI, Data, PeriodoRSI, UpperBand, LowerBand)
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
Dim rsi_act As Double
Dim rsi_ant As Double
Dim pentrada As Double
Dim pos_abierta As Integer
Dim pstoploss As Double
rsi_act = .GetIndicatorValue(rsidata)
rsi_ant = .GetIndicatorValue(rsidata, 1, 1)
pos_abierta = .GetMarketPosition()
pentrada = .GetEntryPrice()
'reglas de entrada
If (.GetMarketPosition() <> 1 And rsi_ant <= LowerBand And rsi_act > LowerBand) Then
.Buy AtStop, 1, .High()
pos_abierta = 1
pentrada = .High
ElseIf (.GetMarketPosition() <> -1 And rsi_ant >=UpperBand And rsi_act<UpperBand) Then
.Sell AtStop, 1, .Low()
pos_abierta = -1
pentrada = .Low()
End If
'salida largos
If (pos_abierta = 1) Then
pstoploss = pentrada - StopPerdidas
If (.GetMarketPosition = 1) Then
If (.GetBarsSinceEntry() = 0) Then
precio_ts = pentrada
End If
If (.High() > precio_ts) Then
precio_ts = .High()
End If
If (precio_ts - TrailingStop > pstoploss) Then
pstoploss = precio_ts - TrailingStop
End If
.ExitLong AtLimit, 1, pentrada + Objetivo
End If
.ExitLong AtStop, 1, pstoploss
End If
'salida cortos
If (pos_abierta = -1) Then
pstoploss = pentrada + StopPerdidas
If (.GetMarketPosition = -1) Then
If (.GetBarsSinceEntry() = 0) Then
precio_ts = pentrada
End If
If (.Low() < precio_ts) Then
precio_ts = .Low()
End If
If (precio_ts + TrailingStop < pstoploss) Then
pstoploss = precio_ts + TrailingStop
End If
.ExitShort AtLimit, 1, pentrada - Objetivo
End If
.ExitShort AtStop, 1, pstoploss
End If
End With
End Sub
Comentarios
Publicar un comentario