Esta estratégia visa identificar potenciais oportunidades de retração no mercado. Emprega um sistema de média móvel dupla com uma média móvel de longo prazo (MA1) e uma média móvel de curto prazo (MA2). O principal objetivo é ir longo quando o preço de fechamento está abaixo da MA1 mas acima da MA2, sinalizando um potencial retração dentro da tendência geral.
A estratégia utiliza duas médias móveis: MA1 (a longo prazo) e MA2 (a curto prazo). A lógica é que, se os preços recuarem brevemente para testar o suporte da tendência de longo prazo, pode apresentar uma oportunidade longa. Especificamente, se o preço de fechamento permanecer acima do suporte de longo prazo (MA1), a tendência principal permanece intacta. Mas se o preço de fechamento quebrar abaixo do MA (MA2) de curto prazo, mas ainda se mantiver acima do MA (MA1) de longo prazo, isso sinaliza uma configuração de pullback do livro.
As vantagens desta estratégia incluem:
Os riscos a tomar em consideração:
Algumas formas de otimizar e mitigar os riscos:
Algumas formas de melhorar a estratégia:
Em resumo, esta é uma estratégia de pullback de reversão de média direta. Identifica configurações de pullback com a abordagem de MA dupla e gerencia o risco com paradas adaptativas. A estratégia é fácil de entender e implementar com ajuste flexível. Os próximos passos são otimizações adicionais em torno de elementos como parâmetros de MA, stop-loss, filtros para tornar a estratégia mais robusta.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © ZenAndTheArtOfTrading / www.PineScriptMastery.com // @version=5 strategy("Simple Pullback Strategy", overlay=true, initial_capital=50000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, // 100% of balance invested on each trade commission_type=strategy.commission.cash_per_contract, commission_value=0.005) // Interactive Brokers rate // Get user input i_ma1 = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA") i_ma2 = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA") i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline") i_lowerClose = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2") i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Get indicator values ma1 = ta.sma(close, i_ma1) ma2 = ta.sma(close, i_ma2) // Check filter(s) f_dateFilter =true // Check buy/sell conditions var float buyPrice = 0 buyCondition = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter sellCondition = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1]) stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent // Enter positions if buyCondition strategy.entry(id="Long", direction=strategy.long) if buyCondition[1] buyPrice := open // Exit positions if sellCondition or stopCondition strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : "")) buyPrice := na // Draw pretty colors plot(buyPrice, color=color.lime, style=plot.style_linebr) plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1) plot(ma1, color=color.blue) plot(ma2, color=color.orange)