Berdasarkan strategi penembusan saluran dinamik


Tarikh penciptaan: 2024-02-27 15:15:07 Akhirnya diubah suai: 2024-02-27 15:15:07
Salin: 0 Bilangan klik: 567
1
fokus pada
1617
Pengikut

Berdasarkan strategi penembusan saluran dinamik

Gambaran keseluruhan

Strategi ini menggunakan indikator saluran Keltner, yang digabungkan dengan purata bergerak, untuk menetapkan harga pembelian dan penjualan yang berpecah secara dinamik, untuk mencapai operasi yang berpecah dengan harga rendah dan tinggi. Strategi ini dapat secara automatik mengenal pasti peluang pembelian dan penjualan yang berpecah melalui saluran.

Prinsip Strategi

  1. Mengira corong pertengahan: Mengira corong pertengahan harga menggunakan purata bergerak indeks
  2. Mengira Bandwidth Saluran: Mengira Bandwidth Saluran dengan menggunakan gelombang sebenar atau purata gelombang sebenar atau kenaikan harga
  3. Laluan di atas dan di bawah landasan: bandwidth laluan ± N kali ganda dari landasan tengah
  4. Urutan kemasukan: Apabila harga menyentuh garisan atas, atur harga beli untuk meletup dan tunggu untuk meletup; Apabila harga menyentuh garisan bawah, atur harga jual untuk meletup dan tunggu untuk meletup
  5. Urutan keluar: terhenti apabila pembelian kembali ke rel tengah atau apabila harga tertinggi melebihi harga masuk; terhenti apabila terbalik ke rel tengah atau apabila harga terendah lebih rendah daripada harga masuk

Analisis kelebihan

  1. Menggunakan saluran dinamik untuk menangkap perubahan trend pasaran dengan cepat
  2. Penggunaan garis tengah untuk menentukan arah pergerakan harga
  3. Tetapan lebar jalur N kali ganda membolehkan ruang laluan yang munasabah dan mengelakkan penyesuaian kedudukan yang kerap
  4. Menggunakan mekanisme terobosan, sesuai dengan teori trend, mengikut perkembangan
  5. Tetapkan syarat berhenti rugi dan mengawal risiko dengan ketat

Analisis risiko

  1. Pilihan kaedah pengiraan garis tengah akan mempengaruhi kesan pencocokan harga dengan ruang laluan
  2. Penetapan N yang terlalu besar atau terlalu kecil akan menjejaskan pulangan strategi
  3. Penembusan perdagangan mudah membentuk isyarat palsu dan harus dihentikan dengan ketat

Arah pengoptimuman

  1. Mencuba pelbagai cara untuk mencari parameter terbaik
  2. Uji nilai N yang berbeza untuk mencari perkalian yang optimum
  3. Meningkatkan ketinggian untuk mengelakkan isyarat palsu
  4. Mengoptimumkan logik stop loss, mengawal ketat kerugian tunggal

ringkaskan

Strategi ini secara keseluruhan menggunakan sains yang munasabah, menilai pergerakan dan arah harga melalui indikator saluran dinamik, menetapkan parameter yang munasabah untuk menangkap isyarat penembusan, mencapai pembelian rendah dan penjualan tinggi, dan kemudian memperoleh keuntungan tambahan. Pada masa yang sama, risiko strategi terus dioptimumkan, sehingga dapat beroperasi dengan stabil di pelbagai pasaran.

Kod sumber strategi
/*backtest
start: 2024-01-27 00:00:00
end: 2024-02-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Keltner Strategy", overlay=true)
length = input.int(20, minval=1)
mult = input.float(2.0, "Multiplier")
src = input(close, title="Source")
exp = input(true, "Use Exponential MA")
BandsStyle = input.string("Average True Range", options = ["Average True Range", "True Range", "Range"], title="Bands Style")
atrlength = input(10, "ATR Length")
esma(source, length)=>
	s = ta.sma(source, length)
	e = ta.ema(source, length)
	exp ? e : s
ma = esma(src, length)
rangema = BandsStyle == "True Range" ? ta.tr(true) : BandsStyle == "Average True Range" ? ta.atr(atrlength) : ta.rma(high - low, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
crossUpper = ta.crossover(src, upper)
crossLower = ta.crossunder(src, lower)
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1])
crossBcond = false
crossBcond := crossUpper ? true
     : na(crossBcond[1]) ? false : crossBcond[1]
crossScond = false
crossScond := crossLower ? true
     : na(crossScond[1]) ? false : crossScond[1]
cancelBcond = crossBcond and (src < ma or high >= bprice )
cancelScond = crossScond and (src > ma or low <= sprice )
if (cancelBcond)
	strategy.cancel("KltChLE")
if (crossUpper)
	strategy.entry("KltChLE", strategy.long, stop=bprice, comment="KltChLE")
if (cancelScond)
	strategy.cancel("KltChSE")
if (crossLower)
	strategy.entry("KltChSE", strategy.short, stop=sprice, comment="KltChSE")