
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.
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.
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 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.
Strategi ini dapat dioptimalkan lebih lanjut dengan cara berikut:
Mengoptimalkan siklus waktu untuk pelacakan reguler, seperti perubahan ke pelacakan reguler setiap dua bulan, dan lain-lain, mengurangi masalah terlalu sering transaksi.
Dengan lebih banyak indikator untuk menentukan kapan penurunan jangka pendek akan berakhir, titik beli lebih dekat ke titik terendah.
Untuk mengoptimalkan jumlah uang yang akan dihabiskan setiap bulan, cari konfigurasi yang optimal.
Cobalah untuk memasukkan strategi stop loss di dalamnya, untuk menghindari jatuh terlalu dalam dan menyebabkan kerugian.
Uji pengaruh periode kepemilikan yang berbeda terhadap pendapatan, untuk menemukan jumlah hari kepemilikan yang optimal.
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.
/*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)