Strategi perdagangan kuantitatif Donchian berdasarkan penembusan saluran harga


Tarikh penciptaan: 2023-12-08 11:00:05 Akhirnya diubah suai: 2023-12-08 11:00:05
Salin: 0 Bilangan klik: 655
1
fokus pada
1621
Pengikut

Strategi perdagangan kuantitatif Donchian berdasarkan penembusan saluran harga

Gambaran keseluruhan

Idea teras strategi ini adalah untuk melakukan operasi jual beli berdasarkan penembusan harga di saluran Dongxian, yang merupakan strategi kuantitatif jenis trend-tracking. Ia dapat mengenal pasti saluran harga secara automatik, membuka lebih banyak kedudukan apabila harga menembusi saluran di atas, dan menutup posisi apabila harga kembali ke bawah saluran di dekat atau titik henti.

Prinsip

Strategi ini adalah berdasarkan pada indikator saluran Dongxian, saluran Dongxian adalah kawasan saluran yang digambar melalui harga tertinggi dan terendah dalam tempoh yang diberikan. Kaedah pengiraan adalah:

Naik ke atas = harga tertinggi dalam hampir n kitaran Jarak bawah = harga terendah dalam hampir n kitaran

Apabila harga menembusi ke atas, ia dianggap memasuki tren multihead, dan apabila harga jatuh ke bawah, ia dianggap memasuki tren kosong. Strategi ini hanya mempertimbangkan keadaan yang melanggar ke atas.

Logik urus niaga adalah seperti berikut:

  1. Menggunakan n kitaran harga tertinggi untuk melukis laluan Dongjian
  2. Apabila harga penutupan naik, masuk lebih banyak
  3. Hentikan cara untuk menutup harga turun ke laluan bawah atau titik berhenti yang ditetapkan

Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Strategi yang jelas, mudah difahami dan dilaksanakan
  2. Penunjuk Jalanan Dongxian Sudah matang dan boleh dipercayai untuk menilai arah trend
  3. Mengenali laluan secara automatik, tanpa perlu menilai pergerakan
  4. Parameter yang boleh dikonfigurasikan
  5. Mengandungi mekanisme henti rugi yang boleh mengehadkan losses

Risiko

Strategi ini mempunyai beberapa risiko:

  1. Pengembaraan yang tidak perlu di jalan raya Dongcheng
  2. Penetapan yang tidak betul dalam kedudukan stop loss boleh meningkatkan losses
  3. Berhati-hati dengan risiko berbalik apabila mendekati laluan
  4. Tetapan parameter ((panjang kitaran dan sebagainya) yang tidak betul akan menjejaskan kesan strategi

Penyelesaian:

  1. Kaedah penapisan dan pembiasan
  2. Optimumkan kedudukan berhenti, keluar lancar
  3. Pertimbangkan untuk meningkatkan jumlah transaksi atau meluaskan kawasan penutupan berhampiran saluran
  4. Uji parameter yang berbeza untuk mencari parameter yang optimum

Arah pengoptimuman

Strategi ini juga boleh dioptimumkan dengan:

  1. Menambah penilaian indikator lain untuk mengelakkan kerosakan, seperti MACD, KD dan sebagainya
  2. Mengoptimumkan mekanisme penangguhan kerugian, seperti penangguhan bergerak dengan turun naik harga
  3. Pengendalian penyertaan yang dioptimumkan, seperti berdagang hanya apabila turun naik meningkat
  4. Pengoptimuman parameter, mencari kombinasi parameter yang optimum

ringkaskan

Strategi ini secara keseluruhannya jelas, mudah difahami dan dilaksanakan, menggunakan petunjuk saluran Tongan yang matang untuk mengenal pasti arah trend secara automatik. Pada masa yang sama, konfigurasi yang lebih fleksibel, boleh disesuaikan dengan keperluan sebenar. Dengan menghentikan kerugian dan pengoptimuman parameter, kesan yang lebih baik dapat dicapai. Secara keseluruhan, strategi ini mudah digunakan, tetapi mempunyai kecekapan tertentu, sesuai sebagai salah satu strategi permulaan perdagangan kuantitatif.

Kod sumber strategi
/*backtest
start: 2022-12-07 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © Giovanni_Trombetta

// Strategy to capture price channel breakouts

//@version=4
strategy("ChannelsBreakout", max_bars_back=50, overlay=true)

instrument = input(1, title = "Select 1: Stock/Forex, 2: Future")
money = input(10000, title = "Money for each trade")
backtest_start = input(2000, "Insert first year to backtest")
period = input(50, title = "Period in bars of Donchian Channel")
monetary_stoploss = input(1000, title = "Monetary Stop Loss")

quantity = if instrument != 1 
    1
else
    int(money / close)
    
upBarrier = highest(high,period)
downBarrier = lowest(low,period)
up = highest(high,period / 4)
down = lowest(low,period / 4)

plot(upBarrier, color=color.green, linewidth=2)
plot(downBarrier, color=color.red, linewidth=2)
plot(up, color=color.lime, linewidth=1)
plot(down, color=color.orange, linewidth=2)

longCondition = crossover(close, upBarrier[1]) and year >= backtest_start

if (longCondition)
    strategy.entry("Long", strategy.long, quantity, when = strategy.position_size == 0)

closeCondition = crossunder(close, down[1]) or down < down[1]

if (closeCondition)
    strategy.close("Long", comment = "Trailing")
    
stop_level = strategy.position_avg_price - monetary_stoploss / strategy.position_size
strategy.exit("StopLoss", from_entry = "Long", stop = stop_level)
plot(stop_level, color=color.yellow, linewidth=2)

// l = label.new(bar_index, na,
//   text="PineScript Code", color= color.lime, textcolor = color.white,
//   style=label.style_labelup, yloc=yloc.belowbar, size=size.normal)
// label.delete(l[1])