Sumber dimuat naik... memuat...

Strategi Tren Penyesuaian Saluran Donchian

Penulis:ChaoZhang, Tarikh: 2023-10-26 15:58:52
Tag:

img

Ringkasan

Strategi ini menggunakan penunjuk Saluran Donchian untuk menjejaki trend pasaran secara adaptif untuk perdagangan trend. Ia mengikuti trend apabila harga menembusi Saluran Donchian dan memotong kerugian apabila harga jatuh kembali ke saluran.

Logika Strategi

  1. Mengira tertinggi tertinggi dan terendah terendah dalam tempoh tertentu untuk membentuk Saluran Donchian. Garis tengah saluran adalah purata tertinggi tertinggi dan terendah rendah.

  2. Buka kedudukan panjang apabila harga melanggar band atas saluran. Buka kedudukan pendek apabila harga melanggar band bawah.

  3. Selepas membuka kedudukan, stop loss menjejaki garis tengah saluran. mengambil keuntungan menjejaki harga memecahkan saluran dengan peratusan tertentu.

  4. Potong kerugian dan tutup kedudukan apabila harga jatuh kembali ke saluran.

Analisis Kelebihan

  1. Strategi ini menggunakan Saluran Donchian untuk menentukan arah trend dan dengan cepat menangkap penembusan.

  2. Menggunakan garis tengah saluran untuk menghentikan kerugian melindungi keuntungan.

  3. Sasaran keuntungan diperkuat mengikut peratusan keuntungan yang ditentukan oleh pengguna.

  4. Ia menyesuaikan diri dengan keadaan pasaran yang berbeza seperti penyatuan, keluar, menarik balik, dan lain-lain, dan menyesuaikan saiz kedudukan dengan fleksibel.

  5. Logik perdagangan yang mudah dan jelas, mudah difahami dan dikuasai.

Analisis Risiko

  1. Strategi ini hanya berdagang keluar dan tidak dapat menangani penyatuan dengan berkesan.

  2. Terdapat risiko isyarat pecah palsu, penunjuk lain diperlukan untuk pengesahan.

  3. Tetapan stop loss dan mengambil keuntungan yang tidak betul boleh membawa kepada keluar awal atau keuntungan yang tidak mencukupi.

  4. Tetapan tempoh saluran yang salah menjejaskan ketepatan isyarat perdagangan.

  5. Ukuran kedudukan yang berlebihan memperkuat risiko turun naik pasaran.

  6. Terdapat risiko gangguan robot yang tidak dijangka, memastikan kebolehpercayaan sistem.

Arahan Peningkatan

  1. Tambah indikator jumlah untuk mengelakkan mengejar penyebaran palsu.

  2. Meningkatkan penapis penunjuk trend untuk meningkatkan ketepatan isyarat masuk.

  3. Mengoptimumkan algoritma stop loss dinamik dan mengambil keuntungan.

  4. Sesuaikan strategi saiz kedudukan berdasarkan keadaan pasaran masa nyata.

  5. Penyelidikan semalam dan data pra-pasaran untuk masa kemasukan yang lebih baik.

  6. Uji tempoh parameter yang berbeza untuk mencari kombinasi yang optimum.

  7. Tambah pengesahan model untuk mengelakkan pemasangan berlebihan.

Kesimpulan

Secara keseluruhan, ini adalah strategi penyesuaian trend yang mudah dan praktikal. Ia mempunyai kelebihan seperti dengan cepat menangkap penembusan trend dan melindungi keuntungan. Ia juga mempunyai kelemahan seperti ketidakefektifan semasa penyatuan dan kerugian dari penembusan palsu. Penambahbaikan masa depan terletak pada menggabungkan penapisan isyarat yang lebih banyak, kehilangan berhenti / mengambil keuntungan dinamik, untuk menyesuaikan diri dengan lebih banyak keadaan pasaran.


/*backtest
start: 2022-10-19 00:00:00
end: 2023-10-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy(title = "Noro's Donchian Strategy", shorttitle = "Donchian str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
tp = input(defval = 10, minval = 1, title = "Take profit")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
pclen = input(50, minval = 1, title = "Price Channel Length")
showll = input(true, defval = true, title = "Show lines")
showbg = input(false, defval = false, title = "Show Background")
showof = input(true, defval = true, title = "Show Offset")
fromyear = input(1900, defval = 1900, 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")

//Price Channel
h = highest(high, pclen)
l = lowest(low, pclen)
center = (h + l) / 2
tpl = h * (100 + tp) / 100
tps = l * (100 - tp) / 100

//Lines
tpcol = showll ? color.lime : na
pccol = showll ? color.blue : na
slcol = showll ? color.red : na
offset = showof ? 1 : 0
plot(tpl, offset = offset, color = tpcol, title = "TP Long")
plot(h, offset = offset, color = pccol, title = "Channel High")
plot(center, offset = offset, color = slcol, title = "Cannel Center")
plot(l, offset = offset, color = pccol, title = "Channel Low")
plot(tps, offset = offset, color = tpcol, title = "TP Short")

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(bgcol, transp = 70)

//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
mo = 0
mo := strategy.position_size != 0 ? 0 : high >= center and low <= center ? 1 : mo[1]
if h > 0
    strategy.entry("Long", strategy.long, lot, stop = h, when = strategy.position_size <= 0 and needlong and truetime and mo)
    strategy.exit("TP Long", "Long", limit = tpl, stop = center)
    strategy.entry("Short", strategy.short, lot, stop = l, when = strategy.position_size >= 0 and needshort and truetime and mo)
    strategy.exit("TP Short", "Short", limit = tps, stop = center)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Lebih lanjut