Strategi pelacakan rata-rata pergerakan ganda dan sistem manajemen posisi dinamis

EMA ATR
Tanggal Pembuatan: 2025-02-27 10:20:18 Akhirnya memodifikasi: 2025-02-27 10:20:18
menyalin: 0 Jumlah klik: 478
2
fokus pada
319
Pengikut

Strategi pelacakan rata-rata pergerakan ganda dan sistem manajemen posisi dinamis Strategi pelacakan rata-rata pergerakan ganda dan sistem manajemen posisi dinamis

Ringkasan

Strategi pelacakan garis rata-rata ganda dan sistem manajemen posisi dinamis adalah strategi perdagangan kuantitatif yang didasarkan pada rata-rata bergerak multi-indeks ((EMA)). Strategi ini membangun sistem perdagangan yang lengkap dengan memantau lima periode berbeda ((12, 144, 169, 576 dan 676) dari indikator EMA, termasuk penilaian tren, identifikasi sinyal masuk, batch building, stop loss dan stop loss. Strategi ini tidak hanya mendukung operasi penambahan posisi beberapa kali, tetapi juga dapat membangun hingga 5 posisi perdagangan, dan setiap posisi memiliki langkah-langkah pengendalian risiko yang independen.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada hubungan posisi antara beberapa indikator EMA dan interaksi harga dengan EMA kunci:

  1. Mekanisme penilaian tren:

    • Kondisi tren multihead: EMA12 > EMA144 > EMA169 > EMA576 > EMA676
    • Kondisi tren overhead: EMA12 < EMA144 < EMA169 < EMA576 < EMA676
  2. Sinyal masuk:

    • Multi-headed entry: Berdasarkan memenuhi tren multi-headed, ketika titik rendah menembus EMA144 dan harga penutupan berada di atas EMA169
    • Bottom entry: Berdasarkan memenuhi tren headline, ketika high melintasi EMA144 dan harga closeout berada di bawah EMA169
  3. Pembangunan gudang batch:

    • Posisi pertama: sesuai dengan sinyal masuk dan tidak memegang posisi
    • Posisi kedua: memenuhi sinyal masuk dan saat ini memegang satu posisi
    • Tiga sampai lima kali berlayar: Lebih dari 50 K-line dari waktu berlayar terakhir, berdasarkan sinyal masuk yang dipenuhi
  4. Dinamika Stop Loss:

    • Setiap posisi menggunakan stop loss dinamis, berdasarkan harga minimum (polyhead) atau harga tertinggi (emptyhead) dari 12 garis K pada saat pembentukan posisi
    • Menggunakan strategi symmetrical stop loss, target harga adalah “harga masuk + (harga masuk - harga stop loss) “
    • Batch profit: setiap posisi mencapai titik stop, 50% dari posisi pertama, dan sisanya terus dipegang sampai mencapai stop loss
  5. Pengendalian risiko secara keseluruhan:

    • Ketika EMA12 dan EMA144 indikator bersilang ((EMA12 di bawah EMA144 dalam tren multi-head, atau EMA12 di atas EMA144 dalam tren overhead), semua posisi kosong

Secara keseluruhan, strategi ini menetapkan arah tren pasar dengan menyusun beberapa EMA, menentukan waktu masuk melalui interaksi harga dengan EMA144, dan mengatur stop loss stop loss dinamis melalui zona fluktuasi harga baru-baru ini, sambil mengoptimalkan manajemen dana dengan cara membangun gudang secara batch dan membagi keuntungan, dan akhirnya membentuk sistem perdagangan yang utuh.

Keunggulan Strategis

  1. Sistematisasi penilaian tren:

    • Sistem penilaian tren yang menggunakan EMA dari lima periode yang berbeda untuk membentuk trio, mengurangi risiko false breakout
    • Portfolio ranging dari indikator EMA memberikan standar kuantitatif untuk kekuatan dan kelemahan tren, membuat keputusan perdagangan lebih objektif
  2. Mekanisme penerimaan yang tepat:

    • Pergerakan silang antara harga dan garis rata-rata sebagai pemicu masuk, meningkatkan efisiensi waktu masuk
    • Memerintahkan sinyal masuk untuk dikonfirmasi dalam 12 garis K, mengurangi risiko transaksi yang tertinggal
  3. Manajemen Uang yang Cerdas:

    • Dukungan untuk membangun gudang bergilir hingga 5 gudang, sesuai dengan tahap perkembangan pasar yang berbeda
    • Pos berikutnya perlu memenuhi interval waktu minimum ((50 K garis), menghindari terlalu banyak gudang dalam waktu singkat
  4. Strategi Fleksibel untuk Mendapatkan Keuntungan:

    • Menggunakan prinsip “Symmetrical Stop” untuk mendapatkan posisi keuntungan berdasarkan harga masuk dan stop loss target
    • Batch profit (posisi 50%), mengunci sebagian keuntungan sambil mempertahankan ruang untuk naik
  5. Kontrol risiko yang ketat:

    • Setiap posisi menetapkan titik stop loss yang terpisah, berdasarkan rentang fluktuasi baru-baru ini (12 garis K)
    • Sinyal pembalikan tren ((EMA12 dan EMA144 bersilang) memicu posisi kosong penuh, stop loss tepat waktu
  6. Sangat mudah beradaptasi:

    • Mendukung perdagangan multihead dan headless, serta beradaptasi dengan berbagai kondisi pasar
    • Dengan parameter yang disesuaikan (seperti ATR, jumlah K-line), dapat disesuaikan dengan varietas dan periode yang berbeda

Risiko Strategis

  1. Risiko rata-rata keterlambatan:

    • Indikator EMA memiliki keterbelakangan, yang dapat menyebabkan waktu masuk atau keluar yang buruk saat pasar bergejolak
    • Metode mitigasi: dapat dipertimbangkan untuk menggabungkan indikator momentum jangka pendek sebagai tambahan untuk meningkatkan kecepatan respons sistem
  2. Tekanan keuangan untuk membangun gudang batch:

    • Strategi penargetan yang mendukung maksimal lima posisi dapat menyebabkan konsentrasi dana yang terlalu tinggi
    • Metode mitigasi: Rasio dana yang wajar harus ditetapkan untuk setiap gudang yang dibangun, sesuai dengan jumlah total dana, untuk memastikan distribusi dana yang seimbang
  3. Keterbatasan parameter periode tetap:

    • Periode EMA dalam kode ((12, 144, 169, 576, 676) adalah nilai tetap yang mungkin tidak berlaku untuk semua situasi pasar
    • Metode mitigasi: memperkenalkan metode perhitungan siklus adaptasi, atau membangun proses optimasi parameter khusus untuk varietas yang berbeda
  4. Potensi masalah dengan hambatan simetri:

    • Di pasar yang sedang tren, stop-loss simetris dapat mengambil keuntungan lebih awal dan kehilangan ruang keuntungan yang lebih besar.
    • Metode mitigasi: Tracking stop loss dapat dipertimbangkan untuk posisi 50% yang tersisa untuk menyesuaikan diri dengan tren kuat
  5. Persyaratan masuk terlalu ketat:

    • Kombinasi kondisi ganda ((array line + price crossover + close confirmation) dapat menyebabkan sinyal yang hilang sebagian
    • Metode mitigasi: Adaptasi mekanisme masuk yang dapat disesuaikan dengan fase pasar yang berbeda untuk meningkatkan sensitivitas sinyal yang ditangkap
  6. Risiko ketergantungan data:

    • Strategi yang bergantung pada EMA periode panjang (seperti 576, 676) membutuhkan data sejarah yang cukup panjang untuk bekerja secara efektif
    • Metode mitigasi: Dalam kasus data yang tidak mencukupi, pertimbangan untuk menggunakan indikator alternatif atau menyesuaikan metode perhitungan EMA jangka panjang

Arah optimasi strategi

  1. Memperkenalkan mekanisme parameter adaptif:

    • Mengubah siklus EMA yang tetap ((12, 144, 169, 576, 676) menjadi parameter penyesuaian berdasarkan volatilitas pasar
    • Alasan optimasi: Ada perbedaan yang signifikan dalam siklus EMA optimal dalam berbagai kondisi pasar, dan mekanisme adaptasi dapat meningkatkan universalitas strategi
  2. Meningkatkan filter sinyal masuk:

    • Menggabungkan indikator seperti volume transaksi, volatilitas pasar (seperti ATR) untuk menambah kondisi konfirmasi tambahan untuk sinyal masuk
    • Alasan pengoptimalan: Sinyal silang linear murni mudah terganggu oleh kebisingan pasar, kondisi penyaringan tambahan meningkatkan kualitas sinyal
  3. Peningkatan sistem manajemen dana:

    • Proporsi dana untuk setiap posisi yang dibangun berdasarkan total dana di rekening dan fluktuasi pasar yang berubah-ubah
    • Alasan optimasi: Rasio alokasi dana dalam strategi saat ini tetap, tidak dapat disesuaikan secara otomatis dengan tingkat risiko, dan pengenalan manajemen dana dinamis dapat meningkatkan efisiensi penggunaan dana
  4. Mengoptimalkan mekanisme stop loss:

    • Strategi stop loss yang berbeda untuk lokasi gudang yang berbeda, seperti stop loss proporsional yang ditetapkan untuk gudang pertama, dan stop loss pelacakan untuk gudang berikutnya
    • Alasan optimasi: Strategi stop-loss yang seragam sulit untuk beradaptasi dengan kebutuhan di berbagai tahap pasar, strategi diferensiasi dapat lebih fleksibel dalam menanggapi perubahan pasar
  5. Tambahkan filter waktu:

    • Memperkenalkan mekanisme penyaringan waktu perdagangan untuk menghindari periode volatilitas tinggi (misalnya sebelum buka dan sebelum tutup) atau saat publikasi data penting
    • Alasan optimasi: Volatilitas pasar pada periode waktu tertentu cenderung tidak memiliki arah, dan penyaringan waktu tambahan dapat menghindari transaksi yang tidak perlu
  6. Menambahkan penilaian intensitas tren:

    • Mengembangkan indikator intensitas tren yang memungkinkan perdagangan hanya ketika intensitas tren mencapai titik terendah
    • Alasan optimasi: Strategi saat ini juga menghasilkan sinyal dalam lingkungan tren lemah, dan memperkenalkan penilaian kekuatan tren dapat mengurangi sinyal palsu di pasar goyah
  7. Membangun sistem sinergis multi-siklus:

    • Pengertian tren yang digabungkan dengan periode waktu yang lebih tinggi sebagai filter arah perdagangan
    • Alasan optimasi: Sistem perdagangan siklus tunggal rentan terhadap gangguan fluktuasi jangka pendek, sinkronisasi multi-siklus dapat meningkatkan stabilitas sistem

Meringkaskan

Strategi pelacakan garis rata ganda dan sistem manajemen posisi dinamis adalah strategi perdagangan kuantitatif yang terstruktur, logis, dan jelas. Strategi ini membangun kerangka penilaian tren melalui kombinasi urutan dari beberapa EMA, menentukan waktu masuk melalui interaksi harga dan garis rata kunci, dan mencapai manajemen dana dan kontrol risiko yang lebih halus melalui pembentukan posisi dan stop loss yang dinamis.

Namun, strategi ini juga memiliki risiko seperti ketinggalan rata-rata, keterbatasan parameter tetap, dan tekanan manajemen dana. Untuk meningkatkan efektivitas strategi, dapat dipertimbangkan untuk memperkenalkan mekanisme parameter yang beradaptasi, meningkatkan filter sinyal, memperbaiki sistem manajemen dana, mengoptimalkan mekanisme stop-loss, dan membangun sistem sinkronisasi multi-siklus.

Secara keseluruhan, strategi ini memberikan kerangka kerja yang kuat untuk trading kuantitatif dengan pelacakan tren yang seimbang dan kontrol risiko. Dengan terus-menerus mengoptimalkan dan menyesuaikan parameter untuk lingkungan pasar tertentu, strategi ini diharapkan untuk mencapai kinerja yang stabil dalam perdagangan nyata.

Kode 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))