Estratégia de reversão da média móvel de impulso

Autora:ChaoZhang, Data: 2024-02-19 14:59:10
Tags:

img

Resumo

A ideia central desta estratégia é combinar o indicador RSI e a média móvel para encontrar oportunidades de reversões de preços de ações e alcançar a compra baixa e a venda alta. Quando o indicador RSI mostra que a ação está sobrevendida e a média móvel de curto prazo cruza abaixo do preço, ele serve como um sinal de compra. Depois de definir o stop loss e tirar lucro, espere que o preço se inverta para cima.

Princípio da estratégia

Esta estratégia usa principalmente o indicador RSI para julgar condições de sobrevenda e sobrecompra, e a cruz de ouro e cruz morta da média móvel para determinar as tendências de preços. Especificamente, o indicador RSI pode julgar efetivamente se uma ação está sobrevendida ou sobrecomprada. Quando o RSI está abaixo de 30, está no intervalo de sobrevenda. E quando a média móvel de curto prazo (definida em 9 dias nesta estratégia) cruza abaixo do preço, significa que o preço está caindo.

Então, quando o indicador RSI está abaixo de 40, perto do estado de sobrevenda, e a média móvel de 9 dias cruza abaixo do preço, pode ser julgado como um possível momento para o preço da ação reverter, indo longo para comprar.

Análise das vantagens

Esta estratégia combina o indicador RSI e a média móvel, que podem determinar efetivamente o momento da compra. Em comparação com um único julgamento de sobrevenda, o julgamento da condição adicionada da média móvel evita flutuações na área de sobrevenda. A configuração de stop loss e take profit é flexível e pode variar de pessoa para pessoa.

Análise de riscos

Esta estratégia baseia-se em configurações de parâmetros, tais como limite de julgamento do RSI, janela de tempo média móvel, etc. Parâmetros diferentes podem levar a resultados diferentes.

Além disso, as taxas de transacção também terão um certo impacto nos lucros.

Direcção de otimização

Considere ajustar dinamicamente os parâmetros da média móvel, selecionando parâmetros diferentes para ciclos diferentes; ou introduzir outros indicadores para julgar, como KDJ, MACD, etc., para formar um julgamento abrangente com base em múltiplas condições.

É igualmente possível estabelecer um módulo de volume de negociação ou de gestão de capital para controlar a proporção de fundos ocupada por uma única negociação e reduzir o impacto de uma única perda.

Resumo

Em geral, esta estratégia usa indicadores RSI e médias móveis para determinar o tempo de compra e pode determinar efetivamente as inversões de preço. Comprar em sobrevenda e bloquear lucros com stop loss e take profit pode produzir bons resultados. Para futuras otimizações, vale a pena considerar a incorporação de mais indicadores ou adicionar módulos adicionais de negociação / gerenciamento de fundos para tornar a estratégia mais robusta.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 23:59:59
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Coinrule

//@version=4
strategy(shorttitle='MARSI',title='Moving Average', overlay=true, initial_capital=1000,  default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

//MA inputs and calculations
inshort=input(9, title='MA short period')
MAshort= sma(close, inshort)

// RSI inputs and calculations
lengthRSI = input(14, title = 'RSI period', minval=1)
RSI = rsi(close, lengthRSI)

//Entry 
strategy.entry(id="long", long = true, when = MAshort<close and RSI<40 and window())

//Exit
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=1.5) * 0.01
longTakePerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
longSL  = strategy.position_avg_price * (1 - longLossPerc)
longTP  = strategy.position_avg_price * (1 + longTakePerc)
if (strategy.position_size > 0 and window())
    strategy.exit(id="TP/SL", stop=longSL, limit=longTP)


bgcolor(color = showDate and window() ? color.gray : na, transp = 90)  
plot(MAshort, color=color.purple, linewidth=4)



Mais.