Perfil de Volume
O script "Volume Profile" serve como uma ferramenta para analisar a distribuição do volume de negociação por níveis de preço ao longo de um período selecionado. Permite que traders e analistas quantitativos visualizem e examinem onde a principal atividade de negociação esteve concentrada em termos de níveis de preço.

Descrição da Funcionalidade
O script agrega dados de transações para formar um perfil que apresenta os volumes executados em vários níveis de preço. Esta informação pode ser representada num gráfico, ilustrando a densidade de negócios em diferentes pontos de preço.
Importância Prática
A análise do perfil de volume ajuda a identificar zonas chave de procura e oferta e pode ser usada para:
- Identificar níveis de suporte e resistência onde o instrumento encontra interesse significativo por parte dos participantes do mercado.
- Avaliar a força da tendência atual ou o seu potencial enfraquecimento, com base na alteração da distribuição de volume.
- Planear pontos de entrada e saída do mercado, tendo em conta níveis com máxima liquidez acumulada.
Aplicação em Negociação e Análise Quantitativa
- Negociação: O perfil de volume pode ser utilizado para desenvolver estratégias baseadas em análise de volume, fornecendo uma visão clara de onde ocorrem as principais operações de negociação.
- Análise Quantitativa: Dados sobre a distribuição de volume podem servir como entrada para modelos quantitativos que preveem a probabilidade de movimentos de preço com base no volume acumulado num nível.
Implementação do Script
O script "Volume Profile" executa os seguintes passos:
- Recolha de Dados: O script agrega dados de transações para o período especificado.
- Formação do Perfil: Com base nos dados recolhidos, o script forma um perfil de volume que reflete a atividade de negociação em cada nível de preço.
- Visualização: Os resultados do funcionamento do script são visualizados como gráfico ou histograma, onde cada barra corresponde a um nível de preço específico e ao seu volume de negociação.
A utilização do script "Volume Profile" na plataforma StockSharp permite uma análise abrangente do mercado, a construção de hipóteses de negociação fundamentadas e a melhoria da qualidade das decisões de negociação tomadas.
Código do Script em C#
namespace StockSharp.Algo.Analytics
{
/// <summary>
/// O script analítico, calcula a distribuição do volume por níveis de preço.
/// </summary>
public class PriceVolumeScript : 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;
}
// o script pode processar apenas 1 instrumento
var security = securities.First();
// obter o armazenamento de candles
var candleStorage = storage.GetCandleMessageStorage(security, dataType, drive, format);
// obter datas disponíveis para o período especificado
var dates = candleStorage.GetDates(from, to).ToArray();
if (dates.Length == 0)
{
logs.LogWarning("no data");
return Task.CompletedTask;
}
// agrupar candles pelo preço médio
var rows = candleStorage.Load(from, to)
.GroupBy(c => c.LowPrice + c.GetLength() / 2)
.ToDictionary(g => g.Key, g => g.Sum(c => c.TotalVolume));
// desenhar no gráfico
panel.CreateChart<decimal, decimal>()
.Append(security.ToStringId(), rows.Keys, rows.Values, DrawStyles.Histogram);
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, calcula a distribuição do volume por níveis de preço.
class price_volume_script(IAnalyticsScript):
def Run(
self,
logs,
panel,
securities,
from_date,
to_date,
storage,
drive,
format,
data_type,
cancellation_token
):
# Verificar se não existem instrumentos
if not securities:
logs.LogWarning("No instruments.")
return Task.CompletedTask
# O script pode processar apenas 1 instrumento
security = securities[0]
if data_type is None:
logs.LogWarning(f"Tipo de dados não suportado {data_type}.")
return Task.CompletedTask
message_type = data_type.MessageType
# Obter o armazenamento de candles
candle_storage = get_candle_storage(storage, security, data_type, drive, format)
# Obter datas disponíveis para o período especificado
dates = get_dates(candle_storage, from_date, to_date)
if len(dates) == 0:
logs.LogWarning("no data")
return Task.CompletedTask
# Agrupar candles pelo preço médio e somar os seus volumes
candles = load_range(candle_storage, message_type, from_date, to_date)
rows_dict = {}
for candle in candles:
# Calcular preço médio da candle
key = candle.LowPrice + get_length(candle) / 2
# Somar volumes para o mesmo nível de preço
rows_dict[key] = rows_dict.get(key, 0) + candle.TotalVolume
# Desenhar no gráfico
chart = create_chart(panel, float, float)
chart.Append(to_string_id(security), list(rows_dict.keys()), list(rows_dict.values()), DrawStyles.Histogram)
return Task.CompletedTask