
Strategi ini disebut strategi DCA bertahap dengan indikator ganda. Strategi ini didasarkan pada saluran Brin dan indeks kekuatan relatif (RSI) untuk membangun sinyal perdagangan, dan menggunakan metode kenaikan posisi bertahap untuk manajemen risiko. Ide utamanya adalah untuk menangkap tren di pasar banteng dan menggunakan indikator untuk membangun sinyal multihead.
Strategi ini menggabungkan dua indikator Brinch Channel dan RSI. Brinch Channel dapat dengan jelas menilai tren pasar, di atas rel Brinch adalah bull market, di bawahnya adalah bear market. RSI menilai fenomena overbought dan oversold. Strategi ini membangun indikator MIX, yang membedakan perbedaan harga Brinch Channel dan nilai K RSI dengan rata-rata berbobot.
Bagian DCA bertahap, pertama-tama buka pesanan pertama ketika indikator MIX menembus 20. Setelah itu, setiap kali harga turun sejumlah besar, tambahkan posisi dengan jumlah tertentu. Hingga mencapai jumlah maksimum yang dipegang atau penarikan stop loss. Dengan demikian, Anda dapat menambah posisi beberapa kali pada titik rendah pasar, untuk mencapai penurunan harga rata-rata biaya.
Indikator ganda menggabungkan kecenderungan penilaian yang jelas, meningkatkan akurasi sinyal.
Strategi DCA bertahap dapat mengurangi biaya posisi di bawah dan mengurangi risiko kerugian.
Dengan pengaturan kondisi stop loss dan stop-loss, Anda dapat menghentikan risiko pengendalian kerugian secara tepat waktu dan juga memastikan sebagian dari keuntungan.
Tambahkan parameter jangka waktu pembukaan posisi yang dapat diuji dan dioptimalkan untuk periode waktu tertentu.
Brinch dan RSI dapat mengalami kegagalan. Kombinasi parameter yang berbeda dapat diuji untuk menemukan posisi terbaik.
DCA bertahap dapat terus menambah posisi dalam situasi penurunan besar yang menyebabkan kerugian meningkat. Anda dapat mengatur jumlah maksimum kenaikan posisi, dan meningkatkan kontrol risiko pengendalian stop loss dengan tepat.
Keadaan yang tidak normal yang tidak dapat mencegah kejadian yang tidak terduga. Indikator besar dapat dimasukkan untuk menilai risiko sistemik, menghindari periode yang tidak normal.
Uji optimasi parameter indikator MIX untuk mendapatkan sinyal perdagangan yang lebih akurat.
Mengoptimalkan parameter stop loss stop loss untuk mencapai maksimum rasio stop loss.
Uji berbagai amplitudo dan frekuensi tambahan untuk menemukan kombinasi yang optimal.
Anda dapat mempertimbangkan untuk menambahkan modul kontrol volume transaksi untuk membuka atau menutup strategi dalam kondisi volume transaksi tertentu.
Strategi DCA bertahap dengan indikator ganda menggunakan beberapa indikator dan metode teknis kuantitatif secara komprehensif. Ini membangun indikator penilaian tren yang jelas dan mengurangi biaya dengan menggunakan kenaikan posisi bertahap. Pada saat yang sama, penghentian kerugian dan kontrol risiko yang ketat membuatnya dapat digunakan dengan aman. Dengan pengujian dan pengoptimalan lebih lanjut, strategi ini dapat menjadi program perdagangan kuantitatif dengan keunggulan unik.
/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// © lagobrian23
//@version=4
strategy(title = 'Bollinger Bands and RSI mix with DCA', shorttitle = 'BB/RSI with DCA',pyramiding = 20, calc_on_every_tick = true, overlay = false )
source=close
smoothK = input(3, "K", minval=1)
smoothD = input(3, "D", minval=1)
lengthRSI = input(14, "RSI Length", minval=1)
lengthStoch = input(14, "Stochastic Length", minval=1)
src = input(close, title="RSI Source")
rsi1 = rsi(src, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
// Bollinger Band
length = input(20,title = 'BB lookback length', minval=1)
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
BBval = (src - basis)/dev*30+50
offset = input(0, title = "Offset", type = input.integer, minval = -500, maxval = 500)
mix=(d + BBval)/2
//plot
//plot(k, "K", color=#606060)
plot(BBval, "BBval", color=#872323, offset = offset)
plot(d, "D", color=#FF6A00)
h0 = hline(80, "Upper Band", color=#606060)
h1 = hline(20, "Lower Band", color=#606060)
plot(mix, "MIX", color=#888888, linewidth=3)
//background MIX
bgcolor(mix < 20 ? color.green : color.white, transp=50)
bgcolor(mix > 80 ? color.red : color.white, transp=50)
// Choosing the date range
fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12)
fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31)
fromYear = input(defval = 2020, title = "From Year", type = input.integer, minval = 1970)
toMonth = input(defval = 1, title = "To Month", type = input.integer, minval = 1, maxval = 12)
toDay = input(defval = 1, title = "To Day", type = input.integer, minval = 1, maxval = 31)
toYear = input(defval = 2112, title = "To Year", type = input.integer, minval = 1970)
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(toYear, toMonth, toDay, 23, 59) // backtest finish window
window() => true
// Initializing the strategy paraeters
P = input(defval = 1, title = 'Amount (P)' , type = input.integer, minval = 1, maxval = 100)
X = input(defval = 2, title = '% Price drop for consecutive entries(X)', type = input.float, minval = 1, maxval = 100)
B_tp = input(defval = 10, title = '% Level for Take Profit (B)', type = input.float , minval = 1, maxval = 100)
D_sl = input(defval = 10, title = '% Level for Stop Loss (D)', type = input.float, minval = 1, maxval = 100)
A = input(defval = 5, title = 'Max consecutive entries (A)', type = input.integer, minval = 2, maxval = 20)
Z = input(defval = 0.5, title = 'Z', type = input.float , minval = 0, maxval = 10)
// Declaring key DCA variables
entry_price = 0.0
entry_price := na(entry_price[1]) ? na : entry_price[1]
new_entry = 0.0
consec_entryCondition = false
// Implementing the strategy
longEntry = crossover(mix,20)
exitLongs = crossunder(mix, 80)
if(longEntry)
entry_price := close
strategy.entry('main_LE', strategy.long , P, when = window() and longEntry)
// Exiting conditions
stoploss = strategy.position_avg_price*(1-(D_sl/100))
takeprofit = strategy.position_avg_price*(1+(B_tp/100))
slCondition = crossunder(close, stoploss)
tpCondition = crossover(close, takeprofit)
// We want to exit if the 'mix' indicator crosses 80, take profit is attained or stop loss is tagged.
exitConditions = exitLongs or slCondition or tpCondition
// Consecutive entries upto A times
// strategy.risk.max_intraday_filled_orders(A)
//Dollar-Cost-Averaging
// Enter long whenever price goes down X%: amount set to (P+Y)*Z
newAmount = (P+X)*Z
// If we haven't reached max open trades, buy newAmount immediately price crosses under X% lower the previous entry price
new_entry := entry_price - ((X/100)*entry_price)
consec_entryCondition := crossunder(close, new_entry)
if(consec_entryCondition and strategy.opentrades != A)
strategy.entry('consec_LE', strategy.long, newAmount, oca_name = 'consecLongs', when = window() and consec_entryCondition)
entry_price := close
// Exiting
// The main trade is closed only when the main exit conditions are satisfied
strategy.close('main_LE', comment = 'Main Long Closed', when = window() and exitConditions)
// A consective long is closed only when tp or sl is tagged
strategy.exit('ext a consec', 'consec_LE', loss = D_sl*strategy.position_avg_price , profit = B_tp*strategy.position_avg_price, oca_name = 'consecLongs')