Rata-rata Biaya Dolar Setelah Strategi Downtrend

Penulis:ChaoZhang, Tanggal: 2024-01-17 17:57:58
Tag:

img

Gambaran umum

Ide utama dari strategi ini adalah untuk secara teratur melacak harga rata-rata rendah setelah penurunan jangka pendek berakhir. khususnya, strategi akan mengidentifikasi akhir penurunan jangka pendek pada akhir setiap bulan, sehingga secara teratur menambahkan posisi; pada saat yang sama, posisi bersih ketika garis K terakhir ditutup.

Prinsip Strategi

  1. Penghakiman sinyal pelacakan reguler: setelah 24*30 K-line (mewakili satu bulan), ditentukan bahwa titik pelacakan reguler telah tercapai dan sinyal pertama keluar.

  2. Penghakiman akhir penurunan jangka pendek: gunakan indikator MACD untuk menentukan tren. Ketika divergensi MACD terjadi dan MACD berada di bawah garis sinyal, ditentukan bahwa penurunan jangka pendek telah berakhir.

  3. Aturan masuk: ketika sinyal pelacakan reguler dan akhir sinyal penurunan jangka pendek diaktifkan pada saat yang sama, sinyal pelacakan dilepaskan dan posisi panjang dibuka.

  4. Aturan keluar: ketika garis K terakhir ditutup, kosongkan semua posisi.

Di atas adalah aliran perdagangan dasar dan prinsip-prinsip strategi. Perlu dicatat bahwa strategi default untuk melacak $ 1.000 per bulan dalam backtests, yang akan diperluas menjadi 33 bulan, yaitu total investasi $ 33.000.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini adalah bahwa ia dapat secara teratur membangun posisi pada tingkat yang rendah. Dari perspektif jangka panjang, ia dapat memperoleh harga biaya rata-rata yang relatif terjangkau untuk menghasilkan pengembalian yang tinggi. Selain itu, menggunakan indikator MACD untuk mengidentifikasi titik pembelian jangka pendek juga cukup dapat diandalkan dan jelas, yang dapat menghindari masuk ke jalan buntu sampai batas tertentu, dan ini juga dapat menghindari kerugian sampai batas tertentu.

Secara umum, ini adalah strategi rata-rata biaya yang lebih cocok bagi pemegang jangka menengah dan panjang untuk membeli batch secara teratur untuk mendapatkan pengembalian yang memuaskan.

Risiko dan Solusi

Risiko utama dari strategi ini adalah ketidakmampuan untuk menentukan dengan akurat akhir penurunan jangka pendek. Penghakiman indikator MACD tentang akhir penurunan mungkin terlambat, yang akan menyebabkan kegagalan untuk memasuki titik optimal. Selain itu, investasi dana yang tersebar juga meningkatkan biaya operasi.

Pertimbangkan untuk menambahkan lebih banyak indikator untuk menentukan tren, seperti Bollinger Bands, KDJ, dll. Indikator ini dapat mengantisipasi waktu pembalikan terlebih dahulu. Pada saat yang sama, jumlah dana yang diinvestasikan setiap bulan dapat dioptimalkan untuk mengurangi dampak biaya operasi pada pengembalian.

Arahan Optimasi

Strategi dapat dioptimalkan lebih lanjut dalam arah berikut:

  1. Mengoptimalkan siklus pelacakan reguler, seperti pelacakan sekali setiap dua bulan, untuk mengurangi masalah perdagangan yang terlalu sering.

  2. Masukkan lebih banyak indikator untuk menentukan akhir penurunan jangka pendek, membuat titik masuk lebih dekat ke titik terendah.

  3. Optimalkan jumlah dana yang diinvestasikan setiap bulan untuk menemukan konfigurasi yang optimal.

  4. Cobalah untuk memasukkan strategi stop loss untuk menghindari kerugian yang berlebihan ketika harga turun terlalu rendah.

  5. Uji dampak periode penyimpanan yang berbeda pada pengembalian untuk menemukan hari penyimpanan yang optimal.

Ringkasan

Ide keseluruhan dari strategi downtrend ini jelas dan mudah dimengerti. Dengan menggabungkan pengisian reguler dan penilaian jangka pendek, dapat memperoleh harga biaya rata-rata yang lebih terjangkau. kepemilikan jangka menengah dan panjang dari strategi ini dapat menghasilkan pengembalian yang stabil dan cocok untuk investor yang mengejar nilai investasi jangka panjang. Pada saat yang sama, ada beberapa arah yang dapat dioptimalkan untuk lebih meningkatkan strategi sehingga kinerjanya dapat naik satu level.


/*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)


Lebih banyak