
Strategi dagangan saluran turun naik Dongxian menilai trend harga semasa dengan mengira saluran harga tertinggi dan terendah dalam tempoh tertentu, dan berdagang panjang dan pendek dengan menggabungkan saluran pecah. Strategi ini sesuai untuk perdagangan saham dan mata wang digital yang bergelombang tinggi.
Strategi ini membina saluran dengan mengira harga tertinggi pcmax dan harga terendah pcmin dalam tempoh terakhir (history).
Jalur atasyh = pcmax - (pcmax - pcmin) * (100 - percentDev)/100
Jalur bawahyl = pcmin + (pcmax - pcmin) * percentDev/100
Daripadanya, 13 peratus berpendapat bahawa ia adalah salah.
Apabila harga menembusi ke arah atas, ia menghasilkan isyarat panjang; apabila harga menembusi ke arah bawah, ia menghasilkan isyarat pendek.
Keputusan untuk menghasilkan isyarat dagangan tertentu adalah seperti berikut:
boundup = high > yh untuk menentukan sama ada keretakan di atas landasan
bounddn = low < yl untuk menentukan sama ada terjatuh
upsign = sma(bounddn, 2) == 1 Berdasarkan garis purata bounddn, terus menerus menembusi bawah landasan
dnsign = sma(boundup, 2) == 1 Berdasarkan garis purata boundup, terus menerus menembusi landasan
exitup = dnsign Menembusi atas landasan menghasilkan isyarat imbang
exitdn = upsign Meletupkan bawah landasan menghasilkan isyarat kedudukan rata
if upsign Menembusi Laluan Bawah
if dnsign Menembusi Laluan Terbuka Mencipta Isyarat Keluar
Strategi ini juga menetapkan waktu permulaan perdagangan untuk mengelakkan kedudukan malam yang tidak perlu.
Menggunakan Saluran Dongxian untuk menilai trend, pengukuran semula lebih baik
Anda boleh menukar mata wang dengan cara yang sama.
Usahakan untuk mengesan isyarat dengan penapisan linear untuk mengelakkan perdagangan yang salah
Tetapkan pilihan untuk menghentikan kerugian dan mengawal risiko
Tetapkan waktu mula dan berhenti untuk mengelakkan risiko kedudukan semalaman
Saluran Dongjian sensitif terhadap parameter history dan percentDev, memerlukan parameter yang dioptimumkan untuk menyesuaikan diri dengan pelbagai jenis
Sinyal yang salah boleh berlaku semasa gempa bumi
Tidak mengambil kira faktor pengurusan pesanan yang mungkin memberi kesan kepada keuntungan dalam bentuk fizikal
Tidak mengambil kira faktor pengurusan kedudukan, mungkin terdapat risiko terlalu banyak kedudukan dalam cakera
Tidak mempertimbangkan pengurusan dana, dana dagangan perlu diletakkan dengan munasabah di dalam simpanan
Pengoptimuman parameter sejarah dan peratusan Dev untuk menyesuaikan dengan pelbagai jenis
Menambah penapis untuk mengelakkan isyarat salah semasa gegaran
Menambah modul pengurusan kedudukan untuk mengawal peratusan dana yang diambil oleh kedudukan tunggal
Menambah modul pengurusan wang, mengehadkan peratusan wang yang diambil oleh kedudukan keseluruhan
Menambah fungsi pengurusan pesanan untuk mengoptimumkan cara pesanan
Strategi perdagangan saluran turun naik Dongxian menilai trend dan isyarat perdagangan melalui terobosan saluran, pengukuran semula yang baik, dan mempunyai keupayaan perdagangan dua hala. Tetapi strategi ini juga mempunyai beberapa risiko, memerlukan pengoptimuman parameter, penapis, pengurusan kedudukan, pengurusan dana, pengurusan pesanan dan sebagainya untuk mendapatkan keuntungan yang stabil di pasaran. Secara keseluruhan, strategi ini adalah strategi mengikuti trend yang lebih tradisional, dan setelah pengoptimuman, ia boleh menjadi strategi perdagangan kuantitatif yang boleh dipercayai.
/*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)