Turtle Breakout Drawdown Adaptive Strategi Dagangan

Penulis:ChaoZhang, Tarikh: 2023-12-08 11:54:02
Tag:

img

Ringkasan

Strategi ini terutamanya berdasarkan prinsip trend breakout, digabungkan dengan kaedah channel breakout, menggunakan rel ganda yang cepat dan perlahan untuk menerobos untuk menentukan arah trend. Strategi ini mempunyai perlindungan ganda entri breakout dan keluar pengeluaran pada masa yang sama, yang dapat menangani perubahan pasaran secara berkesan. Kelebihan terbesar strategi ini adalah bahawa ia dapat memantau penurunan akaun dalam masa nyata. Apabila pengeluaran melebihi peratusan tertentu, ia akan secara aktif mengurangkan saiz kedudukan. Ini membolehkan strategi untuk mengawal risiko pasaran dan rintangan risiko akaun dengan berkesan.

Logika Strategi

  1. Laluan double rail yang cepat dan perlahan: Laluan cepat dan perlahan digunakan untuk membina saluran masing-masing. Laluan cepat bertindak balas lebih cepat dan garis perlahan lebih lancar. Tentukan arah trend dengan menggabungkan terobosan rel ganda.

  2. Pendaftaran pecah: pergi panjang apabila harga memecahkan saluran menaik, dan pergi pendek apabila ia memecahkan saluran ke bawah.

  3. Penarikan pengeluaran: Pemantauan masa nyata pengeluaran maksimum. Sebaik sahaja titik keluar pengeluaran dicapai, ia akan secara aktif menghentikan kerugian untuk menutup kedudukan. Titik keluar pengeluaran boleh diselaraskan mengikut keadaan pasaran.

  4. Pengukuran kedudukan adaptif: Bilangan kedudukan diselaraskan dalam masa nyata berdasarkan ekuiti akaun untuk mengelakkan risiko pasaran. Semakin kecil pengeluaran akaun, semakin sedikit kedudukan yang dipegang. Ketahanan risiko yang lebih kuat.

Kelebihan

  1. Saluran rel berganda + entri pecah, penilaian trend yang lebih tepat.

  2. Stop loss dan mengambil keuntungan mekanisme berkesan mengawal kerugian tunggal.

  3. Pemantauan masa nyata penggunaan akaun dan penyesuaian aktif saiz kedudukan untuk mengurangkan risiko pasaran.

  4. Saiz kedudukan dikaitkan dengan ekuiti akaun dengan ketahanan risiko yang kuat untuk menangani perubahan pasaran yang tiba-tiba.

Risiko

  1. Kawalan pengeluaran mungkin gagal di pasaran yang tidak menentu, yang membawa kepada kerugian yang lebih besar.

  2. Beberapa isyarat yang tidak sah boleh berlaku apabila talian pantas memasuki zon neutral.

  3. Garis perlahan terlalu halus untuk menangkap trend pembalikan yang cepat dalam masa.

  4. Terdapat risiko kunci dengan kedudukan panjang dan pendek yang bercampur.

Pengoptimuman

  1. Tetapkan toleransi penarikan yang lebih tinggi untuk pasaran yang tidak menentu untuk mengelakkan kerugian berhenti.

  2. Tambah penapisan zon neutral untuk mengelakkan isyarat yang tidak sah.

  3. Mengoptimumkan parameter saluran perlahan untuk meningkatkan kelajuan tindak balas kepada pasaran pantas.

  4. Tambah peraturan pemisahan perintah pembukaan untuk mengelakkan kunci dengan kedudukan dua hala.

Kesimpulan

Secara keseluruhan, ini adalah strategi yang berkesan yang sesuai untuk perdagangan trend jangka menengah dan panjang. Kelebihan terbesar strategi ini adalah pemantauan penurunan masa nyata dan penyesuaian dinamik kedudukan. Ini membolehkan strategi untuk menyesuaikan saiz kedudukan secara automatik dengan daya sesuaikan yang kuat dengan pasaran. Apabila terdapat perubahan pasaran yang tajam atau turun naik harga, strategi dapat mengurangkan saiz kedudukan secara automatik untuk mencegah kerugian berkembang dengan berkesan. Ini sukar untuk banyak strategi tradisional. Secara umum, idea strategi ini inovatif dengan kepraktisan yang kuat. Ia bernilai diterokai dan dioptimumkan untuk aplikasi.


//Noro
//2020

//Original idea from «Way of the Turtle: The Secret Methods that Turned Ordinary People into Legendary Traders» (2007, CURTIS FAITH, ISBN: 9780071486644) 

//@version=4
strategy("Noro's Turtles Strategy", shorttitle = "Turtles 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, title = "Long")
needshort = input(false, title = "Short")
sizelong = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot long, %")
sizeshort = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot short, %")
needfast = input(true, title = "Fast")
needslow = input(true, title = "Slow")
enter_fast = input(20, minval=1)
exit_fast = input(10, minval=1)
enter_slow = input(55, minval=1)
exit_slow = input(20, minval=1)
showof = input(true, title = "Show offset")
showll = input(false, title = "Show lines")
showlabel = input(true, defval = true, title = "Show label")
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")

//Fast
fastL = highest(enter_fast)
fastLC = lowest(exit_fast)
fastS = lowest(enter_fast)
fastSC = highest(exit_fast)

//Slow
slowL = highest(enter_slow)
slowLC = lowest(exit_slow)
slowS = lowest(enter_slow)
slowSC = highest(exit_slow)

//Lines
offset = showof ? 1 : 0
col1 = showll and needlong and needfast ? color.blue : na
col2 = showll and needshort and needfast ? color.red : na
col3 = showll and needlong and needslow ? color.blue : na
col4 = showll and needshort and needslow ? color.red : na
plot(fastL, color = col1, offset = offset)
plot(fastLC, color = col1, offset = offset)
plot(fastS, color = col2, offset = offset)
plot(fastSC, color = col2, offset = offset)
plot(slowL, color = col3, offset = offset)
plot(slowLC, color = col3, offset = offset)
plot(slowS, color = col4, offset = offset)
plot(slowSC, color = col4, offset = offset)

//Orders
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
size = strategy.position_size
lotlong = 0.0
lotlong := size != size[1] ? strategy.equity / close * sizelong / 100 : lotlong[1]
lotshort = 0.0
lotshort := size != size[1] ? strategy.equity / close * sizeshort / 100 : lotshort[1]

//Fast
strategy.entry("fast L", strategy.long, lotlong, stop = fastL, when = needfast and needlong and strategy.position_size == 0 and truetime)
strategy.entry("fast S", strategy.short, lotshort, stop = fastS, when = needfast and needshort and strategy.position_size == 0 and truetime)
strategy.exit("fast L", stop = fastLC, when = needfast and needlong and strategy.position_size > 0)
strategy.exit("fast S", stop = fastSC, when = needfast and needshort and strategy.position_size < 0)

//Slow
strategy.entry("slow L", strategy.long, lotlong, stop = slowL, when = needslow and needlong and strategy.position_size == 0 and truetime)
strategy.entry("slow S", strategy.short, lotshort, stop = slowS, when = needslow and needshort and strategy.position_size == 0 and truetime)
strategy.exit("slow L", stop = slowLC, when = needslow and needlong and strategy.position_size > 0)
strategy.exit("slow S", stop = slowSC, when = needslow and needshort and strategy.position_size < 0)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("fast L")
    strategy.cancel("fast S")
    strategy.cancel("slow L")
    strategy.cancel("slow S")
    
if showlabel

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Label
    min := round(min * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)


Lebih lanjut