Strategi perdagangan kuantitatif momentum berdasarkan kitaran lunar dalam pasaran mata wang kripto

Lunar Calendar Cyclical Trading ETHUSDT Fixed Date Entry/Exit Quantitative Strategy
Tarikh penciptaan: 2025-08-11 09:09:22 Akhirnya diubah suai: 2025-08-11 09:09:22
Salin: 0 Bilangan klik: 182
2
fokus pada
319
Pengikut

Strategi perdagangan kuantitatif momentum berdasarkan kitaran lunar dalam pasaran mata wang kripto Strategi perdagangan kuantitatif momentum berdasarkan kitaran lunar dalam pasaran mata wang kripto

Gambaran keseluruhan

Strategi ini adalah kaedah dagangan cryptocurrency berdasarkan tarikh kalendar, dengan membeli dan menjual operasi dengan memanfaatkan tarikh tertentu dalam kitaran kalendar. Strategi ini bermula dari tahun baru kalendar dan berterusan hingga akhir Disember kalendar tahun itu, mengikut peraturan mudah: beli pada hari ke-5 setiap bulan kalendar dan jual pada hari ke-26 setiap bulan kalendar.

Prinsip Strategi

Prinsip utama strategi ini adalah berdasarkan kepada kemungkinan kesan kitaran lunar terhadap pasaran cryptocurrency. Kod ini mewujudkan idea ini dengan cara berikut:

  1. Mulakan dengan menentukan tarikh permulaan tahun baru lunar dan bilangan hari setiap bulan untuk setiap tahun, yang meliputi tempoh 2020 hingga 2026.
  2. Menentukan bulan dan tarikh kalendar semasa dengan mengira perbezaan hari antara tarikh semasa dan tahun baru kalendar.
  3. Apabila tarikh kalendar adalah hari ke-5 dan tiada simpanan pada masa ini, isyarat beli dipicu.
  4. Apabila anda memegang kedudukan pada hari ke-26 dalam kalendar lunar, isyarat jual akan dicetuskan.
  5. Membeli mata wang kripto sebanyak mungkin dengan menggunakan semua dana yang tersedia, dengan mengambil kira kesan slippage dan yuran.
  6. Apabila dijual, semua pegangan akan dihapuskan dan keuntungan atau kerugian akan dicapai.

Strategi menggunakan kaedah pengiraan tarikh yang tepat, menyimpan bilangan hari setiap bulan kalendar melalui array, dan mengumpul jumlah hari dari tahun baru kalendar, untuk menentukan tarikh kalendar semasa dengan tepat. Kaedah ini menjamin pemicu isyarat perdagangan yang tepat.

Kelebihan Strategik

Analisis kod strategi ini dapat meringkaskan kelebihan berikut:

  1. Peraturan mudah dan jelas: Tarikh pembelian dan penjualan tetap menjadikan strategi sangat intuitif, mudah difahami dan dilaksanakan, mengurangkan penilaian subjektif pedagang.
  2. Mempertimbangkan faktor geseran pasaranStrategi ini mempertimbangkan yuran dan titik slippage sebanyak 0.1%, menjadikan keputusan pengesanan semula lebih dekat dengan keadaan perdagangan sebenar.
  3. Keupayaan yang tinggi: 100% dana yang tersedia digunakan untuk setiap transaksi, memaksimumkan potensi keuntungan.
  4. Menimbang Siklus Lunar yang UnikBerbeza dengan analisis teknikal tradisional, strategi ini memperkenalkan faktor kalendar yang mungkin menangkap corak unik yang berkaitan dengan tingkah laku pelabur di pasaran Asia.
  5. Kesan jangka panjangStrategi ini menyediakan data kalendar dari tahun 2020 hingga 2026, yang membolehkan peniaga menggunakan kaedah ini untuk jangka masa panjang.
  6. Bantuan visual: Membantu peniaga menjejaki pelaksanaan strategi secara langsung dengan memaparkan label tarikh kalendar pada carta.
  7. Mengelakkan perdagangan berlebihanIa adalah salah satu cara untuk mengurangkan kos dan risiko perdagangan berlebihan.

Risiko Strategik

Walaupun terdapat kelebihan seperti di atas, strategi ini juga mempunyai risiko yang berpotensi:

  1. Kekurangan mekanisme pengurusan risikoStrategi ini tidak menetapkan titik hentian kerugian, yang boleh menyebabkan kerugian yang ketara jika pasaran turun dengan ketara selepas pembelian.
  2. Mengabaikan trend dan keadaan pasaranStrategi: Berdagang berdasarkan tarikh sahaja, tanpa mengambil kira trend keseluruhan pasaran, turun naik atau petunjuk teknikal lain.
  3. Anggapkan bahawa terdapat undang-undang kitaranStrategi ini mengandaikan bahawa terdapat beberapa hubungan antara kitaran lunar dan harga cryptocurrency, tetapi hubungan ini mungkin tidak stabil atau tidak wujud.
  4. Had masa tertentuWalaupun data untuk tahun 2020-2026 disediakan, data kalendar untuk tahun-tahun akan datang perlu dikemas kini, dan strategi mungkin tidak berfungsi di luar jangkauan ini.
  5. Risiko kecairanPada tarikh tertentu, masalah kecairan pasaran mungkin berlaku, terutamanya apabila menggunakan dana yang besar.
  6. Kemungkinan kesalahan pengiraan tarikhSetiap kesilapan dalam mengira tarikh kalendar boleh menyebabkan isyarat dagangan yang salah.
  7. Kekurangan adaptasi: Tarikh dagangan tetap tidak dapat menyesuaikan diri dengan perubahan keadaan pasaran, dan mungkin terlepas peluang membeli atau menjual yang lebih baik.

Untuk mengurangkan risiko ini, peniaga boleh mempertimbangkan untuk mengesahkan dagangan dalam kombinasi dengan petunjuk teknikal lain, atau menetapkan stop loss tetap untuk mengehadkan kerugian dalam satu dagangan.

Arah pengoptimuman strategi

Dengan menganalisis kod secara mendalam, beberapa arah pengoptimuman boleh dicadangkan:

  1. Memperkenalkan mekanisme stop loss: Tambah syarat stop loss peratusan atau jumlah mutlak, secara automatik menutup kedudukan apabila kerugian mencapai nilai terendah tertentu, untuk mengelakkan kerugian yang besar. Kod pengoptimuman boleh menambah samaif strategy.position_size > 0 and close < entry_price * (1 - stop_loss_percent)Penghakiman Syarat

  2. Pengesahan Indeks TeknologiBerkongsi dengan indikator trend (seperti moving average) atau indikator momentum (seperti RSI yang agak kuat) sebagai syarat tambahan, hanya melakukan perdagangan tarikh kalendar apabila indikator teknikal memberikan isyarat yang menguntungkan. Ini dapat meningkatkan kualiti isyarat.

  3. Optimumkan tarikh jual beliDengan mengkaji semula data sejarah, analisis hari-hari kalendar mana yang sebenarnya memberikan peluang terbaik untuk membeli dan menjual pasangan, dan bukannya menggunakan hari ke-5 dan ke-26 secara tetap. Mungkin ada kombinasi tarikh tertentu yang lebih baik.

  4. Bahagian pengurusan kedudukanPerubahan strategi untuk berdagang dengan sebahagian daripada dana dan bukannya 100% dana, atau menyesuaikan saiz kedudukan mengikut dinamik turun naik pasaran untuk menyebarkan risiko.

  5. Tambah penapis status pasaran: menangguhkan pelaksanaan strategi dalam keadaan pasaran yang melampau (seperti turun naik yang tinggi atau trend pasaran beruang yang jelas) untuk mengelakkan perdagangan dalam keadaan yang tidak menguntungkan.

  6. Memperluas jangka masa: Tambah data kalendar untuk lebih banyak tahun, atau kembangkan fungsi untuk mengira tarikh kalendar secara automatik, supaya strategi dapat berjalan tanpa had.

  7. Meningkatkan perdagangan pelbagai jenis: memperluaskan strategi ke beberapa mata wang kripto atau kelas aset lain, melihat perbezaan prestasi dalam pasaran yang berbeza mengikut kitaran lunar.

Pelaksanaan arah pengoptimuman ini dapat meningkatkan ketangguhan dan adaptasi strategi dengan ketara, sambil mengekalkan konsep inti yang mudah dan intuitif.

ringkaskan

Strategi perdagangan cryptocurrency berdasarkan kitaran kalendar menawarkan perspektif perdagangan yang unik, menggunakan tarikh kalendar tertentu untuk membeli dan menjual operasi. Keunggulan terbesar strategi ini adalah peraturan yang jelas dan mudah dilaksanakan, digabungkan dengan faktor unik kitaran kalendar, yang mungkin menangkap corak pasaran yang diabaikan oleh analisis teknikal biasa.

Walau bagaimanapun, strategi ini juga menghadapi cabaran kekurangan pengurusan risiko dan kesesuaian pasaran. Untuk meningkatkan keberkesanan strategi, disarankan untuk memperkenalkan langkah-langkah penambahbaikan seperti mekanisme hentian kerugian, pengesahan petunjuk teknikal dan pengoptimuman tarikh jual beli.

Perlu diperhatikan bahawa strategi perdagangan apa pun perlu diuji dengan baik dan diuji ke hadapan untuk mengesahkan prestasi dalam keadaan pasaran sebenar. Apabila menggunakan strategi ini, peniaga harus membuat penyesuaian yang sesuai mengikut kebolehan risiko dan matlamat pelaburan mereka sendiri, dan membuat keputusan perdagangan yang lebih menyeluruh dalam kombinasi dengan kaedah analisis lain.

Kod sumber strategi
/*backtest
start: 2024-08-11 00:00:00
end: 2025-08-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("Lunar ETHUSDT Trading 100% Invest with Fee & Slippage (2020~2026)", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1)

// Fee and slippage settings
feePercent = 0.1    // 0.1%
slippageTicks = 3
tickSize = syminfo.mintick
slippage = slippageTicks * tickSize

// Function for lunar new year start date and monthly lengths by year
f_get_lunar_data() =>
    y = year(time)
    if y == 2020
        [timestamp("Asia/Seoul", 2020, 1, 25, 0, 0), array.from(29,30,29,30,29,30,29,30,29,30,30,29)]
    else if y == 2021
        [timestamp("Asia/Seoul", 2021, 2, 12, 0, 0), array.from(30,29,30,29,30,29,30,29,30,29,30,30)]
    else if y == 2022
        [timestamp("Asia/Seoul", 2022, 2, 1, 0, 0), array.from(29,30,29,30,29,30,29,30,30,29,30,29)]
    else if y == 2023
        [timestamp("Asia/Seoul", 2023, 1, 22, 0, 0), array.from(30,29,30,29,30,29,30,30,29,30,29,30)]
    else if y == 2024
        [timestamp("Asia/Seoul", 2024, 2, 10, 0, 0), array.from(30,29,30,29,30,29,30,29,30,29,30,30,29)]
    else if y == 2025
        [timestamp("Asia/Seoul", 2025, 1, 29, 0, 0), array.from(29,30,29,30,29,30,29,30,30,29,30,29)]
    else if y == 2026
        [timestamp("Asia/Seoul", 2026, 2, 17, 0, 0), array.from(30,29,30,29,30,29,30,30,29,30,29,30)]
    else
        [na, array.new_int()]

// Function to create cumulative monthly days array
f_get_lunar_md(days_arr) =>
    arr = array.new_int()
    sum = 0
    for i = 0 to array.size(days_arr) - 1
        sum += array.get(days_arr, i)
        array.push(arr, sum)
    arr

// Get lunar start date and monthly lengths
[ts_start, lunar_lengths] = f_get_lunar_data()
valid = not na(ts_start)
days_since = valid ? math.floor((time - ts_start) / 86400000) : na
cumulative = valid ? f_get_lunar_md(lunar_lengths) : na

// Declare lunar month, day, last day variables
var int lunar_month = na
var int lunar_day = na
var int lunar_last_day = na

// Calculate lunar date
if valid and not na(days_since) and days_since >= 0
    lunar_month := na
    lunar_day := na
    lunar_last_day := na
    for i = 0 to array.size(cumulative) - 1
        cum = array.get(cumulative, i)
        prev = i == 0 ? 0 : array.get(cumulative, i - 1)
        if days_since < cum
            lunar_month := i + 1
            lunar_day := days_since - prev + 1
            lunar_last_day := array.get(lunar_lengths, i)
            break
else
    lunar_month := na
    lunar_day := na
    lunar_last_day := na

// Buy condition: Lunar day 5 and no current position
buy_condition = not na(lunar_day) and lunar_day == 5 and strategy.position_size == 0

// Sell condition: Lunar day 26 and holding position
sell_condition = not na(lunar_day) and lunar_day == 26 and strategy.position_size > 0

// Buy/sell price adjusted for slippage and fee
price_buy = close + slippage
price_buy_with_fee = price_buy * (1 + feePercent * 0.01)

price_sell = close - slippage
price_sell_with_fee = price_sell * (1 - feePercent * 0.01)

// Calculate buy quantity using 100% of equity
qty = math.floor(strategy.equity / price_buy_with_fee)

// Buy order (limit)
if buy_condition and qty > 0
    strategy.entry("Lunar Buy", strategy.long, qty, limit=price_buy)

// Sell order (close all)
if sell_condition and strategy.position_size > 0
    strategy.close("Lunar Buy")

// True range variable (for label position adjustment)
tr = ta.tr(true)

// Date format creation
yr = year(time)
mo = month(time)
dy = dayofmonth(time)
mo_str = mo < 10 ? "0" + str.tostring(mo) : str.tostring(mo)
dy_str = dy < 10 ? "0" + str.tostring(dy) : str.tostring(dy)
solar_str = str.tostring(yr) + "-" + mo_str + "-" + dy_str

// Display solar and lunar date and position label (on bar close)
if barstate.islastconfirmedhistory and not na(lunar_day)
    label.new(bar_index, high - tr * 6,  "Solar: " + solar_str + "\nLunar: " + str.tostring(lunar_month) + "-" + str.tostring(lunar_day) ,
      style=label.style_label_up, size=size.normal, color=color.new(color.teal, 50), textcolor=color.white)

// Display "15" label at bottom on lunar day 15 (lowest of last 50 bars - 1 true range)
if not na(lunar_day) and lunar_day == 15
    low_offset = ta.lowest(low, 50) - tr
    label.new(bar_index, low_offset, "15", style=label.style_label_down, color=color.orange, textcolor=color.white, size=size.normal)