Strategi perdagangan kuantitatif momentum berdasarkan siklus bulan di pasar mata uang kripto

Lunar Calendar Cyclical Trading ETHUSDT Fixed Date Entry/Exit Quantitative Strategy
Tanggal Pembuatan: 2025-08-11 09:09:22 Akhirnya memodifikasi: 2025-08-11 09:09:22
menyalin: 0 Jumlah klik: 182
2
fokus pada
319
Pengikut

Strategi perdagangan kuantitatif momentum berdasarkan siklus bulan di pasar mata uang kripto Strategi perdagangan kuantitatif momentum berdasarkan siklus bulan di pasar mata uang kripto

Ringkasan

Strategi ini adalah metode perdagangan cryptocurrency berdasarkan tanggal kalender yang melakukan pembelian dan penjualan dengan memanfaatkan tanggal tertentu dalam siklus kalender. Strategi ini dimulai pada tahun baru kalender dan berlangsung hingga akhir Desember kalender tahun tersebut, mengikuti aturan sederhana: beli pada hari ke-5 setiap bulan kalender dan jual pada hari ke-26 setiap bulan kalender. Metode ini mencoba menangkap model pasar yang mungkin terkait dengan siklus kalender, memberikan pedagang kerangka perdagangan yang terstruktur dan mudah diikuti.

Prinsip Strategi

Prinsip inti dari strategi ini didasarkan pada kemungkinan pengaruh siklus lunar terhadap pasar cryptocurrency. Kode ini mewujudkan gagasan ini dengan cara berikut:

  1. Pertama, tentukan tanggal awal tahun baru lunar dan jumlah hari dalam setiap bulan, yang mencakup periode 2020-2026.
  2. Dengan menghitung selisih hari antara tanggal saat ini dan tahun baru kalender, bulan dan tanggal kalender saat ini ditentukan.
  3. Ketika tanggal kalender adalah hari ke-5 dan saat ini tidak ada yang memegang posisi, memicu sinyal beli.
  4. Ketika tanggal kalender adalah hari ke-26 dan memegang posisi, memicu sinyal jual.
  5. Dengan mempertimbangkan dampak slippage dan biaya prosesor pada saat pembelian, gunakan semua dana yang tersedia untuk membeli sebanyak mungkin cryptocurrency.
  6. Pada saat penjualan, semua kepemilikan dihapus, dan keuntungan atau kerugian terhenti.

Strategi ini menggunakan metode perhitungan tanggal yang tepat, dengan menyimpan jumlah hari setiap bulan kalender melalui array, dan menghitung jumlah total hari yang dimulai dari tahun baru kalender, sehingga menentukan tanggal kalender saat ini dengan tepat. Metode ini menjamin pemicu sinyal perdagangan yang akurat.

Keunggulan Strategis

Analisis kode dari strategi ini dapat disimpulkan sebagai berikut:

  1. Aturan yang Sederhana dan JelasTanggal pembelian dan penjualan yang tetap membuat strategi sangat intuitif, mudah dipahami dan diterapkan, mengurangi penilaian subjektif pedagang.
  2. Mempertimbangkan faktor gesekan pasarStrategi ini mempertimbangkan biaya dan slippage 0,1% untuk membuat hasil pengembalian lebih dekat dengan situasi perdagangan yang sebenarnya.
  3. Efisiensi penggunaan danaSetiap transaksi menggunakan 100% dari dana yang tersedia untuk memaksimalkan potensi keuntungan.
  4. Mempertimbangkan Siklus Bulan yang UnikBerbeda dengan analisis teknis tradisional, strategi ini memperkenalkan faktor kalender yang mungkin menangkap pola unik yang terkait dengan perilaku investor di pasar Asia.
  5. Ketersediaan jangka panjangStrategi ini menyediakan data kalender dari tahun 2020 hingga 2026, sehingga pedagang dapat menggunakan metode ini untuk jangka panjang.
  6. Bantuan visual: Membantu trader untuk secara langsung melacak pelaksanaan strategi dengan menampilkan label tanggal kalender pada grafik.
  7. Hindari Perdagangan Terlalu Banyak“Kalau ada yang tidak setuju, maka kita harus mengundurkan diri”, kata dia. “Kalau ada yang tidak setuju, maka kita harus mengundurkan diri”.

Risiko Strategis

Meskipun memiliki keuntungan seperti yang disebutkan di atas, strategi ini juga memiliki beberapa risiko potensial:

  1. Kurangnya mekanisme manajemen risikoStrategi ini tidak menetapkan titik-titik stop loss, yang dapat menyebabkan kerugian yang signifikan jika pasar turun secara signifikan setelah pembelian.
  2. Mengabaikan tren dan kondisi pasarStrategi ini dilakukan hanya berdasarkan tanggal, tanpa mempertimbangkan tren keseluruhan pasar, volatilitas, atau indikator teknis lainnya.
  3. Asumsikan adanya hukum periodikStrategi ini mengasumsikan bahwa ada hubungan antara siklus lunar dan harga cryptocurrency, tetapi hubungan tersebut mungkin tidak stabil atau tidak ada.
  4. Batas waktu tertentuMeskipun data untuk tahun 2020-2026 telah disediakan, data kalender untuk tahun-tahun mendatang perlu diperbarui dan strategi mungkin tidak akan berjalan di luar jangkauan ini.
  5. Risiko likuiditasPada tanggal tertentu, pasar mungkin mengalami masalah likuiditas, terutama ketika menggunakan dana besar.
  6. Kemungkinan kesalahan perhitungan tanggalSetiap kesalahan dalam menghitung tanggal kalender dapat menyebabkan sinyal perdagangan yang salah.
  7. Kurangnya adaptasiJika Anda tidak dapat menyesuaikan diri dengan kondisi pasar yang berubah, Anda mungkin akan kehilangan kesempatan untuk membeli atau menjual yang lebih baik.

Untuk mengurangi risiko ini, pedagang dapat mempertimbangkan untuk melakukan konfirmasi perdagangan dalam kombinasi dengan indikator teknis lainnya, atau menetapkan stop loss tetap untuk membatasi kerugian dalam satu perdagangan.

Arah optimasi strategi

Dengan menganalisis kode secara mendalam, beberapa arah optimasi dapat dikemukakan:

  1. Memperkenalkan mekanisme stop loss: Tambahkan persentase atau jumlah mutlak dari kondisi stop loss, secara otomatis menutup posisi ketika kerugian mencapai titik terendah tertentu, untuk menghindari kerugian besar.if strategy.position_size > 0 and close < entry_price * (1 - stop_loss_percent)Pengadilan Syarat

  2. Pengakuan Indikator Teknis Integrasi: Menggabungkan indikator tren (seperti Moving Average) atau indikator momentum (seperti Relative Strength Index RSI) sebagai kondisi tambahan, melakukan perdagangan tanggal kalender hanya ketika indikator teknis memberikan sinyal yang menguntungkan. Hal ini dapat meningkatkan kualitas sinyal.

  3. Optimalkan tanggal pembelian dan penjualan: Analisis tanggal kalender mana yang sebenarnya memberikan waktu terbaik untuk membeli dan menjual kombinasi, dengan memutar data historis, daripada menggunakan hari ke-5 dan ke-26. Mungkin beberapa kombinasi tanggal tertentu akan lebih baik.

  4. Manajemen posisi sebagianPerubahan strategi untuk melakukan perdagangan dengan sebagian dana daripada 100% dana, atau menyesuaikan ukuran posisi sesuai dengan dinamika volatilitas pasar untuk menyebarkan risiko.

  5. Menambahkan filter status pasarPada kondisi pasar yang ekstrim (seperti volatilitas yang tinggi atau tren bearish yang jelas), penundaan pelaksanaan strategi untuk menghindari perdagangan di lingkungan yang tidak menguntungkan.

  6. Perluasan jangka waktu: Tambahkan data kalender untuk lebih banyak tahun, atau kembangkan fungsi yang secara otomatis menghitung tanggal kalender, sehingga strategi dapat berjalan tanpa batas waktu.

  7. Meningkatkan perdagangan berbagai varietas: memperluas strategi ke beberapa mata uang kripto atau kelas aset lainnya, melihat perbedaan kinerja di berbagai pasar selama siklus lunar.

Pelaksanaan orientasi optimasi ini dapat secara signifikan meningkatkan fleksibilitas dan adaptasi strategi, sambil mempertahankan konsep inti yang sederhana dan intuitif.

Meringkaskan

Strategi perdagangan kripto yang didasarkan pada siklus kalender menawarkan perspektif perdagangan yang unik, yang memanfaatkan tanggal kalender tertentu untuk membeli dan menjual. Keunggulan terbesar dari strategi ini adalah aturan yang jelas dan mudah diterapkan, yang dikombinasikan dengan faktor unik siklus kalender, yang dapat menangkap pola pasar yang diabaikan oleh analisis teknis konvensional.

Namun, strategi ini juga menghadapi tantangan karena kurangnya manajemen risiko dan adaptasi pasar. Untuk meningkatkan efektivitas strategi, disarankan untuk memperkenalkan langkah-langkah perbaikan seperti mekanisme stop loss, identifikasi indikator teknis, dan optimalisasi tanggal pembelian dan penjualan.

Perlu dicatat bahwa setiap strategi perdagangan perlu diuji ulang dan diuji ke depan untuk memverifikasi kinerjanya dalam kondisi pasar yang sebenarnya. Dalam menerapkan strategi ini, pedagang harus melakukan penyesuaian yang tepat sesuai dengan toleransi risiko dan tujuan investasi mereka, dan membuat keputusan perdagangan yang lebih komprehensif dalam kombinasi dengan metode analisis lainnya.

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