Ini adalah strategi putaran pintar berdasarkan tempoh masa yang bertujuan untuk menjana pulangan melalui perdagangan putaran panjang-pendek dalam tempoh masa yang ditentukan. Strategi ini menggunakan mekanisme pengurusan kedudukan yang fleksibel yang dapat menyesuaikan arah perdagangan secara automatik mengikut keadaan pasaran sambil menggabungkan fungsi kawalan risiko. Ia menyokong perdagangan dua arah dan mod perdagangan ayunan pilihan, menunjukkan kesesuaian yang kuat.
Strategi ini terutamanya mengawal perdagangan melalui tempoh masa dan status kedudukan. Pertama, fungsi inActivePeriod (()) menentukan sama ada perdagangan berada dalam selang perdagangan efektif 500 bar terakhir. Dalam selang yang berkesan, strategi memutuskan tindakan perdagangan berdasarkan pembolehubah seperti status kedudukan (positionHeld), masa memegang (barsHeld), dan masa rehat (barsPaused). Apabila mod perdagangan ayunan diaktifkan, strategi berputar dengan cepat antara arah panjang dan pendek; apabila dilumpuhkan, kedudukan ditutup selepas 3 tempoh dan menunggu peluang perdagangan baru.
Strategi ini mencapai pulangan pasaran melalui kawalan tempoh masa dan putaran pendek yang panjang, menunjukkan fleksibiliti dan kesesuaian yang kuat. Walaupun terdapat risiko tertentu, kestabilan dan keuntungan strategi dapat ditingkatkan dengan ketara melalui pengoptimuman dan langkah kawalan risiko yang munasabah. Kelebihan utamanya terletak pada logik perdagangan yang mudah namun berkesan, menjadikannya sesuai sebagai strategi asas untuk pengoptimuman dan pengembangan lanjut.
/*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)