Scripts de análisis

S# implementa un subsistema de scripts de análisis que permite realizar un análisis arbitrario de datos de mercado con visualización de resultados. Las clases se encuentran en el espacio de nombres StockSharp.Algo.Analytics.

IAnalyticsScript — Interfaz principal

La interfaz IAnalyticsScript define un único método:

Task Run(
    ILogReceiver logs,
    IAnalyticsPanel panel,
    SecurityId[] securities,
    DateTime from,
    DateTime to,
    IStorageRegistry storage,
    IMarketDataDrive drive,
    StorageFormats format,
    DataType dataType,
    CancellationToken cancellationToken);

Parámetros:

  • logs — receptor de logs para mostrar mensajes de diagnóstico.
  • panel — panel para mostrar los resultados del análisis.
  • securities — array de instrumentos a analizar.
  • from / to — rango de tiempo.
  • storage — registro de almacenamiento de datos de mercado.
  • drive — fuente de datos.
  • format — formato de almacenamiento de datos.
  • dataType — tipo de datos a analizar.
  • cancellationToken — token de cancelación.

IAnalyticsPanel — Panel de resultados

La interfaz IAnalyticsPanel proporciona métodos para crear diversas visualizaciones:

  • CreateGrid(params string[] columns) — crea una tabla IAnalyticsGrid con las columnas especificadas.
  • CreateChart<X, Y>() — crea un gráfico bidimensional IAnalyticsChart.
  • CreateChart<X, Y, Z>() — crea un gráfico tridimensional IAnalyticsChart.
  • DrawHeatmap(string[] xTitles, string[] yTitles, double[,] data) — dibuja un mapa de calor.
  • Draw3D(string[] xTitles, string[] yTitles, data, xTitle, yTitle, zTitle) — dibuja una visualización 3D.

IAnalyticsChart — Gráficos

La interfaz IAnalyticsChart proporciona un método para agregar series de datos:

void Append(string title, IEnumerable<X> xValues, IEnumerable<Y> yValues,
    DrawStyles style, Color? color = null);

Estilos de dibujo disponibles (DrawStyles):

  • Line — gráfico de líneas.
  • DashedLine — línea discontinua.
  • Histogram — histograma.
  • Bubble — gráfico de burbujas.

IAnalyticsGrid — Tablas

La interfaz IAnalyticsGrid permite mostrar datos tabulares:

  • SetSort(string column, bool ascending) — establece el orden por columna.
  • SetRow(params object[] values) — agrega una fila de datos.

Scripts integrados

El paquete StockSharp.Algo.Analytics.CSharp incluye scripts ya preparados:

  • IndicatorScript — calcula y visualiza indicadores en un gráfico.
  • ChartDrawScript — muestra la construcción de varios tipos de gráficos.
  • PriceVolumeScript — analiza la distribución del volumen por niveles de precio.

Ejemplo: script de análisis personalizado

A continuación se muestra un script de ejemplo que carga velas para una lista de instrumentos y muestra los precios de cierre en un gráfico de líneas:

public class MyAnalyticsScript : IAnalyticsScript
{
    public async Task Run(ILogReceiver logs, IAnalyticsPanel panel,
        SecurityId[] securities, DateTime from, DateTime to,
        IStorageRegistry storage, IMarketDataDrive drive,
        StorageFormats format, DataType dataType,
        CancellationToken cancellationToken)
    {
        // crear un gráfico bidimensional
        var chart = panel.CreateChart<DateTime, decimal>();

        foreach (var secId in securities)
        {
            // obtener el almacenamiento de velas
            var candleStorage = storage.GetCandleMessageStorage(
                secId, dataType, drive, format);

            // cargar datos del periodo
            var candles = await candleStorage
                .LoadAsync(from, to)
                .WithCancellation(cancellationToken)
                .ToArrayAsync(cancellationToken);

            if (candles.Length == 0)
            {
                logs.AddWarningLog($"No hay datos para {secId}");
                continue;
            }

            // añadir una serie al gráfico
            chart.Append(secId.ToString(),
                candles.Select(c => c.OpenTime.UtcDateTime),
                candles.Select(c => c.ClosePrice),
                DrawStyles.Line);

            logs.AddInfoLog($"{secId}: {candles.Length} velas cargadas");
        }
    }
}

Ejemplo: tabla de volumen

public class VolumeTableScript : IAnalyticsScript
{
    public async Task Run(ILogReceiver logs, IAnalyticsPanel panel,
        SecurityId[] securities, DateTime from, DateTime to,
        IStorageRegistry storage, IMarketDataDrive drive,
        StorageFormats format, DataType dataType,
        CancellationToken cancellationToken)
    {
        var grid = panel.CreateGrid("Instrument", "Velas totales",
            "Volumen total", "Volumen medio");
        grid.SetSort("Volumen total", false);

        foreach (var secId in securities)
        {
            var candleStorage = storage.GetCandleMessageStorage(
                secId, dataType, drive, format);

            var candles = await candleStorage
                .LoadAsync(from, to)
                .WithCancellation(cancellationToken)
                .ToArrayAsync(cancellationToken);

            if (candles.Length == 0)
                continue;

            var totalVolume = candles.Sum(c => c.TotalVolume);
            var avgVolume = totalVolume / candles.Length;

            grid.SetRow(secId.ToString(), candles.Length,
                totalVolume, avgVolume);
        }
    }
}

Véase también

Indicadores

Almacenamiento de datos