Normalización del precio de cierre
El script "Closing Price Normalization" está diseñado para estandarizar los precios de cierre de instrumentos financieros, permitiendo comparar y analizar distintos activos en una escala unificada. Esto es especialmente útil al comparar instrumentos con distintos costes y volatilidad.

Descripción del funcionamiento del script
El script adapta los datos de precios de cierre escalándolos o transformándolos según el método de normalización seleccionado. El resultado es un conjunto de valores estandarizados que pueden usarse para comparación cuantitativa y análisis multiinstrumento.
Aplicación de la normalización
- Unificación de escala de precios: la normalización ayuda a llevar datos de varios instrumentos a una sola escala, simplificando la comparación visual y la evaluación analítica.
- Análisis de correlación: los datos estandarizados permiten identificar relaciones de correlación entre activos y formar carteras diversificadas.
- Creación de índices y modelos: los precios normalizados se usan para crear índices compuestos, modelos de valoración y otras investigaciones cuantitativas.
Metodología de normalización
La normalización puede incluir los siguientes métodos:
- Escalado: ajustar precios de cierre a un cierto rango de valores, por ejemplo de 0 a 1.
- Z-score: transformar precios de cierre usando Z-score, que indica cuántas desviaciones estándar se aleja un valor de la media.
- Logaritmización: aplicar transformación logarítmica para suavizar la dispersión de datos y reducir el impacto de valores extremos.
Implementación del script
El proceso de normalización normalmente incluye los siguientes pasos:
- Selección de normalización: determinar el método de normalización según los objetivos del análisis y las características de los datos.
- Procesamiento de datos: aplicar el método elegido a los precios de cierre de cada instrumento.
- Análisis de resultados: usar datos normalizados para análisis posterior y comparación de instrumentos.
El script "Closing Price Normalization" es una herramienta crucial para preparar datos para trading y análisis cuantitativo, permitiendo a traders y analistas comparar y evaluar con mayor precisión activos financieros dentro de distintas estrategias e investigaciones.
Código del script en C#
namespace StockSharp.Algo.Analytics
{
/// <summary>
/// Script analítico que normaliza precios de cierre de instrumentos y los muestra en el mismo gráfico.
/// </summary>
public class NormalizePriceScript : IAnalyticsScript
{
Task IAnalyticsScript.Run(ILogReceiver logs, IAnalyticsPanel panel, SecurityId[] securities, DateTime from, DateTime to, IStorageRegistry storage, IMarketDataDrive drive, StorageFormats format, DataType dataType, CancellationToken cancellationToken)
{
if (securities.Length == 0)
{
logs.LogWarning("No instruments.");
return Task.CompletedTask;
}
var chart = panel.CreateChart<DateTimeOffset, decimal>();
foreach (var security in securities)
{
// detener el cálculo si el usuario cancela la ejecución del script
if (cancellationToken.IsCancellationRequested)
break;
var series = new Dictionary<DateTimeOffset, decimal>();
// obtener almacenamiento de velas
var candleStorage = storage.GetCandleMessageStorage(security, dataType, drive, format);
decimal? firstClose = null;
foreach (var candle in candleStorage.Load(from, to))
{
firstClose ??= candle.ClosePrice;
// normalizar precios de cierre dividiendo por el primer cierre
series[candle.OpenTime] = candle.ClosePrice / firstClose.Value;
}
// dibujar series en el gráfico
chart.Append(security.ToStringId(), series.Keys, series.Values);
}
return Task.CompletedTask;
}
}
}
Código del script en Python
import clr
# Añadir referencias .NET
clr.AddReference("StockSharp.Messages")
clr.AddReference("StockSharp.Algo.Analytics")
clr.AddReference("Ecng.Drawing")
from Ecng.Drawing import DrawStyles
from System.Threading.Tasks import Task
from StockSharp.Algo.Analytics import IAnalyticsScript
from storage_extensions import *
from candle_extensions import *
from chart_extensions import *
from indicator_extensions import *
# Script analítico que normaliza precios de cierre de instrumentos y los muestra en el mismo gráfico.
class normalize_price_script(IAnalyticsScript):
def Run(self, logs, panel, securities, from_date, to_date, storage, drive, format, data_type, cancellation_token):
if not securities:
logs.LogWarning("No instruments.")
return Task.CompletedTask
chart = create_chart(panel, datetime, float)
if data_type is None:
logs.LogWarning(f"Tipo de datos no admitido {data_type}.")
return Task.CompletedTask
message_type = data_type.MessageType
for security in securities:
# detener el cálculo si el usuario cancela la ejecución del script
if cancellation_token.IsCancellationRequested:
break
series = {}
# obtener almacenamiento de velas
candle_storage = get_candle_storage(storage, security, data_type, drive, format)
first_close = None
for candle in load_range(candle_storage, message_type, from_date, to_date):
if first_close is None:
first_close = candle.ClosePrice
# normalizar precios de cierre dividiendo por el primer cierre
series[candle.OpenTime] = candle.ClosePrice / first_close
# dibujar series en el gráfico
chart.Append(to_string_id(security), list(series.keys()), list(series.values()))
return Task.CompletedTask