Estratégia Stairs Contra a Tendência
Visão Geral
StairsCountertrendStrategy é uma estratégia de negociação contra a tendência que abre posições contra uma tendência estabelecida de um comprimento específico.
Componentes Principais
public class StairsCountertrendStrategy : Strategy
{
private readonly StrategyParam<int> _length;
private readonly StrategyParam<DataType> _candleType;
private int _bullLength;
private int _bearLength;
}
Parâmetros da Estratégia
A estratégia permite personalizar os seguintes parâmetros:
- Length - número de velas consecutivas numa direção para identificar uma tendência (predefinição 3)
- CandleType - tipo de vela com que trabalhar (predefinição 5 minutos)
O parâmetro Length está disponível para otimização no intervalo de 2 a 10 com passo de 1.
Inicialização da Estratégia
No método OnStarted2, os contadores são reiniciados, a subscrição de velas é criada e a visualização é preparada:
protected override void OnStarted2(DateTime time)
{
base.OnStarted2(time);
// Reiniciar contadores
_bullLength = 0;
_bearLength = 0;
// Criar subscrição
var subscription = SubscribeCandles(CandleType);
subscription
.Bind(ProcessCandle)
.Start();
// Configurar visualização no gráfico
var area = CreateChartArea();
if (area != null)
{
DrawCandles(area, subscription);
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)
{
// Verificar se a vela está concluída
if (candle.State != CandleStates.Finished)
return;
// Verificar se a estratégia está pronta para negociar
if (!IsFormedAndOnlineAndAllowTrading())
return;
// Atualizar contadores com base na direção da vela
if (candle.OpenPrice < candle.ClosePrice)
{
// Vela bullish
_bullLength++;
_bearLength = 0;
}
else if (candle.OpenPrice > candle.ClosePrice)
{
// Vela bearish
_bullLength = 0;
_bearLength++;
}
// Estratégia contra a tendência:
// Vender após Length velas bullish consecutivas
if (_bullLength >= Length && Position >= 0)
{
SellMarket(Volume + Math.Abs(Position));
}
// Comprar após Length velas bearish consecutivas
else if (_bearLength >= Length && Position <= 0)
{
BuyMarket(Volume + Math.Abs(Position));
}
}
Lógica de Negociação
- Sinal de venda:
Lengthvelas bullish consecutivas (preço de fecho acima do preço de abertura) quando não existe posição curta - Sinal de compra:
Lengthvelas bearish consecutivas (preço de fecho abaixo do preço de abertura) quando não existe posição longa - O volume da posição aumenta pelo valor da posição atual a 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
- A estratégia utiliza ordens de mercado para entrada em posição
- A estratégia aplica uma abordagem contra a tendência, abrindo posições contra a tendência estabelecida
- Os contadores de velas são reiniciados quando aparece uma vela na direção oposta
- Velas e transações são visualizadas no gráfico quando existe uma área gráfica disponível
- A otimização do comprimento da sequência é suportada para encontrar definições ideais da estratégia