
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.
Geração de sinais de transação:
Controle de retirada de pico:
Análise do ciclo pico-fundo:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
/*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)