Estratégia de negociação do sistema de média móvel


Data de criação: 2024-01-05 15:36:00 última modificação: 2024-01-05 15:36:00
cópia: 1 Cliques: 692
1
focar em
1625
Seguidores

Estratégia de negociação do sistema de média móvel

Visão geral

Este artigo discute uma estratégia de negociação baseada em uma média móvel simples. A estratégia usa uma média móvel de 17 de comprimento para comparar com o preço de fechamento, fazendo mais quando o preço de fechamento atravessa a média móvel e fazendo zero quando o preço de fechamento atravessa.

Princípio da estratégia

Calculação de média móvel

A estratégia utiliza os seguintes parâmetros para calcular a média móvel:

  • MA fonte: média padrão do OHLC ((OHCL4))
  • Tipo de MA: Média Móvel Simples (SMA) por defeito
  • MA comprimento: 17 por defeito

De acordo com esses parâmetros, a função getMAType (()) é chamada para calcular o preço de fechamento SMA de 17 ciclos.

Geração de sinais de transação

Em seguida, compare a relação entre o preço de fechamento e a média móvel:

  • Preço de fechamento > Média móvel: sinal de posição longa
  • Preço de fechamento < Média Móvel: sinal de estoque vazio

Quando os preços de fechamento atravessam a média móvel de baixo para cima, geram sinais de fazer mais; quando atravessam de cima para baixo, geram sinais de fazer menos.

Execução da transação

Durante o ciclo de retrospecção, se houver um sinal de excesso de negociação, a posição será aberta, e se houver um sinal de excesso de negociação, a posição será aberta.

Análise de vantagens

A maior vantagem da estratégia é que a idéia é muito simples e clara. Apenas um indicador para julgar a mudança de tendência através de sua mudança de direção. A estratégia é fácil de entender, fácil de implementar e adequada para aprendizagem de iniciantes.

Além disso, a média móvel é um indicador de tendência de acompanhamento, que permite efetivamente acompanhar a mudança de tendência, evitando ser interrompido pelo ruído de curto prazo no mercado.

Pode ser adaptado a diferentes períodos e variedades através de ajustes de parâmetros.

Análise de Riscos

Em primeiro lugar, a estratégia baseia-se em apenas um indicador, um critério muito simples, que pode gerar mais sinais errados.

Além disso, a estratégia é um sistema de acompanhamento de tendências que não pode funcionar em mercados de liquidação e de turbulência.

Além disso, não há um parâmetro de stop loss, o que aumenta o risco de expansão dos prejuízos.

A solução é combinar outros indicadores, otimizar a combinação de parâmetros, reduzir os sinais errados. Configurar um stop loss, controlar o risco e otimizar a retirada.

Direção de otimização

Os seguintes aspectos podem ser considerados como estratégias de otimização:

  1. Ajustar os parâmetros da média móvel, otimizar o número de ciclos. Por exemplo, mudar para 30 ou 50 ciclos.

  2. Experimente diferentes tipos de médias móveis, como EMA, VIDA, etc. Eles são diferentes em termos de sensibilidade às mudanças de preço.

  3. Aumentar a combinação com outros indicadores. Por exemplo, a combinação com o MACD, que permite determinar a força e a fraqueza. Ou a combinação com o RSI, que reduz os sinais errados.

  4. Aumentar o mecanismo de stop loss. Definir o stop loss móvel de uma porcentagem fixa ou o valor do ATR. Controlar a perda individual.

  5. Aumentar o mecanismo de suspensão. Definir a porcentagem de lucro alvo. Maximizar os lucros.

Estas melhorias permitem que a estratégia seja mais estável, evitando grandes retrações.

Resumir

Este artigo analisa uma estratégia de negociação simples baseada em uma média móvel de 17 períodos. A fonte do sinal da estratégia é simples, fácil de entender e implementar, pertencendo a um típico sistema de acompanhamento de tendências. Através de uma interpretação profunda da estratégia, analisa seus pontos fortes e riscos, e dá uma visão de otimização em várias dimensões. Acredita-se que, com otimização e enriquecimento contínuos, a estratégia pode evoluir gradualmente e também obter ganhos estáveis no mercado real.

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

//@version=4
strategy("Simple 17 BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2012, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Moving Average /////////////
source = input(title="MA Source", defval=ohlc4)
maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"])
length = input(title="MA Length", defval=17)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    if maType == "vwma"
        res := vwma(sourceType, maLen)
    if maType == "rma"
        res := rma(sourceType, maLen)
    res
    
MA = getMAType(maType, source, length)

/////////////// Strategy ///////////////
long = close > MA
short = close < MA

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)

/////////////// Plotting /////////////// 
p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2)
p2 = plot(close, linewidth=2)
fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)