Intentando emplear la COMTraderInterfacesLib

Todo lo relacionado con este conocido software de trading made in Spain: estudios, indicadores, sistemas, plantillas, etc.
Responder
Speculari
Mensajes: 36
Registrado: 10 May 2012 10:57

Intentando emplear la COMTraderInterfacesLib

Mensaje 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, ;)
Avatar de Usuario
SpeakerTrading
Mensajes: 117
Registrado: 13 Dic 2012 21:26
Contactar:

Re: Intentando emplear la COMTraderInterfacesLib

Mensaje 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/
Speaker Trading
http://speakertrading.wordpress.com/" onclick="window.open(this.href);return false;
Speculari
Mensajes: 36
Registrado: 10 May 2012 10:57

Re: Intentando emplear la COMTraderInterfacesLib

Mensaje 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.
Avatar de Usuario
SpeakerTrading
Mensajes: 117
Registrado: 13 Dic 2012 21:26
Contactar:

Re: Intentando emplear la COMTraderInterfacesLib

Mensaje por SpeakerTrading »

Speculari

¿Qué intentas hacer? Quizá pueda ayudarte
Speaker Trading
http://speakertrading.wordpress.com/" onclick="window.open(this.href);return false;
Speculari
Mensajes: 36
Registrado: 10 May 2012 10:57

Re: Intentando emplear la COMTraderInterfacesLib

Mensaje 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 ;)

Avatar de Usuario
SpeakerTrading
Mensajes: 117
Registrado: 13 Dic 2012 21:26
Contactar:

Re: Intentando emplear la COMTraderInterfacesLib

Mensaje 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.
Speaker Trading
http://speakertrading.wordpress.com/" onclick="window.open(this.href);return false;
Speculari
Mensajes: 36
Registrado: 10 May 2012 10:57

Re: Intentando emplear la COMTraderInterfacesLib

Mensaje 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, ;)
Avatar de Usuario
SpeakerTrading
Mensajes: 117
Registrado: 13 Dic 2012 21:26
Contactar:

Re: Intentando emplear la COMTraderInterfacesLib

Mensaje 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.
Speaker Trading
http://speakertrading.wordpress.com/" onclick="window.open(this.href);return false;
Si te ha gustado este hilo del Foro, ¡compártelo en redes!


Responder

Volver a “Visual Chart”