Golden Cross Keltner Channel Trend Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2023-11-02 14:31:10
Tag:

img

Gambaran umum

Golden Cross Keltner Channel Trend Following Strategy adalah strategi yang hanya berdagang ke arah tren.

Prinsip

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.

Analisis Keuntungan

Strategi ini menggabungkan keuntungan dari trend following dan channel breakout, memungkinkan identifikasi tren yang efektif dan menangkap peluang.

  1. Salib emas menyaring sinyal palsu yang tidak selaras dengan tren utama.

  2. Penembusan saluran dengan arah tren meningkatkan akurasi masuk.

  3. Take-profit dan stop-loss mempertahankan keuntungan dan mengendalikan risiko.

  4. Pengaturan parameter yang fleksibel sesuai dengan produk dan lingkungan yang berbeda.

  5. Baik panjang maupun pendek, memperluas penerapan.

Analisis Risiko

Meskipun ada manfaatnya, ada beberapa risiko yang perlu diperhatikan:

  1. Melewatkan kesempatan untuk membalikkan.

  2. Perubahan tren dapat menyebabkan kerugian.

  3. Parameter yang tidak tepat dapat menyebabkan over-trading atau trading langka.

  4. Ada risiko dalam semalam.

  5. Risiko yang cocok dengan kurva.

Solusi termasuk optimasi parameter, penyesuaian periode MA yang tepat waktu, dan kontrol ukuran posisi.

Arahan Optimasi

Ada ruang untuk perbaikan lebih lanjut:

  1. Menambahkan lebih banyak indikator untuk membangun model multi-faktor dan meningkatkan akurasi.

  2. Optimasi parameter melalui pembelajaran mesin untuk kemampuan adaptasi pasar.

  3. Aturan mengambil keuntungan dan stop-loss yang dinamis untuk menyeimbangkan profitabilitas dan imbalan.

  4. Dimensi posisi dinamis berdasarkan volatilitas.

  5. Penelitian parameter optimal untuk produk yang berbeda.

  6. Kurangi frekuensi perdagangan untuk meminimalkan biaya.

Kesimpulan

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")


Lebih banyak