Esta é uma estratégia de rotação inteligente baseada em períodos de tempo que procura gerar retornos através de negociação de rotação longa-curta dentro de períodos de tempo especificados. A estratégia emprega um mecanismo de gerenciamento de posição flexível que pode ajustar automaticamente a direção da negociação de acordo com as condições do mercado, incorporando funções de controle de risco. Ele suporta negociação bidirecional e modo de negociação de balanço opcional, demonstrando forte adaptabilidade.
A estratégia controla principalmente a negociação através de períodos de tempo e status da posição. Primeiro, a função inActivePeriod (()) determina se a negociação está dentro do intervalo de negociação efetivo dos últimos 500 bares. Dentro do intervalo efetivo, a estratégia decide ações de negociação com base em variáveis como status da posição (positionHeld), tempo de retenção (barsHeld) e tempo de pausa (barsPaused).
Esta estratégia atinge retornos de mercado através do controle de período de tempo e rotação longa-curta, demonstrando forte flexibilidade e adaptabilidade. Embora existam certos riscos, a estabilidade e lucratividade da estratégia podem ser significativamente melhoradas através de otimização razoável e medidas de controle de risco.
/*backtest start: 2024-10-12 00:00:00 end: 2024-11-11 00:00:00 period: 4h basePeriod: 4h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Tickerly Test Strategy", overlay=true) // Inputs longEnabled = input.bool(true, "Enable Long Trades") shortEnabled = input.bool(true, "Enable Short Trades") swingEnabled = input.bool(false, "Enable Swing Trading") // Variables var positionHeld = 0 var barsHeld = 0 var barsPaused = 0 var lastAction = "none" // Function to determine if we're in the last 500 bars inActivePeriod() => barIndex = bar_index lastBarIndex = last_bar_index barIndex >= (lastBarIndex - 499) // Main strategy logic if inActivePeriod() if swingEnabled if positionHeld == 0 and barstate.isconfirmed if lastAction != "long" strategy.entry("Long", strategy.long) positionHeld := 1 barsHeld := 0 lastAction := "long" else strategy.entry("Short", strategy.short) positionHeld := -1 barsHeld := 0 lastAction := "short" if positionHeld != 0 barsHeld += 1 if barsHeld >= 2 if positionHeld == 1 strategy.entry("Short", strategy.short) positionHeld := -1 barsHeld := 0 lastAction := "short" else strategy.entry("Long", strategy.long) positionHeld := 1 barsHeld := 0 lastAction := "long" else if positionHeld == 0 and barsPaused >= 1 and barstate.isconfirmed if longEnabled and shortEnabled if lastAction != "long" strategy.entry("Long", strategy.long) positionHeld := 1 barsHeld := 0 barsPaused := 0 lastAction := "long" else strategy.entry("Short", strategy.short) positionHeld := -1 barsHeld := 0 barsPaused := 0 lastAction := "short" else if longEnabled strategy.entry("Long", strategy.long) positionHeld := 1 barsHeld := 0 barsPaused := 0 lastAction := "long" else if shortEnabled strategy.entry("Short", strategy.short) positionHeld := -1 barsHeld := 0 barsPaused := 0 lastAction := "short" if positionHeld != 0 barsHeld += 1 if barsHeld >= 3 strategy.close_all() positionHeld := 0 barsHeld := 0 barsPaused := 0 // Reset pause counter when exiting a position else barsPaused += 1 // Plotting active period for visual confirmation plot(inActivePeriod() ? 1 : 0, "Active Period", color=color.new(color.blue, 80), style=plot.style_areabr)