Strategi Mengikuti Trend Rangka Berbilang Masa


Tarikh penciptaan: 2024-01-26 15:54:45 Akhirnya diubah suai: 2024-01-26 15:54:45
Salin: 0 Bilangan klik: 614
1
fokus pada
1617
Pengikut

Strategi Mengikuti Trend Rangka Berbilang Masa

Gambaran keseluruhan

Strategi ini membentuk saluran harga utama yang mewakili arah trend jangka panjang dengan mengira harga tertinggi dan terendah dalam tempoh masa yang berbeza ((50 bar dan 200 bar)). Dalam kombinasi dengan garis isyarat cepat dan garis isyarat perlahan, strategi ini menentukan arah trend jangka pendek.

Prinsip Strategi

Pertama, dengan mengira harga tertinggi dan terendah dalam 50 bar terakhir, dan harga tertinggi dan terendah dalam 200 bar terakhir, dua saluran harga yang mewakili arah trend jangka panjang dibentuk.

Kedua, mengira harga tertinggi dan terendah dalam 7 bar terakhir untuk menentukan trend jangka pendek; dan menghitung harga tertinggi dan terendah dalam 20 bar terakhir untuk menentukan trend jangka pendek.

Akhirnya, isyarat masuk disarankan apabila arah saluran isyarat cepat, saluran isyarat perlahan dan saluran harga jangka panjang adalah sama. Sebagai contoh, semua saluran berada dalam trend naik, isyarat membeli; semua saluran berada dalam trend menurun, isyarat menjual.

Analisis kelebihan

Kelebihan terbesar strategi ini adalah keupayaan untuk mengenal pasti arah trend yang bersatu dalam jangka masa pendek. Dengan pengesahan saluran harga dalam tempoh masa yang berbeza, anda dapat mengelakkan gangguan oleh bunyi pasaran jangka pendek.

Di samping itu, strategi ini menggunakan penghakiman jangka masa berbilang, dan tidak akan mengubah isyarat dengan mudah walaupun terdapat pembalikan harga jangka pendek, memastikan kestabilan isyarat.

Analisis risiko

Risiko utama strategi ini adalah bahawa apabila trend jangka pendek berbalik, terdapat kelewatan dalam pembentukan isyarat kerana perlu beberapa pengesahan saluran kitaran masa. Apabila ini berlaku, kerugian boleh meningkat jika diikuti secara buta.

Selain itu, ia tidak mesra dengan perdagangan frekuensi tinggi dan tidak dapat bertindak balas dengan cepat terhadap turun naik harga jangka pendek. Jika berlaku keadaan yang teruk, penetapan keadaan berhenti yang tidak tepat juga boleh menyebabkan kerugian yang lebih besar.

Arah pengoptimuman

Anda boleh mempertimbangkan untuk memasukkan strategi berhenti dinamik yang beradaptasi, yang dapat mengawal risiko dengan berkesan apabila harga menembusi peratusan tertentu ke arah yang tidak baik.

Selain itu, saluran harga dengan panjang yang berbeza boleh ditambah untuk menentukan isyarat akhir dengan cara mengundi, meningkatkan ketepatan penilaian.

Atau menggunakan algoritma pembelajaran mesin untuk mengoptimumkan parameter saluran secara automatik untuk menjadikannya lebih sesuai dengan keadaan pasaran semasa.

ringkaskan

Strategi ini secara keseluruhannya jelas dan mudah difahami, dengan menilai trend pasaran melalui saluran harga bingkai masa, dapat menghilangkan bunyi pasaran jangka pendek. Namun, pengendalian dan kawalan risiko untuk keadaan berbalik arah perlu diperkuat. Jika digabungkan dengan strategi hentikan kerugian dan pengoptimuman parameter, ia dapat meningkatkan lagi kestabilan strategi dan keberkesanan pertempuran.

Kod sumber strategi
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
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/
// © ZoomerXeus

//@version=4
strategy("Swing High Low Price Channel V.1", overlay=true)

//========================= variable =================================//
dead_channel_source = input(title="Main swing channel source", defval="H/L", options=["H/L"])
fast_signal_length = input(title="Fast Slow Length", type=input.integer, defval=7, maxval=49, minval=1)
slow_signal_length = input(title="Slow Slow Length", type=input.integer, defval=20, maxval=49, minval=1)
is_show_only_dead_channel = input(title="Show main channel only", defval=true)
main_channel_width = input(title="Main line width", defval=2, minval=1)
signal_channel_width = input(title="Signal line width", defval=1, minval=1)

//========================= indicator function =================================//
dead_cross_high_50 = highest(high, 50) 
dead_cross_high_200 = highest(high, 200) 
//========================================
dead_cross_low_50 = lowest(low, 50) 
dead_cross_low_200 = lowest(low, 200) 
//========================================
medain_dead_cross_50 = ((dead_cross_high_50-dead_cross_low_50)*0.5)+dead_cross_low_50
medain_dead_cross_200 = ((dead_cross_high_200-dead_cross_low_200)*0.5)+dead_cross_low_200


//========================================
fasthighest = highest(high, fast_signal_length)
fastlowest = lowest(low, fast_signal_length)
//========================================
slowhighest = highest(high, slow_signal_length)
slowlowest = lowest(low, slow_signal_length)
//========================================

    
//========================= plot =================================//
plot(dead_channel_source == "H/L" ? dead_cross_high_50 : na,title="50 bar highest", color=color.red, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? dead_cross_high_200 : na,title="200 bar highest", color=color.aqua, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? dead_cross_low_50 : na,title="50 bar lowest", color=color.red, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? dead_cross_low_200 : na,title="200 bar lowest", color=color.aqua, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? medain_dead_cross_200 : na,title="200 bar middle lowest", color=color.orange, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? medain_dead_cross_50 : na,title="50 bar middle lowest", color=color.lime, linewidth=main_channel_width)
//===========================================
plot(is_show_only_dead_channel == false ? fasthighest : na,title="fast signal highest", color=#ff00f9, linewidth=signal_channel_width)
plot(is_show_only_dead_channel == false ? fastlowest : na,title="fast signal lowest", color=#ff00f9, linewidth=signal_channel_width)
plot(is_show_only_dead_channel == false ? slowhighest : na,title="slow signal highest", color=color.white, linewidth=signal_channel_width)
plot(is_show_only_dead_channel == false ? slowlowest : na,title="slow signal lowest", color=color.white, linewidth=signal_channel_width)
//===========================================
plot(crossover(medain_dead_cross_50, medain_dead_cross_200) ? medain_dead_cross_200 : na, title="Dead cross buy plot", style=plot.style_circles, linewidth=6, color=color.lime)
plot(crossunder(medain_dead_cross_50, medain_dead_cross_200) ? medain_dead_cross_200 : na, title="Dead cross sell plot", style=plot.style_circles, linewidth=6, color=color.red)
plot(is_show_only_dead_channel and (medain_dead_cross_50 < medain_dead_cross_200) and high == slowhighest ? high : na, title="Follow trend short term  sell plot zone", style=plot.style_circles, linewidth=3, color=color.orange)
plot(is_show_only_dead_channel and (medain_dead_cross_50 > medain_dead_cross_200) and low == slowlowest ? low : na, title="Follow trend short term buy plot zone", style=plot.style_circles, linewidth=3, color=color.green)
plot(is_show_only_dead_channel and high == slowhighest and (high == dead_cross_high_200) ? high : na, title="Not follow trend short term  sell plot zone", style=plot.style_circles, linewidth=3, color=color.orange)
plot(is_show_only_dead_channel and low == slowlowest and (low == dead_cross_low_200) ? low : na, title="Not follow trend short term buy plot zone", style=plot.style_circles, linewidth=3, color=color.green)

//===================== open close order condition =========================================================//
strategy.entry("strong buy", true, 1, when=low == dead_cross_low_200)
strategy.exit("close strong buy 50%", "strong buy", qty_percent=50, when=high==slowhighest)
strategy.entry("strong sell", false, 1, when=high == dead_cross_high_200)
strategy.exit("close strong sell 50%", "strong sell", qty_percent=50, when=low==slowlowest)