
Strategi hentian dinamik harga rata-rata yang kembali pada nilai rata-rata adalah strategi perdagangan kuantitatif berdasarkan prinsip statistik, yang menggunakan ciri-ciri harga yang berputar di sekitar nilai rata-ratanya. Strategi ini mengubah harga menjadi bentuk logar, dan kemudian mengira skor Z (ganda standard) untuk mengukur sejauh mana harga menyimpang dari nilai rata-rata. Apabila skor Z mencapai nilai terendah tertentu, strategi ini menganggap bahawa pasaran telah mengalami overbought atau oversold, dan berdagang berdasarkan harga yang dijangkakan akan kembali kepada nilai rata-rata.
Prinsip-prinsip utama strategi ini adalah berdasarkan teori kemerosotan nilai rata-rata dan ciri-ciri statistik harga logar. Langkah-langkah untuk melaksanakan strategi ini adalah seperti berikut:
Pertama, strategi menukar harga penutupan menjadi bentuk logaritma ((log_price = math.log(close)), yang membantu mengubah perubahan perkalian menjadi perubahan penambahan, menjadikan perubahan harga lebih sesuai dengan sebaran normal.
Kemudian, berdasarkan tetingkap bergulir yang ditetapkan (default 7 kitaran), kira purata bergerak harga pasangan (rolling_mean) dan perbezaan piawairolling_std)。
Gunakan statistik ini untuk mengira skor Z pada harga logar semasa:rolling_z_score = (log_price - rolling_mean) / rolling_std, Nilai ini menunjukkan perkalian standard perbezaan harga semasa dari nilai purata.
Syarat kemasukan ditetapkan sebagai berikut:
Sasaran penangguhan ditetapkan sebagai purata bergerak harga logar:take_profit_price = math.exp(rolling_mean)Ini bermakna bahawa matlamat strategi adalah untuk mengembalikan harga kepada nilai purata statistik.
Mekanisme Hentian Kerosakan Dinamik adalah inovasi utama dalam strategi ini:
Logik penyingkiran terdiri daripada dua keadaan:
Statistik AsasStrategi ini berdasarkan kepada prinsip statistik yang kukuh, menggunakan skor Z untuk mengukur tahap penyimpangan harga, memberikan isyarat masuk dan keluar yang objektif.
Penukaran kepada harga nombor: Menggunakan harga pasangan berbanding harga asal untuk mengira, menjadikan perubahan harga lebih sesuai dengan sebaran normal, meningkatkan keberkesanan indikator statistik.
Pengurusan risiko dinamikKelebihan utama strategi ini ialah mekanisme stop loss dinamik yang dapat menyesuaikan tahap stop loss secara automatik mengikut perubahan dalam turun naik pasaran, dan membenarkan ruang dagangan yang mencukupi sambil melindungi dana.
Perdagangan dua halaStrategi ini menyokong perdagangan berganda dan kosong pada masa yang sama, dan dapat mencari peluang dalam pelbagai keadaan pasaran.
Nilai purata sebagai sasaran: Menggunakan purata statistik sebagai sasaran penangguhan, sesuai dengan asas teori pengembalian purata, meningkatkan kesahihan penangguhan.
Parameter boleh disesuaikanStrategi ini menawarkan pelbagai parameter yang boleh disesuaikan, termasuk tetingkap bergulir, skor Z masuk, dan skor Z berhenti, yang membolehkan peniaga menyesuaikan diri dengan pasaran yang berbeza dan pilihan risiko peribadi.
Risiko hipotesis pulangan nilai purataPenyelesaian: Anda boleh menambah penapis trend, menangguhkan perdagangan di pasaran yang sedang tren kuat.
Skor Z yang terlalu sensitifDalam pasaran yang sangat rendah turun naik, walaupun turun naik kecil dalam harga boleh menyebabkan perubahan besar dalam skor Z, yang mencetuskan isyarat perdagangan yang tidak perlu. Penyelesaian: Tetapkan had turun naik minimum, atau menyesuaikan had masuk dalam persekitaran turun naik rendah.
Sensitiviti panjang tetingkapPerforma strategi sangat sensitif terhadap parameter panjang tetingkap bergulir, pilihan yang tidak betul boleh menyebabkan overtrading atau kehilangan peluang. Cara penyelesaian: parameter optimum dapat dijumpai dengan mengulang panjang tetingkap yang berbeza, atau menggunakan panjang tetingkap yang disesuaikan.
Risiko kehilangan dataPada awal perdagangan, kurangnya data sejarah yang mencukupi untuk mengira purata bergerak dan perbezaan piawai boleh menyebabkan kestabilan isyarat. Penyelesaian: Pastikan ada jangka masa yang cukup sebelum mengira indikator.
Risiko penyesuaian strategi pelepasan kerugianMekanisme Hentian Kerosakan Dinamik Walaupun inovatif, ia juga boleh menyebabkan penyesuaian berlebihan pada titik hentian apabila turun naik berubah secara mendadak. Penyelesaian: Anda boleh menetapkan had maksimum penyesuaian hentian untuk mengelakkan penyesuaian berlebihan.
Kemas kini panjang tetingkap: Strategi semasa menggunakan panjang tetingkap bergulir tetap (default 7 kitaran) untuk mengira petunjuk statistik. Anda boleh mempertimbangkan untuk melaksanakan panjang tetingkap yang menyesuaikan diri, menyesuaikan saiz tetingkap secara automatik mengikut perubahan berkala pasaran. Ini dapat menangkap peluang pulangan rata-rata pada skala masa yang berbeza dengan lebih baik, meningkatkan kemampuan strategi.
Penapis trendMenambah mekanisme penilaian trend, menangguhkan atau menyesuaikan parameter strategi dalam pasaran yang kuat, menggunakan strategi pulangan rata-rata hanya dalam pasaran yang berlainan atau berbalik. Ini boleh dilakukan dengan menambahkan purata bergerak jangka panjang atau indikator trend seperti ADX, untuk mengelakkan kerugian yang kerap dalam pasaran yang berlainan.
Analisis pelbagai kerangka masa: Merangkumi isyarat skor Z dari pelbagai bingkai masa untuk membuat keputusan masuk dan keluar yang lebih menyeluruh. Sebagai contoh, peluang untuk mengukuhkan nilai purata dalam bingkai masa yang lebih besar, kemudian mencari titik masuk yang tepat dalam bingkai masa yang lebih kecil, meningkatkan peluang kemenangan dan ganjaran risiko.
Pengoptimuman penangguhanStrategi semasa menggunakan purata sederhana sebagai sasaran hentian. Anda boleh mempertimbangkan untuk melaksanakan mekanisme hentian dinamik, seperti menetapkan sasaran hentian berdasarkan struktur pasaran atau nisbah pulangan risiko yang berkaitan dengan hentian, atau melaksanakan strategi hentian separa, mengunci keuntungan secara beransur-ansur apabila harga bergerak ke arah yang menguntungkan.
Kadar turun naik bertimbanganPertimbangkan untuk memasukkan mekanisme penimbang kadar lonjakan dalam pengiraan skor Z, memberikan berat yang lebih tinggi kepada data pada tempoh yang lebih stabil, yang dapat mengurangkan gangguan yang dihasilkan oleh lonjakan ekstrem pada isyarat dan meningkatkan kualiti isyarat.
Integrasi Pembelajaran MesinPertimbangan untuk memperkenalkan algoritma pembelajaran mesin untuk mengoptimumkan had masuk dan keluar, yang boleh memprediksi had Z-skor yang optimum dan parameter hentian dinamik berdasarkan model latihan data sejarah, meningkatkan kemampuan beradaptasi strategi dan prestasi keseluruhan.
Strategi Hentian Dinamis Kembali Pada Nilai Rata-Rata Rangka adalah strategi perdagangan kuantitatif berdasarkan prinsip statistik yang mengenal pasti keadaan pasaran yang terlalu banyak dan terlalu banyak dijual dengan mengira skor Z harga rangka, dan mendapat keuntungan apabila harga dijangka kembali ke nilai rata-rata. Inovasi utama strategi ini adalah mekanisme Hentian Dinamis yang dapat menyesuaikan parameter risiko secara automatik mengikut perubahan dalam turun naik pasaran, memberikan pengurusan risiko yang lebih baik.
Walaupun strategi ini berdasarkan asas statistik yang kukuh, ia masih menghadapi cabaran seperti hipotesis kekalahan nilai rata-rata, sensitiviti parameter, dan kesesuaian dengan persekitaran pasaran. Dengan penambahbaikan seperti penapis trend, panjang tetingkap yang disesuaikan, analisis pelbagai kerangka masa, dan pengoptimuman pembelajaran mesin, strategi ini berpotensi untuk mencapai prestasi yang lebih stabil dalam pelbagai persekitaran pasaran.
Perlu diperhatikan bahawa mana-mana strategi kuantitatif memerlukan pengesanan dan pengesahan ke hadapan yang mencukupi, serta penyesuaian parameter mengikut ciri-ciri pasaran tertentu dan keutamaan risiko peribadi. Strategi ini menyediakan kerangka kerja yang menggabungkan prinsip statistik dan pengurusan risiko dinamik, yang mana pedagang boleh menyesuaikan dan mengoptimumkan lebih lanjut.
/*backtest
start: 2024-03-14 00:00:00
end: 2025-03-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Mean Reversion Z-Score Strategy with Dynamic SL", overlay=true)
// Input parameters
window = input.int(7, "Rolling Window", minval=1)
z_entry_long = input.float(-1.825, "Z-Score Long Entry", step=0.025)
z_entry_short = input.float(1.825, "Z-Score Short Entry", step=0.025)
z_stop_loss_long = input.float(-2.125, "Z-Score Stop Loss Long", step=0.025)
z_stop_loss_short = input.float(2.125, "Z-Score Stop Loss Short", step=0.025)
// Calculate log price, rolling mean, and rolling standard deviation
log_price = math.log(close)
rolling_mean = ta.sma(log_price, window)
rolling_std = ta.stdev(log_price, window)
rolling_z_score = (log_price - rolling_mean) / rolling_std
// Persistent variables to store entry conditions
var float entry_price = 0.0
var float entry_log_price = 0.0
var float entry_mean = 0.0
var float entry_std = 0.0
var float stop_loss_price = 0.0
var string position = "none"
// Calculate dynamic take-profit
take_profit_price = math.exp(rolling_mean)
// Entry logic
if (rolling_z_score <= z_entry_long and position == "none")
entry_price := close
entry_log_price := log_price
entry_mean := rolling_mean
entry_std := rolling_std
stop_loss_price := math.exp(log_price + z_stop_loss_long * rolling_std)
position := "long"
strategy.entry("Long", strategy.long)
if (rolling_z_score >= z_entry_short and position == "none")
entry_price := close
entry_log_price := log_price
entry_mean := rolling_mean
entry_std := rolling_std
stop_loss_price := math.exp(log_price - z_stop_loss_short * rolling_std)
position := "short"
strategy.entry("Short", strategy.short)
// Exit logic with dynamic adjustments
if (position != "none")
// Calculate new stop-loss based on current volatility
float new_stop_loss = na
if (position == "long")
new_stop_loss := math.exp(log_price + z_stop_loss_long * rolling_std)
if (rolling_std > entry_std)
stop_loss_price := math.min(stop_loss_price, new_stop_loss)
else if (rolling_std < entry_std)
stop_loss_price := math.max(stop_loss_price, new_stop_loss)
if (close >= take_profit_price)
strategy.close("Long", comment="TP")
position := "none"
else if (close <= stop_loss_price)
strategy.close("Long", comment="SL")
position := "none"
else if (position == "short")
new_stop_loss := math.exp(log_price - z_stop_loss_short * rolling_std)
if (rolling_std > entry_std)
stop_loss_price := math.max(stop_loss_price, new_stop_loss)
else if (rolling_std < entry_std)
stop_loss_price := math.min(stop_loss_price, new_stop_loss)
if (close <= take_profit_price)
strategy.close("Short", comment="TP")
position := "none"
else if (close >= stop_loss_price)
strategy.close("Short", comment="SL")
position := "none"
// Plots
plot(rolling_z_score, title="Z-Score", color=color.blue, linewidth=1)
plot(z_entry_short, title="Z-Score-upper", color=color.rgb(33, 243, 103), linewidth=1)
plot(z_entry_long, title="Z-Score-lower", color=color.rgb(243, 33, 61), linewidth=1)