Normalização do Preço de Fecho
O script "Closing Price Normalization" foi concebido para normalizar os preços de fecho de instrumentos financeiros, permitindo a comparação e análise de diferentes ativos numa escala unificada. Isto é particularmente útil ao comparar instrumentos com custos e volatilidade variados.

Descrição do Funcionamento do Script
O script adapta os dados de preços de fecho escalando-os ou transformando-os de acordo com o método de normalização selecionado. O resultado é um conjunto de valores normalizados que pode ser usado para comparação quantitativa e análise multi-instrumento.
Aplicação da Normalização
- Unificação da Escala de Preços: A normalização ajuda a colocar dados de vários instrumentos numa única escala, simplificando a comparação visual e a avaliação analítica.
- Análise de Correlação: Dados normalizados permitem identificar relações de correlação entre ativos e formar carteiras diversificadas.
- Criação de Índices e Modelos: Preços normalizados são usados para criar índices compostos, modelos de precificação e outros estudos quantitativos.
Metodologia de Normalização
A normalização pode incluir os seguintes métodos:
- Escalonamento: Ajustar preços de fecho a um determinado intervalo de valores, como de 0 a 1.
- Z-score: Transformar preços de fecho usando o Z-score, que indica quantos desvios-padrão um valor se afasta da média.
- Logaritmização: Aplicar transformação logarítmica para suavizar a dispersão dos dados e reduzir o impacto de valores extremos.
Implementação do Script
O processo de normalização inclui normalmente os seguintes passos:
- Seleção da Normalização: Determinar o método de normalização com base nos objetivos da análise e nas características dos dados.
- Processamento de Dados: Aplicar o método de normalização escolhido aos preços de fecho de cada instrumento.
- Análise dos Resultados: Usar dados normalizados para posterior análise e comparação de instrumentos.
O script "Closing Price Normalization" é uma ferramenta crucial para preparar dados para negociação e análise quantitativa, permitindo que traders e analistas comparem e avaliem ativos financeiros com maior precisão em várias estratégias e estudos.
Código do Script em C#
namespace StockSharp.Algo.Analytics
{
/// <summary>
/// O script analítico, normaliza os preços de fecho das securities e mostra-os no mesmo 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)
{
// parar o cálculo se o utilizador cancelar a execução do script
if (cancellationToken.IsCancellationRequested)
break;
var series = new Dictionary<DateTimeOffset, decimal>();
// obter o armazenamento de candles
var candleStorage = storage.GetCandleMessageStorage(security, dataType, drive, format);
decimal? firstClose = null;
foreach (var candle in candleStorage.Load(from, to))
{
firstClose ??= candle.ClosePrice;
// normalizar preços de fecho dividindo pelo primeiro fecho
series[candle.OpenTime] = candle.ClosePrice / firstClose.Value;
}
// desenhar séries no gráfico
chart.Append(security.ToStringId(), series.Keys, series.Values);
}
return Task.CompletedTask;
}
}
}
Código do Script em Python
import clr
# Adicionar referências .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 *
# O script analítico, normaliza os preços de fecho das securities e mostra-os no mesmo 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 dados não suportado {data_type}.")
return Task.CompletedTask
message_type = data_type.MessageType
for security in securities:
# parar o cálculo se o utilizador cancelar a execução do script
if cancellation_token.IsCancellationRequested:
break
series = {}
# obter o armazenamento de candles
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 preços de fecho dividindo pelo primeiro fecho
series[candle.OpenTime] = candle.ClosePrice / first_close
# desenhar séries no gráfico
chart.Append(to_string_id(security), list(series.keys()), list(series.values()))
return Task.CompletedTask