
A estratégia de ruptura de dupla linha de equilíbrio é uma estratégia de acompanhamento de tendências baseada na intersecção de médias móveis em dois períodos diferentes como um sinal de compra e venda. A estratégia usa a média rápida e a média lenta como pontos de entrada de negociação, após a intersecção, determina a direção da tendência e estabelece uma posição correspondente de overhead ou de overhead.
A estratégia usa duas médias móveis: uma média rápida e uma média lenta. A média rápida é geralmente definida como um período mais curto (como um período de 15), para capturar mudanças de preços de curto prazo. A média lenta é geralmente definida como um período mais longo (como um período de 21), para determinar a direção da tendência principal.
A estratégia pode ser ajustada para capturar tendências por meio da configuração de diferentes combinações de períodos de MA. Uma combinação de MA mais curta pode capturar oportunidades de mudanças de preço em períodos mais curtos; uma combinação de MA mais longa pode filtrar oscilações e capturar apenas tendências em níveis de linha mais longa.
A estratégia também inclui módulos de gestão de risco: stop loss, stop loss, stop loss móvel. Isso pode limitar a perda máxima de uma única transação, ajudando a proteger o lucro geral.
A estratégia de dupla linha de equilíbrio tem as seguintes vantagens:
A estratégia de dupla linha de equilíbrio também apresenta alguns riscos, principalmente nos seguintes aspectos:
Esses riscos podem ser melhorados e otimizados por meio de ajustes nos parâmetros de MA, adição de condições de filtragem e otimização da lógica de stop-loss.
A estratégia de dupla linha de equilíbrio pode ser otimizada em vários aspectos:
Com essas otimizações e melhorias, é possível aumentar significativamente a taxa de vitória, a taxa de retorno e a taxa de retorno do risco.
A estratégia de ruptura de dupla linha é, em geral, uma estratégia de acompanhamento de tendências que é fácil de implementar e otimizar. Ela possui vantagens como facilidade de operação, flexibilidade e controle de risco, e é ideal para ser uma estratégia de entrada para negociação quantitativa.
/*backtest
start: 2022-12-10 00:00:00
end: 2023-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true)
maFastSource = input(defval = ohlc4, title = "Fast MA Source")
maFastLength = input(defval = 15, title = "Fast MA Period", minval = 1)
maSlowSource = input(defval = ohlc4, title = "Slow MA Source")
maSlowLength = input(defval = 21, title = "Slow MA Period", minval = 1)
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0)
inpStopLoss = input(defval = 100, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
useTimeLimit = input(defval = true, title = "Use Start Time Limiter?")
startYear = input(defval = 2018, title = "Start From Year", minval = 0, step = 1)
startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1)
startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1)
startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1)
startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1)
startTimeOk() =>
inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
timeOk = time > inputTime ? true : false
r = (useTimeLimit and timeOk) or not useTimeLimit
maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)
fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50)
aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false
if( startTimeOk() )
enterLong = not tradeDirection[1] and tradeDirection
exitLong = tradeDirection[1] and not tradeDirection
strategy.entry( id = "Long", long = true, when = enterLong )
//strategy.close( id = "Long", when = exitLong )
enterShort = tradeDirection[1] and not tradeDirection
exitShort = not tradeDirection[1] and tradeDirection
strategy.entry( id = "Short", long = false, when = enterShort )
//strategy.close( id = "Short", when = exitShort )
strategy.exit("Exit Long", from_entry = "Long", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)
strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)