Estratégia de negociação da média móvel do arco-íris

Autora:ChaoZhang, Data: 28 de setembro de 2023 11:01:59
Tags:

Resumo

A estratégia de negociação da média móvel do arco-íris é projetada com base no indicador da média móvel do arco-íris. Esta estratégia identifica a direção da tendência através de um sistema de média móvel do arco-íris com 7 médias móveis e filtra sinais falsos com o indicador RSI para alcançar uma entrada de baixo risco.

Estratégia lógica

A estratégia gera sinais de negociação através das seguintes etapas:

  1. Construir o sistema de média móvel do arco-íris. Ele contém 7 médias móveis. A primeira média móvel tem um período de 12 e leva o preço de fechamento como dados de origem. As outras 6 médias móveis têm períodos progressivamente decrescentes de 3, com a média móvel anterior como fonte.

  2. Determine a direção da tendência. Se a primeira média móvel estiver no topo do arco-íris, defina-a como tendência ascendente. Se estiver na parte inferior, defina-a como tendência descendente. Se estiver no meio, defina-a como consolidação.

  3. Gerar sinais. Quando a tendência muda de tendência ascendente para tendência descendente, um sinal de venda é gerado. Quando a tendência muda de tendência descendente para tendência ascendente, um sinal de compra é gerado. Quando a tendência muda de consolidação para tendência ascendente ou descendente, feche a posição existente.

  4. Filtro RSI. Só aceita sinais quando o RSI mostra status normal. O primeiro RSI deve estar entre a zona de sobrecompra e a zona de sobrevenda para evitar uma falha de ruptura. O segundo RSI deve estar fora da zona média para garantir um forte impulso.

Vantagens

As vantagens desta estratégia incluem:

  1. O sistema de média móvel do arco-íris identifica com precisão a direção da tendência.

  2. O mecanismo de filtro RSI duplo evita efetivamente sinais de falha e ser preso.

  3. A combinação de indicadores de tendência e de reversão permite uma entrada oportuna na reversão da tendência, evitando, ao mesmo tempo, perseguir o ímpeto.

  4. O fechamento ativo de posições durante a consolidação evita o risco de mercados limitados ao intervalo.

  5. A estratégia oferece um grande espaço de otimização de parâmetros, que pode ser ajustado para diferentes produtos e prazos para obter melhores resultados.

Riscos

Os principais riscos desta estratégia:

  1. A reversão da tendência não clara pode gerar sinais falsos e causar perdas.

  2. Otimizar os parâmetros do RSI pode fortalecer a filtragem na consolidação.

  3. A reversão atrasada aumenta as perdas após o sinal inicial.

  4. A configuração incorreta dos parâmetros pode filtrar os sinais corretos ou causar atraso no sinal.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Optimização dos parâmetros da média móvel, incluindo a duração do período, o rácio do período, o tipo de MA, etc., para tornar o julgamento da tendência mais preciso.

  2. Optimização dos parâmetros do RSI, incluindo período, níveis de sobrecompra/supervenda, zona neutra, etc., para tornar a filtragem mais precisa.

  3. Optimização do prazo, para encontrar o prazo ideal.

  4. Optimização do produto, para ajustar parâmetros e regras para melhor se adequar a diferentes produtos.

  5. Adicionar stop loss e take profit para controlar o risco e o tamanho do lucro.

Conclusão

A estratégia de negociação da média móvel do arco-íris combina determinação de tendências e filtragem de sinais para capturar sinais de reversão de forma eficaz. Com julgamento preciso e riscos controláveis, esta estratégia pode se tornar muito prática após ajuste de parâmetros e refinamento da lógica.


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//╔════════════════════════════════════════════════════════════════════════════╗
//║Rainbow Backtesting base on "Rainbow Moving Average" Strategy as below:     ║
//║1.Rainbow Moving Average setup                                              ║
//║- Source: source of 1st MA                                                  ║
//║- Type: SMA/EMA                                                             ║
//║- Period: period of 1st MA                                                  ║
//║- Displacement: period of 2nd MA to 7th MA with source is previous MA       ║
//║2.Trend Define                                                              ║
//║- Up Trend: Main MA moving at the top of Rainbow                            ║
//║- Down Trend: Main MA moving at the bottom of Rainbow                       ║
//║- Sideway: Main MA moving between the top and the bottom of Rainbow         ║
//║3.Signal                                                                    ║
//║- Buy Signal: When Rainbow change to Up Trend.                              ║
//║- Sell Signal: When Rainbow change to Down Trend.                           ║
//║- Exit: When Rainbow change to Sideway.                                     ║
//║4.RSI Filter                                                                ║
//║- "Enable": Only signals have 1st RSI moving between Overbought and Oversold║
//║and 2nd RSI moving outside Middle Channel are accepted.                     ║
//║- The filter may help trader avoid bull trap, bear trap and choppy market.  ║
//╚════════════════════════════════════════════════════════════════════════════╝

//@version=4
strategy("Rainbow Strategy Backtesting",overlay=false)
//++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++ Rainbow Moving Average +++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++
rainbow_tt="=== Rainbow Moving Average ==="
ma1_source=input(hlc3,title="Source",type=input.source, inline="set1", group=rainbow_tt)
rb_type=input("SMA",title="Type",options=["SMA","EMA"], inline="set1", group=rainbow_tt)
ma1_len=input(12,title="Period", inline="set2", group=rainbow_tt)
dis_len=input(3,title="Displacement", inline="set2", group=rainbow_tt,minval=2)
trend_tt="=== Trend Color ==="
up_col=input(color.new(color.blue,0),title="Up",inline="Color",group=trend_tt)
dn_col=input(color.new(color.red,0),title="Down",inline="Color",group=trend_tt)
sw_col=input(color.new(color.yellow,0),title="No",inline="Color",group=trend_tt)
//1st
ma1=rb_type=="SMA"?sma(ma1_source,ma1_len):ema(ma1_source,ma1_len)
//2nd
ma2=rb_type=="SMA"?sma(ma1,dis_len):ema(ma1,dis_len)
//3rd
ma3=rb_type=="SMA"?sma(ma2,dis_len):ema(ma2,dis_len)
//4
ma4=rb_type=="SMA"?sma(ma3,dis_len):ema(ma3,dis_len)
//5
ma5=rb_type=="SMA"?sma(ma4,dis_len):ema(ma4,dis_len)
//6
ma6=rb_type=="SMA"?sma(ma5,dis_len):ema(ma5,dis_len)
//7
ma7=rb_type=="SMA"?sma(ma6,dis_len):ema(ma6,dis_len)
//MinMax
rb_max=max(ma1,ma2,ma3,ma4,ma5,ma6,ma7)
rb_min=min(ma1,ma2,ma3,ma4,ma5,ma6,ma7)
dir_col=
       ma1==rb_max?up_col:
       ma1==rb_min?dn_col:
       sw_col
dir_style=shape.circle
plotshape(dir_col[1]==dir_col?0:na,title="Trend",style=dir_style,color=dir_col,location=location.absolute)
//++++++++++++++++++++++++++++++++++++++
//+++++++++++++ RSI Filter +++++++++++++
//++++++++++++++++++++++++++++++++++++++
rsi_tt="=== RSI Filter ==="
rsi_filter=input("Enable",title="Filter",options=["Enable","Disable"],inline="set",group=rsi_tt)
over_tt="Over Filter"
rsi_len_1=input(12,title="Period",inline="set",group=over_tt)
rsi_ovb=input(65,title="Overbought",inline="set",group=over_tt)
rsi_ovs=input(35,title="Oversold",inline="set",group=over_tt)
rsi_1=rsi(close,rsi_len_1)
mid_tt="Middle Filter"
rsi_len_2=input(9,title="Period",inline="set",group=mid_tt)
rsi_mid_top=input(56,title="Upper",inline="set",group=mid_tt)
rsi_mid_bot=input(44,title="Lower",inline="set",group=mid_tt)
rsi_2=rsi(close,rsi_len_2)
//Status
var rsi_status="None"
if (rsi_1>rsi_ovs and rsi_1<rsi_ovb) and (rsi_2[1]<rsi_mid_bot or rsi_2[1]>rsi_mid_top)
    rsi_status:="Normal"
else
    rsi_status:="None"
//Signal
BuySignal= 
       rsi_filter=="Disable"?
       dir_col[1]!=up_col
       and
       dir_col[0]==up_col
       :
       dir_col[1]!=up_col
       and
       dir_col[0]==up_col
       and
       rsi_status=="Normal"
       
SellSignal= 
       rsi_filter=="Disable"?
       dir_col[1]!=dn_col
       and
       dir_col[0]==dn_col
       :
       dir_col[1]!=dn_col
       and
       dir_col[0]==dn_col
       and
       rsi_status=="Normal"
       
exit=
       (dir_col[1]!=sw_col
       and
       dir_col[0]==sw_col)
buycol =
       BuySignal?
       up_col: na

sellcol =
       SellSignal?
       dn_col: na

exitcol =
       exit?
       sw_col: na

buy_style=shape.arrowup
sell_style=shape.arrowdown
exit_style=shape.square
plotshape(BuySignal?0:na,title="Buy",text="Buy",style=buy_style,color=buycol,location=location.absolute)
plotshape(SellSignal?0:na,title="Sell",text="Sell",style=sell_style,color=sellcol,location=location.absolute)
plotshape(exit?0:na,title="Exit",text="Exit",style=exit_style,color=exitcol,location=location.absolute)

filter=
       rsi_filter=="Enable"?
       dir_col[1]!=dir_col 
       and BuySignal==false 
       and SellSignal==false 
       and exit==false:
       na
filter_style=shape.xcross
filtercol=
       filter?
       dir_col:na
plotshape(filter?0:na,title="Filter",text="Filter",style=filter_style,color=filtercol,location=location.absolute)

//+++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++ Backtesting ++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++
strategy.entry("Long", strategy.long, when=BuySignal)
strategy.close("Long", when=exit or filter)
strategy.entry("Short", strategy.short, when=SellSignal)
strategy.close("Short", when=exit or filter)
//EOF

Mais.