
Se trata de una estrategia de rotación inteligente basada en el ciclo de tiempo, que obtiene ganancias al realizar operaciones de rotación múltiple en un período de tiempo determinado. La estrategia utiliza un mecanismo de administración de posiciones flexible que puede ajustar automáticamente la dirección de las operaciones según el entorno del mercado, mientras que tiene una función de control de riesgo. La estrategia admite operaciones bidireccionales múltiple y puede iniciar opcionalmente el modo de negociación de oscilación, con una gran adaptabilidad.
La estrategia controla la operación principalmente a través del ciclo de tiempo y el estado de la posición. En primer lugar, la función inActivePeriod () determina si está dentro del rango de operaciones válidas de las líneas K 500 más recientes. Dentro del rango de operaciones válidas, la estrategia decide el comportamiento de la operación en función de variables como el estado de la posición (positionHeld), el tiempo de posición (barsHeld) y el tiempo de pausa (barsPaused). Cuando se activa el modo de negociación de oscilación, la estrategia se mueve rápidamente en varias direcciones espaciales; cuando se desactiva el modo de negociación de oscilación, la estrategia se mantiene en posición después de 3 ciclos de posición y espera nuevas oportunidades de negociación.
La estrategia obtiene ganancias del mercado a través del control del ciclo de tiempo y la rotación de múltiples espacios, y tiene una gran flexibilidad y adaptabilidad. Si bien existen algunos riesgos, la estabilidad y la rentabilidad de la estrategia se pueden mejorar significativamente con medidas razonables de optimización y control de riesgos. La principal ventaja de la estrategia reside en su lógica de negociación simple y efectiva, que se adapta a la optimización y expansión de la estrategia básica.
/*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)