Esta estratégia é um sistema de negociação avançado que combina trailing stops dinâmicos, rácios risco-recompensa e saídas extremas do RSI. Ele identifica padrões específicos (padrões de barra paralela e padrões de barra de pin) para entrada no comércio, enquanto utiliza ATR e mínimos recentes para colocação dinâmica de stop loss, e determina metas de lucro com base em rácios risco-recompensa pré-definidos.
A lógica do núcleo inclui vários componentes-chave:
Esta é uma estratégia de negociação bem concebida que combina vários conceitos de análise técnica madura para construir um sistema de negociação completo. Os pontos fortes da estratégia estão em seu sistema abrangente de gerenciamento de riscos e regras de negociação flexíveis, enquanto a atenção precisa ser dada à otimização de parâmetros e adaptabilidade do mercado. Através das direções de otimização sugeridas, há espaço para melhoria adicional da estratégia.
/*backtest start: 2024-11-10 00:00:00 end: 2024-12-09 08:00:00 period: 2h basePeriod: 2h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © ZenAndTheArtOfTrading | www.TheArtOfTrading.com // @version=5 strategy("Trailing stop 1", overlay=true) // Get user input int BAR_LOOKBACK = input.int(10, "Bar Lookback") int ATR_LENGTH = input.int(14, "ATR Length") float ATR_MULTIPLIER = input.float(1.0, "ATR Multiplier") rr = input.float(title="Risk:Reward", defval=3) // Basic definition var float shares=na risk = 1000 var float R=na E = strategy.position_avg_price // Input option to choose long, short, or both side = input.string("Long", title="Side", options=["Long", "Short", "Both"]) // RSI exit option RSIexit = input.string("Yes", title="Exit at RSI extreme?", options=["Yes", "No"]) RSIup = input(75) RSIdown = input(25) // Get indicator values float atrValue = ta.atr(ATR_LENGTH) // Calculate stop loss values var float trailingStopLoss = na float longStop = ta.lowest(low, BAR_LOOKBACK) - (atrValue * ATR_MULTIPLIER) float shortStop = ta.highest(high, BAR_LOOKBACK) + (atrValue * ATR_MULTIPLIER) // Check if we can take trades bool canTakeTrades = not na(atrValue) bgcolor(canTakeTrades ? na : color.red) //Long pattern //Two pin bar onepinbar = (math.min(close,open)-low)/(high-low)>0.6 and math.min(close,open)-low>ta.sma(high-low,14) twopinbar = onepinbar and onepinbar[1] notatbottom = low>ta.lowest(low[1],10) // Parallel bigred = (open-close)/(high-low)>0.8 and high-low>ta.sma(high-low,14) biggreen = (close-open)/(high-low)>0.8 and high-low>ta.sma(high-low,14) parallel = bigred[1] and biggreen atbottom = low==ta.lowest(low,10) // Enter long trades (replace this entry condition) longCondition = parallel if (longCondition and canTakeTrades and strategy.position_size == 0 and (side == "Long" or side == "Both")) R:= close-longStop shares:= risk/R strategy.entry("Long", strategy.long,qty=shares) // Enter short trades (replace this entry condition) shortCondition = parallel if (shortCondition and canTakeTrades and strategy.position_size == 0 and (side == "Short" or side == "Both")) R:= shortStop - close shares:= risk/R strategy.entry("Short", strategy.short,qty=shares) // Update trailing stop if (strategy.position_size > 0) if (na(trailingStopLoss) or longStop > trailingStopLoss) trailingStopLoss := longStop else if (strategy.position_size < 0) if (na(trailingStopLoss) or shortStop < trailingStopLoss) trailingStopLoss := shortStop else trailingStopLoss := na // Exit trades with trailing stop strategy.exit("Long Exit", "Long", stop=trailingStopLoss, limit = E + rr*R ) strategy.exit("Short Exit", "Short", stop=trailingStopLoss, limit = E - rr*R) //Close trades at RSI extreme if ta.rsi(high,14)>RSIup and RSIexit == "Yes" strategy.close("Long") if ta.rsi(low,14)<RSIdown and RSIexit == "Yes" strategy.close("Short") // Draw stop loss plot(trailingStopLoss, "Stop Loss", color.red, 1, plot.style_linebr)