
Trata-se de uma estratégia de rotação inteligente baseada em um período de tempo, que obtém lucros por meio de negociações rotativas em vários níveis em um determinado período de tempo. A estratégia usa um mecanismo de gerenciamento de posições flexível, que pode ajustar automaticamente a direção da negociação de acordo com o ambiente do mercado, além de ter funções de controle de risco.
A estratégia controla a negociação principalmente através do período de tempo e do estado de posição. Primeiro, a função inActivePeriod () determina se a negociação está dentro do intervalo de negociação válida da linha K 500 mais recente. Dentro do intervalo válido, a estratégia decide o comportamento de negociação com base em variáveis como o estado de posição (positionHeld), o tempo de posição (barsHeld) e o tempo de suspensão (barsPaused). Quando o modo de negociação de swing é ativado, a estratégia gira rapidamente em direção multi-espacial; Quando o modo de negociação de swing é desativado, a estratégia equilibra a posição após 3 ciclos de posição e aguarda novas oportunidades de negociação.
A estratégia tem uma forte flexibilidade e adaptabilidade para obter ganhos de mercado por meio de controle de ciclo de tempo e rotação multi-espaço. Embora haja alguns riscos, a estabilidade e a lucratividade da estratégia podem ser significativamente aumentadas por meio de medidas razoáveis de otimização e controle de risco. O principal benefício da estratégia reside na sua lógica de negociação simples e eficaz, adaptada a estratégias básicas para otimização e expansão.
/*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)