
Ini adalah strategi bergilir pintar berdasarkan kitaran masa, untuk mendapatkan keuntungan dengan melakukan perdagangan bergilir-gilir dalam tempoh masa yang ditetapkan. Strategi ini menggunakan mekanisme pengurusan kedudukan yang fleksibel, yang dapat menyesuaikan arah perdagangan secara automatik mengikut keadaan pasaran, sambil mempunyai fungsi kawalan risiko.
Strategi ini mengawal perdagangan melalui kitaran masa dan keadaan memegang kedudukan. Pertama, dengan fungsi inActivePeriod () untuk menentukan sama ada dalam jarak perdagangan yang sah dari 500 baris K yang paling dekat. Dalam jarak yang sah, strategi memutuskan tindakan perdagangan berdasarkan pembolehubah seperti keadaan memegang kedudukan (positionHeld), masa memegang kedudukan (barsHeld) dan masa berhenti (barsPaused). Apabila mod perdagangan berayun diaktifkan, strategi akan bergerak cepat dalam arah multirumah; apabila mod perdagangan berayun dinonaktifkan, strategi akan meratakan kedudukan selepas 3 kitaran memegang kedudukan dan menunggu peluang perdagangan baru.
Strategi ini memperoleh keuntungan pasaran dengan cara mengawal kitaran masa dan pergerakan multirole, mempunyai fleksibiliti dan kebolehsuaian yang kuat. Walaupun terdapat beberapa risiko, tetapi dengan langkah-langkah pengoptimuman dan kawalan risiko yang munasabah, kestabilan dan keuntungan strategi dapat ditingkatkan dengan ketara.
/*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)