Esta estratégia combina o clássico seguimento de tendência de média móvel dupla com gerenciamento de risco dinâmico baseado em ATR. Ele oferece dois modos de negociação: um modo básico usando cruzamento de média móvel simples para seguir a tendência e um modo avançado incorporando filtragem de tendência de prazo mais alto e mecanismos dinâmicos de stop-loss baseados em ATR. Os comerciantes podem alternar entre os modos através de um menu suspenso simples, atendendo às necessidades de gerenciamento de risco de iniciantes e experientes.
A estratégia 1 (Modo Básico) emprega um sistema de média móvel dupla de 21 e 49 dias, gerando sinais longos quando o MA rápido cruza acima do MA lento. As metas de lucro podem ser definidas em porcentagem ou pontos, com uma parada de trailering opcional para bloquear os lucros. A estratégia 2 (Modo Avançado) adiciona filtragem de tendência diária, permitindo entradas apenas quando o preço está acima da média móvel de prazo mais alto. Incorpora um stop-loss dinâmico baseado em ATR de 14 períodos que se ajusta à volatilidade do mercado e inclui uma funcionalidade de captação de lucro parcial para proteger ganhos.
Este é um sistema de negociação bem concebido e abrangente. A combinação de duplo seguimento de tendência média móvel e gerenciamento de risco baseado em ATR garante fiabilidade e controle de risco eficaz. O design de modo duplo atende às necessidades de diferentes níveis de comerciantes, enquanto configurações de parâmetros ricas fornecem amplas oportunidades de otimização. Os comerciantes são aconselhados a começar com parâmetros conservadores na negociação ao vivo e otimizar gradualmente para melhores resultados.
/*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 Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © shaashish1 //@version=5 strategy("Dual Strategy Selector V2 - Cryptogyani", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100000) //#region STRATEGY SELECTION strategyOptions = input.string(title="Select Strategy", defval="Strategy 1", options=["Strategy 1", "Strategy 2"], group="Strategy Selection") //#endregion STRATEGY SELECTION // ####################### STRATEGY 1: Original Logic ######################## //#region STRATEGY 1 INPUTS s1_fastMALen = input.int(defval=21, title="Fast SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA") s1_slowMALen = input.int(defval=49, title="Slow SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA") s1_takeProfitMode = input.string(defval="Percentage", title="Take Profit Mode (S1)", options=["Percentage", "Pips"], group="Strategy 1 Settings") s1_takeProfitPerc = input.float(defval=7.0, title="Take Profit % (S1)", minval=0.05, step=0.05, group="Strategy 1 Settings") / 100 s1_takeProfitPips = input.float(defval=50, title="Take Profit Pips (S1)", minval=1, step=1, group="Strategy 1 Settings") s1_trailingTakeProfitEnabled = input.bool(defval=false, title="Enable Trailing (S1)", group="Strategy 1 Settings") //#endregion STRATEGY 1 INPUTS // ####################### STRATEGY 2: Enhanced with Recommendations ######################## //#region STRATEGY 2 INPUTS s2_fastMALen = input.int(defval=20, title="Fast SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA") s2_slowMALen = input.int(defval=50, title="Slow SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA") s2_atrLength = input.int(defval=14, title="ATR Length (S2)", group="Strategy 2 Settings", inline="ATR") s2_atrMultiplier = input.float(defval=1.5, title="ATR Multiplier for Stop-Loss (S2)", group="Strategy 2 Settings", inline="ATR") s2_partialTakeProfitPerc = input.float(defval=50.0, title="Partial Take Profit % (S2)", minval=10, maxval=100, step=10, group="Strategy 2 Settings") s2_timeframeTrend = input.timeframe(defval="1D", title="Higher Timeframe for Trend Filter (S2)", group="Strategy 2 Settings") //#endregion STRATEGY 2 INPUTS // ####################### GLOBAL VARIABLES ######################## var float takeProfitPrice = na var float stopLossPrice = na var float trailingStopPrice = na var float fastMA = na var float slowMA = na var float higherTimeframeTrendMA = na var bool validOpenLongPosition = false // Precalculate higher timeframe values (global scope for Strategy 2) higherTimeframeTrendMA := request.security(syminfo.tickerid, s2_timeframeTrend, ta.sma(close, s2_slowMALen)) // ####################### LOGIC ######################## if (strategyOptions == "Strategy 1") // Strategy 1 Logic (Original Logic Preserved) fastMA := ta.sma(close, s1_fastMALen) slowMA := ta.sma(close, s1_slowMALen) openLongPosition = ta.crossover(fastMA, slowMA) validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0 // Take Profit Price takeProfitPrice := if (s1_takeProfitMode == "Percentage") close * (1 + s1_takeProfitPerc) else close + (s1_takeProfitPips * syminfo.mintick) // Trailing Stop Price (if enabled) if (strategy.position_size > 0 and s1_trailingTakeProfitEnabled) trailingStopPrice := high - (s1_takeProfitPips * syminfo.mintick) else trailingStopPrice := na else if (strategyOptions == "Strategy 2") // Strategy 2 Logic with Recommendations fastMA := ta.sma(close, s2_fastMALen) slowMA := ta.sma(close, s2_slowMALen) openLongPosition = ta.crossover(fastMA, slowMA) and close > higherTimeframeTrendMA validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0 // ATR-Based Stop-Loss atr = ta.atr(s2_atrLength) stopLossPrice := close - (atr * s2_atrMultiplier) // Partial Take Profit Logic takeProfitPrice := close * (1 + (s2_partialTakeProfitPerc / 100)) //#endregion STRATEGY LOGIC // ####################### PLOTTING ######################## plot(series=fastMA, title="Fast SMA", color=color.yellow, linewidth=1) plot(series=slowMA, title="Slow SMA", color=color.orange, linewidth=1) plot(series=takeProfitPrice, title="Take Profit Price", color=color.teal, linewidth=1, style=plot.style_linebr) // Trailing Stop and ATR Stop-Loss Plots (Global Scope) plot(series=(strategyOptions == "Strategy 1" and s1_trailingTakeProfitEnabled) ? trailingStopPrice : na, title="Trailing Stop", color=color.red, linewidth=1, style=plot.style_linebr) plot(series=(strategyOptions == "Strategy 2") ? stopLossPrice : na, title="ATR Stop-Loss", color=color.red, linewidth=1, style=plot.style_linebr) //#endregion PLOTTING // ####################### POSITION ORDERS ######################## //#region POSITION ORDERS if (validOpenLongPosition) strategy.entry(id="Long Entry", direction=strategy.long) if (strategyOptions == "Strategy 1") if (strategy.position_size > 0) if (s1_trailingTakeProfitEnabled) strategy.exit(id="Trailing Take Profit", from_entry="Long Entry", stop=trailingStopPrice) else strategy.exit(id="Take Profit", from_entry="Long Entry", limit=takeProfitPrice) else if (strategyOptions == "Strategy 2") if (strategy.position_size > 0) strategy.exit(id="Partial Take Profit", from_entry="Long Entry", qty_percent=s2_partialTakeProfitPerc, limit=takeProfitPrice) strategy.exit(id="Stop Loss", from_entry="Long Entry", stop=stopLossPrice) //#endregion POSITION ORDERS