Ini adalah strategi rotasi cerdas berdasarkan periode waktu yang bertujuan untuk menghasilkan laba melalui perdagangan rotasi panjang-pendek dalam periode waktu yang ditentukan. Strategi ini menggunakan mekanisme manajemen posisi yang fleksibel yang dapat secara otomatis menyesuaikan arah perdagangan sesuai dengan kondisi pasar sambil menggabungkan fungsi pengendalian risiko.
Strategi ini terutama mengontrol perdagangan melalui periode waktu dan status posisi. Pertama, fungsi inActivePeriod (()) menentukan apakah perdagangan berada dalam interval perdagangan efektif dari 500 bar terakhir. Dalam interval efektif, strategi memutuskan tindakan perdagangan berdasarkan variabel seperti status posisi (positionHeld), waktu menahan (barsHeld), dan waktu jeda (barsPaused). Ketika mode perdagangan ayunan diaktifkan, strategi berputar dengan cepat antara arah panjang dan pendek; ketika dinonaktifkan, posisi ditutup setelah 3 periode dan menunggu peluang perdagangan baru.
Strategi ini mencapai pengembalian pasar melalui pengendalian periode waktu dan rotasi jangka pendek, menunjukkan fleksibilitas dan kemampuan beradaptasi yang kuat. Meskipun ada risiko tertentu, stabilitas dan profitabilitas strategi dapat ditingkatkan secara signifikan melalui pengoptimalan dan langkah-langkah pengendalian risiko yang wajar. Keuntungan utamanya terletak pada logika perdagangan yang sederhana namun efektif, menjadikannya cocok sebagai strategi dasar untuk optimasi dan ekspansi lebih 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)