Estratégia Bollinger com Foco na Banda Inferior
Visão Geral
BollingerStrategyLowBandStrategy é uma estratégia baseada no indicador BollingerBands. Abre uma posição curta quando o preço atinge o limite inferior das Bandas de Bollinger e fecha-a quando o preço atinge a linha média.
Componentes Principais
A estratégia herda de Strategy e utiliza parâmetros para configuração:
public class BollingerStrategyLowBandStrategy : 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 toca na banda inferior (apenas quando não existe posição)
if (candle.ClosePrice <= typed.LowBand && Position == 0)
{
SellMarket(Volume);
}
// Comprar para fechar a posição quando o preço atinge a linha média (apenas com uma posição curta)
else if (candle.ClosePrice >= typed.MiddleBand && Position < 0)
{
BuyMarket(Math.Abs(Position));
}
}
Lógica de Negociação
- Sinal de venda: o preço de fecho da vela atinge ou fica abaixo da Banda de Bollinger inferior quando não existe posição aberta
- Sinal de compra (fecho de posição curta): o preço de fecho da vela atinge ou excede a linha média da Banda de Bollinger quando existe uma posição curta
- O volume da posição é fixo na abertura e igual a toda a posição atual no fecho
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
- A estratégia utiliza apenas a banda inferior e a linha média do indicador Bandas de Bollinger
- Apenas são abertas posições curtas
- 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