12 de septiembre de 2013

Curso de Programación. PROBLEMAS Y EJERCICIOS

Todas las semanas plantearemos un ejercicio relacionado con lo visto durante el seminario. La resolución de los mismos se hará de forma conjunta cada cierto tiempo.

Si necesitan más aclaraciones o quieren comentar algo relativo al ejercicio, pueden contactar con nosotros a través del correo sistemas@visualchart.com.

EJERCICIO 3.2. Añadir salidas al Cruce Media Señal

Partiendo del sistema base "Cruce MACD con Media Señal", vamos a desarrollar una regla de salida para limitar las pérdidas generadas por los cruces falsos.

Añadir órdenes de CIERRE cuando se detecten estos cruces:

1) Cruce al alza MACD con Media Señal + MACD > Banda Central = Cerrar Cortos.
2) Crucel a la baja MACD con Media Señal + MACD < Banda Central = Cerrar Largos.


Pista: Podemos utilizar la condición de cruce ya añadida en el sistema, de modo que, si ésta se cumple pero la segunda condición (relativa a la Banda Central) no, entonces enviar las órdenes de salida.

EJERCICIO 3.1. Filtro entrada X Barras

Partiendo del sistema base "Cruce MACD con Banda Central", vamos a desarrollar una regla de entrada para filtrar señales falsas.

La regla consistirá en esperar X barras para entrar. Pasadas estas barras, si la señal guardada se confirma, operamos. Si no, esperamos al siguiente cruce.



Para ello, haremos los siguientes cambios:

1. Añadir parámetro XBarras (valor por defecto 10).
2. Cuando se cumpla el momento exacto de un cruce, guardamos el número de barra y la dirección del cruce (1 o -1), pero no entramos a largo o a corto.
3. Cuando el número de barra = barra cruce + x barras, comprobamos si la dirección de la tendencia se mantiene. Si ocurre esto, procedemos a operar.

Pistas para poder resolver el ejercicio (PDV)

1. Añadir función CurrentBar para saber el número de barra actual.
2. Quitar la orden de compra y sustituirla por un cuadro de sentencia tal que así:


3. Repetir el proceso para la orden de venta.
4. Añadir debajo una nueva condición que cumpla lo siguiente:

a) ¿CurrentBar = BarraCruce + XBarras?
b) ¿Valor MACD > Banda Y SignoCruce=1?

Si se cumplen ambas condiciones COMPRAR. Repetir el proceso para la venta.

Pistas para poder resolver el ejercicio (VBA)

1. Añadir variables BarraCruce y SignoCruce desde la zona de declaración de variables.
2. Cuando se cumpla la condición de cruce alcista, actualizar las variables del siguiente modo:

    If .GetIndicatorValue(MACDData) > MACDDataBandValue Then
        If .GetIndicatorValue(MACDData, 1, 1) <= MACDDataBandValue Then
            BarraCruce = Bar
            SignoCruce = 1
        End If
    End If

En una nueva condición, comprobar lo siguiente:

    If Bar = BarraCruce + XBarras Then
        If .GetIndicatorValue(MACDData) > MACDDataBandValue Then
            If SignoCruce = 1 Then
                .Buy AtClose, 1
            End If
        End If
    End If

El proceso se repite para la venta.

EJERCICIO 2.2. Adelantar Salidas

Partiendo del sistema base "Cruce de Medias", vamos a desarrollar una regla de salida para mejorar el momento de cierre de la posición abierta.

Para ello, una vez tengamos un negocio abierto, cerramos posiciones si se cumplen las siguientes reglas:

CERRAREMOS LARGOS CUANDO:
Tras haber comprado, los cierres caigan por debajo de la media larga.

CERRAREMOS CORTOS CUANDO:
Tras haber vendido, los cierres superen a la media larga.





Pistas para poder resolver el ejercicio (PDV)

1. La condición de cierre es la misma que la condición de entrada del sistema "Media Exponencial" visto al principio del tema 2.

2. La principal dificultad se centra en evitar las rentradas: Una vez hemos cerrado, la regla de entrada se sigue cumpliendo, lo que hará que se vuelva a comprar. Hay que pensar en un método para avisar al sistema de que ya esperamos a la señal contraria.

Pistas para poder resolver el ejercicio (VBA)

1. Hay que añadir una nueva sentencia IF THEN... ELSE con la cual gestionar la regla de salida (usar métodos EXITLONG y EXITSHORT).

2. Existe el riesgo de las rentradas (que vuelva a entrar en el mismo sentido tras cerrar). Un modo de evitar esto sería el siguiente:

a) Añadir una nueva variable llamada UltimaPos (Dim UltimaPos As Integer).
b) Actualizar UltimaPos a 1 (cuando compremos) o a -1 (cuando vendamos).
c) Añadir a las condiciones de entrada (no a las de salida) una segunda condición: Para permitir la compra, UltimaPos <> 1 y para permitir la venta, UltimaPos <> -1.

Les animo a que lo intenten. Cuando dediquemos una sesión a resolver los problemas, podrán ver si han seguido el proceso correctamente.

EJERCICIO 2.1. Filtro de entrada

Partiendo del sistema base "Media Exponencial", vamos a desarrollar un filtro de entrada para intentar reducir el número de señales falsas.

Para ello, una vez se cumplan las condiciones de posicionamiento a largo o a corto, deberán cumplirse además la siguiente regla de filtro:

REGLA DE FILTRO PARA LA ENTRADA A LARGO:
Una vez cumplida la regla de la media, además, sólo entraremos si el precio (cierre) supera a la media en x puntos.

REGLA DE FILTRO PARA LA ENTRADA A CORTO:
Una vez cumplida la regla de la media, además, sólo entraremos si el precio (cierre) es inferior a la media en x puntos.



El cambio que deberían realizar sería modificar las condiciones de entrada según las fórmulas especificadas en la imagen anterior.

Además, existe la opción de que Filtro sea un parámetro de entrada o bien un valor fijo (un número).



Pistas para poder resolver el ejercicio (PDV)
1. Si queremos que Filtro sea un parámetro, debemos añadir una nueva variable y marcar dicha variable como parámetro:



Pistas para poder resolver el ejercicio (VBA)
1. Si queremos que Filtro sea un parámetro, describimos el nombre del parámetro y lo añadimos debajo del parámetro PrecioRef.


2. Realmente no habría que cambiar muchas cosas en el código: Lo único que tenemos que hacer es sustituir la fórmula vista en la imagen por la que tenemos actualmente en el sistema.

Una vez consigan añadir la regla del filtro, podrán comparar los resultados con el sistema original. ¿Mejora la línea de ganancia acumulada? ¿Se reduce la peor serie de pérdidas?

EJERCICIO 1.1. Colocar Salidas

Este ejercicio consiste en añadir ordenes de salida al sistema visto en el tema 1.

Las reglas que seguiremos para cerrar posiciones serán las siguientes:

CERRAREMOS LARGOS CUANDO:
Tras haber comprado, aparezcan dos cierres consecutivos bajistas.

CERRAREMOS CORTOS CUANDO:
Tras haber vendido, aparezcan dos cierres consecutivos alcistas.



Recuerden la diferencia existente entre colocar órdenes de entrada (Compra y Venta) y colocar órdenes de salida (Cerrar Largo y Cerrar Corto).


Como ven, las reglas de salida son muy similares a las de entrada, la única diferencia estriba en que ahora sólo nos fijamos en las dos últimas barras (por tanto, entran en juego las barras de la posición 0, 1 y 2).

Pistas para poder resolver el ejercicio (PDV)
1. Debemos añadir dos objetos más de tipo CONDICION.

2. Los objetos condición nuevos deben ir ENGANCHADOS a los que ya hay puestos: Para ello, hay que fijarse en cómo hemos enganchado la condición de compra con la condición de venta.

Pistar para poder resolver el ejercicio (VBA)
1. Habrá que añadir dos instrucciones nuevas del tipo IF THEN... END IF.

2. Las instrucciones nuevas pueden ir anidadas DEBAJO de las que ya hay escritas.

No hay comentarios:

Publicar un comentario