Purata Kos Dolar Selepas Strategi Downtrend

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

img

Ringkasan

Idea utama strategi ini adalah untuk mengesan harga purata yang rendah secara berkala selepas penurunan jangka pendek berakhir. khususnya, strategi akan mengenal pasti akhir penurunan jangka pendek pada akhir setiap bulan, untuk menambah kedudukan secara berkala; pada masa yang sama, posisi bersih apabila garis K terakhir ditutup.

Prinsip Strategi

  1. Penghakiman isyarat pengesanan biasa: selepas 24*30 K-line (yang mewakili satu bulan), ia ditentukan bahawa titik pengesanan biasa telah dicapai dan isyarat pertama dikeluarkan.

  2. Penghakiman akhir penurunan jangka pendek: gunakan penunjuk MACD untuk menentukan trend. Apabila divergensi MACD berlaku dan MACD turun di bawah garis isyarat, ia ditentukan bahawa penurunan jangka pendek telah berakhir.

  3. Peraturan kemasukan: apabila isyarat pengesanan biasa dan akhir isyarat penurunan jangka pendek diaktifkan pada masa yang sama, isyarat pengesanan dilepaskan dan kedudukan panjang dibuka.

  4. Peraturan keluar: apabila garis K terakhir ditutup, kosongkan semua kedudukan.

Yang di atas adalah aliran perdagangan asas dan prinsip strategi. Perlu diperhatikan bahawa strategi lalai untuk mengesan $ 1,000 sebulan dalam backtests, yang akan diperluaskan kepada 33 bulan, iaitu jumlah pelaburan $ 33,000.

Analisis Kelebihan

Kelebihan terbesar strategi ini ialah ia boleh membina kedudukan pada tahap yang rendah secara berkala. Dari perspektif jangka panjang, ia boleh memperoleh harga kos purata yang agak berpatutan untuk menjana pulangan yang tinggi. Di samping itu, menggunakan penunjuk MACD untuk mengenal pasti titik beli jangka pendek juga agak boleh dipercayai dan jelas, yang dapat mengelakkan masuk ke jalan buntu hingga tahap tertentu, dan ini juga dapat mengelakkan kerugian hingga tahap tertentu.

Secara umum, ini adalah strategi purata kos yang lebih sesuai untuk pemegang jangka sederhana dan panjang untuk membeli barisan secara berkala untuk mendapatkan pulangan yang memuaskan.

Risiko dan Penyelesaian

Risiko utama strategi ini adalah ketidakupayaan untuk menentukan dengan tepat akhir penurunan jangka pendek. Penghakiman penunjuk MACD mengenai akhir penurunan mungkin terlambat, yang akan menyebabkan kegagalan untuk memasuki titik optimum. Di samping itu, pelaburan dana yang tersebar juga meningkatkan kos operasi.

Pertimbangkan untuk menambah lebih banyak penunjuk untuk menentukan trend, seperti Bollinger Bands, KDJ, dll. Penunjuk ini dapat meramalkan masa pembalikan terlebih dahulu. Pada masa yang sama, jumlah dana yang dilaburkan setiap bulan dapat dioptimumkan untuk mengurangkan kesan kos operasi pada pulangan.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan lagi dalam arah berikut:

  1. Mengoptimumkan kitaran penjejakan biasa, seperti penjejakan sekali setiap dua bulan, untuk mengurangkan masalah perdagangan yang terlalu kerap.

  2. Masukkan lebih banyak penunjuk untuk menentukan akhir penurunan jangka pendek, menjadikan titik permulaan lebih dekat dengan titik terendah.

  3. Mengoptimumkan jumlah dana yang dilaburkan setiap bulan untuk mencari konfigurasi yang optimum.

  4. Cuba menggabungkan strategi stop loss untuk mengelakkan kerugian berlebihan apabila harga jatuh terlalu rendah.

  5. Uji kesan tempoh penyimpanan yang berbeza terhadap pulangan untuk mencari hari penyimpanan yang optimum.

Ringkasan

idea keseluruhan dari ini dolar purata kos selepas strategi downtrend adalah jelas dan mudah difahami. Dengan menggabungkan pengisian semula secara tetap dan penghakiman jangka pendek, ia boleh mendapatkan harga kos purata yang lebih berpatutan. pegangan jangka menengah dan panjang strategi ini boleh menjana pulangan yang stabil dan sesuai untuk pelabur yang mengejar nilai pelaburan jangka panjang. Pada masa yang sama, terdapat beberapa arah yang boleh dioptimumkan untuk meningkatkan lagi strategi supaya prestasi dapat bergerak ke atas satu tahap.


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