Strategi penjejakan purata bergerak berganda dan sistem pengurusan kedudukan dinamik

EMA ATR
Tarikh penciptaan: 2025-02-27 10:20:18 Akhirnya diubah suai: 2025-02-27 10:20:18
Salin: 0 Bilangan klik: 478
2
fokus pada
319
Pengikut

Strategi penjejakan purata bergerak berganda dan sistem pengurusan kedudukan dinamik Strategi penjejakan purata bergerak berganda dan sistem pengurusan kedudukan dinamik

Gambaran keseluruhan

Sistem pengurusan kedudukan dinamik adalah strategi perdagangan kuantitatif berdasarkan purata bergerak pelbagai indeks ((EMA)). Strategi ini membina sistem perdagangan yang lengkap dengan memantau lima kitaran yang berbeza ((12, 144, 169, 576 dan 676) indikator EMA, termasuk penilaian trend, pengenalan isyarat masuk, pembinaan kumpulan, hentian kerugian dinamik dan hentian dinamik. Strategi ini bukan sahaja menyokong operasi penambahan stok beberapa kali, sehingga 5 kedudukan perdagangan boleh ditubuhkan, tetapi juga mempunyai langkah-langkah kawalan risiko yang berasingan untuk setiap kedudukan.

Prinsip Strategi

Logik teras strategi ini adalah berdasarkan pada hubungan kedudukan antara pelbagai indikator EMA dan interaksi harga dengan EMA utama:

  1. Mekanisme penilaian trend:

    • Keadaan trend berbilang arah: EMA12 > EMA144 > EMA169 > EMA576 > EMA676
    • Keadaan tren kosong: EMA12 < EMA144 < EMA169 < EMA576 < EMA676
  2. Isyarat masuk:

    • Kemasukan Multi-Head: Berdasarkan trend multi-head, apabila titik rendah menembusi EMA144 dan harga penutupan berada di atas EMA169
    • Kemasukan kosong: Berdasarkan trend kosong, apabila titik tinggi melepasi EMA144 dan harga penutupan berada di bawah EMA169
  3. Pembinaan Gudang:

    • Posisi pertama: Sesuai dengan isyarat masuk dan tiada pegangan
    • Penempatan kedua: Memenuhi isyarat masuk dan kini memegang satu kedudukan
    • 3 hingga 5 kali berjaga-jaga: lebih daripada 50 garis K diperlukan dari masa berjaga-jaga terakhir berdasarkan isyarat masuk yang dipenuhi
  4. Dinamika Hentikan Kerosakan:

    • Setiap kedudukan menggunakan titik hentian dinamik, berdasarkan harga terendah (paling banyak) atau harga tertinggi (paling kosong) pada 12 baris K ketika gudang dibina
    • Menggunakan strategi simetri simetri, harga sasaran adalah “harga masuk + (harga masuk - harga berhenti) “
    • Batch profit: Setiap kedudukan yang mencapai titik penutupan, 50% daripadanya ditukar, dan selebihnya terus dipegang sehingga mencapai titik penutupan
  5. Kawalan risiko keseluruhan:

    • Apabila EMA12 bersilang dengan indikator EMA144 ((EMA12 jatuh di bawah EMA144 dalam trend multi arah, atau EMA12 pecah di atas EMA144 dalam trend kosong), semua posisi kosong

Secara keseluruhan, strategi ini menetapkan arah trend pasaran melalui susunan pelbagai EMA, menentukan masa masuk melalui interaksi harga dengan EMA144, dan menetapkan stop loss stop loss secara dinamik melalui zona turun naik harga baru-baru ini, sambil mengoptimumkan pengurusan wang dengan cara membina simpanan dan membahagikan keuntungan, akhirnya membentuk sistem perdagangan yang lengkap.

Kelebihan Strategik

  1. Penghakiman Trend Sistematik:

    • Sistem penilaian trend yang menggunakan lima EMA yang berbeza untuk membentuk tiga, mengurangkan risiko penembusan palsu
    • Portfolio indeks EMA memberikan kriteria kuantitatif untuk kekuatan trend dan menjadikan keputusan perdagangan lebih objektif
  2. Mekanisme kemasukan yang tepat:

    • Pergerakan silang harga dan garis rata sebagai pencetus kemasukan, meningkatkan kecekapan masa kemasukan
    • Memerlukan isyarat masuk disahkan dalam 12 baris K untuk mengurangkan risiko perdagangan yang tertunda
  3. Pengurusan wang yang bijak:

    • Membina gudang secara berturutan yang menyokong sehingga 5 gudang, menyesuaikan diri dengan tahap perkembangan pasaran yang berbeza
    • Pembinaan gudang berturut-turut perlu memenuhi selang masa minimum ((50 garis K), mengelakkan pembinaan gudang berlebihan dalam masa yang singkat
  4. Strategi Pendapatan Fleksibel:

    • Menggunakan prinsip “Symmetrical Stop” untuk mendapatkan kedudukan yang menguntungkan berdasarkan harga masuk dan pergerakan titik henti
    • Kemenangan berpelbagai-pelbagai (posisi 50%), mengunci sebahagian keuntungan sambil mengekalkan ruang untuk kenaikan
  5. Kawalan risiko yang ketat:

    • Setiap kedudukan menetapkan titik berhenti yang berasingan, berdasarkan jangkauan turun naik baru-baru ini (12 garis K)
    • Isyarat pembalikan trend ((EMA12 dan EMA144 bersilang) mencetuskan kedudukan kosong sepenuhnya, berhenti tepat pada masanya
  6. Sangat boleh menyesuaikan diri:

    • Menyokong perdagangan berbilang dan kosong, dan menyesuaikan diri dengan pelbagai keadaan pasaran
    • Ia boleh disesuaikan dengan pelbagai jenis dan kitaran

Risiko Strategik

  1. Risiko ketinggalan rata-rata:

    • EMA mempunyai ketinggalan tertentu yang boleh menyebabkan masa masuk atau keluar yang tidak baik semasa turun naik yang teruk
    • Kaedah penanggulangan: Kaedah ini boleh dipertimbangkan untuk digabungkan dengan indikator momentum jangka pendek sebagai bantuan untuk meningkatkan kelajuan tindak balas sistem
  2. Tekanan kewangan untuk membina gudang secara berturutan:

    • Strategi menaikkan saham yang menyokong maksimum 5 kedudukan boleh menyebabkan pemusatan dana yang terlalu tinggi
    • Kaedah penanggulangan: Sebahagian dana untuk setiap gudang yang dibina harus ditetapkan secara munasabah berdasarkan jumlah dana yang ada untuk memastikan pembahagian dana yang seimbang
  3. Batasan parameter kitaran tetap:

    • Tempoh EMA dalam kod ((12, 144, 169, 576, 676) adalah nilai tetap dan mungkin tidak sesuai untuk semua keadaan pasaran
    • Pengurangan: memperkenalkan kaedah pengiraan kitaran penyesuaian, atau proses pengoptimuman parameter khusus untuk pelbagai jenis
  4. Isu-isu yang berpotensi untuk simetri:

    • Dalam pasaran yang sedang tren, simetri simetri mungkin mendapat keuntungan lebih awal, kehilangan ruang untuk keuntungan yang lebih besar
    • Pengurangan: Ia boleh dipertimbangkan untuk menetapkan tracking stop loss untuk baki 50% kedudukan untuk menyesuaikan diri dengan trend yang kuat
  5. Syarat kemasukan terlalu ketat:

    • Kombinasi pelbagai syarat ((persamaan rata-rata + harga persilangan + pengesahan penutupan) mungkin menyebabkan kehilangan sebahagian isyarat yang sah
    • Kaedah penanggulangan: Mekanisme masuk pilihan boleh disiapkan untuk tahap pasaran yang berbeza, meningkatkan kepekaan menangkap isyarat
  6. Risiko bergantung kepada data:

    • Strategi bergantung pada EMA jangka panjang (seperti 576, 676) yang memerlukan data sejarah yang cukup lama untuk berfungsi dengan baik
    • Kaedah pengurangan: Jika data tidak mencukupi, kaedah pengiraan EMA jangka panjang boleh dipertimbangkan untuk menggunakan indikator alternatif atau disesuaikan

Arah pengoptimuman strategi

  1. Memperkenalkan mekanisme parameter penyesuaian:

    • Mengubah kitaran EMA tetap (-12, 144, 169, 576, 676) menjadi parameter penyesuaian berdasarkan turun naik pasaran
    • Sebab pengoptimuman: Terdapat perbezaan yang ketara dalam kitaran EMA optimum dalam keadaan pasaran yang berbeza, mekanisme penyesuaian dapat meningkatkan kebolehgunaan strategi
  2. Penapisan isyarat masuk yang dipertingkatkan:

    • Menggabungkan metrik seperti jumlah dagangan, kadar turun naik pasaran (seperti ATR) untuk menambah syarat pengesahan tambahan untuk isyarat masuk
    • Sebab pengoptimuman: isyarat simpang linear murni mudah diganggu oleh bunyi pasaran, syarat penapisan tambahan dapat meningkatkan kualiti isyarat
  3. Peningkatan sistem pengurusan dana:

    • Peratusan dana yang digunakan untuk setiap penempatan berdasarkan jumlah dana dalam akaun dan perubahan kadar pasaran
    • Sebab pengoptimuman: Peratusan peruntukan dana dalam strategi semasa tetap, tidak dapat disesuaikan secara automatik mengikut tahap risiko, pengenalan pengurusan dana dinamik dapat meningkatkan kecekapan penggunaan dana
  4. Optimumkan mekanisme hentian hentian:

    • Strategi hentian hentian yang berbeza untuk lokasi gudang yang berbeza, seperti hentian peratusan tetap untuk gudang pertama, dan hentian pengesanan untuk gudang seterusnya
    • Sebab pengoptimuman: Strategi hentikan dan hentikan yang seragam sukar untuk menyesuaikan diri dengan keperluan di peringkat pasaran yang berbeza, strategi diferensiasi dapat bertindak balas dengan lebih fleksibel terhadap perubahan pasaran
  5. Menambah penapis masa:

    • Memperkenalkan mekanisme penapisan masa dagangan untuk mengelakkan masa-masa yang bergelombang tinggi (seperti sebelum pembukaan dan penutupan) atau semasa pengumuman data penting
    • Sebab pengoptimuman: Pergerakan pasaran dalam tempoh masa tertentu cenderung tidak berorientasikan, penapisan masa tambahan dapat mengelakkan perdagangan yang tidak perlu
  6. Tambahan penilaian kekuatan trend:

    • Membangunkan penunjuk kekuatan trend, hanya membenarkan perdagangan apabila kekuatan trend mencapai titik tolak
    • Sebab pengoptimuman: Strategi semasa juga menghasilkan isyarat dalam keadaan trend lemah, memperkenalkan penilaian kekuatan trend dapat mengurangkan isyarat palsu dalam pasaran goyah
  7. Membina sistem sinergi pelbagai kitaran:

    • Penghakiman trend yang digabungkan dengan tempoh masa yang lebih tinggi sebagai penapis arah perdagangan
    • Sebab pengoptimuman: Sistem dagangan kitaran tunggal mudah terganggu oleh turun naik jangka pendek, sinkronisasi kitaran berbilang meningkatkan kestabilan sistem

ringkaskan

Strategi pengesanan garisan rata-rata berganda dan sistem pengurusan kedudukan dinamik adalah strategi perdagangan kuantitatif yang tersusun dengan struktur yang lengkap dan logik yang jelas. Strategi ini membentuk kerangka penilaian tren melalui kombinasi pelbagai EMA, menentukan masa masuk melalui interaksi harga dengan garisan rata-rata utama, dan mencapai pengurusan dana dan kawalan risiko yang terperinci melalui pembentukan gudang secara berturut-turut dan penutupan kerugian dinamik.

Walau bagaimanapun, strategi ini juga mempunyai risiko seperti ketinggalan rata-rata, kekangan parameter tetap dan tekanan pengurusan wang. Untuk meningkatkan lagi kesan strategi, penyesuaian seperti memperkenalkan mekanisme parameter yang sesuai, meningkatkan penapisan isyarat, menyempurnakan sistem pengurusan wang, mengoptimumkan mekanisme stop-loss dan membina sistem sinergi pelbagai kitaran boleh dipertimbangkan.

Secara keseluruhannya, strategi ini menyediakan kerangka kerja yang boleh dikendalikan untuk perdagangan kuantitatif dengan pemantauan trend yang seimbang dan kawalan risiko. Dengan pengoptimuman berterusan dan penyesuaian parameter untuk keadaan pasaran tertentu, strategi ini dijangka dapat mencapai prestasi yang stabil dalam perdagangan sebenar.

Kod sumber strategi
/*backtest
start: 2024-09-08 00:00:00
end: 2024-12-08 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("专业级交易系统", overlay=false, close_entries_rule = "ANY")
x1 = input.float(1.5,"atr倍数",step=0.1)
x2 = input.int(50,"k线数量",step=1)
s1 = strategy.opentrades.entry_price(0)
s2 = strategy.opentrades.entry_price(1)
s3 = strategy.opentrades.entry_price(2)
s4 = strategy.opentrades.entry_price(3)
s5 = strategy.opentrades.entry_price(4)
s6 = strategy.opentrades.entry_price(5)
s7 = strategy.opentrades.entry_price(6)
s8 = strategy.opentrades.entry_price(7)
s9 = strategy.opentrades.entry_price(8)
c = strategy.position_size,o = strategy.opentrades
ema12_len = input.int(12,"EMA12长度")
ema144_len = input.int(144, "EMA144长度")
ema169_len = input.int(169,"EMA169长度")
ema576_len = input.int(376, "EMA576长度")
ema676_len = input.int(576,"EMA676长度")
ema12 = ta.ema(close,ema12_len)
ema144 = ta.ema(close, ema144_len)
ema169 = ta.ema(close, ema169_len)
ema576 = ta.ema(close, ema576_len)
ema676 = ta.ema(close, ema676_len)
e3 = ta.valuewhen(o ==2 and o[1] == 1 and c > 0,bar_index,0)
e4 = ta.valuewhen(o ==3 and o[1] == 2 and c > 0,bar_index,0)
e5 = ta.valuewhen(o ==4 and o[1] == 3 and c > 0,bar_index,0)
le1 = false
le1 := c <= 0 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 ? false : le1[1]
le11 = false
le11 := le1 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144,bar_index,0) < 12 ? true : false
le2 = false
le2 := c > 0 and o == 1 and o[1] == 1 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 1? false : le2[1]
le21 = false
le21 := le2 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 1 and o[1]==1,bar_index,0) < 12 ? true : false
le3 = false
le3 := c > 0 and o == 2 and o[1] == 2 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 2? false : le3[1]
le31 = false
le31 := le3 and bar_index - e3 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 2 and o[1]==2,bar_index,0) < 12 ? true : false
le4 = false
le4 := c > 0 and o == 3 and o[1] == 3 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 3? false : le4[1]
le41 = false
le41 := le4 and bar_index - e4 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 3 and o[1]==3,bar_index,0) < 12 ? true : false
le5 = false
le5 := c > 0 and o == 4 and o[1] == 4 and ema12 > ema144 and ema144 > ema169 and ema169 > ema576 and ema576 > ema676 and low < ema144 and low[1] > ema144 and close > ema169? true :  close < ema169 or ema12 < ema144 or o < 4? false : le5[1]
le51 = false
le51 := le5 and bar_index - e5 > 50 and bar_index - ta.valuewhen(low < ema144 and low[1] > ema144 and o == 4 and o[1]==4,bar_index,0) < 12 ? true : false
d1 = ta.valuewhen(o == 1 and o[1] == 0 and c > 0,ta.lowest(12),0)
d2 = ta.valuewhen(o == 2 and o[1] == 1 and c > 0,ta.lowest(12),0)
d3 = ta.valuewhen(o == 3 and o[1] == 2 and c > 0,ta.lowest(12),0)
d4 = ta.valuewhen(o == 4 and o[1] == 3 and c > 0,ta.lowest(12),0)
d5 = ta.valuewhen(o == 5 and o[1] == 4 and c > 0,ta.lowest(12),0)
if le11 and close > ema12 and o == 0
    strategy.order("l1",strategy.long,comment="第一单")
if c > 0 and o > 0
    strategy.exit("出场1","l1",limit = 2*s1- d1,stop= d1,qty_percent = 50)
    strategy.exit("出场11","l1",stop= d1)

if le21 and close > ema12 and o == 1
    strategy.order("l2",strategy.long,comment="第二单")
if c > 0 and o == 2
    strategy.exit("出场2","l2",limit = 2*s2- d2,stop= d2,qty_percent = 50)
    strategy.exit("出场21","l2",stop= d2)

if le31 and close > ema12 and o == 2
    strategy.order("l3",strategy.long,comment="第三单")
if c > 0 and o == 3
    strategy.exit("出场3","l3",limit = 2*s3- d3,stop= d3,qty_percent = 50)
    strategy.exit("出场31","l3",stop= d3)

if le41 and close > ema12 and o == 3
    strategy.order("l4",strategy.long,comment="第四单")
if c > 0 and o == 4 
    strategy.exit("出场4","l4",limit = 2*s4- d4,stop= d4,qty_percent = 50)
    strategy.exit("出场41","l4",stop= d4)

if le51 and close > ema12 and o == 4
    strategy.order("l5",strategy.long,comment="第五单")
if c > 0 and o == 5
    strategy.exit("出场5","l5",limit = 2*s5- d5,stop= d5,qty_percent = 50)
    strategy.exit("出场51","l5",stop= d5)
bgcolor(le2?color.red:na)
if c > 0 and ema12 < ema144
    strategy.close_all("跌破均线全部出场")

//做空
es3 = ta.valuewhen(o ==2 and o[1] == 1 and c < 0,bar_index,0)
es4 = ta.valuewhen(o ==3 and o[1] == 2 and c < 0,bar_index,0)
es5 = ta.valuewhen(o ==4 and o[1] == 3 and c < 0,bar_index,0)
se1 = false
se1 := c >= 0 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 ? false : se1[1]
se11 = false
se11 := se1 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144,bar_index,0) < 12 ? true : false
se2 = false
se2 := c < 0 and o == 1 and o[1] == 1 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 or o < 1? false : se2[1]
se21 = false
se21 := se2 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 1 and o[1]==1,bar_index,0) < 12 ? true : false
se3 = false
se3 := c < 0 and o == 2 and o[1] == 2 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169 ? true :  close > ema169 or ema12 > ema144 or o < 2? false : se3[1]
se31 = false
se31 := se3 and bar_index - es3 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 2 and o[1]==2,bar_index,0) < 12 ? true : false
se4 = false
se4 := c < 0 and o == 3 and o[1] == 3 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169? true :  close > ema169 or ema12 > ema144 or o < 3? false : se4[1]
se41 = false
se41 := se4 and bar_index - es4 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 3 and o[1]==3,bar_index,0) < 12 ? true : false
se5 = false
se5 := c < 0 and o == 4 and o[1] == 4 and ema12 < ema144 and ema144 < ema169 and ema169 < ema576 and ema576 < ema676 and high > ema144 and high[1] < ema144 and close < ema169 ? true :  close > ema169 or ema12 > ema144 or o < 4? false : se5[1]
se51 = false
se51 := se5 and bar_index - es5 > 50 and bar_index - ta.valuewhen(high > ema144 and high[1] < ema144 and o == 4 and o[1]==4,bar_index,0) < 12 ? true : false
ds1 = ta.valuewhen(o == 1 and o[1] == 0 and c < 0 ,ta.highest(12),0)
ds2 = ta.valuewhen(o == 2 and o[1] == 1 and c < 0,ta.highest(12),0)
ds3 = ta.valuewhen(o == 3 and o[1] == 2 and c < 0,ta.highest(12),0)
ds4 = ta.valuewhen(o == 4 and o[1] == 3 and c < 0,ta.highest(12),0)
ds5 = ta.valuewhen(o == 5 and o[1] == 4 and c < 0,ta.highest(12),0)
if se11 and close < ema12 and o == 0
    strategy.order("s1",strategy.short,comment="第一单")
if c < 0 and o > 0
    strategy.exit("出场1","s1",limit = 2*s1- ds1,stop= ds1,qty_percent = 50)
    strategy.exit("出场11","s1",stop= ds1)

if se21 and close < ema12 and o == 1
    strategy.order("s2",strategy.short,comment="第二单")
if c < 0 and o == 2
    strategy.exit("出场2","s2",limit = 2*s2- ds2,stop= ds2,qty_percent = 50)
    strategy.exit("出场21","s2",stop= ds2)

if se31 and close < ema12 and o == 2
    strategy.order("s3",strategy.short,comment="第三单")
if c < 0 and o == 3
    strategy.exit("出场3","s3",limit = 2*s3- ds3,stop= ds3,qty_percent = 50)
    strategy.exit("出场31","s3",stop= ds3)

if se41 and close < ema12 and o == 3
    strategy.order("s4",strategy.short,comment="第四单")
if c < 0 and o == 4 
    strategy.exit("出场4","s4",limit = 2*s4- ds4,stop= ds4,qty_percent = 50)
    strategy.exit("出场41","s4",stop= ds4)

if se51 and close < ema12 and o == 4
    strategy.order("s5",strategy.short,comment="第五单")
if c < 0 and o == 5
    strategy.exit("出场5","s5",limit = 2*s5- ds5,stop= ds5,qty_percent = 50)
    strategy.exit("出场51","s5",stop= ds5)
bgcolor(se1?color.red:na)
if c < 0 and ema12 > ema144
    strategy.close_all("跌破均线全部出场")
kaiguan = input.bool(true,"均线开关")
plot(ema12,force_overlay=true)
plot(ema144, "EMA144", color=color.new(#008000, 0),force_overlay=true)
plot(ema169, "EMA169", color=color.red,force_overlay=true)
plot(kaiguan?ema576:na,color=color.yellow,force_overlay=true)
plot(kaiguan?ema676:na,color=color.yellow,force_overlay=true)
//plotshape(series=entrySignal,title="买入信号",location=location.belowbar,color=color.new(color.green, 0),style=shape.labelup,text="BUY",textcolor=color.new(color.white, 0))