Padrões de Velas Complexos
Visão Geral
A classe ComplexCandlePattern permite criar padrões de velas complexos combinando vários padrões simples (ICandlePattern) num só. Ao reconhecer um padrão complexo, cada padrão interno é verificado sequencialmente no seu segmento de velas. O padrão só é considerado reconhecido se todos os padrões internos corresponderem.
ICandlePattern
A interface base para todos os padrões de velas:
public interface ICandlePattern : IPersistable
{
// Nome do padrão
string Name { get; }
// Número de velas necessário para reconhecimento
int CandlesCount { get; }
// Verificar se o padrão é reconhecido nas velas fornecidas
bool Recognize(ReadOnlySpan<ICandleMessage> candles);
}
O registo CandlePatternRegistry contém um conjunto de padrões integrados: Flat, White, Black, Hammer, BullishEngulfing, MorningStar, ThreeWhiteSoldiers e outros.
ComplexCandlePattern
A classe ComplexCandlePattern implementa ICandlePattern e combina vários padrões internos:
public class ComplexCandlePattern : ICandlePattern
{
// Criar um padrão vazio
public ComplexCandlePattern() { }
// Criar um padrão com um nome e um conjunto de padrões internos
public ComplexCandlePattern(string name, IEnumerable<ICandlePattern> inner);
// Nome do padrão complexo
public string Name { get; }
// Padrões internos
public IEnumerable<ICandlePattern> Inner { get; }
// Número total de velas (soma de CandlesCount de todos os padrões internos)
public int CandlesCount { get; }
}
Quando Recognize é chamado, o array de velas é dividido em segmentos sequenciais de acordo com o CandlesCount de cada padrão interno. Se pelo menos um padrão interno não corresponder, o método devolve false.
Exemplo: Criar um Padrão Complexo
using StockSharp.Algo.Candles.Patterns;
// Criar um padrão complexo: primeiro uma vela bearish, depois bullish engulfing
var complex = new ComplexCandlePattern(
"Reversal Up",
new ICandlePattern[]
{
CandlePatternRegistry.Black, // 1 vela: bearish
CandlePatternRegistry.BullishEngulfing, // 2 velas: bullish engulfing
}
);
// São necessárias 3 velas para reconhecimento (1 + 2)
Console.WriteLine($"Candles necessárias: {complex.CandlesCount}"); // 3
ICandlePatternProvider
A interface ICandlePatternProvider gere o armazenamento e a pesquisa de padrões:
public interface ICandlePatternProvider
{
// Eventos para criação, substituição e eliminação de padrões
event Action<ICandlePattern> PatternCreated;
event Action<ICandlePattern, ICandlePattern> PatternReplaced;
event Action<ICandlePattern> PatternDeleted;
// Inicializar o armazenamento
ValueTask InitAsync(CancellationToken cancellationToken);
// Todos os padrões disponíveis
IEnumerable<ICandlePattern> Patterns { get; }
// Encontrar um padrão por nome
bool TryFind(string name, out ICandlePattern pattern);
// Remover um padrão
bool Remove(ICandlePattern pattern);
// Guardar (criar ou substituir) um padrão
void Save(ICandlePattern pattern);
}
Implementações
InMemoryCandlePatternProvider-- armazena padrões em memória. Na inicialização, carrega todos os padrões integrados deCandlePatternRegistry.All.CandlePatternFileStorage-- guarda padrões personalizados num ficheiro (JSON). Os padrões integrados deInMemoryCandlePatternProvidertambém estão disponíveis através deste fornecedor.
Exemplo: Trabalhar com ICandlePatternProvider
using StockSharp.Algo.Candles.Patterns;
using StockSharp.Configuration;
// Criar armazenamento de padrões baseado em ficheiro
var executor = new ChannelExecutor();
var provider = new CandlePatternFileStorage(
Paths.FileSystem,
Paths.CandlePatternsFile,
executor
);
// Inicializar (carrega padrões integrados + personalizados a partir do ficheiro)
await provider.InitAsync(CancellationToken.None);
// Subscrever o evento de criação de novo padrão
provider.PatternCreated += pattern =>
{
Console.WriteLine($"Padrão criado: {pattern.Name}");
};
// Criar e guardar um padrão complexo
var myPattern = new ComplexCandlePattern(
"Meu padrão",
new ICandlePattern[]
{
CandlePatternRegistry.Hammer,
CandlePatternRegistry.White,
}
);
provider.Save(myPattern);
// Encontrar um padrão por nome
if (provider.TryFind("Meu padrão", out var found))
{
Console.WriteLine($"Encontrado: {found.Name}, velas: {found.CandlesCount}");
}
ExpressionCandlePattern
Para criar padrões com base em fórmulas, é utilizado ExpressionCandlePattern. Cada vela no padrão é descrita por uma expressão CandleExpressionCondition, com as seguintes variáveis disponíveis:
| Variável | Descrição |
|---|---|
O |
Preço de abertura |
H |
Preço máximo |
L |
Preço mínimo |
C |
Preço de fecho |
V |
Volume |
B |
Corpo da vela |
LEN |
Comprimento da vela |
BS |
Sombra inferior |
TS |
Sombra superior |
O prefixo p refere-se à vela anterior (pO, pC), pp -- a duas velas atrás, e assim sucessivamente.
Todos os padrões integrados em CandlePatternRegistry são construídos utilizando ExpressionCandlePattern.