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.
A estratégia gera sinais de negociação através das seguintes etapas:
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.
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.
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.
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.
As vantagens desta estratégia incluem:
O sistema de média móvel do arco-íris identifica com precisão a direção da tendência.
O mecanismo de filtro RSI duplo evita efetivamente sinais de falha e ser preso.
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.
O fechamento ativo de posições durante a consolidação evita o risco de mercados limitados ao intervalo.
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.
Os principais riscos desta estratégia:
A reversão da tendência não clara pode gerar sinais falsos e causar perdas.
Otimizar os parâmetros do RSI pode fortalecer a filtragem na consolidação.
A reversão atrasada aumenta as perdas após o sinal inicial.
A configuração incorreta dos parâmetros pode filtrar os sinais corretos ou causar atraso no sinal.
A estratégia pode ser otimizada nos seguintes aspectos:
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.
Optimização dos parâmetros do RSI, incluindo período, níveis de sobrecompra/supervenda, zona neutra, etc., para tornar a filtragem mais precisa.
Optimização do prazo, para encontrar o prazo ideal.
Optimização do produto, para ajustar parâmetros e regras para melhor se adequar a diferentes produtos.
Adicionar stop loss e take profit para controlar o risco e o tamanho do lucro.
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