Estratégia de Crossover Long-Short SMA


Data de criação: 2024-04-01 11:11:02 última modificação: 2024-04-01 11:11:02
cópia: 0 Cliques: 605
1
focar em
1617
Seguidores

Estratégia de Crossover Long-Short SMA

Visão geral

A estratégia é uma estratégia multihead/vazio baseada no cruzamento de uma média móvel simples (SMA). Ela usa SMAs de dois períodos diferentes para gerar um sinal de negociação. Quando SMAs rápidos atravessam SMAs lentas do lado de baixo, gera um sinal multihead; quando SMAs rápidos atravessam SMAs lentas do lado de cima, gera um sinal vazio. A estratégia usa o conceito de retorno, ajustando dinamicamente o tamanho da posição da conta de acordo com o saldo atual da conta e os lucros acumulados.

Princípio da estratégia

O princípio central da estratégia é o uso de SMA para gerar sinais de negociação em cruz. O SMA é um indicador de acompanhamento de tendência para determinar a direção geral dos preços, fazendo a média dos preços de fechamento ao longo do tempo passado. Usando SMAs de dois períodos diferentes, a estratégia pode capturar mudanças na tendência do mercado.

A estratégia usa o conceito de retorno para gerenciar o tamanho da posição. Calcula o tamanho da posição com base no saldo atual da conta e no lucro acumulado. Isso significa que, à medida que o saldo da conta aumenta, a estratégia aumenta o tamanho da posição de acordo, maximizando o potencial de lucro.

Vantagens estratégicas

  1. Simples e fácil de entender: A estratégia é baseada em SMA crossover, uma estratégia de acompanhamento de tendências simples e fácil de entender. Ela não requer uma compreensão complexa do momento do mercado ou julgamento subjetivo, tornando a estratégia fácil de implementar e gerenciar.

  2. Seguimento de tendências: Usando o cruzamento SMA, a estratégia é capaz de capturar efetivamente as tendências do mercado. Pode ser usado para negociar a mais em tendências de alta e negociar a menos em tendências de baixa, maximizando o potencial de lucro.

  3. Gerenciamento de posições dinâmico: a estratégia usa o conceito de retorno de lucro para gerenciar o tamanho da posição. Ao ajustar o tamanho da posição de acordo com o saldo da conta e a dinâmica do lucro acumulado, a estratégia pode aproveitar ao máximo o crescimento da conta e aumentar a lucratividade.

  4. Adaptabilidade: A estratégia pode ser aplicada a vários mercados e classes de ativos, como ações, divisas, mercadorias, etc. Sua simplicidade e adaptabilidade tornam-na uma estratégia de negociação universal.

Risco estratégico

  1. Risco de mercado: a estratégia depende da persistência da tendência do mercado. Em caso de flutuação do mercado ou de reversão da tendência, a estratégia pode sofrer perdas. Eventos inesperados, divulgação de dados econômicos e outros fatores podem causar mudanças na tendência do mercado, causando efeitos adversos na estratégia.

  2. Risco de parâmetros: o desempenho da estratégia depende da escolha de períodos do SMA. Diferentes combinações de períodos podem produzir resultados diferentes. A escolha inadequada de parâmetros pode levar ao fraco desempenho da estratégia ou à perda de oportunidades de negociação.

  3. Transações excessivas: Durante a volatilidade do mercado, o frequente cruzamento de SMAs pode levar a transações excessivas, aumentando os custos de transação e os pontos de deslizamento, afetando a performance geral da estratégia.

  4. Risco de recuperação: embora a recuperação possa aumentar a rentabilidade da estratégia, ela também aumenta o risco de perda. Em caso de perdas contínuas, o saldo da conta pode diminuir rapidamente, limitando a capacidade de recuperação da estratégia.

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

  1. Optimização de parâmetros: Otimização do ciclo do SMA para encontrar a melhor combinação de parâmetros para melhorar o desempenho da estratégia. Pode-se fazer o retrospecto com dados históricos e usar algoritmos de otimização como a busca de grades ou algoritmos genéticos para encontrar os parâmetros mais ótimos.

  2. Gerenciamento de riscos: introdução de medidas de gerenciamento de riscos, como stop-loss e stop-loss, para limitar as perdas de uma única transação e proteger os lucros. O nível de stop-loss e stop-loss pode ser ajustado de acordo com a dinâmica de volatilidade do mercado, para se adaptar a diferentes condições de mercado.

  3. Filtragem de tendências: além do cruzamento de SMA, introduza outros indicadores de confirmação de tendências, como MACD ou ADX, para filtrar falsos sinais e melhorar a qualidade do sinal. Apenas quando vários indicadores confirmam tendências ao mesmo tempo, a negociação é realizada para aumentar a confiabilidade da estratégia.

  4. Optimização do gerenciamento de posições: regras de gerenciamento de posições para otimizar as estratégias de retorno, como a introdução de medidas de controle de risco, limitando a abertura de risco de uma única transação. Pode ser considerado o uso da fórmula de Kelly ou a porcentagem de risco fixo para determinar o tamanho da posição de cada transação, para equilibrar o risco e o retorno.

Resumir

A estratégia é uma estratégia de acompanhamento de tendências baseada em SMAs cruzadas, que utiliza o conceito de retorno para gerenciar o tamanho da posição. Sua vantagem é ser simples e fácil de entender, forte na capacidade de acompanhamento de tendências, gerenciamento de posições dinâmicas e adaptáveis. No entanto, também enfrenta desafios como risco de mercado, risco de parâmetros, excesso de negociação e risco de retorno.

Código-fonte da estratégia
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Umesh SMA Crossover Strategy", overlay=true)

// Input parameters
fast_length = input.int(9, title="Fast SMA Length")
slow_length = input.int(21, title="Slow SMA Length")

// Calculate SMAs
fast_sma = ta.sma(close, fast_length)
slow_sma = ta.sma(close, slow_length)

// Plot SMAs
plot(fast_sma, color=color.blue, title="Fast SMA")
plot(slow_sma, color=color.red, title="Slow SMA")

// Strategy logic
longCondition = ta.crossover(fast_sma, slow_sma)
shortCondition = ta.crossunder(fast_sma, slow_sma)

// Initialize cumulative profit with netprofit
var float cumulative_profit = na
if (na(cumulative_profit))
    cumulative_profit := strategy.netprofit

// // Initialize starting balance
// var float starting_balance = na
// if (na(starting_balance))
//     starting_balance := strategy.equity

// Initialize starting balance
var float starting_balance = na
if (na(starting_balance))
    starting_balance := 100000.0 // Initial balance

// Calculate profit or gains
if (strategy.opentrades != 0)
    cumulative_profit := strategy.netprofit + (strategy.equity - starting_balance)

// Calculate position size based on current balance and cumulative profit
//position_size = 100000 
position_size = starting_balance + cumulative_profit

// Entry conditions
if (longCondition)
    strategy.entry("Long", strategy.long, qty = position_size / close)
if (shortCondition)
    strategy.entry("Short", strategy.short, qty = position_size / close)

// // Entry conditions
// if (longCondition)
//     strategy.entry("Long", strategy.long, qty = 100000 / close)
// if (shortCondition)
//     strategy.entry("Short", strategy.short, qty = 100000 / close)


// Plot strategy.equity 
plot(strategy.equity, color=color.green, title="Cumulative Profit")

// Print cumulative profit value on chart
label.new(x = bar_index, y = strategy.equity, text = str.tostring(strategy.equity), style=label.style_label_down, color=color.new(color.green, 0), size=size.small)
// Plot cumulative profit
plot(cumulative_profit, color=color.green, title="Cumulative Profit")

// Print cumulative profit value on chart
label.new(x = bar_index, y = cumulative_profit, text = str.tostring(cumulative_profit), style=label.style_label_down, color=color.new(color.green, 0), size=size.small)

// Plot cumulative profit
plot(position_size, color=color.green, title="Cumulative Profit")

// Print cumulative profit value on chart
label.new(x = bar_index, y = position_size, text = str.tostring(position_size), style=label.style_label_down, color=color.new(color.green, 0), size=size.small)