
Esta estratégia usa um sistema de dupla equilíbrio para procurar oportunidades potenciais de ruptura em ações ou moedas digitais específicas. O princípio básico é comprar ações ou moedas digitais quando a curva de curto prazo rebota abaixo da média de longo prazo.
A estratégia usa uma média móvel simples (SMA) de dois períodos diferentes como sinal de negociação. O primeiro ciclo SMA é mais longo, representando a direção da tendência geral. O segundo ciclo SMA é mais curto, usado para capturar oscilações de preços de curto prazo.
Quando o SMA curto atravessa o SMA longo da parte inferior, o preço está em uma tendência de alta geral, então a estratégia abre uma posição multi-cabeça. Quando o preço cai e o SMA longo é re-testado, o que indica o fim do pullback curto, quando a estratégia considera o stop loss ou o lucro para encerrar a posição.
Além disso, a estratégia também estabelece condições de sobrevenda e sobrecompra para evitar transações em situações extremas. As posições só serão abertas quando estiverem simultaneamente satisfeitas as condições de dupla linha de equilíbrio e de avaliação razoável.
A estratégia ainda tem espaço para ser melhorada:
Esta estratégia integra as vantagens de acompanhamento de tendências e negociações de correção, usando um sistema de linha dupla para julgar a ocorrência de oportunidades. Ao mesmo tempo, a construção de certas condições de sobrecompra e sobrevenda evita a abertura de posições desnecessárias. Esta é uma estratégia de negociação quantitativa muito prática, que vale a pena estudar e otimizar.
/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=5
strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Inputs
ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA')
ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA')
sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters")
too_deep = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
too_thin = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
// Calculations
ma1 = ta.sma(close,ma_length1)
ma2 = ta.sma(close,ma_length2)
too_deep2 = (ma2/ma1-1) < too_deep
too_thin2 = (ma2/ma1-1) > too_thin
// Entry and close condtions
var float buy_price = 0
buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2
close_condition1 = (close > ma2) and strategy.position_size > 0 and (close < low[1])
stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na
close_condition2 = strategy.position_size > 0 and stop_distance > sl
stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na
// Entry and close orders
if buy_condition
strategy.entry('Long',strategy.long)
if buy_condition[1]
buy_price := open
if close_condition1 or close_condition2
strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : ""))
buy_price := na
plot(ma1,color = color.blue)
plot(ma2,color = color.orange)