Lacak strategi harga rata-rata palung secara teratur


Tanggal Pembuatan: 2024-01-17 17:57:58 Akhirnya memodifikasi: 2024-01-17 17:57:58
menyalin: 4 Jumlah klik: 605
1
fokus pada
1617
Pengikut

Lacak strategi harga rata-rata palung secara teratur

Ringkasan

Gagasan utama dari strategi ini adalah untuk secara berkala melacak harga rata-rata rendah setelah penurunan jangka pendek berakhir. Secara khusus, strategi akan mengidentifikasi kapan penurunan jangka pendek berakhir pada akhir setiap bulan, sehingga secara berkala menambah posisi; sementara pada saat penutupan K terakhir, posisi akan dibersihkan.

Prinsip Strategi

  1. Sinyal pelacakan berkala ditentukan: 24 per*Setelah 30 garis K (yang berarti satu bulan), ditentukan untuk mencapai titik pelacakan berkala, output sinyal pertama.
  2. Penentuan akhir penurunan jangka pendek: Menggunakan indikator MACD untuk menilai tren, ketika MACD berbalik dan melewati garis sinyal, penurunan jangka pendek dianggap berakhir.
  3. Aturan masuk: Saat sinyal tracking periodik dan sinyal akhir penurunan jangka pendek terpenuhi, sinyal tracking dilepaskan dan posisi dibuka.
  4. Aturan Keluar: Keluar dari posisi saat K terakhir ditutup.

Ini adalah proses dan prinsip dasar strategi. Perlu dicatat bahwa strategi ini secara default menggunakan pelacakan dana \( 1000 per bulan, yang akan diperluas menjadi 33 bulan dalam backtest, atau total investasi \) 33.000.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah kemampuan untuk membangun posisi secara teratur di level rendah, dalam jangka panjang dapat memperoleh biaya pembelian yang lebih baik, menghasilkan tingkat pengembalian yang lebih tinggi. Selain itu, penggunaan indikator MACD untuk mengidentifikasi titik beli jangka pendek juga lebih andal dan jelas, tidak akan salah masuk ke jalan buntu, yang juga dapat menghindari kerugian hingga batas tertentu.

Secara keseluruhan, ini adalah strategi biaya-nilai, yang lebih cocok untuk pemegang garis panjang dan menengah yang membeli secara berkala dan mendapatkan keuntungan yang lebih memuaskan.

Risiko dan Solusi

Risiko utama dari strategi ini adalah ketidakmampuan untuk menentukan dengan tepat titik akhir penurunan jangka pendek. Indikator MACD dapat memiliki keterlambatan waktu untuk menentukan akhir penurunan, yang dapat menyebabkan biaya tidak dapat dibeli pada saat optimum. Selain itu, investasi modal yang terdesentralisasi juga meningkatkan biaya operasional.

Anda dapat mempertimbangkan untuk menambahkan lebih banyak indikator untuk menilai tren, seperti Brinline, KDJ, dan lain-lain. Indikator ini dapat mengindikasikan kapan pembalikan terjadi lebih awal. Anda juga dapat mengoptimalkan jumlah investasi bulanan untuk mengurangi dampak biaya operasi pada pendapatan.

Arah optimasi

Strategi ini dapat dioptimalkan lebih lanjut dengan cara berikut:

  1. Mengoptimalkan siklus waktu untuk pelacakan reguler, seperti perubahan ke pelacakan reguler setiap dua bulan, dan lain-lain, mengurangi masalah terlalu sering transaksi.

  2. Dengan lebih banyak indikator untuk menentukan kapan penurunan jangka pendek akan berakhir, titik beli lebih dekat ke titik terendah.

  3. Untuk mengoptimalkan jumlah uang yang akan dihabiskan setiap bulan, cari konfigurasi yang optimal.

  4. Cobalah untuk memasukkan strategi stop loss di dalamnya, untuk menghindari jatuh terlalu dalam dan menyebabkan kerugian.

  5. Uji pengaruh periode kepemilikan yang berbeda terhadap pendapatan, untuk menemukan jumlah hari kepemilikan yang optimal.

Meringkaskan

Strategi ini secara teratur melacak strategi harga rata-rata lembah yang jelas dan mudah dimengerti, dengan penambahan secara berkala dan kombinasi penilaian jangka pendek, dapat memperoleh harga biaya yang lebih menguntungkan. Strategi ini dapat menghasilkan keuntungan yang stabil, cocok untuk investor yang mencari nilai investasi jangka panjang. Ada juga beberapa arah yang dapat dioptimalkan, memberi perhatian untuk lebih memperbaiki strategi ini, sehingga kinerjanya bisa naik satu tingkat.

Kode Sumber Strategi
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © BHD_Trade_Bot

// @version=5
strategy(
 shorttitle            = 'DCA After Downtrend v2',
 title                 = 'DCA After Downtrend v2 (by BHD_Trade_Bot)',
 overlay               = true,
 calc_on_every_tick    = false,
 calc_on_order_fills   = false,
 use_bar_magnifier     = false,
 pyramiding            = 1000,
 initial_capital       = 0,
 default_qty_type      = strategy.cash,
 default_qty_value     = 1000,
 commission_type       = strategy.commission.percent,
 commission_value      = 1.1)



// Backtest Time Period
start_year   = input(title='Start year'   ,defval=2017)
start_month  = input(title='Start month'  ,defval=1)
start_day    = input(title='Start day'    ,defval=1)
start_time   = timestamp(start_year, start_month, start_day, 00, 00)

end_year     = input(title='end year'     ,defval=2050)
end_month    = input(title='end month'    ,defval=1)
end_day      = input(title='end day'      ,defval=1)
end_time     = timestamp(end_year, end_month, end_day, 23, 59)

window() => time >= start_time and time <= end_time ? true : false
h1_last_bar = (math.min(end_time, timenow) - time)/1000/60/60 < 2



// EMA
ema50 = ta.ema(close, 50)
ema200 = ta.ema(close, 200)

// EMA_CD
emacd = ema50 - ema200
emacd_signal = ta.ema(emacd, 20)
hist = emacd - emacd_signal

// BHD Unit
bhd_unit = ta.rma(high - low, 200) * 2
bhd_upper = ema200 + bhd_unit
bhd_upper2 = ema200 + bhd_unit * 2
bhd_upper3 = ema200 + bhd_unit * 3
bhd_upper4 = ema200 + bhd_unit * 4
bhd_upper5 = ema200 + bhd_unit * 5

bhd_lower = ema200 - bhd_unit
bhd_lower2 = ema200 - bhd_unit * 2
bhd_lower3 = ema200 - bhd_unit * 3
bhd_lower4 = ema200 - bhd_unit * 4
bhd_lower5 = ema200 - bhd_unit * 5

// Count n candles after x long entries
var int nPastCandles = 0
var int entryNumber = 0
if window()
    nPastCandles := nPastCandles + 1



// ENTRY CONDITIONS

// 24 * 30 per month
entry_condition1 = nPastCandles > entryNumber * 24 * 30

// End of downtrend
entry_condition2 = emacd < 0 and hist < 0 and hist > hist[2]

ENTRY_CONDITIONS = entry_condition1 and entry_condition2


if ENTRY_CONDITIONS
    entryNumber := entryNumber + 1
    entryId = 'Long ' + str.tostring(entryNumber)
    strategy.entry(entryId, strategy.long)
    
    

// CLOSE CONDITIONS

// Last bar
CLOSE_CONDITIONS = barstate.islast or h1_last_bar

if CLOSE_CONDITIONS
    strategy.close_all()



// Draw
colorRange(src) =>
    if src > bhd_upper5
        color.rgb(255,0,0)
    else if src > bhd_upper4
        color.rgb(255,150,0)
    else if src > bhd_upper3
        color.rgb(255,200,0)
    else if src > bhd_upper2
        color.rgb(100,255,0)
    else if src > bhd_upper
        color.rgb(0,255,100)
    else if src > ema200
        color.rgb(0,255,150)
    else if src > bhd_lower
        color.rgb(0,200,255)
    else if src > bhd_lower2
        color.rgb(0,150,255)
    else if src > bhd_lower3
        color.rgb(0,100,255)
    else if src > bhd_lower4
        color.rgb(0,50,255)
    else
        color.rgb(0,0,255)
        
bhd_upper_line = plot(bhd_upper, color=color.new(color.teal, 90))
bhd_upper_line2 = plot(bhd_upper2, color=color.new(color.teal, 90))
bhd_upper_line3 = plot(bhd_upper3, color=color.new(color.teal, 90))
bhd_upper_line4 = plot(bhd_upper4, color=color.new(color.teal, 90))
bhd_upper_line5 = plot(bhd_upper5, color=color.new(color.teal, 90))

bhd_lower_line = plot(bhd_lower, color=color.new(color.teal, 90))
bhd_lower_line2 = plot(bhd_lower2, color=color.new(color.teal, 90))
bhd_lower_line3 = plot(bhd_lower3, color=color.new(color.teal, 90))
bhd_lower_line4 = plot(bhd_lower4, color=color.new(color.teal, 90))
bhd_lower_line5 = plot(bhd_lower5, color=color.new(color.teal, 90))
// fill(bhd_upper_line5, bhd_lower_line5, color=color.new(color.teal, 95))

plot(ema50, color=color.orange, linewidth=3)
plot(ema200, color=color.teal, linewidth=3)
plot(close, color=color.teal, linewidth=1)
plot(close, color=colorRange(close), linewidth=3, style=plot.style_circles)