Estratégia de crossover SMA longo e curto combinada com controle de retração de pico e terminação automática

SMA
Data de criação: 2024-07-29 14:16:58 última modificação: 2024-07-29 14:16:58
cópia: 0 Cliques: 555
1
focar em
1617
Seguidores

Estratégia de crossover SMA longo e curto combinada com controle de retração de pico e terminação automática

Visão geral

A estratégia é um sistema de negociação multi-marco que combina o sinal de cruzamento de uma média móvel simples (SMA) e o controle de retração de um pico. Ele usa o cruzamento de 14 e 28 SMAs para gerar um sinal de negociação multi-marco, enquanto monitora o pico de retração da estratégia em tempo real. A estratégia interrompe automaticamente a negociação quando a retração excede o limiar predefinido.

Princípio da estratégia

  1. Geração de sinais de transação:

    • Quando o SMA 14 é atravessado pelo SMA 28, um sinal de multiplicação é gerado.
    • Quando o SMA de 14 atravessa o SMA de 28, um sinal de curto-circuito é gerado.
  2. Controle de retirada de pico:

    • A curva de direitos e interesses da estratégia em tempo real, registrando o máximo histórico (o pico).
    • Quando o atual interesse está abaixo do pico, entra em estado de retração, registrando o ponto mais baixo.
    • Calcule a percentagem de retração = (pico - fundo do vale) / pico * 100%。
    • Se a percentagem de retirada for superior ao limite máximo de retirada previsto, a estratégia cessa a abertura de novas posições.
  3. Análise do ciclo pico-fundo:

    • Defina o percentual mínimo de retração para definir um ciclo de pico-fundo efetivo.
    • Ao completar um ciclo válido, registre o número do ciclo, a amplitude da subida anterior, a amplitude da retirada e o tempo de término.
    • Apresentação dos resultados da análise em formato de tabela para facilitar a visualização do desempenho histórico da estratégia pelos traders.

Vantagens estratégicas

  1. A combinação de rastreamento de tendências e controle de riscos: A estratégia de cruzamento SMA é um método clássico de acompanhamento de tendências, enquanto o controle de retração de pico oferece uma camada adicional de gerenciamento de risco. Esta combinação permite controlar efetivamente o risco de queda ao mesmo tempo em que capta a tendência do mercado.

  2. Forte adaptação: A estratégia pode ser ajustada de forma flexível de acordo com diferentes cenários de mercado e preferências de risco individuais por meio de configurações paramétricas de limites máximos e mínimos de retração.

  3. Indicadores de risco transparentes: A análise de ciclo de pico-valo fornece informações detalhadas sobre o histórico de retração, permitindo aos traders entender intuitivamente as características de risco da estratégia, ajudando a tomar decisões de negociação mais sensatas.

  4. Controle automático de riscos: A estratégia de cessação automática de negociação quando a retirada excede o limiar predeterminado, um mecanismo que pode ser eficaz na prevenção de perdas contínuas em condições de mercado adversas.

  5. Análise de desempenho global: Além dos indicadores de retracção convencionais, a estratégia fornece dados detalhados do ciclo de pico-fundo, incluindo informações sobre a amplitude de alta, baixa e tempo, o que ajuda a analisar a performance da estratégia.

Risco estratégico

  1. O excesso de dependência de dados históricos: A estratégia de cruzamento SMA baseia-se em dados históricos de preços, podendo reagir com atraso em mercados em rápida mudança, resultando em sinais errados.

  2. Transações frequentes: Em mercados turbulentos, os SMA podem se cruzar com frequência, resultando em excesso de transações e altos custos de transação.

  3. O potencial para um grande recuo: Apesar de ter o máximo de controle de retração, uma única queda pode levar a grandes perdas em momentos de forte volatilidade do mercado.

  4. Sensibilidade dos parâmetros: O desempenho da estratégia é altamente dependente do ciclo SMA e da escolha do limiar de retração. A configuração inadequada dos parâmetros pode levar a resultados sub-ótimos.

  5. A oportunidade perdida de mudar de vida: A estratégia pode perder a oportunidade de uma reversão de mercado quando o limite máximo de retirada é atingido e o mercado é parado.

Direção de otimização da estratégia

  1. Introdução de ajustes de parâmetros dinâmicos: Pode-se considerar o ajuste dos ciclos SMA e dos limites de retirada de acordo com a dinâmica da volatilidade do mercado para se adaptar a diferentes condições de mercado.

  2. Adicionar filtros de mercado adicionais: Em combinação com outros indicadores técnicos ou fatores fundamentais, como RSI ou volume de transação, para filtrar potenciais falsos sinais.

  3. A entrada e a saída dos jogadores são realizadas em grupos: Ao invés de operar em todo o armazém, pode-se construir em lotes para reduzir o risco de uma única decisão.

  4. Afinal, o que é que eu tenho a dizer? Baseado no controle de retração, adicione a função de parada dinâmica para bloquear os lucros e aumentar a taxa de retorno geral.

  5. Optimizar a gestão de fundos: Implementar a gestão de posições dinâmicas com base no tamanho da conta e na volatilidade do mercado para melhor controlar o risco.

  6. Introdução aos algoritmos de aprendizagem de máquina: Otimizar a seleção de parâmetros e o processo de geração de sinais usando técnicas de aprendizagem de máquina para melhorar a adaptabilidade e a precisão da estratégia.

Resumir

A estratégia SMA cross multiplex combinando controle de retração de pico com cessação automática é um sistema de negociação quantitativa com acompanhamento de tendência e gerenciamento de risco. Captura a tendência do mercado através de cruzamentos de médias móveis simples, enquanto usa o controle de retração de pico para gerenciar o risco de queda. A estratégia é única em sua detalhada função de análise de ciclo de pico-valo, que fornece aos comerciantes ferramentas para obter uma visão profunda das características de risco da estratégia.

Embora existam alguns riscos inerentes às estratégias, como o excesso de dependência de dados históricos e sensibilidade de parâmetros, a sua robustez e rentabilidade podem ser significativamente aumentadas com otimizadores e melhorias adequados, como a introdução de ajustes de parâmetros dinâmicos, o acréscimo de filtros de mercado e a realização de uma gestão de fundos mais inteligente.

Em geral, a estratégia fornece um bom ponto de partida para os comerciantes, com base na qual pode ser feita uma maior personalização e otimização para atender aos objetivos de negociação e às preferências de risco individuais. A concepção modular da estratégia também facilita a integração com outras estratégias de negociação ou tecnologias de gerenciamento de risco, criando a base para a construção de sistemas de negociação mais complexos e abrangentes.

Código-fonte da estratégia
/*backtest
start: 2023-07-23 00:00:00
end: 2024-07-28 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/

capital = 10000

//@version=5
strategy(title = "Correct Strategy Peak-Drawdown Cycles [Tradingwhale]", shorttitle = "Peak-Draw [Tradingwhale]", initial_capital = capital, overlay=true, margin_long=100, margin_short=100)

// The code below is from Tradingwhale LLC
/// ==============================================================================
//  Peak-Trough Cycles with Date and Prev. RunUp
// Initialize variables
showTable = input.bool(true, title = "Plot Peak to Bottom Drawdown Cycles table?")
min_trough = input.float(3.0, title = "Define Minimum Drawdown/Trough to Display (%)", minval = 1, maxval = 100, step = 0.5, tooltip = "Peaks and Trough Cycles have to be roped in by either a lookback period or minmimum troughs to show. If you don't then every bar could be a peak or trough/bottom. I've decided to use minimum declines here because lookback seems more arbitrary.")
maxdraw = input.float(40.0, title = "Max Drawdown", minval = 1, maxval = 100, step = 0.5, tooltip = "Define the drawdown level where the srtategy stops executing trades.")

var float equityPeak = na
var float equityTrough = na
var int cycleCount = 0
var bool inDrawdown = false
var float initialCapital = capital
var float prevTrough = initialCapital
var float prevRunUp = na
var bool useLighterGray = true
var int lastYear = na

// Variable to indicate whether the strategy should end
var bool end_strategy = false

// Table to display data
var table resultTable = table.new(position.top_right, 5, 30, bgcolor=#ffffff00, frame_color=#4f4040, frame_width=1)

// Function to convert float to percentage string
f_to_percent(value) =>
    str.tostring(value, "#.##") + "%"

// Function to get month/year string without commas
get_month_year_string() =>
    str.tostring(year) + "/" + str.tostring(month)

// Update the table headers
if (bar_index == 0 and showTable)
    table.cell(resultTable, 0, 0, "Show Min Trough: " + f_to_percent(min_trough), bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 1, 0, "Cycle Count", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 2, 0, "Prev.RunUp(%)", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 3, 0, "Drawdown(%)", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 4, 0, "Year/Month", bgcolor=#a8a8a88f, text_size=size.normal)

// Track peaks and troughs in equity
if (na(equityPeak) or strategy.equity > equityPeak)
    if (inDrawdown and strategy.equity > equityPeak and not na(equityTrough)) // Confirm end of drawdown cycle
        drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100
        if drawdownPercentage > min_trough
            cycleCount += 1
            prevRunUp := (equityPeak - prevTrough) / prevTrough * 100
            if cycleCount <= 20 and showTable
                currentYear = year
                if na(lastYear) or currentYear != lastYear
                    useLighterGray := not useLighterGray
                    lastYear := currentYear
                rowColor = useLighterGray ? color.new(color.gray, 80) : color.new(color.gray, 50)
                table.cell(resultTable, 1, cycleCount, str.tostring(cycleCount), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 2, cycleCount, f_to_percent(prevRunUp), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 3, cycleCount, f_to_percent(drawdownPercentage), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 4, cycleCount, get_month_year_string(), bgcolor=rowColor, text_size=size.normal)
            prevTrough := equityTrough
    equityPeak := strategy.equity
    equityTrough := na
    inDrawdown := false
else if (strategy.equity < equityPeak)
    equityTrough := na(equityTrough) ? strategy.equity : math.min(equityTrough, strategy.equity)
    inDrawdown := true

// Calculate if the strategy should end
if not na(equityPeak) and not na(equityTrough)
    drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100
    if drawdownPercentage >= maxdraw
        end_strategy := true


// This code below is from Tradingview, but with additions where commented (see below)

longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (shortCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/
    strategy.entry("My Short Entry Id", strategy.short)