O recurso está a ser carregado... Carregamento...

Estratégia de composição cruzada de SMA

Autora:ChaoZhang, Data: 2024-04-01 11:11:02
Tags:

img

Resumo

Esta estratégia é uma estratégia longa / curta baseada no cruzamento de médias móveis simples (SMAs). Ele usa dois SMAs com períodos diferentes para gerar sinais de negociação. Quando o SMA rápido cruza acima do SMA lento de baixo, ele gera um sinal longo; quando o SMA rápido cruza abaixo do SMA lento de cima, ele gera um sinal curto. A estratégia incorpora o conceito de composição, ajustando dinamicamente a posição com base no tamanho do saldo da conta corrente e no lucro acumulado. Isso permite que o saldo da conta cresça ao longo do tempo, aumentando a lucratividade da estratégia.

Princípio da estratégia

O princípio básico desta estratégia é utilizar crossovers de SMA para gerar sinais de negociação. O SMA é um indicador de tendência que determina a direção geral do preço pela média dos preços de fechamento em um período especificado. Usando dois SMA com períodos diferentes, a estratégia pode capturar mudanças nas tendências do mercado. Quando o SMA rápido cruza acima do SMA lento, ele indica que uma tendência de alta pode estar se formando, levando a estratégia a entrar em uma posição longa. Por outro lado, quando o SMA rápido cruza abaixo do SMA lento, sugere que uma tendência de queda pode estar se desenvolvendo, levando a estratégia a entrar em uma posição curta.

A estratégia emprega o conceito de composição para gerenciar o tamanho da posição. Ele calcula o tamanho da posição com base no saldo da conta corrente e no lucro acumulado. Isso significa que, à medida que o saldo da conta cresce, a estratégia aumenta proporcionalmente o tamanho da posição, maximizando o potencial de lucro. Ajustando dinamicamente o tamanho da posição, a estratégia pode capitalizar totalmente as vantagens do crescimento da conta.

Vantagens da estratégia

  1. Simplicidade: a estratégia é baseada em crossovers SMA, tornando-se uma estratégia simples e direta de tendência.

  2. Seguimento de tendências: Utilizando crossovers de SMA, a estratégia capta efetivamente as tendências do mercado. Pode se envolver em negociações longas durante tendências de alta e em negociações curtas durante tendências de baixa, maximizando o potencial de lucro.

  3. Dimensão dinâmica da posição: A estratégia emprega o conceito de composição para gerenciar os tamanhos das posições. Ajustando dinamicamente o tamanho da posição com base no saldo da conta e no lucro acumulado, a estratégia pode alavancar plenamente os benefícios do crescimento da conta, aumentando a lucratividade.

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

Riscos estratégicos

  1. Risco de mercado: A estratégia depende da persistência das tendências do mercado. Pode sofrer perdas durante a volatilidade do mercado ou inversões de tendência. Eventos inesperados, lançamentos de dados econômicos e outros fatores podem causar mudanças repentinas na direção do mercado, afetando negativamente a estratégia.

  2. Risco de parâmetros: o desempenho da estratégia depende da escolha dos períodos de SMA. Combinações de períodos diferentes podem produzir resultados diferentes. Seleção incorreta de parâmetros pode levar a desempenho de estratégia subóptimo ou oportunidades de negociação perdidas.

  3. O risco de excesso de negociação: durante as condições de mercado voláteis, os crossovers frequentes da SMA podem resultar em excesso de negociação, aumento dos custos de transação e deslizamento, o que pode afetar o desempenho geral da estratégia.

  4. Risco composto: embora o risco composto possa aumentar a rentabilidade da estratégia, ele também amplifica o risco de perdas.

Orientações para a otimização da estratégia

  1. Optimização de parâmetros: Otimize os períodos das SMAs para encontrar a combinação de parâmetros ideal que melhore o desempenho da estratégia. Utilize dados históricos para backtesting e empregue algoritmos de otimização, como pesquisa de grade ou algoritmos genéticos, para identificar os melhores parâmetros.

  2. Gerenciamento de riscos: introduzir medidas de gerenciamento de riscos, como stop-loss e take-profit, para limitar as perdas por negociação e proteger os lucros. Ajustar dinamicamente os níveis de stop-loss e take-profit com base na volatilidade do mercado para se adaptar às diferentes condições do mercado.

  3. Confirmação de tendência: Além dos crossovers da SMA, incorpore outros indicadores de confirmação de tendência, como MACD ou ADX, para filtrar sinais falsos e melhorar a qualidade do sinal.

  4. Optimização do tamanho da posição: Otimize as regras de dimensionamento da posição da estratégia de composição introduzindo medidas de controle de risco para limitar a exposição ao risco por negociação.

Conclusão

Esta estratégia é uma estratégia de seguimento de tendências baseada em crossovers de SMA, incorporando o conceito de composição para gerenciar o tamanho das posições. Seus pontos fortes estão em sua simplicidade, capacidade de seguir tendências, dimensionamento dinâmico de posições e adaptabilidade. No entanto, também enfrenta desafios como risco de mercado, risco de parâmetro, excesso de negociação e risco de composição. Para melhorar a estratégia, considere a otimização de parâmetros, introdução de medidas de gerenciamento de risco, confirmação de tendências e otimização de regras de dimensionamento de posição.


/*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)


Mais.