Golden Cross Keltner Channel Trend Following Strategy adalah strategi yang hanya berdagang ke arah tren.
Strategi ini menggunakan dua rata-rata bergerak, rata-rata bergerak jangka pendek dan jangka panjang, untuk membentuk salib emas dan salib kematian untuk menentukan arah tren.
Secara khusus, strategi ini terlebih dahulu memeriksa apakah rata-rata bergerak jangka panjang berada di atas rata-rata bergerak jangka pendek, yang menunjukkan salib emas dan tren kenaikan.
Berdasarkan penentuan tren, jika harga pecah di atas rel atas, sinyal panjang dihasilkan. Jika harga pecah di bawah rel bawah, sinyal pendek dihasilkan. Pengguna dapat menyesuaikan periode MA dan lebar saluran untuk menyesuaikan parameter strategi.
Setelah masuk, strategi menggunakan kelipatan ATR yang ditentukan pengguna untuk mengambil keuntungan dan stop-loss.
Strategi ini menggabungkan keuntungan dari trend following dan channel breakout, memungkinkan identifikasi tren yang efektif dan menangkap peluang.
Salib emas menyaring sinyal palsu yang tidak selaras dengan tren utama.
Penembusan saluran dengan arah tren meningkatkan akurasi masuk.
Take-profit dan stop-loss mempertahankan keuntungan dan mengendalikan risiko.
Pengaturan parameter yang fleksibel sesuai dengan produk dan lingkungan yang berbeda.
Baik panjang maupun pendek, memperluas penerapan.
Meskipun ada manfaatnya, ada beberapa risiko yang perlu diperhatikan:
Melewatkan kesempatan untuk membalikkan.
Perubahan tren dapat menyebabkan kerugian.
Parameter yang tidak tepat dapat menyebabkan over-trading atau trading langka.
Ada risiko dalam semalam.
Risiko yang cocok dengan kurva.
Solusi termasuk optimasi parameter, penyesuaian periode MA yang tepat waktu, dan kontrol ukuran posisi.
Ada ruang untuk perbaikan lebih lanjut:
Menambahkan lebih banyak indikator untuk membangun model multi-faktor dan meningkatkan akurasi.
Optimasi parameter melalui pembelajaran mesin untuk kemampuan adaptasi pasar.
Aturan mengambil keuntungan dan stop-loss yang dinamis untuk menyeimbangkan profitabilitas dan imbalan.
Dimensi posisi dinamis berdasarkan volatilitas.
Penelitian parameter optimal untuk produk yang berbeda.
Kurangi frekuensi perdagangan untuk meminimalkan biaya.
Golden Cross Keltner Channel Trend Following Strategy umumnya merupakan sistem trend following yang stabil dan dapat diandalkan. Dengan menggabungkan penyaringan tren dan channel breakout, ia mengidentifikasi peluang probabilitas tinggi yang selaras dengan arah tren. Optimasi dan peningkatan lebih lanjut dapat membuatnya menjadi kerangka perdagangan yang kuat.
/*backtest start: 2022-10-26 00:00:00 end: 2023-11-01 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © OversoldPOS //@version=5 // strategy("Keltner Channel Strategy by OversoldPOS", overlay=true,initial_capital = 100000,default_qty_type = strategy.percent_of_equity,default_qty_value = 10, commission_type = strategy.commission.cash_per_order, commission_value = 7) // Parameters length = input(21, title="MA Length") Entrymult = input(1, title="Entry ATR") profit_mult = input(4, title="Profit Taker") exit_mult = input(-1, title="Exit ATR") // Moving Average Type Input ma_type = input.string("SMA", title="Moving Average Type", options=["SMA", "EMA", "WMA"]) // Calculate Keltner Channels for different ATR multiples atr_value = ta.atr(length) basis = switch ma_type "SMA" => ta.sma(close, length) "EMA" => ta.ema(close, length) "WMA" => ta.wma(close, length) // EntryKeltLong = basis + Entrymult * ta.atr(10) EntryKeltShort = basis - Entrymult * ta.atr(10) upper_channel1 = basis + 1 * ta.atr(10) lower_channel1 = basis - 1 * ta.atr(10) upper_channel2 = basis + 2 * ta.atr(10) lower_channel2 = basis - 2 * ta.atr(10) upper_channel3 = basis + 3 * ta.atr(10) lower_channel3 = basis - 3 * ta.atr(10) upper_channel4 = basis + 4 * ta.atr(10) lower_channel4 = basis - 4 * ta.atr(10) // Entry condition parameters long_entry_condition = input(true, title="Long Positions") short_entry_condition = input(true, title="Enable Short Positions") // Additional conditions for long and short entries is_long_entry = ta.ema(close, 20) > ta.ema(close, 50) is_short_entry = ta.ema(close, 20) < ta.ema(close, 50) // Additional conditions for long and short entries MAShort = input(50, title="Short MA for Golden Cross") MALong = input(200, title="Long MA for Golden Cross") is_long_entry2 = ta.ema(close, MAShort) > ta.ema(close, MALong) is_short_entry2 = ta.ema(close, MAShort) < ta.ema(close, MALong) // Exit condition parameters long_exit_condition1_enabled = input(true, title="Enable Long Profit Taker") long_exit_condition2_enabled = input(true, title="Enable Long Stop") short_exit_condition1_enabled = input(true, title="Enable Short Profit Taker") short_exit_condition2_enabled = input(true, title="Enable Short Stop") // Take Profit condition parameters take_profit_enabled = input(true, title="Enable Take Profit Condition") Takeprofit = basis + profit_mult * atr_value STakeprofit = basis - profit_mult * atr_value // Long entry condition long_condition = long_entry_condition and ta.crossover(close, EntryKeltLong) and is_long_entry2 // Short entry condition short_condition = short_entry_condition and ta.crossunder(close, EntryKeltShort) and is_short_entry2 // Exit conditions long_exit_condition1 = long_exit_condition1_enabled and close > Takeprofit long_exit_condition2 = long_exit_condition2_enabled and close < basis + exit_mult * atr_value short_exit_condition1 = short_exit_condition1_enabled and close < STakeprofit short_exit_condition2 = short_exit_condition2_enabled and close > basis - exit_mult * atr_value // Strategy logic if (long_condition) strategy.entry("Long", strategy.long) if (short_condition) strategy.entry("Short", strategy.short) if (long_exit_condition1 or long_exit_condition2) strategy.close("Long") if (short_exit_condition1 or short_exit_condition2) strategy.close("Short") // Moving Averages var float MA1 = na var float MA2 = na if (ma_type == "SMA") MA1 := ta.sma(close, MAShort) MA2 := ta.sma(close, MALong) else if (ma_type == "EMA") MA1 := ta.ema(close, MAShort) MA2 := ta.ema(close, MALong) else if (ma_type == "WMA") MA1 := ta.wma(close, MAShort) MA2 := ta.wma(close, MALong) // Plotting Keltner Channels with adjusted transparency transparentColor = color.rgb(255, 255, 255, 56) plot(upper_channel1, color=transparentColor, title="Upper Channel 1") plot(lower_channel1, color=transparentColor, title="Lower Channel 1") plot(upper_channel2, color=transparentColor, title="Upper Channel 2") plot(lower_channel2, color=transparentColor, title="Lower Channel 2") plot(upper_channel3, color=transparentColor, title="Upper Channel 3") plot(lower_channel3, color=transparentColor, title="Lower Channel 3") plot(upper_channel4, color=transparentColor, title="Upper Channel 4") plot(lower_channel4, color=transparentColor, title="Lower Channel 4") plot(basis, color=color.white, title="Basis") plot(MA1, color=color.rgb(4, 248, 216), linewidth=2, title="Middle MA") plot(MA2, color=color.rgb(220, 7, 248), linewidth=2, title="Long MA")