
Il s’agit d’une stratégie de rotation intelligente basée sur des cycles de temps, qui tire des bénéfices en effectuant des transactions rotatives à plusieurs aires au cours d’une période de temps spécifiée. La stratégie utilise un mécanisme de gestion de position flexible qui permet d’ajuster automatiquement la direction des transactions en fonction de l’environnement du marché, tout en ayant des fonctions de contrôle du risque.
La stratégie contrôle les transactions principalement par le biais de la période de temps et de l’état de la position. Tout d’abord, la fonction inActivePeriod () détermine si la position est dans la zone de négociation valide de la ligne K la plus proche de 500. Dans la zone de négociation valide, la stratégie décide du comportement de la transaction en fonction de variables telles que l’état de la position (positionHeld), le temps de position (barsHeld) et le temps de pause (barsPaused).
La stratégie tire parti des gains du marché grâce à la maîtrise des cycles de temps et à la rotation des espaces, et présente une grande flexibilité et adaptabilité. Bien que certains risques existent, la stabilité et la rentabilité de la stratégie peuvent être considérablement améliorées par des mesures d’optimisation et de contrôle des risques raisonnables. Le principal avantage de la stratégie réside dans sa logique de négociation simple et efficace, adaptée à une stratégie de base pour une optimisation et une expansion supplémentaires.
/*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)