Documentos de Académico
Documentos de Profesional
Documentos de Cultura
regsvr32 "C:\Archivos de programa\vChart5\Bin\COMTraderInterfaces.dll" 3. Pulsar el botn Aceptar 4. Una vez hemos hecho esto, debe aparecer el siguiente mensaje:
DllRegisterServer en C:\Archivos de programa\vChart5\Bin\VCRealTimeLib.dll se realiz con xito
A partir de ah, repetimos los pasos 2 y 3 con las siguientes sentencias: regsvr32 "C:\Archivos de programa\vChart5\Bin\VCDataSource.dll" regsvr32 "C:\Archivos de programa\vChart5\Bin\VCRealTimeLib.dll" regsvr32 "C:\Archivos de programa\vChart5\Bin\VCContributor.dll"
AVISO. El uso de la herramienta Ejecutar de Microsoft Windows puede dar problemas. Si no obtenemos el mensaje de confirmacin, se puede probar utilizando el Interprete de Comandos, escribiendo cmd en la ventana de ejecucin se abre el Interprete. Una vez all, podemos volver a probar a ejecutar la rutina regsvr32 correspondiente.
3. Supongamos que vamos a trabajar con la herramienta COM desde una hoja Excel. A partir de este momento, y en adelante, trataremos los ejemplos de uso de las Trading Tools mediante el uso de Microsoft Excel. No obstante, cabe recordar que la aplicacin cliente no tiene por qu ser exclusivamente esta herramienta. 4. Vamos a crear un libro Excel nuevo donde poder implementar nuestras herramientas. Abrimos Excel y creamos una hoja nueva. Elegimos la opcin Guardar como y le indicamos que queremos guardarla como hoja Excel 97-2003 para evitar conflictos con versiones anteriores de Windows. Nosotros lo vamos a guardar con el nombre de TradingTools.xls 5. Hecho esto, seleccionamos la pestaa Programador y abrimos el editor de Visual Basic. Una vez all, seleccionamos la opcin HerramientasReferencias. Esperamos a que cargue las libreras y buscamos las que acabamos de registrar. Las activamos y pulsamos el botn Aceptar A partir de este momento las libreras quedan cargadas en Excel y listas para poder ser usadas. En caso de utilizar cualquier otra aplicacin, igualmente debemos buscar la opcin de referencias para poder activar las libreras registradas. 6. El ltimo paso que debemos realizar es el de abrir Visual Chart 5 en caso de que no est ya abierto y asegurarnos de que tenemos acceso al tiempo real.
El objeto principal es VCDS_DataSourceManager. Disponiendo de este objeto, se pueden crear series de datos, indicadores, sistemas y recibir eventos cuando estos cambian.
Es decir, diez celdas para representar cinco parmetros que son los que vamos a necesitar. En las que a la izquierda ponemos el nombre de cada parmetro, y a la derecha el valor que vamos a ir cambiando. El cdigo del valor es con el que Visual Chart identifica a cada valor, precedido por 010. Para conocer el cdigo de cada valor, basta con abrir dicho valor y en el visor de bsqueda de smbolos podemos ver cul es. Las fechas Desde/Hasta definen el rango de tiempo durante el cual se obtendrn datos. El Tipo Compresin es la forma en la que van a estar integrados los datos. Para facilitarle la labor al usuario, estar representado por una herramienta de tipo Combo. Los valores del combo los cargamos en el procedimiento Worksheet_Activate de la siguiente manera:
Private Sub Worksheet_Activate() '-- Cargar combo de tipo de compresion If CargarCombo <> 1 Then CboTipoComp.AddItem "Minutos" CboTipoComp.AddItem "Dias" CboTipoComp.AddItem "Semanas" CboTipoComp.AddItem "Meses" CboTipoComp.AddItem "Ticks" '-CargarCombo = 1 End If End Sub
La compresin es la cantidad de barras del tipo de compresin en las que van a estar integrados los datos. A continuacin, creamos una cabecera para identificar cada uno de los campos que vamos a representar en la hoja. Tal que as:
Que es la informacin ms bsica que podemos usar y que nos puede servir para este ejemplo. No obstante, destacar que es posible extraer ms informacin tal y como anteriormente se ha expuesto. La visualizacin de dicha informacin se expondr en posteriores apartados.
Para ello, seleccionamos la pestaa de Programador y en el men de programador, seleccionamos el Modo diseo y a continuacin, seleccionamos InsertarBotn de comando (control Active X)
Si queremos mejorar el aspecto de nuestro botn, podemos seleccionarlo pulsando con el botn derecho y accediendo a las propiedades de botn. Nosotros vamos a cambiar las propiedades ms bsicas: Name: BtnAceptar Caption: ACEPTAR El resultado final ser el siguiente:
Con esto tenemos preparado todo el entorno visual. Vamos a proceder a continuacin a realizar el desarrollo del cdigo, donde pasaremos a usar las funciones y objetos de la librera VCDATASOURCE.
Dim FechaIni$, FechaFin$, tipocompresion&, compresion& Dim i&, j&, Intentos%, nFila& Option Explicit Dim Salir As Boolean ' Objeto para As Boolean Dim HayDatosrecibir la fuente de datos DimBtnAceptar.Caption = "ACEPTAR" Then If g_Objects As VCDS_DataSourceManager 'Variables historico BtnAceptar.Caption = "CANCELAR" Dim DetenerSistema (1) fuente As VCDS_DataSerie Dim Set g_Objects = New VCDS_DataSourceManager bar As VCDS_BarValue '-- Actualizamos las variables FechaIni = CDate(Cells(4, 2).Text): FechaFin = CDate(Cells(5, 2).Text) compresion = Cells(5, hemos = Cells(3, 2).Text Como anteriormente 4): Simbolocomentado, de todas ellas, la ms importante Select Case CboTipoComp.Text es g_Objects, puesto que de este objeto obtendremos la informacin Case "Minutos" tipocompresion = Chart. procedente de Visual VCDS_CT_Minutes Case "Dias" tipocompresion = VCDS_CT_Days El objeto Fuente define una serie de datos y provee acceso a los distintos Case "Semanas" tipocompresion del smbolo. valores de"Meses" la barra = VCDS_CT_Weeks Case tipocompresion = VCDS_CT_Months Case Else El objeto bar contiene los valores de una barra procedente del objeto tipocompresion = VCDS_CT_Ticks Fuente. Esto quiere decir que es necesario declarar el objeto Fuente para End Select ControlDeRecepcion(1) = 1 poder declarar al objeto bar. Salir = False: Intentos = 1 While Not Salir Al pulsarError Resume Next On el botn ACEPTAR iniciaremos el proceso de obtencin de datos. Antes Set fuente = g_Objects.NewDataSerie(Simbolo, tipocompresion, compresion, FechaIni, FechaFin) de extraer los datos procedentes del objecto Fuente, vamos a If Err.Number = 0 Then realizar HayDatos = True: rutinas de control para evitar conflictos de una serie de Salir = True
De dicho cdigo cabe destacar lo siguientes: 1. La serie Fuente se crea con el mtodo NewDataSerie del objeto g_Object. Dicho mtodo solicita los parmetros definidos previamente (cdigo del smbolo, tipo de compresin, compresin, fecha inicio y fecha fin). 2. El objeto bar almacena los valores de una barra concreta. Recorremos el objeto Fuente hasta la ltima barra que contenga, y para cada barra,
asignamos el valor al objeto bar mediante el mtodo Fuente.GetBarValues(N). Bar ser el que interpretar las distintas propiedades de esa barra. 3. La propiedad Fuente.Size nos indica el nmero de barras que hay entre las fechas propuestas. Con esto queda definido el grueso del programa. En el documento Excel adjunto a esta ayuda, podemos consultar el resultado final de esta primera prctica.
informacin sobre Fuentes de datos, indicadores o sistemas. De dicha clase vamos ha utilizar la clase objeto VCDS_Indicator, que provee informacin acerca del indicador que le indiquemos. El mtodo que permite generar esta clase de objetos es el mtodo NewIndicator que tiene las siguientes propiedades: Name. Donde se indica el CODIGO del indicador (es importante recordar que lo que nos solicita el mtodo es el cdigo y no el nombre del indicador). DataSource. Donde se debe especificar el objeto de tipo VCD_DataSource al que se le debe aplicar el indicador. Como cabe esperar, este objeto debe declararse previamente mediante el uso del mtodo NewDataSerie. ParamArray. En donde se especifica el conjunto de parmetros propio de cada indicador.
A continuacin, vamos a explicar cmo hacer uso de dicho mtodo. El entorno va a ser bastante parecido al de la prctica anterior. Volvemos a crear de nuevo una cabecera como sta:
En este caso hemos sustituido la subcabecera de informacin del smbolo por una cabecera donde indicamos cada una de las lneas del indicador.
Los indicadores a usar vienen por defecto instalados en el paquete de indicadores de Visual Chart 5. Cuando vayamos a hacer uso del mtodo NewIndicator con un indicador de nuestra cosecha, debemos recordar que antes de utilizar la hoja Excel, debemos compilar el indicador previamente (en caso de no haberlo hecho antes). Como vamos a usar un nmero limitado de indicadores, en lugar de aadir a la cabecera una caja de texto (como en el caso del cdigo del smbolo), vamos a usar un cuadro combinado que es mas atractivo desde el punto de vista del usuario. Para ello, seleccionamos la pestaa de Programador y en el men de programador, seleccionamos el Modo diseo y a continuacin, seleccionamos Insertar Cuadro combinado (control Active X).
As como en el anterior ejercicio cambiamos algunas propiedades del cuadro de texto, ahora vamos a cambiar la propiedad Name del cuadro combinado: Name: CboTipoIndicador El cuadro combinado va a contener los nombres de los indicadores a mostrar. Internamente, nos encargaremos de asociar a cada nombre con su respectivo cdigo de Visual Chart. De este modo, el usuario puede seleccionar un indicador por su nombre y el programa obtendr el cdigo mquina necesario para hacer la llamada con el mtodo NewIndicator. Para cargar el cuadro combinado con los nombres de los indicadores usaremos un evento propio de la hoja Excel. Dicho evento ser Worksheet_Activate(). Este evento coge el foco de la aplicacin cuando la hoja en cuestin se activa. El cdigo es el siguiente:
Private Sub Worksheet_Activate() '-- Cargar combo de tipo de compresion If CargaComboInd <> 1 Then CboTipoComp2.Clear CboTipoIndicador.Clear '-CboTipoComp2.AddItem "Minutes" CboTipoComp2.AddItem "Days" CboTipoComp2.AddItem "Weeks" CboTipoComp2.AddItem "Months" CboTipoComp2.AddItem "Ticks" CboTipoIndicador.AddItem "AvSimple" CboTipoIndicador.AddItem "AvExponential" CboTipoIndicador.AddItem "BollingerBands" CboTipoIndicador.AddItem "MACD" CboTipoIndicador.AddItem "RSI" CboTipoIndicador.AddItem "Stochastic" CboTipoIndicador.AddItem "DirectionalMov" '-CargaComboInd = 1 End If End Sub
Generado el cuadro combinado, vamos a aadir a continuacin a la cabecera los cuadros de texto donde el usuario debe indicar los parmetros del indicador seleccionado. Debemos crear un cuadro de texto para cada parmetro, sin embargo, sabemos que no todos los indicadores poseen el mismo nmero de parmetros. Entonces, qu hacer en tal caso? Como mnimo tendremos que crear tantos cuadros de texto cmo parmetros tiene el indicador con mayor nmero de ellos. En nuestro ejemplo, este honor se le debe al Estocstico, que tiene seis parmetros.
Cuando el usuario abra la hoja Excel, ya podr seleccionar un smbolo en una compresin concreta, e indicar la combinacin de parmetros que decida para el Estocstico. La cuestin siguiente es: Y si selecciona otro indicador del cuadro combinado? Entonces tendremos que cambiar los parmetros para que se ajusten al indicador que se elija.
El evento CboTipoIndicador_Change()
El evento Change del objeto CboTipoIndicador coger el foco de la aplicacin cada vez que el usuario seleccione un indicador distinto dentro de dicho cuadro combinado. Este evento nos va a servir para dos cosas: 1. Para hacer la presentacin de los parmetros ms dinmica y atractiva desde el punto de vista del usuario. 2. Para dimensionar el array de parmetros que requiere el mtodo NewIndicator. Este segundo punto es verdaderamente imprescindible para el correcto uso del mtodo en cuestin: Si al indicador que se especifica en la propiedad Name no se le administra el exacto nmero de parmetros que posee en la propiedad ParamArray, nos generar una excepcin y no devolver informacin alguna del indicador.
Private Sub CboTipoIndicador_Change() sIndic = CboTipoIndicador.Text Select Case sIndic Case "AvSimple", "AvExponential", "ADX", "DirectionalMov" LabelParam1.Visible = True: LabelParam2.Visible = True LabelParam1.Caption = "Period" TextBox1.Visible = True: TextBox2.Visible = True TextBox1.Text = 30 If (sIndic = "ADX") Or (sIndic = "DirectionalMov") Then LabelParam2.Caption = "Band Value" TextBox2.Text = 20 Else LabelParam2.Caption = "PriceSource": TextBox2.Text = 0 End If LabelParam3.Visible = False: LabelParam4.Visible = False: LabelParam5.Visible = False: LabelParam6.Visible = False TextBox1.Visible = True: TextBox2.Visible = True TextBox3.Visible = False: TextBox4.Visible = False: TextBox5.Visible = False: TextBox6.Visible = False Case "RSI" LabelParam1.Visible = True: LabelParam2.Visible = True: LabelParam3.Visible = True LabelParam1.Caption = "Period": LabelParam2.Caption = "Upper Band": LabelParam3.Caption = "Lower Band" TextBox1.Visible = True: TextBox2.Visible = True: TextBox3.Visible = True TextBox1.Text = 14: TextBox2.Text = 70: TextBox3.Text = 30
Case "BollingerBands" LabelParam1.Visible = True: LabelParam2.Visible = True: LabelParam3.Visible = True: LabelParam4.Visible = True LabelParam1.Caption = "Period": LabelParam2.Caption = "CoeficientM": LabelParam3.Caption = "PriceSource" LabelParam4.Caption = "AvType": TextBox1.Visible = True: TextBox2.Visible = True: TextBox3.Visible = True TextBox4.Visible = True: TextBox1.Text = 25: TextBox2.Text = 2: TextBox3.Text = 0: TextBox4.Text = 0 LabelParam5.Visible = False: LabelParam6.Visible = False: TextBox5.Visible = False: TextBox6.Visible = False Case "MACD" LabelParam1.Visible = True: LabelParam2.Visible = True: LabelParam3.Visible = True: LabelParam4.Visible = True LabelParam5.Visible = True: LabelParam1.Caption = "PeriodME_1": LabelParam2.Caption = "PeriodoME_2" LabelParam3.Caption = "PeriodME_SIG": LabelParam4.Caption = "PriceSource": LabelParam5.Caption = "BandValue" TextBox1.Visible = True: TextBox2.Visible = True: TextBox3.Visible = True: TextBox4.Visible = True: TextBox5.Visible = True TextBox1.Text = 20: TextBox2.Text = 33: TextBox3.Text = 9: TextBox4.Text = 0: TextBox4.Text = 0: TextBox5.Text = 0 LabelParam6.Visible = False: TextBox6.Visible = False Case "Stochastic" LabelParam1.Visible = True: LabelParam2.Visible = True: LabelParam3.Visible = True:
Lo nico que hemos hecho ha sido, segn sea el valor del cuadro combinado CboTipoIndicador, cambiar las propiedades de los cuadros de texto de los parmetros. Con esto tenemos preparado todo el entorno visual. Vamos a proceder a continuacin a realizar el desarrollo del cdigo, donde pasaremos a usar las funciones y objetos de la librera VCDS_DataSourceManager y como dijimos, en concreto, el objeto VCDS_Indicator.
A diferencia del primer ejemplo, ahora hemos aadido un objeto de tipo VCDS_Indicator. El objeto indicador va a contener los mtodos necesarios para que Visual Chart nos devuelva la informacin relativa al indicador que debidamente le indiquemos. Al pulsar el botn ACEPTAR iniciaremos el proceso de obtencin de datos. Antes de extraer los datos procedentes del objecto indicador, vamos a realizar una serie de rutinas de control para evitar conflictos de intermediacin entre Visual Chart y nuestra interfaz. Las rutinas de control sern las siguientes: 1) Rutina de inicializacin de escenario. Donde inicializamos los objetos que vamos a usar y borramos la informacin que pudiera haber escrita en nuestra hoja de datos. Estos dos procesos se realizan en los siguientes procedimientos: Procedimiento Limpiar. Procedimiento DetenerSistema.
Private Sub Limpiar() '-- Limpiar Range(Cells(7, 1), Cells(1000, 10)).ClearContents End Sub Public Sub DetenerSistema() Set g_Objects = Nothing: Set fuente = Nothing: Set indicador = Nothing End Sub
2) Rutina de creacin de objeto. A travs de esta rutina, vamos a crear dos objetos. Por un lado, el objeto fuente y por otro, el objeto indicador, que se habr calculado sobre los datos de la fuente definida anteriormente. Creamos los objetos en la funcin IniciarSistema. Esta funcin devuelve un valor lgico, que informa de si se han creado los objetos correctamente o no.
NOTA. A la hora de crear un objeto de tipo indicador, es necesario previamente haber creado un objeto de tipo fuente. Un indicador requiere de una fuente de datos previa para poder generar los resultados derivados de la funcin o funciones que definen a dicho indicador. Dim Simbolo As String El cdigo resultante es el siguiente: Private Sub BtnAceptar_Click()
Dim FechaIni$, FechaFin$, tipocompresion&, compresion& Dim i&, j&, Intentos%, nFila& Dim Salir As Boolean Dim HayDatos As Boolean If BtnAceptar.Caption = "ACEPTAR" Then BtnAceptar.Caption = "CANCELAR" DetenerSistema (1) Set g_Objects = New VCDS_DataSourceManager '-- Actualizamos las variables FechaIni = CDate(Cells(4, 2).Text): FechaFin = CDate(Cells(5, 2).Text) compresion = Cells(5, 4): Simbolo = Cells(3, 2).Text Select Case CboTipoComp.Text Case "Minutos" tipocompresion = VCDS_CT_Minutes Case "Dias" tipocompresion = VCDS_CT_Days Case "Semanas" tipocompresion = VCDS_CT_Weeks Case "Meses" tipocompresion = VCDS_CT_Months Case Else tipocompresion = VCDS_CT_Ticks End Select ControlDeRecepcion(1) = 1 Salir = False: Intentos = 1 While Not Salir On Error Resume Next Set fuente = g_Objects.NewDataSerie(Simbolo, tipocompresion, compresion, FechaIni, FechaFin) If Err.Number = 0 Then HayDatos = True: Salir = True Else HayDatos = False Intentos = Intentos + 1 If Intentos > 4 Then Salir = True End If Wend If HayDatos Then '-- Recorremos el historico nFila = 7 For j = 1 To fuente.Size bar = fuente.GetBarValues(j) 'Rellenamos campos Cells(nFila, 1) = bar.Date Cells(nFila, 2) = bar.Open Cells(nFila, 3) = bar.Close Cells(nFila, 4) = bar.High Cells(nFila, 5) = bar.Low Cells(nFila, 6) = bar.Volume nFila = nFila + 1 Next j Else MsgBox "No han podido cargarse datos del histrico del valor: " & Simbolo DetenerSistema (0) End If Else DetenerSistema (0) End If End Sub