Esta é uma estratégia de negociação quantitativa longa/curta baseada na teoria do breakout. Ela calcula o preço de fechamento mais alto nos últimos 100 dias de negociação e determina se um breakout acontece com base em se o último preço de fechamento excede esse nível. Se um breakout for detectado, um sinal longo é acionado. Depois de entrar no longo, a posição será fechada por um stop loss após 25 barras.
A lógica central desta estratégia aproveita a teoria do "breakout" na análise técnica. A teoria do "breakout" acredita que quando o preço atravessa o nível mais alto ou mais baixo recente durante um período de tempo, ele sinaliza uma reversão e o mercado pode iniciar uma nova tendência de alta ou baixa.
Especificamente, esta estratégia usa o Pine Script função incorporadata.highest()
Para calcular o maior fechamento nos últimos 100 bares. Em seguida, compara se o preço de fechamento do bar atual é superior a esse nível.
Uma vez que entra numa posição longa, a estratégia define uma condição de stop loss para fechar a posição.ta.barssince()
para contar o número de barras decorridas desde a entrada longa, forçará a fechar a posição após 25 barras.
A lógica de entrada pode ser resumida como:
A maior vantagem desta estratégia é capturar pontos de reversão de preço com taxa de sucesso relativamente alta de negociações seguindo tendências.
As vantagens concretas são:
1. Seguir tendências, maior taxa de sucesso
A teoria do breakout acredita que depois que o preço excede um nível chave, ele pode iniciar uma nova tendência.
2. Risco controlado, com stop loss
A estratégia define uma saída forçada de stop loss após 25 bares para perda máxima de uma única negociação, evitando grandes perdas.
3. Adequado para a detenção a médio e longo prazo
O período de retenção padrão é de 25 bares, cerca de 1 mês. Esta frequência é adequada para estratégias de médio a longo prazo, não é muito curta para whipsaws e não é muito longa para aumentar o risco.
4. Poucos parâmetros, fácil de otimizar
Os parâmetros que podem ser ajustados são principalmente dois: com poucos parâmetros, é fácil testar e encontrar parâmetros ótimos para a negociação real.
5. Transferível entre diferentes produtos
Esta estratégia não responde a indicadores peculiares de determinados produtos.A sua lógica aplica-se a acções, forex, commodities, criptomoedas, etc.
Embora esta estratégia tenha algumas vantagens, há também alguns riscos ao implementá-la na negociação real, principalmente:
1. Risco de posições perdedoras
A estratégia não possui stop loss para seguir posições lucrativas. Se a tendência de preço não prosseguir como esperado, ou a quebra for falsa, a saída forçada no ponto de stop loss pré-definido pode levar a grandes perdas. Este é o maior risco.
2. Pode ser necessário ajustar os parâmetros
Os parâmetros padrão podem não ser ideais. Eles precisam ser otimizados durante a negociação ao vivo para encontrar o melhor ajuste para regimes específicos de produto e mercado. Isso adiciona trabalho extra.
3. Correlação do desempenho com os mercados
A estratégia depende demais de tendências de preços persistentes. Não funciona bem durante regimes de intervalo. Se encontrar mercados de fenda, a saída forçada ocorrerá frequentemente, levando a ganhos / perdas instáveis.
A fim de tornar esta estratégia mais robusta e rentável para a sua aplicação efectiva, podem ser realizadas algumas melhorias a partir dos seguintes aspectos:
1. Adicionar o mecanismo de stop loss
Adicione a lógica de stop loss para seguir posições lucrativas, atualizando dinamicamente o ponto de stop loss com base em lucros flutuantes.
2. Parâmetros de adaptação baseados nos mercados
Faça com que parâmetros como o período de ruptura e o período de retenção sejam adaptáveis com base na força do mercado, quantificados usando métricas como ATR. Isso pode ajustar dinamicamente os parâmetros.
**3. Combinar filtros de tendência **
Melhor filtragem de tendências pouco claras quando se aplica uma estratégia, através de uma análise prévia das tendências, seja discretionária ou quantitativa.
4. Teste em diferentes produtos e intervalos
O teste dos parâmetros e regras otimizados em diferentes produtos (por exemplo, índices, commodities, forex, criptomoedas) e intervalos (por exemplo, barras diárias de 60m) tornará esta estratégia mais robusta e amplamente aplicável.
Esta estratégia de reversão de breakout com stop loss é fácil de implementar com regras claras sobre identificação de tendências e gestão de posição. Analisamos sua força e riscos, fornecemos sugestões para melhorar sua lucratividade e aplicabilidade. Com otimização adicional, pode se tornar uma sólida estratégia de negociação quantitativa.
/*backtest start: 2023-01-29 00:00:00 end: 2024-02-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © All_Verklempt //@version=5 strategy("Breakout Strategy", overlay=true) // Input variable for breakout period breakoutPeriod = input.int(100, title="Breakout Period", minval=1) // Calculate the highest close of the past breakout period highestClose = ta.highest(close, breakoutPeriod) // Input variables for start and end dates startYear = input.int(2022, title="Start Year", minval=1900) startMonth = input.int(1, title="Start Month", minval=1, maxval=12) startDay = input.int(1, title="Start Day", minval=1, maxval=31) endYear = input.int(2023, title="End Year", minval=1900) endMonth = input.int(12, title="End Month", minval=1, maxval=12) endDay = input.int(31, title="End Day", minval=1, maxval=31) // Convert start and end dates to timestamp startDate = timestamp(startYear, startMonth, startDay, 00, 00) endDate = timestamp(endYear, endMonth, endDay, 23, 59) // Entry condition: Breakout and higher close within the specified date range enterLong = close > highestClose[1] and close > close[1] // Exit condition: Close the long position after twenty-five bars exitLong = ta.barssince(enterLong) >= 25 // Strategy logic if (enterLong) strategy.entry("Long", strategy.long) if (exitLong) strategy.close("Long")