Harga Logaritma Pulangan Min Strategi Henti Kerugian Dinamik

Z-SCORE MEAN REVERSION BOLLINGER BANDS SMA LOGARITHMIC PRICE DYNAMIC STOP-LOSS VOLATILITY ADJUSTMENT
Tarikh penciptaan: 2025-03-14 09:39:36 Akhirnya diubah suai: 2025-03-14 09:39:36
Salin: 0 Bilangan klik: 451
2
fokus pada
319
Pengikut

Harga Logaritma Pulangan Min Strategi Henti Kerugian Dinamik Harga Logaritma Pulangan Min Strategi Henti Kerugian Dinamik

Gambaran keseluruhan

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 Strategi

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:

  1. 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.

  2. Kemudian, berdasarkan tetingkap bergulir yang ditetapkan (default 7 kitaran), kira purata bergerak harga pasangan (rolling_mean) dan perbezaan piawairolling_std)。

  3. 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.

  4. Syarat kemasukan ditetapkan sebagai berikut:

    • Apabila skor Z berada di bawah had kemasukan berbilang mata yang ditetapkan (default -1.825), buka kedudukan berbilang mata.
    • Apabila skor Z lebih tinggi daripada had kemasukan kosong yang ditetapkan (default 1.825) , buka kedudukan kosong.
  5. 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.

  6. Mekanisme Hentian Kerosakan Dinamik adalah inovasi utama dalam strategi ini:

    • Stop loss awal berdasarkan skor Z dan kadar turun naik yang ditetapkan semasa masuk.
    • Ia juga boleh digunakan untuk menjimatkan wang yang dikeluarkan oleh bank untuk membayar cukai kepada pelabur.
      • Apabila kadar turun naik meningkat, titik hentian multihead akan diturunkan dan titik hentian kosong akan meningkat, memberikan lebih banyak ruang untuk berdagang.
      • Apabila kadar turun naik berkurang, titik hentian multihead akan meningkat, dan titik hentian kosong akan berkurang, dan perlindungan telah menguntungkan.
  7. Logik penyingkiran terdiri daripada dua keadaan:

    • Harga mencapai titik berhenti ((kembali ke nilai purata)
    • Harga menyentuh titik hentian perubahan dinamik.

Kelebihan Strategik

  1. Statistik AsasStrategi ini berdasarkan kepada prinsip statistik yang kukuh, menggunakan skor Z untuk mengukur tahap penyimpangan harga, memberikan isyarat masuk dan keluar yang objektif.

  2. Penukaran kepada harga nombor: Menggunakan harga pasangan berbanding harga asal untuk mengira, menjadikan perubahan harga lebih sesuai dengan sebaran normal, meningkatkan keberkesanan indikator statistik.

  3. 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.

  4. Perdagangan dua halaStrategi ini menyokong perdagangan berganda dan kosong pada masa yang sama, dan dapat mencari peluang dalam pelbagai keadaan pasaran.

  5. Nilai purata sebagai sasaran: Menggunakan purata statistik sebagai sasaran penangguhan, sesuai dengan asas teori pengembalian purata, meningkatkan kesahihan penangguhan.

  6. 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 Strategik

  1. Risiko hipotesis pulangan nilai purataPenyelesaian: Anda boleh menambah penapis trend, menangguhkan perdagangan di pasaran yang sedang tren kuat.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

Arah pengoptimuman strategi

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

ringkaskan

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.

Kod sumber strategi
/*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)