Curso de Programación 13.2. El Canal de Keltner (2).
Esta semana finalizamos el estudio del indicador Canal de Keltner analizando las señales de tipo sobrecompra y sobreventa asociadas a ésta herramienta.
Uso del canal como señal de agotamiento.
Si partimos de la premisa de que la superación del canal por parte de los precios implica el agotamiento de la tendencia dominante, podemos considerar los siguientes supuestos:
1) Si el precio del subyacente queda por encima del canal, entonces estamos ante un fin de impulso alcista.
2) Si el precio del subyacente queda por debajo del canal, entonces estamos ante un fin de impulso bajista.
La explicación a estas definiciones se fundamenta en que los valores que quedan fuera del canal de precios esperados suponen una fuerte desviación respecto a lo sucedido durante el periodo previo. No obstante, la aparición de esta situación solamente implica movimientos excepcionales en el precio, pero no necesariamente un comportamiento determinado posterior al evento. Asumir esta señal como señal de fin de tendencia y posible inicio de tendencia contraria es una de las posibles estrategias a seguir, si bien puede considerarse como más agresiva, puesto que la incertidumbre acerca de un cambio de tendencia es alta, ya que no hay aún indicios que confirmen la señal de cambio.
Reglas de entrada
Una vez hemos tomado la decisión de usar el canal como señal de agotamiento, la estrategia a seguir viene a ser igual a la de todos los indicadores que usan esta metodología: Estando el subyacente en las zonas de agotamiento, cuando el precio retroceda al interior del canal, operaríamos a favor del movimiento de retroceso.
Tal y como hemos comentado, el riesgo a posibles entradas fallidas es mayor con éste método que utilizando una estrategia de ruptura de canal (vista en el anterior artículo de estrategias). De modo que aplicaremos un filtro de entrada como medida de seguridad que nos permita evitar en mayor medida los errores de fin de tendencia previa:
1) Precio de entrada a largos = Banda Inferior del Canal + %FiltroEntrada.
2) Precio de entrada a cortos = Banda Superior del Canal - %FiltroEntrada.
En la siguiente imagen, podemos ver cómo este método evita una entrada a largo en pleno proceso de caída de precios:
Reglas de salida
Puesto que estamos suponiendo que la salida de los precios fuera del canal implicaría el final del impulso previo, debemos usar esta información también para las reglas de salida. Así, si se realiza un nuevo negocio y el movimiento es favorable, el objetivo de dicha operación se situará en el extremo opuesto del canal de Keltner:
1) Entrada a Largo = Objetivo alcanzar la banda superior.
2) Entrada a Corto = Objetivo alcanzar la banda inferior.
Comparación con las Bandas de Bollinger
Como ya comentamos en el anterior artículo, el estudio de éste indicador es muy similar al que pueda hacerse relativo a las Bandas de Bollinger. Inicialmente, no podemos determinar cual de los dos tipos de canales de precios ofrece mejores garantías, puesto que es una información que puede depender de muchos factores (el tipo de producto a utilizar, la compresión temporal, los parámetros aplicados, etc...), creemos interesante diseñar una estrategia que siga las mismas pautas pero aplicada al indicador de Bollinger.
La opción que vamos a plantear va a consistir en integrar las Bandas de Bollinger al sistema a diseñar, de modo que podamos elegir entre éste o el canal de Keltner, y así comparar resultados que nos digan con qué herramienta se obtienen mayores garantías de éxito.
Estrategia SobreCompra/SobreVenta
Para el diseño de ésta estrategia, nos vamos a basar en todas las reglas planteadas anteriormente.
Además, incluiremos los siguientes elementos:
1) Un control de pérdidas para evitar perder más de un determinado porcentaje.
2) Un intervalo horario para operar solamente entre las franjas horarias especificadas.
3) Un parámetro al que llamaremos UsarBollinger. Si este parámetro vale cero, quiere decir que descartamos usar Bollinger y que por tanto el sistema se basará en las señales del canal de Keltner. Si vale uno, entonces activa el Bollinger y lo usa como referencia.
El código del sistema quedaría así:
Código PDV
Código VBA
(NOTA: Recuerden que el código aquí expuesto sólo incluye los métodos OnCalculateBar() y OnInitCalculate(). Tengan esto en cuenta a la hora de copiar el sistema).
Uso del canal como señal de agotamiento.
Si partimos de la premisa de que la superación del canal por parte de los precios implica el agotamiento de la tendencia dominante, podemos considerar los siguientes supuestos:
1) Si el precio del subyacente queda por encima del canal, entonces estamos ante un fin de impulso alcista.
2) Si el precio del subyacente queda por debajo del canal, entonces estamos ante un fin de impulso bajista.
La explicación a estas definiciones se fundamenta en que los valores que quedan fuera del canal de precios esperados suponen una fuerte desviación respecto a lo sucedido durante el periodo previo. No obstante, la aparición de esta situación solamente implica movimientos excepcionales en el precio, pero no necesariamente un comportamiento determinado posterior al evento. Asumir esta señal como señal de fin de tendencia y posible inicio de tendencia contraria es una de las posibles estrategias a seguir, si bien puede considerarse como más agresiva, puesto que la incertidumbre acerca de un cambio de tendencia es alta, ya que no hay aún indicios que confirmen la señal de cambio.
Reglas de entrada
Una vez hemos tomado la decisión de usar el canal como señal de agotamiento, la estrategia a seguir viene a ser igual a la de todos los indicadores que usan esta metodología: Estando el subyacente en las zonas de agotamiento, cuando el precio retroceda al interior del canal, operaríamos a favor del movimiento de retroceso.
Tal y como hemos comentado, el riesgo a posibles entradas fallidas es mayor con éste método que utilizando una estrategia de ruptura de canal (vista en el anterior artículo de estrategias). De modo que aplicaremos un filtro de entrada como medida de seguridad que nos permita evitar en mayor medida los errores de fin de tendencia previa:
1) Precio de entrada a largos = Banda Inferior del Canal + %FiltroEntrada.
2) Precio de entrada a cortos = Banda Superior del Canal - %FiltroEntrada.
En la siguiente imagen, podemos ver cómo este método evita una entrada a largo en pleno proceso de caída de precios:
Reglas de salida
Puesto que estamos suponiendo que la salida de los precios fuera del canal implicaría el final del impulso previo, debemos usar esta información también para las reglas de salida. Así, si se realiza un nuevo negocio y el movimiento es favorable, el objetivo de dicha operación se situará en el extremo opuesto del canal de Keltner:
1) Entrada a Largo = Objetivo alcanzar la banda superior.
2) Entrada a Corto = Objetivo alcanzar la banda inferior.
Comparación con las Bandas de Bollinger
Como ya comentamos en el anterior artículo, el estudio de éste indicador es muy similar al que pueda hacerse relativo a las Bandas de Bollinger. Inicialmente, no podemos determinar cual de los dos tipos de canales de precios ofrece mejores garantías, puesto que es una información que puede depender de muchos factores (el tipo de producto a utilizar, la compresión temporal, los parámetros aplicados, etc...), creemos interesante diseñar una estrategia que siga las mismas pautas pero aplicada al indicador de Bollinger.
La opción que vamos a plantear va a consistir en integrar las Bandas de Bollinger al sistema a diseñar, de modo que podamos elegir entre éste o el canal de Keltner, y así comparar resultados que nos digan con qué herramienta se obtienen mayores garantías de éxito.
Estrategia SobreCompra/SobreVenta
Para el diseño de ésta estrategia, nos vamos a basar en todas las reglas planteadas anteriormente.
Además, incluiremos los siguientes elementos:
1) Un control de pérdidas para evitar perder más de un determinado porcentaje.
2) Un intervalo horario para operar solamente entre las franjas horarias especificadas.
3) Un parámetro al que llamaremos UsarBollinger. Si este parámetro vale cero, quiere decir que descartamos usar Bollinger y que por tanto el sistema se basará en las señales del canal de Keltner. Si vale uno, entonces activa el Bollinger y lo usa como referencia.
El código del sistema quedaría así:
Código PDV
Código VBA
(NOTA: Recuerden que el código aquí expuesto sólo incluye los métodos OnCalculateBar() y OnInitCalculate(). Tengan esto en cuenta a la hora de copiar el sistema).
'¡¡ Parameters
Dim Contratos As Long '1
Dim HoraIni As Integer '900
Dim HoraFin As Integer '1900
Dim EMA_Period As Integer '20
Dim ATR_Period As Integer '10
Dim Constant As Double '2
Dim PctEntrada As Double '0.02
Dim PctPerdida As Double '0.2
Dim UsarBollinger As Integer '0
'Parameters !!
Dim channeldata As DataIdentifier
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
If (UsarBollinger = 0) Then
channeldata = .GII(KELTNER02, Data, EMA_Period, ATR_Period, Constant)
Else
channeldata = .GII(BollingerBands, Data, EMA_Period, Constant, PriceClose, AvgExponential)
End If
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
If (.Time >= HoraIni And .Time < HoraFin) Then
Dim bandasup As Double
Dim bandainf As Double
If (UsarBollinger = 0) Then
bandainf = .GetIndicatorValue(channeldata, 0, 1)
bandasup = .GetIndicatorValue(channeldata, 0, 3)
Else
bandasup = .GetIndicatorValue(channeldata, 0, 2)
bandainf = .GetIndicatorValue(channeldata, 0, 3)
End If
Dim pcomprar As Double
Dim pvender As Double
'entradas
If (.GetMarketPosition <> 1 And .Close() < bandainf) Then
pcomprar = bandainf * (1 + PctEntrada / 100)
.Buy AtStop, Contratos, pcomprar
'stop primera barra
.ExitLong AtStop, Contratos, pcomprar * (1 - PctPerdida / 100)
End If
If (.GetMarketPosition <> -1 And .Close() > bandasup) Then
pvender = bandasup * (1 - PctEntrada / 100)
.Sell AtStop, Contratos, pvender
.ExitShort AtStop, Contratos, pvender * (1 + PctPerdida / 100)
End If
'salidas
If (.GetMarketPosition = 1) Then
'salida largos
If (PctPerdida <> 0) Then
.ExitLong AtStop, Contratos, .GetEntryPrice() * (1 - PctPerdida / 100)
End If
.ExitLong AtLimit, Contratos, bandasup
ElseIf (.GetMarketPosition = -1) Then
'salida cortos
If (PctPerdida <> 0) Then
.ExitShort AtStop, Contratos, .GetEntryPrice() * (1 + PctPerdida / 100)
End If
.ExitShort AtLimit, Contratos, bandainf
End If
Else
If (.GetMarketPosition = 1) Then
.ExitLong AtClose, Contratos
ElseIf (.GetMarketPosition = -1) Then
.ExitShort AtClose, Contratos
End If
End If
End With
End Sub
Comentarios
Publicar un comentario