
Strategi perdagangan saluran bergelombang Dongxian menilai tren harga saat ini dengan menghitung saluran dengan harga tertinggi dan terendah dalam periode tertentu, dan melakukan perdagangan panjang dan pendek dalam kombinasi dengan saluran terobosan. Strategi ini cocok untuk perdagangan saham dan mata uang digital yang bergelombang tinggi.
Strategi ini membangun saluran dengan menghitung harga tertinggi pcmax dan harga terendah pcmin dalam siklus last (history).
Jalur atasyh = pcmax - (pcmax - pcmin) * (100 - percentDev)/100
Jalur bawahyl = pcmin + (pcmax - pcmin) * percentDev/100
Dari jumlah tersebut, 13 persen adalah pendapat dari Dev Moor.
Ketika harga menembus tren naik, sinyal long dihasilkan; ketika harga menembus tren turun, sinyal short dihasilkan.
Cara menentukan sinyal perdagangan spesifik adalah sebagai berikut:
boundup = high > yh untuk menentukan apakah ada penembusan
bounddn = low < yl untuk menentukan apakah terjatuh dari jalur
upsign = sma(bounddn, 2) == 1 Berdasarkan garis rata-rata dari bounddn, terus menerus menerobos rel
dnsign = sma(boundup, 2) == 1 Berdasarkan garis rata-rata dari boundup terus menerus menerobos jalur
exitup = dnsign Menerobos jalur dan menghasilkan sinyal imbang
exitdn = upsign Menembus rel dan menghasilkan sinyal posisi kosong
if upsign Menembus rel bawah menghasilkan sinyal multipel
if dnsign Menerobos jalur menghasilkan sinyal kosong
Strategi ini juga mengatur waktu trading stop untuk menghindari posisi overnight yang tidak perlu.
Menggunakan Saluran Dongxian untuk menilai tren, hasil pengukuran lebih baik
Anda dapat melakukan perdagangan dua arah dengan mengatur sinyal plus dan minus.
Filter rata untuk menilai sinyal dan menghindari perdagangan yang salah
Pengaturan Stop Loss Opsional, Pengendalian Risiko
Menetapkan waktu mulai dan berhenti trading untuk menghindari risiko posisi overnight
Saluran Tongxian sensitif terhadap parameter history dan percentDev, perlu mengoptimalkan parameter untuk menyesuaikan dengan varietas yang berbeda
Sinyal-sinyal yang salah dapat terjadi pada saat gempa.
Tidak mempertimbangkan faktor manajemen pesanan, yang dapat berdampak pada keuntungan di dalam perseroan
Tidak mempertimbangkan faktor manajemen posisi, mungkin ada risiko terlalu banyak posisi di kasir
Tidak mempertimbangkan faktor manajemen dana, dana transaksi harus diatur secara wajar di dalam kas.
Optimalkan parameter history dan percentDev agar lebih cocok untuk varietas yang berbeda
Menambahkan filter untuk menghindari sinyal yang salah saat bergoyang
Tambahkan modul manajemen posisi untuk mengontrol persentase modal yang digunakan dalam posisi tunggal
Menambahkan Modul Manajemen Uang untuk membatasi persentase total posisi yang dikuasai
Menambahkan fitur manajemen pesanan untuk mengoptimalkan cara pemesanan
Strategi perdagangan saluran yang berfluktuasi dengan strategi yang lebih tradisional untuk mengikuti tren dan sinyal perdagangan melalui terobosan saluran, pengukuran yang lebih baik, dan kemampuan perdagangan dua arah. Namun, strategi ini juga memiliki beberapa risiko, perlu mengoptimalkan parameter, filter, manajemen posisi, manajemen dana, manajemen pesanan, dan lain-lain untuk mendapatkan keuntungan yang stabil di pasar nyata. Secara keseluruhan, strategi ini adalah strategi yang lebih tradisional untuk mengikuti tren, setelah pengoptimalan dan perbaikan, dapat menjadi strategi perdagangan kuantitatif yang dapat diandalkan.
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
////////////////////////////////////////////////////////////
// Copyright by AlexInc v1.0 02/07/2018 @aav_1980
// PriceChannel strategy
// If you find this script helpful, you can also help me by sending donation to
// BTC 16d9vgFvCmXpLf8FiKY6zsy6pauaCyFnzS
// LTC LQ5emyqNRjdRMqHPHEqREgryUJqmvYhffM
////////////////////////////////////////////////////////////
//@version=3
strategy("AlexInc PriceChannel Str", overlay=false)
history = input(20)
percentDev = input(13)
capital = input(100)
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usestoploss = input(true, defval = true, title = "Stop Loss")
stoplossmult = input(3.8, defval = 3.8, minval = 1, maxval = 10, title = "Stop loss multiplicator")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
bodymin = min( open, close)
bodymax = max(open, close)
pcmax = highest(bodymax, history)
pcmin = lowest(bodymin, history)
yh = ((pcmax - pcmin) / 100 * (100 - percentDev)) + pcmin
yl = ((pcmax - pcmin) / 100 * percentDev) + pcmin
plot(pcmax)
plot(pcmin)
plot(yh)
plot(yl)
//1
bounddn = low < yl ? 1 : 0
boundup = high > yh ? 1 : 0
upsign = sma(bounddn, 2) == 1
dnsign = sma(boundup, 2) == 1
//2
//upsign = crossover(bodymin, yl)
//dnsign = crossunder(bodymax , yh)
exitup = dnsign
exitdn = upsign
lot = strategy.equity / close * capital / 100
xATR = atr(history)
nLoss = usestoploss ? stoplossmult * xATR : na
stop_level_long = 0.0
stop_level_long := nz(stop_level_long[1])
stop_level_short = 0.0
stop_level_short := nz(stop_level_short[1])
pos = strategy.position_size
if pos >0 and pos[1] <= 0 //crossover(pos, 0.5)
stop_level_long = strategy.position_avg_price - nLoss
if pos < 0 and pos[1] >= 0 //crossunder(pos, -0.5)
stop_level_short = strategy.position_avg_price + nLoss
if pos == 0
stop_level_long = bodymin - nLoss
stop_level_short = bodymax + nLoss
//plot(bodymax + nLoss, color=red)
//plot(bodymin - nLoss, color=red)
plot(stop_level_long, color=red)
plot(stop_level_short, color=red)
if upsign
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if dnsign
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
if true
strategy.close_all()
//if strategy.position_size != 0
// strategy.exit("Exit Long", from_entry = "Long", stop = stop_level_long)
// strategy.exit("Exit Short", from_entry = "Short", stop = stop_level_short)