Trading Tools: Extracción de estadísticas de sistemas.

Uno de los aspectos fundamentales del desarrollo de estrategias en VisualChart recaba en la extracción de los resultados estadísticos de los negocios de dichos sistemas.

Muchos usuarios tienden a exportar estos resultados a otras plataformas, como por ejemplo Excel, con la finalidad de poder realizar estudios derivados del análisis estadístico.

Como hemos visto en anteriores apartados, podemos utilizar las nuevas herramientas COM para extraer fuentes de datos desde VisualChart y utilizarlas desde la interfaz cliente.

Esto mismo también puede hacerse con la información relativa a los sistemas. Por tanto, partiendo de esta idea, podemos agilizar el proceso de extracción de datos estadístico del qué hablábamos antes.

En el siguiente enlace, se accede a una hoja Excel que nos va a permitir acceder a las estadísticas de sistemas de manera directa, sin necesidad de previamente tener que abrir un gráfico y cargar el sistema:

Estadística Sistemas



Cómo utilizar la hoja de Estadísticas

Para poder trabajar con ésta herramienta, necesitamos previamente tener abierto VisualChart, pues lo vamos a utilizar como proveedor de datos.
Además, será necesario ejecutar la hoja Excel con privilegios de administrador, pues en otro caso no nos va a permitir la conexión cliente/servidor que se pone en marcha entre VisualChart y Excel.
Puesto que vamos a acceder a un histórico de fuentes, deberemos asegurarnos de que la fuente elegida ha sido previamente registrada en nuestro equipo. De no ser así, deberemos al menos una vez abrir un gráfico de dicha fuente para que quede registrada.
Por último y como es lógico, los sistemas a los que vayamos a acceder deberán estar compilados en nuestro equipo.

Los parámetros que debemos especificar a la hoja Excel antes de poner en marcha la extracción de estadísticas son los siguientes:

1. Código del producto: Aquí especificamos el código VisualChart del producto a analizar. Este código tiene la estructura 010 + codigo mercado + codigo producto (Telefónica= 010 + 060 + TEF.MC = 010060TEF.MC)

2. FechaInicial/FechaFinal: Indicamos las fechas inicio y fin del histórico que queramos analizar.

3. TipoCompresión/Compresión: Especificamos el tipo de barra que vamos a usar: 5 minutos, 1 día, 2 minutos, etc...

4. Codigo del sistema: Debemos conocer el código del sistema y escribirlo aquí. Por ejemplo, el sistema Close difference system tiene como código CDSYS, por tanto, CDSYS es lo que debemos especificar en este campo. Podemos ver el código de cada sistema adjunto al lado de su nombre en la ventana de sistemas:


5. Compresion2Type/Compresion3Type: Estos campos se utilizan para casos especiales donde un sistema requiere de un segundo o un tercer gráfico externo. En la mayoría de los sistemas no se usa. En posteriores entradas ahondaremos más en este tema.

Especificados todos los parámetros, sólo queda pulsar el botón OK para que se inicie el proceso de extracción de estadísticas. Este proceso puede durar unos segundos.

Aclaraciones
Los parámetros propios del sistema no se especifican desde la hoja Excel. La aplicación tomará los parámetros predeterminados del sistema.
La hoja Excel sólo muestra un número limitado de información estadística. Sin embargo, es posible acceder a cualquier campo de los que aparecen en el listado de estadísticas de Visual Chart.

Anotaciones relativas a la programación

Para poder haber llevado a cabo esta aplicación, nos hemos apoyado una vez más en la clase VCDataSourceLib, creando un objeto del tipo VCDS_DataSourceManager al que hemos llamado g_Objects.

Los tres pasos a dar para la extracción de estadísticas son los siguientes:

1. Creación de la fuente de datos
Creamos un objeto de tipo VDCS_DataSerie y lo creamos usando los datos aportados por el usuario previamente:

    Set g_Objects = New VCDS_DataSourceManager
    '-- Actualizamos las variables
    FechaIni = CDate(Cells(4, 2).Text): FechaFin = CDate(Cells(5, 2).Text)
    Simbolo = Cells(3, 2).Text
    compresion = Range("D5")
    '--
    Set fuente = Nothing
    On Error Resume Next
    Set fuente = g_Objects.NewDataSerie(Simbolo, GetCompresion(CboTipoComp.Text), compresion, FechaIni, FechaFin)
    If Err.Number = 0 And fuente.Size > 0 Then
        Exito = True
    Else
        Exito = False
    End If

2. Creación del sistema.
Si la fuente se ha generado, creamos un objeto del tipoVDCS_System  al que le pasamos el código de sistema indicado por el usuario:

    If Exito Then
        Application.StatusBar = "La fuente: " & Simbolo & " se ha cargado."
        '---
        Exito = False
        CodigoSis = Range("Sistema").Text
        'Crear sistema
        On Error Resume Next
        Set Sistema = g_Objects.NewSystem(CodigoSis, fuente)
        '-- Si no ha habido errores activamos los eventos del sistema
        If Err.Number = 0 And Sistema.Size > 0 Then
            Exito = True
        Else
            Exito = False
            Application.StatusBar = "Sistema no cargado."
        End If
    End If

Cuando realizamos la llamada al método NewSystem, si no especificamos ningún parámetro para el sistema, entonces la clase interpreta que vamos a usar los parámetros predeterminados del sistema. El programador puede variar esto y añadir los parámetros propios del sistema para que el usuario los cambie desde la propia hoja Excel.

3. Datos estadísticos.
Si el sistema se ha creado con éxito, ya sólo queda acceder a los datos estadísticos. El objeto de tipo VCDS_System tiene una propieda llamada GetStatisticVariableValue. Accediendo a ésta propiedad, podemos extraer cualquier campo estadístico del listado de estadísticas:

    'Ganancia acumulada
    ValorAux = Sistema.GetStatisticVariableValue(VC_SV_NetProfit, i)
    If Err.Number = 0 And ValorAux <> 2147483647 Then Cells(nfila, 5) = ValorAux
    'Drawdown
    ValorAux = Sistema.GetStatisticVariableValue(VC_SV_Drawdown, i)
    If Err.Number = 0 And ValorAux <> 2147483647 Then Cells(nfila, 6) = ValorAux
    'Peor serie de pérdidas
    ValorAux = Sistema.GetStatisticVariableValue(VC_SV_WorstSerieOfLosses, i)
    If Err.Number = 0 And ValorAux <> 2147483647 Then Cells(nfila, 7) = ValorAux
    'PRR
    ValorAux = Sistema.GetStatisticVariableValue(VC_SV_Adjusted_ProfitFactor, i)
    If Err.Number = 0 And ValorAux <> 2147483647 Then Cells(nfila, 8) = Round(ValorAux, 3)
    'Fiabilidad
    ValorAux = Sistema.GetStatisticVariableValue(VC_SV_Fiability, i)
    If Err.Number = 0 And ValorAux <> 2147483647 Then Cells(nfila, 9) = Round(ValorAux, 3)
    'Ratio POS/NEG
    ValorAux = Sistema.GetStatisticVariableValue(VC_SV_WinnersLosersRatio, i)
    If Err.Number = 0 And ValorAux <> 2147483647 Then Cells(nfila, 10) = Round(ValorAux, 3)

Cabe destacar que previamente a la extracción de estadísticas, hay que configurar cómo van a ser los resultados que queremos obtener: si en puntos o en porcentaje, recogidos por días o por negocios, etc... Para ello, llamamos al método SetCalculateOptions:

        If Sistema.Size > 0 Then
            '-- Establecemos los params de la ESTADISTICA
            Sistema.SetCalculateOptions VCDS_SMU_Points, VCDS_SC_Trades, 1, FechaIni, FechaFin

Comentarios

Entradas populares de este blog

Como consultar el GAP % de un conjunto de valores

MANEJO DE PLANTILLAS. Eliminar plantilla de un gráfico activa

Bollinger Volatility Oscillator N