Página 1 de 1
Intentando emplear la COMTraderInterfacesLib
Publicado: 06 Abr 2013 12:59
por Speculari
Buenas a todos.
Estoy intentando programar esta librería de Visual Chart V a través de Excel. Evidentemente tengo cuenta en tiempo real con Visual Chart. He programado un botón ActiveX en Excel que al pulsarlo me indique el nombre de mi cuenta con el broker demo de Visual Chart. Este es el código en Visual Basic empleado con Excel:
Código: Seleccionar todo
Public ObjetoCuenta As COMTraderInterfacesLib.VCT_Account
Dim Cuenta As String
Private Sub BtnINICIAR_Click()
Set ObjetoCuenta = New COMTraderInterfacesLib.VCT_Account
Cuenta = ObjetoCuenta.Account
Range("B7") = Cuenta
End Sub
Private Sub BtnPARAR_Click()
End Sub
El Botón BtnPARAR todavía no está programado. Evidentemente tengo activada la referencia a la citada librería. El problema que tengo es que estando Visual Chart abierto y conectado a RealServer y a su broker Demo, cada vez que pulso el botón INICIAR se me abre un nuevo Visual Chart y al rato me salta un mensaje de error que reza: "Error 429: El componente ActiveX no puede crear el objeto".
Pero antes que este error, cuando ObjetoCuenta no lo creaba mediante Set New, me salía el error 91: Variable de objeto o bloque With no establecido. Con el empleo de Set New no me sale este error, sino el 429.
¿Cual es el error que estoy cometiendo?
Saludos y gracias de antemano,

Re: Intentando emplear la COMTraderInterfacesLib
Publicado: 06 Abr 2013 15:38
por SpeakerTrading
Hola Speculari
El objeto Account no puede crearse desde fuera de Visual Chart. Es un patrón común en el desarrollo de software cuando se quiere controlar la creación de los objetos de un tipo dado. Hacer un new no es válido, no puedes crear una cuenta. Debes obtenerla desde la propiedad Accounts de la interfaz IVCT_Trader. Es como Visual Chart ofrece acceso a las cuentas existentes.
Casi todo lo referente a operativa se canaliza a través del objeto VCT_Trader, que obligatoriamente tendrás que crear.
En mi blog puedes ver, entre otras muchas cosas, como usar la operativa. Te recomiento leer todas las entradas aunque, para tu pregunta:
http://speakertrading.wordpress.com/2012/12/28/operar/
http://speakertrading.wordpress.com/201 ... -operador/
Re: Intentando emplear la COMTraderInterfacesLib
Publicado: 06 Abr 2013 20:40
por Speculari
¡Estupendo SpeakerTrading! Muchas gracias; llevaba un par de días probando de todo. Al final el código que me funciona es este:
Código: Seleccionar todo
Public ClaseTrader As COMTraderInterfacesLib.VCT_Trader
Dim CuentaNombre As String
Private Sub BtnINICIAR_Click()
Set ClaseTrader = New COMTraderInterfacesLib.VCT_Trader
CuentaNombre = ClaseTrader.Accounts(1).Account
Range("B7") = CuentaNombre
End Sub
Private Sub BtnPARAR_Click()
End Sub
Gracias, de verdad.

Por cierto, estupendo blog; estaré atento al mismo y, probablemente, haré alguna pequeña donación.
Re: Intentando emplear la COMTraderInterfacesLib
Publicado: 07 Abr 2013 21:48
por SpeakerTrading
Speculari
¿Qué intentas hacer? Quizá pueda ayudarte
Re: Intentando emplear la COMTraderInterfacesLib
Publicado: 08 Abr 2013 14:11
por Speculari
Buenas. Tan sólo estoy intentando aprender como funciona la librería COMTraderInterfacesLib. Primero estoy probando cosas sencillas (ya ves el tipo de atranques que tengo). Sé programar en Basic y estoy aprendiendo Visual Basic, primero con las macros y controles ActiveX en Excel y luego me gustaría ponerme con Visual Basic 2010 (Visual Studio).
El caso es que se me escapan determinadas cosas. Por ejemplo, he escrito el código para que cuando pulse un botón en Excel (control ActiveX), se lance una orden a mercado. Este es el código:
Código: Seleccionar todo
Public WithEvents ClaseTrader As COMTraderInterfacesLib.VCT_Trader
Dim Orden1 As COMTraderInterfacesLib.VCT_Order
Dim Volumen As Double
Private Sub BotonLARGO_Click()
Volumen = 10000 * Range("E11")
Set Orden1 = New COMTraderInterfacesLib.VCT_Order
Orden1.Account = Range("C9")
Orden1.SymbolCode = Range("F2")
Orden1.OrderType = VCT_OT_Market
Orden1.OrderSide = VCT_OS_Buy
Orden1.Volume = Volumen
Orden1.Price = 0
Orden1.StopPrice = 0
ClaseTrader.SendOrderEx (Orden1)
BotonLARGO.Enabled = False
BotonCORTO.Enabled = False
BotonSALIRME.Enabled = True
End Sub
Pues bien, al pulsar el citado botón me sale un error que reza: Error 438 en tiempo de ejecución: El objeto no admite esta propiedad o método.
¿Qué puede ser?
Gracias

Re: Intentando emplear la COMTraderInterfacesLib
Publicado: 08 Abr 2013 16:21
por SpeakerTrading
Speculari
Creo que es por los paréntesis. Cuando se llama a una función no deben incluirse excepto si la instrucción es una asignación. Ej:
MaximoValor 4, 3 (es correcto)
variable = MaximoValor(4, 3) (es correcto)
MaximoValor(4, 3) (no es correcto)
Cambia la instrucción por:
ClaseTrader.SendOrderEx Orden1
Sin los paréntesis. Si tu intención es usar Visual Studio, te animo a que lo hagas ahora mismo en lugar de seguir peleándote con Excel, con el tiempo te alegrarás. El entorno de programación de Visual Studio es realmente bueno.
Re: Intentando emplear la COMTraderInterfacesLib
Publicado: 08 Abr 2013 17:10
por Speculari
He cambiado la orden, tal y como me indicas, y ahora me sale una ventanita con la cabecera de Visual Chart 5 que reza: Se encontró un argumento inadecuado. Para lanzar una orden a mercado, no hace falta establecer más propiedades del objeto VCT_Order que las reflejadas en el código mostrado ¿no?
¿Alguna sugerencia?
Gracias,

Re: Intentando emplear la COMTraderInterfacesLib
Publicado: 08 Abr 2013 17:32
por SpeakerTrading
Speculari, es posible que haya que asignar otras variables de la orden. Prueba a asignar la fecha de validez al día de mañana (Orden1.ValidDate = Date + 1). Si esto no es suficiente, asigna las mismas que se muestran en la entrada:
http://speakertrading.wordpress.com/2012/12/28/operar/
Te recomiendo crear una función (o varias) tipo: Function CrearOrden(byval compra as boolean, byval volumen as double) as VCT_Order para simplificar el código.