Curso de Programación. 7.1. Average Directional Index
Esta semana arrancamos con el tercer bloque de nuestro curso de programación, el cual estará compuesto
por los temas del 7 al 9. A lo largo de éste bloque, profundizaremos en materias más complejas, como puede ser el uso combinado de varios indicadores, la aplicación de filtros horarios o el uso de órdenes de salida.
Comenzaremos por el tema 7, donde nos centraremos en el estudio de los índices direccionales más conocidos, como son el ADX y el resto de indicadores asociados a éste.
7.1. Average Directional Index (ADX)
El Average Directional Index (índice direccional medio) es probablemente el índice direccional más conocido. Desarrollado por Welles Wilder en 1978, permite medir la fuerza de la tendencia del mercado mediante un valor que oscilará entre 0 y 100. Obviamente, cuanto mayor sea el valor del índice, informará de una tendencia más relevante en el movimiento de los precios.
Aunque el valor del índice puede llegar teóricamente hasta 100, raramente su valor supera los 60 puntos, de modo que cuando alcanza este valor extremo puede ser tomado como un momento de posible agotamiento del impulso.
Por otro lado, cuando el valor del indicador es inferior a 20, se suele considerar que el movimiento del precio está siendo neutro o poco relevante.
Como vemos, el ADX permite medir la fuerza de la tendencia, no así la dirección de la misma. Para ello, existen los indicadores direccionales positivo y negativo, los cuales vienen a representar la relevancia del movimiento alcista y bajista dentro de la trayectoria de los precios.
7.2. Fórmulas
El ADX se calcula, de hecho, a partir de los dos índices direccionales positivo y negativo, tal que así:
A su vez, los índices direccionales positivo y negativo se calculan en base al True Range (valor verdadero):
Un valor mayor del DI+ respecto al DI- implicará que la presencia alcista es más relevante, mientras que una situación en sentido contrario implicará una mayor presencia bajista.
El estudio conjunto de los dos direccionales acompañados por el índice de fuerza, nos permite elaborar un análisis de la detección de tendencias alcistas y bajistas confirmadas. Este análisis lo veremos con detalle más adelante. En el siguiente apartado vamos a desarrollar un ejemplo donde veremos el uso del ADX como filtro de entrada.
7.3. Estrategia MACD con Filtro ADX
La estrategia de ejemplo que vamos a desarrollar va a utilizar como base un sencillo sistema de cruces del MACD con si Media Señal, análisis que hemos desarrollado anteriormente. Sin embargo, en esta ocasión, veremos cómo filtrar las señales dadas por el MACD a partir de los movimientos oscilatorios del ADX. La regla que vamos a seguir va a ser la siguiente:
1) Entraremos a largo cuando el MACD sea mayor que su Media Señal y además el ADX supere a su Banda ADX (25).
2) Entraremos a corto cuando el MACD sea menor que su Media Señal y además el ADX supere a su Banda ADX (25).
Como vemos, sólo tendremos en cuenta los cruces del MACD que vengan acompañados por un crecimiento de la volatilidad: O dicho de otro modo, retrasamos el momento de entrada hasta que el ADX confirme que existe direccionalidad:
Además de estas reglas, el sistema lleva incorporadas dos condiciones más que permiten mejorar los resultados:
1) Un negocio por impulso. El sistema sólo va a permitir una entrada por impulso, o dicho de otro modo, sólo va a entrar una vez por cada cruce del ADX sobre su banda.
2) Control de negocio abierto. El sistema espera a la ejecución de un nuevo negocio para deshabilitar el último cruce del ADX. Para ello, se apoya en el uso de la función GetMarketPosition.
3) Entrar sólo cuando el ADX suba. No permitir realizar un nuevo negocio si el ADX es decreciente, ya que puede ser señal de debilitamiento del impulso.
Veamos a continuación cómo quedaría el sistema:
Código PDV
Código VBA
por los temas del 7 al 9. A lo largo de éste bloque, profundizaremos en materias más complejas, como puede ser el uso combinado de varios indicadores, la aplicación de filtros horarios o el uso de órdenes de salida.
Comenzaremos por el tema 7, donde nos centraremos en el estudio de los índices direccionales más conocidos, como son el ADX y el resto de indicadores asociados a éste.
7.1. Average Directional Index (ADX)
El Average Directional Index (índice direccional medio) es probablemente el índice direccional más conocido. Desarrollado por Welles Wilder en 1978, permite medir la fuerza de la tendencia del mercado mediante un valor que oscilará entre 0 y 100. Obviamente, cuanto mayor sea el valor del índice, informará de una tendencia más relevante en el movimiento de los precios.
Aunque el valor del índice puede llegar teóricamente hasta 100, raramente su valor supera los 60 puntos, de modo que cuando alcanza este valor extremo puede ser tomado como un momento de posible agotamiento del impulso.
Por otro lado, cuando el valor del indicador es inferior a 20, se suele considerar que el movimiento del precio está siendo neutro o poco relevante.
Como vemos, el ADX permite medir la fuerza de la tendencia, no así la dirección de la misma. Para ello, existen los indicadores direccionales positivo y negativo, los cuales vienen a representar la relevancia del movimiento alcista y bajista dentro de la trayectoria de los precios.
7.2. Fórmulas
El ADX se calcula, de hecho, a partir de los dos índices direccionales positivo y negativo, tal que así:
7.3. Estrategia MACD con Filtro ADX
La estrategia de ejemplo que vamos a desarrollar va a utilizar como base un sencillo sistema de cruces del MACD con si Media Señal, análisis que hemos desarrollado anteriormente. Sin embargo, en esta ocasión, veremos cómo filtrar las señales dadas por el MACD a partir de los movimientos oscilatorios del ADX. La regla que vamos a seguir va a ser la siguiente:
1) Entraremos a largo cuando el MACD sea mayor que su Media Señal y además el ADX supere a su Banda ADX (25).
2) Entraremos a corto cuando el MACD sea menor que su Media Señal y además el ADX supere a su Banda ADX (25).
Como vemos, sólo tendremos en cuenta los cruces del MACD que vengan acompañados por un crecimiento de la volatilidad: O dicho de otro modo, retrasamos el momento de entrada hasta que el ADX confirme que existe direccionalidad:
1) Un negocio por impulso. El sistema sólo va a permitir una entrada por impulso, o dicho de otro modo, sólo va a entrar una vez por cada cruce del ADX sobre su banda.
2) Control de negocio abierto. El sistema espera a la ejecución de un nuevo negocio para deshabilitar el último cruce del ADX. Para ello, se apoya en el uso de la función GetMarketPosition.
3) Entrar sólo cuando el ADX suba. No permitir realizar un nuevo negocio si el ADX es decreciente, ya que puede ser señal de debilitamiento del impulso.
Veamos a continuación cómo quedaría el sistema:
Código PDV
Código VBA
'¡¡ Parameters
Dim Contratos As Long '1
Dim PeriodoADX As Integer '14
Dim BandaADX As Double '25
Dim PeriodoMACD1 As Integer '12
Dim PeriodoMACD2 As Integer '26
Dim PeriodoMACDSIG As Integer '9
'Parameters !!
Dim MACDData As DataIdentifier
Dim ADXData As DataIdentifier
Dim CruceADX As Integer
Option Explicit
Public APP As SysUserApp
Implements System
Public Sub System_OnInitCalculate()
With APP
MACDData = .GII(MACD, Data, PeriodoMACD1, PeriodoMACD2, PeriodoMACDSIG, PriceClose, 0)
ADXData = .GII(ADX, Data, PeriodoADX, BandaADX)
CruceADX = 0
End With
End Sub
Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
Dim MACDact As Double
Dim MESIGact As Double
Dim ADXact As Double
Dim ADXant As Double
Dim gmp As Integer
MACDact = .GIV(MACDData)
MESIGact = .GIV(MACDData, 0, 2)
ADXact = .GIV(ADXData)
ADXant = .GIV(ADXData, 1, 1)
gmp = .GetMarketPosition
If ADXant <> NullValue Then
If ADXact > BandaADX And ADXant <= BandaADX Then
CruceADX = 1
ElseIf ADXact < BandaADX And ADXant >= BandaADX Then
CruceADX = -1
End If
End If
If CruceADX = 1 Then
If ADXact > ADXant Then
If MACDact > MESIGact And gmp <> 1 Then
.Buy AtClose, Contratos
CruceADX = 0
ElseIf MACDact < MESIGact And gmp <> -1 Then
.Sell AtClose, Contratos
CruceADX = 0
End If
End If
End If
End With
End Sub
Comentarios
Publicar un comentario