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.
Penghakiman sinyal pelacakan reguler: setelah 24*30 K-line (mewakili satu bulan), ditentukan bahwa titik pelacakan reguler telah tercapai dan sinyal pertama keluar.
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.
Aturan masuk: ketika sinyal pelacakan reguler dan akhir sinyal penurunan jangka pendek diaktifkan pada saat yang sama, sinyal pelacakan dilepaskan dan posisi panjang dibuka.
Aturan keluar: ketika garis K terakhir ditutup, kosongkan semua posisi.
Di atas adalah aliran perdagangan dasar dan prinsip-prinsip strategi.\(1000 per bulan dalam backtest, yang akan diperluas menjadi 33 bulan, yaitu total investasi33,000.
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 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.
Strategi dapat dioptimalkan lebih lanjut dalam arah berikut:
Mengoptimalkan siklus pelacakan reguler, seperti pelacakan sekali setiap dua bulan, untuk mengurangi masalah perdagangan yang terlalu sering.
Masukkan lebih banyak indikator untuk menentukan akhir penurunan jangka pendek, membuat titik masuk lebih dekat ke titik terendah.
Optimalkan jumlah dana yang diinvestasikan setiap bulan untuk menemukan konfigurasi yang optimal.
Cobalah untuk memasukkan strategi stop loss untuk menghindari kerugian yang berlebihan ketika harga turun terlalu rendah.
Uji dampak periode penyimpanan yang berbeda pada pengembalian untuk menemukan hari penyimpanan yang optimal.
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)