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.
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.
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.
Peraturan kemasukan: apabila isyarat pengesanan biasa dan akhir isyarat penurunan jangka pendek diaktifkan pada masa yang sama, isyarat pengesanan dilepaskan dan kedudukan panjang dibuka.
Peraturan keluar: apabila garis K terakhir ditutup, kosongkan semua kedudukan.
Di atas adalah aliran dagangan asas dan prinsip-prinsip strategi.\(1,000 sebulan dalam backtests, yang akan diperluaskan kepada 33 bulan, iaitu jumlah pelaburan33,000.
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 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.
Strategi ini boleh dioptimumkan lagi dalam arah berikut:
Mengoptimumkan kitaran penjejakan biasa, seperti penjejakan sekali setiap dua bulan, untuk mengurangkan masalah perdagangan yang terlalu kerap.
Masukkan lebih banyak penunjuk untuk menentukan akhir penurunan jangka pendek, menjadikan titik permulaan lebih dekat dengan titik terendah.
Mengoptimumkan jumlah dana yang dilaburkan setiap bulan untuk mencari konfigurasi yang optimum.
Cuba menggabungkan strategi stop loss untuk mengelakkan kerugian berlebihan apabila harga jatuh terlalu rendah.
Uji kesan tempoh penyimpanan yang berbeza terhadap pulangan untuk mencari hari penyimpanan yang optimum.
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)