
A estratégia é um sistema de negociação adaptável que combina o acompanhamento clássico de tendências em linha dupla e o controle de risco dinâmico do ATR. A estratégia oferece dois modos de negociação: o modo básico usa um simples cruzamento de tendências em linha dupla para acompanhar a tendência, o modo avançado adiciona filtragem de tendências em quadros de tempo mais elevados e um mecanismo de parada dinâmico baseado no ATR. A estratégia pode alternar entre os dois modos por meio de um menu de download simples, atendendo à facilidade de uso dos iniciantes e atendendo às necessidades de controle de risco dos comerciantes experientes.
A estratégia 1 ((modo básico) usa um sistema de dupla equilíbrio de 21 e 49 dias, que gera vários sinais quando a média rápida atravessa a média lenta para cima. O objetivo de lucro pode ser selecionado em porcentagem ou ponto, oferecendo um recurso opcional de parada de perda móvel para bloquear o lucro. A estratégia 2 ((modo avançado) baseia-se na estratégia de dupla equilíbrio. O filtro de tendência de nível de linha diária é adicionado à base do sistema de dupla equilíbrio e só é permitido entrar em jogo quando o preço está acima da média do quadro de tempo mais alto.
Trata-se de um sistema de estratégia de negociação concebido de forma racional e funcional. A combinação de seguimento de tendências de dupla linha e controle de risco ATR garante a fiabilidade da estratégia e oferece um bom gerenciamento de risco. O design de dois modos atende às necessidades de diferentes níveis de comerciantes, e a rica configuração de parâmetros oferece espaço suficiente para otimização.
/*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