Estratégia Bollinger Clássica
Visão Geral
BollingerStrategyClassicStrategy é uma estratégia baseada no indicador BollingerBands. Abre posições quando o preço atinge o limite superior ou inferior das Bandas de Bollinger.
Componentes Principais
A estratégia herda de Strategy e utiliza parâmetros para configuração:
public class BollingerStrategyClassicStrategy : Strategy
{
private readonly StrategyParam<int> _bollingerLength;
private readonly StrategyParam<decimal> _bollingerDeviation;
private readonly StrategyParam<DataType> _candleType;
private BollingerBands _bollingerBands;
}
Parâmetros da Estratégia
A estratégia permite personalizar os seguintes parâmetros:
- BollingerLength - período do indicador Bandas de Bollinger (predefinição 20)
- BollingerDeviation - multiplicador do desvio padrão (predefinição 2.0)
- CandleType - tipo de vela com que trabalhar (predefinição 5 minutos)
Todos os parâmetros estão disponíveis para otimização com intervalos de valores especificados.
Inicialização da Estratégia
No método OnStarted2, o indicador Bandas de Bollinger é criado, a subscrição de velas é configurada e a visualização é preparada:
protected override void OnStarted2(DateTime time)
{
base.OnStarted2(time);
// Criar indicador
_bollingerBands = new BollingerBands
{
Length = BollingerLength,
Width = BollingerDeviation
};
// Criar subscrição e associar indicador
var subscription = SubscribeCandles(CandleType);
subscription
.BindEx(_bollingerBands, ProcessCandle)
.Start();
// Configurar visualização no gráfico
var area = CreateChartArea();
if (area != null)
{
DrawCandles(area, subscription);
DrawIndicator(area, _bollingerBands, System.Drawing.Color.Purple);
DrawOwnTrades(area);
}
}
Processamento de Velas
O método ProcessCandle é chamado para cada vela concluída e implementa a lógica de negociação:
private void ProcessCandle(ICandleMessage candle, IIndicatorValue bollingerValue)
{
// Ignorar velas incompletas
if (candle.State != CandleStates.Finished)
return;
// Verificar se a estratégia está pronta para negociar
if (!IsFormedAndOnlineAndAllowTrading())
return;
var typed = (BollingerBandsValue)bollingerValue;
// Lógica de negociação:
// Vender quando o preço atinge ou excede a banda superior
if (candle.ClosePrice >= typed.UpBand && Position >= 0)
{
SellMarket(Volume + Math.Abs(Position));
}
// Comprar quando o preço atinge ou fica abaixo da banda inferior
else if (candle.ClosePrice <= typed.LowBand && Position <= 0)
{
BuyMarket(Volume + Math.Abs(Position));
}
}
Lógica de Negociação
- Sinal de venda: o preço de fecho da vela atinge ou excede a Banda de Bollinger superior quando não existe posição curta
- Sinal de compra: o preço de fecho da vela atinge ou fica abaixo da Banda de Bollinger inferior quando não existe posição longa
- O volume da posição aumenta pelo valor da posição atual em cada nova transação
Funcionalidades
- A estratégia determina automaticamente os instrumentos com que trabalhar através do método
GetWorkingSecurities() - A estratégia trabalha apenas com velas concluídas
- O indicador e as transações são visualizados num gráfico quando existe uma área gráfica disponível
- A otimização de parâmetros é suportada para encontrar definições ideais da estratégia