Esta estratégia usa uma combinação de indicadores RSI em diferentes prazos para determinar se o mercado atual está sobrecomprado ou sobrevendido, e combina a relação entre preço e média móvel para gerar sinais de compra e venda.
Calcule os valores do RSI dos intervalos de tempo de 5 minutos, 15 minutos e 1 hora. Quando o RSI de 5 minutos, 15 minutos e 1 hora estiver abaixo de 25 ao mesmo tempo, ele é julgado como uma condição de sobrevenda e gera um sinal de compra. Quando o RSI de 5 minutos, 15 minutos e 1 hora estiver acima de 75 ao mesmo tempo, ele é julgado como uma condição de sobrecompra e gera um sinal de venda.
A quebra da média móvel de 21 dias também atua como um sinal de negociação. Se o preço estiver abaixo da média móvel, um sinal de compra é gerado.
Com base na posição atual, é definido o tamanho inicial da negociação e as regras de pirâmide: 2 contratos para a primeira entrada e, em seguida, adicionando 1 contrato de cada vez até que a posição atinja 2 contratos.
O stop loss é acionado quando a perda atinge 3%.
O uso de indicadores RSI em vários prazos para determinar as condições de sobrecompra e sobrevenda melhora a confiabilidade do sinal.
A combinação de médias móveis gera sinais de negociação adicionais e amplia as oportunidades de negociação.
O controlo do dimensionamento das posições e o rácio de lucro/perda para o stop loss e o take profit gerem os riscos.
A escalação com quantidade fixa aumenta o potencial de lucro.
Risco de divergência do RSI. O preço pode continuar em tendência por um período após o RSI atingir o limiar de sobrecompra ou sobrevenda antes de reverter. Seguir cegamente o sinal do RSI pode levar a perdas.
O sinal de negociação da média móvel pode ser enganoso. A média móvel não consegue rastrear a mudança de preço em tempo hábil durante grandes oscilações de preços.
O tamanho incorreto das posições e a definição incorreta do rácio lucro/perda conduzem a um controlo inadequado do risco.
As condições de pirâmide devem ser estabelecidas de forma razoável para evitar perdas exageradas.
Ajustar os parâmetros do RSI e testar diferentes combinações de períodos para encontrar sinais de sobrecompra/supervenda mais confiáveis.
Teste diferentes médias móveis como sinais de negociação auxiliares ou outros indicadores técnicos.
Otimizar o dimensionamento das posições e as regras de stop loss/take profit para criar mecanismos mais científicos de controlo dos riscos.
Otimizar as condições de pirâmide para evitar perdas de aumento.
Esta estratégia usa o RSI em vários prazos para determinar o potencial de tendência e alcançar uma taxa de ganho maior. Sinais adicionais são gerados com médias móveis para expandir as oportunidades de negociação. O risco é gerenciado através do dimensionamento de posição, stop loss / take profit e pirâmide de quantidade fixa.
/*backtest start: 2023-09-29 00:00:00 end: 2023-10-29 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("5M_RSI_Strategy", overlay=true, pyramiding = 1) len =14 Initial_Trade_Size = 2 up = rma(max(change(close), 0), len) down = rma(-min(change(close), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) RSI_1h = request.security(syminfo.tickerid, "60", rsi) RSI_3h = request.security(syminfo.tickerid, "180", rsi) RSI_15m = request.security(syminfo.tickerid, "15", rsi) RSI_5m = request.security(syminfo.tickerid, "5", rsi) RSI_1m = request.security(syminfo.tickerid, "1", rsi) ema21_5 = ema(request.security(syminfo.tickerid, "5", close), 21) ema21_15 = ema(request.security(syminfo.tickerid, "15", close), 21) //(RSI_3h<=25) and (RSI_1h<=25) and (RSI_15m<=25) and Positive = ((RSI_5m<=25) and (RSI_15m<=25) and (RSI_1h<=25))?true:false //alertcondition(Positive, title='POS', message='POS') //plotshape(Positive, style=shape.triangleup,location=location.belowbar, color=green,size =size.tiny) Negative = (( RSI_5m>=75) and ( RSI_15m>=75) and ( RSI_1h>=75))?true:false //alertcondition(Negative, title='NEG', message='NEG') //plotshape(Negative, style=shape.triangledown,location=location.abovebar, color=red,size=size.tiny) Positive and Negative and lastordersize = abs(strategy.position_size)>=Initial_Trade_Size?abs(strategy.position_size):Initial_Trade_Size //lastordersize =1 // and ((ema21_15-low)/ema21_15) > 0.077 //Adding to position rules if (abs(strategy.position_size) >= Initial_Trade_Size and (abs(close - strategy.position_avg_price)/abs(strategy.position_avg_price)>0.03)) if(strategy.position_avg_price > close and strategy.position_size > 0) strategy.entry("Add", strategy.long , qty = lastordersize , when = true) if(strategy.position_avg_price < close and strategy.position_size < 0) strategy.entry("Add", strategy.short, qty = lastordersize , when = true) if (strategy.position_size == 0) if (Positive or ((ema21_5-low)/ema21_5) > 0.07) strategy.entry("1St Entry", strategy.long , qty = lastordersize , when = true) // and ((high-ema21_15)/ema21_15) > 0.077 if (Negative or ((high-ema21_5)/ema21_5) > 0.07) strategy.entry("1St Entry", strategy.short, qty = lastordersize , when = true) //lastordersize := lastordersize * 2 //or (strategy.openprofit / abs(strategy.position_size * close))>=0.01 if(cross(ema21_5, high) or cross(ema21_5, low)) strategy.close_all()