
A estratégia é um sistema de negociação quantitativa baseado em sinais de oversold RSI e stop loss ATR dinâmico. A estratégia usa dados de nível de linha diária, combinando o sinal de oversold do RSI com o filtro de tendência da linha média de 200 dias, para capturar oportunidades de rebote quando o mercado está superando. A estratégia utiliza um mecanismo de proteção dupla de stop loss ATR dinâmico e stop loss percentual estático, e estabelece um objetivo de triplo lucro para maximizar os ganhos com redução de posição por etapas.
A lógica central da estratégia inclui os seguintes elementos-chave:
Dependência de tendências: estratégias que podem frequentemente desencadear paradas em mercados de turbulência. Sugestão: Pode-se adicionar um indicador de vibração para filtrar os falsos sinais.
A paralisação é maior: 25% de paralisação fixa pode levar a perdas excessivas em uma única operação. Recomendação: Ajustar a percentagem de perdas de acordo com a capacidade de tolerância de risco individual.
Risco de retração: lucro intercalar pode levar a uma redução prematura de posições em um cenário de alta. Recomendação: Ajuste dinâmico dos objetivos de lucro ou mantenha algumas posições para acompanhar a tendência.
A estratégia constrói um sistema de negociação completo através da combinação de sinais de oversell RSI e filtragem de tendências de linha uniforme, com o objetivo de stop loss ATR dinâmico e triplo lucro. A vantagem da estratégia é que o controle de risco é flexível, a gestão de lucro é razoável, mas ainda precisa de ajustes otimizados de acordo com a situação real do mercado e as preferências de risco individuais.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA/4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef
//@version=5
strategy("Simple RSI stock Strategy [1D] ", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=75, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)
// Rsi
oversoldLevel = input(30, title="Oversold Level")
overboughtLevel = input(70, title="Overbought Level")
rsi = ta.rsi(close, 5)
rsi_overbought = rsi > overboughtLevel
rsi_oversold = rsi < oversoldLevel
// Sma 200
lenghtSMA = input(200, title = "SMA lenght")
sma200 = ta.sma(close, lenghtSMA)
// ATR stop-loss
atrLength = input.int(20, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrValue = ta.atr(atrLength)
var float long_stop_level = na
var float short_stop_level = na
var float tp1_level = na
var float tp2_level = na
var float tp3_level = na
// Strategy entry
long = (rsi_oversold ) and close > sma200
// Take Profit levels
tp_1 = input.float(5.0, "TP 1", minval=0.1, step=0.1)
tp_2 = input.float(10.0, "TP 2", minval=0.2, step=0.1)
tp_3 = input.float(15.0, "TP 3", minval=0.3, step=0.1)
if long
strategy.entry('Long', strategy.long)
long_stop_level := close - atrMultiplier * atrValue
tp1_level := strategy.position_avg_price * (1 + tp_1 / 100)
tp2_level := strategy.position_avg_price * (1 + tp_2 / 100)
tp3_level := strategy.position_avg_price * (1 + tp_3 / 100)
// basic SL - this code is from author RafaelZioni, modified by wielkieef
sl = input.float(25.0, 'Basic Stop Loss %', step=0.1)
per(procent) =>
strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
// ATR SL
if (strategy.position_size > 0 and (close <= long_stop_level))
strategy.close("Long")
tp1_level := na
tp2_level := na
tp3_level := na
plot(long_stop_level, color=color.orange, linewidth=2, title="Long Stop Loss")
// TP levels
if (strategy.position_size > 0)
if (not na(tp1_level) and close >= tp1_level)
tp1_level := na
if (not na(tp2_level) and close >= tp2_level)
tp2_level := na
if (not na(tp3_level) and close >= tp3_level)
tp3_level := na
plot(strategy.position_size > 0 and not na(tp1_level) ? tp1_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 1")
plot(strategy.position_size > 0 and not na(tp2_level) ? tp2_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 2")
plot(strategy.position_size > 0 and not na(tp3_level) ? tp3_level : na, color=color.gray, style=plot.style_circles , linewidth=1, title="Take Profit 3")
// Strategy exit points for Take Profits
strategy.exit('TP 1', from_entry="Long", qty_percent=33, profit=per(tp_1), loss=per(sl))
strategy.exit('TP 2', from_entry="Long", qty_percent=66, profit=per(tp_2), loss=per(sl))
strategy.exit('TP 3', from_entry="Long", qty_percent=100, profit=per(tp_3), loss=per(sl))
// by wielkieef