12 de septiembre de 2013

Curso Programación. 1. El Editor de Visual Basic (VBA)

Continuamos con el Tema 1 de nuestro nuevo Curso de Programación.


En el día de hoy, nos centraremos en el diseño de sistemas mediante el uso de Visual Basic.

Les recuerdo que pueden disponer del contenido de todo el curso a través del siguiente enlace:

Contenido Curso de Programación

En el presente artículo, podemos encontrar:

Documentación del Tema 1 (diseño en VBA).

Ejercicio propuesto durante el seminario del Tema 1.

1. EL EDITOR DE VISUAL BASIC (VBA)

Cuando queremos diseñar sistemas a través de Visual Chart tenemos la posibilidad de utilizar dos tipos de lenguajes de programación en función de nuestras necesidades y conocimientos.

Si tenemos ciertas nociones de programación o necesitamos desarrollar sistemas con cierta complejidad, disponemos del lenguaje de programación Visual Basic (VBA). Teniendo los conocimientos necesarios, esta opción es la más cómoda y versátil, ya que nos permite mayores posibilidades que la otra opción de programación (la Plataforma Visual).

El desarrollo de sistemas en VBA se hace a través del editor de Visual Basic. A continuación vamos a ver cómo hacer uso de éste y las características del mismo.

1.1. Cómo acceder a la interfaz del editor Visual Basic

Para empezar a trabajar con el editor, crearemos un nuevo sistema desde cero.

Dentro del menú principal de Visual Chart 5, encontramos la opción Programación.


Pinchamos sobre dicha opción y aparecerá la barra de herramientas de Programación.

Seguidamente, seleccionamos el icono Sistema y por último Crear Sistema en VBA.


Definimos el nombre y código del sistema que vamos a crear:


El código siempre tiene que ser una palabra clave (sin espacios) y el nombre ya sí puede ser como queramos.

Se abrirá el editor de Visual Basic con una estructura preconfigurada sobre la que debemos montar nuestro sistema. Visual Chart genera por defecto esta estructura para facilitar la labor al programador, de manera que sólo tenga que preocuparse de incluir los elementos vinculantes a su estrategia.

1.1. Modulos Principales

Como decimos, nos debemos centrar en las partes sobre las que tenemos que escribir, pudiendo obviar el resto de módulos. A continuación, veamos las características de cada una de dichas partes.

1. Zona Declaración de Variables
Dedicada a la declaración de variables que vamos a usar en la estrategia, diferenciando entre las que son parámetros del sistema, entre las expresiones Parameters, y después todas las que vayan a manejar, fuera de dichas expresiones.

2. Procedimiento OnInitCalculate
Módulo desde donde inicializamos variables, se establecen los indentificadores de los indicadores a usar, se asignan valores constantes, etc... A este procedimiento recurrirá el programa sólo una vez, antes de comenzar los cálculos sobre las barras del gráfico.

3. Procedimiento OnCalculateBar
Módulo donde se define la estrategia: reglas de entrada y salida, operadores, etc... A este procedimiento recurrirá el programa una vez por barra, y siempre cuando dicha barra ha finalizado.


1.2. La clase SysUserApp

Cuando se crea el sistema observamos que aparece por defecto declarado un objeto de la clase SysUserAPP llamado APP.

Este objeto le va a servir al programa como conexión para poder relacionarse con Visual Chart. A través de él, obtendrá la información necesaria relativa a las cotizaciones y operaciones realizadas.

Usaremos los miembros de la APP para extraer los métodos y datos necesarios para definir el sistema.

Para ello, como los módulos principales quedan englobados dentro de las declaraciones With APP y End With, bastará con teclear un punto (.) para poder acceder a dichos miembros.

1.3 Elementos principales

Cuando diseñamos un sistema, necesitamos obtener información de distinto tipo para poder generar las reglas de entrada y salida, así como una serie de métodos con los que definir las operaciones a realizar. Veamos a continuación los métodos que principalmente utilizaremos:

1. Funciones
Las funciones poseen información acerca del estado del sistema, del valor de los precios, horario, fecha, etc... Las funciones son miembros de la clase APP, por tanto, para poder acceder a ellas, basta con teclear el punto y nos aparecerá la lista de funciones a las que tenemos acceso.

2. Indicadores
Si queremos usar la información de algún indicador en concreto, será necesario añadirlo siguiendo el siguiente procedimiento (ver imagen):

1) Declarar una variable del tipo DataIdentifier.
2) Identificar al indicador desde el módulo OnInitCalculate usando el método GetIndicatorIdentifier.
3) Extraer el valor del indicador usando el método GetIndicatorValue.


3. Variables
Las variables son elementos cuyo valor puede variar a lo largo del diagrama de flujo. Se usan para almacenar distintas cosas, tales como parámetros del sistema, precios que queramos guardar, resultados de alguna función que calculemos, etc...

4. Ordenes
Las órdenes se definen utilizando una serie de métodos concretos de la APP. Visual Chart distingue entre cuatro tipo de órdenes, por tanto, existe un método para cada una de ellas. Esta cuatro órdenes son:

1) Entrar a largo o compra = .BUY
2) Entrar a corto o venta = .SELL
3) Liquidar posición larga = .EXITLONG
4) Liquidar posición corta = .EXITSHORT

A la hora de la verdad, como es obvio, sólo estaremos hablando de operaciones de compra y venta, pero es necesario diferenciar entre operaciones para entrar y operaciones para salir puesto que Visual Chart las trata de distinta forma.

1.4 Un Ejemplo: Cambio en el Precio

En el seminario dedicado a este primer tema, planteamos un ejemplo muy básico que nos sirva de referencia para empezar a programar sistemas.

Este ejemplo consiste en un sistema que sigue las siguientes reglas:

COMPRAREMOS CUANDO: Aparezcan tres velas ascendentes consecutivas.
VENDEREMOS CUANDO: Aparezcan tres velas descendentes consecutivas.

El código de este sistema es el siguiente:

Public Sub System_OnCalculateBar(ByVal Bar As Long)
With APP
    If .Close(0) > .Close(1) And .Close(1) > .Close(2) And .Close(2) > .Close(3) Then
        .Buy AtClose
    ElseIf .Close(0) < .Close(1) And .Close(1) < .Close(2) And .Close(2) < .Close(3) Then
        .Sell AtClose
    End If
End With
End Sub

No hay comentarios:

Publicar un comentario