Página 1 de 1

Ayuda sobre GetPositionProfit de Visual Chart....

Publicado: 20 Ago 2006 19:09
por elchavo
No me es posible establecer un valor para (EntryAgo). Solo admite un valor en el momento que se selecciona dicha función. ¿No es posible asignar este valor de EntryAgo a una variable y que éste pueda variar? Por ejemplo, para unas veces me interesará cual es la ganancia en el negocio actual (EntryAgo=0) y para otras cual ha sido en el anterior (EntryAgo=1) y para otras en el antepenúltimo (EntryAgo=2). Al activar parámetros de la función (Activar EntryAgo como parámetro para que pueda cambiar de valor) da error.

s2

Publicado: 20 Ago 2006 21:14
por Searchpoint
Buenas

Me parece que no se puede, pero no te lo digo seguro. Prueba con distintos tipos de variable: integer, long, double... si no te permite con ninguna podrias crear 3 variables y asignarle a cada una el valor de las 3 ultimas ops.


s2

Publicado: 23 Ago 2006 09:30
por DeveloperTrader
Hola elchavo:

He hecho un apaño que te puede resolver el problema. Se trata de una
clase que almacena los valores que le pasas y te los devuelve según
el índice que le pidas.

Su uso es muy fácil aunque su "puesta en marcha" sea un poco engorrosa la
primera vez.

Tienes que agregar al proyecto de VBA una clase a la que llamarás "clsValuesBag" y depués le pegas el siguiente código:


'// ***************************************************************

Option Explicit

Public MaxValues As Long
Dim ValuesBag As New Collection
Public Sub AddValue(ByVal pvarValue)

'// Añade valores a la colección
'// El último elemento que se añade es el primero accesible,
'// desplazando los existentes hacia abajo

If ValuesBag.Count Then
ValuesBag.Add pvarValue, , 1
Else
ValuesBag.Add pvarValue
End If

'// Si se alcanza el número máximo de valores permitido
'// se elimina el elemento más antiguo.

If ValuesBag.Count > MaxValues Then
ValuesBag.Remove ValuesBag.Count
End If

End Sub
Public Function GetValue(Optional plngIndex As Long)

'// Devuelve los valores de la colección.
'// Si no se le pasa ningún parámetro,
'// devuelve siempre el elemento añadido más reciente

If IsMissing(plngIndex) Then
GetValue = ValuesBag(1)
Else
If plngIndex < MaxValues Then
GetValue = ValuesBag(plngIndex + 1)
End If
End If

End Function
Private Sub Class_Initialize()

'// Por defecto el número máximo de valores
'// que almacena es de 300
MaxValues = 300

End Sub
Private Sub Class_Terminate()

Set ValuesBag = Nothing

End Sub

'// ***************************************************************


Hasta aquí el código de la clase.

Para su uso tienes que declarar en el módulo del proyecto, una variable con el nombre que quieras por ejemplo:

Dim myGetPositionProfit as new clsValuesBag

Después tienes que ir pasándole los valores que quieras almacenar de la siguiente forma:

myGetPositionProfit.AddValue "el valor que quieras añadir"

Esto debes hacerlo en el procedimiento OnCalculateBar del módulo de la estrategia.

Para luego saber el valor de X barras hacia atrás lo puedes hacer usando:

"el valor que quieras sabe" = myGetPositionProfit.GetValue( X )

Si no le pasas ningún valor, o le pasas 0, te devuelve siempre el último valor añadido.

El número máximo de valores que puede almacenar es por defecto 300 para ahorrar memoria, pero lo puedes modificar con la propiedad MaxValues.

Los valores se almacenan en variables tipo variant porque no se qué valores vasa usar, pero los puedes convertir a enteros, dobles, etc.

Espero que te sirva y entiendo que te pueda resultar un poco lioso, así que si tienes pegas, me comentas.

Un saludo

Publicado: 25 Ago 2006 12:33
por elchavo
Mil gracias Developer. Siento el trabajo que te has tomado para poner todo esto, pero yo lo decía para el entorno visual, no para visual basic.

Parece ser que el problema es que no lo tienen implementado los de VChart en el entorno visual y que no hay nada que hacer. Quería saber si alguno, en este entorno sencillo de programación, lo había conseguido de alguna forma.

Gracias otra vez.

Publicado: 25 Ago 2006 12:51
por DeveloperTrader
No problemo elchavo ;-)

Si te interesa programar y testear sistemas, te recomiendo EasyLanguaje de TradeStation.Es un lenguaje específico para el trading, no como VBA que es de propósito general. Es sencillo y directo y puedes programar casi cualquier sistema que se te ocurra.

Un saludo