
Ini adalah strategi rotasi cerdas berbasis siklus waktu, yang memperoleh keuntungan dengan melakukan perdagangan rotasi multi-posisi dalam periode waktu yang ditentukan. Strategi ini menggunakan mekanisme manajemen posisi yang fleksibel, yang dapat secara otomatis menyesuaikan arah perdagangan sesuai dengan lingkungan pasar, sambil memiliki fungsi kontrol risiko. Strategi ini mendukung perdagangan dua arah multi-posisi, dan dapat secara opsional memulai mode perdagangan berayun, dengan kemampuan beradaptasi yang kuat.
Strategi ini mengontrol perdagangan melalui siklus waktu dan status posisi. Pertama, dengan fungsi inActivePeriod () untuk menentukan apakah dalam kisaran perdagangan yang valid dari 500 garis K yang paling dekat. Dalam kisaran yang valid, strategi memutuskan tindakan perdagangan berdasarkan variabel seperti posisi memegang (positionHeld), waktu memegang (barsHeld), dan waktu berhenti (barsPaused). Ketika mode perdagangan berayun diaktifkan, strategi akan berputar dengan cepat di berbagai arah.
Strategi ini mengambil keuntungan dari pasar melalui kontrol siklus waktu dan rotasi multi-udara, memiliki fleksibilitas dan kemampuan beradaptasi yang kuat. Meskipun ada beberapa risiko, stabilitas dan profitabilitas strategi dapat ditingkatkan secara signifikan melalui pengoptimalan dan pengendalian risiko yang masuk akal.
/*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)