Strategi DCA progresif berdasarkan Bollinger Bands dan penunjuk RSI


Tarikh penciptaan: 2024-01-18 11:23:15 Akhirnya diubah suai: 2024-01-18 11:23:15
Salin: 2 Bilangan klik: 941
1
fokus pada
1617
Pengikut

Strategi DCA progresif berdasarkan Bollinger Bands dan penunjuk RSI

Gambaran keseluruhan

Strategi ini dinamakan strategi DCA bertahap dengan dua indikator. Ia membina isyarat perdagangan berdasarkan saluran Boolean dan indeks kekuatan relatif (RSI), sambil menggunakan kaedah kenaikan kedudukan bertahap untuk pengurusan risiko.

Prinsip Strategi

Strategi ini menggabungkan kedua-dua indikator Bolling dan RSI. Bolling channel dapat menilai dengan jelas trend pasaran, di atas Bolling mid-track adalah pasaran lembu, di bawah adalah pasaran beruang. RSI menilai fenomena overbought dan oversold. Strategi ini membina indikator MIX, yang menggunakan perbezaan harga Bolling channel dan nilai K RSI sebagai rata-rata berat.

Bahagian DCA beransur-ansur, mula-mula membuka pesanan pertama apabila indikator MIX menembusi 20. Selepas itu, setiap kali harga turun dengan ketara, tambah kedudukan dengan jumlah tertentu. Sehingga mencapai jumlah pegangan maksimum atau penarikan stop loss.

Kelebihan Strategik

  1. Penunjuk ganda menggabungkan trend penilaian yang jelas, meningkatkan ketepatan isyarat.

  2. Strategi DCA beransur-ansur dapat mengurangkan kos kedudukan dan mengurangkan risiko kerugian semasa penurunan.

  3. Tetapkan syarat-syarat berhenti dan hentikan untuk mengawal risiko dan memastikan sebahagian daripada keuntungan.

  4. Menambah parameter jangka tarikh pembukaan yang boleh diuji dan dioptimumkan untuk tempoh masa tertentu.

Risiko dan Penyelesaian

  1. Kedua-dua saluran Brin dan RSI mungkin gagal. Kombinasi parameter yang berbeza boleh diuji untuk mencari kedudukan terbaik.

  2. DCA beransur-ansur mungkin terus menambah kedudukan dalam keadaan turun naik yang menyebabkan kerugian meningkat. Anda boleh menetapkan jumlah maksimum kenaikan, dan meningkatkan kawalan risiko yang lebih baik untuk menghentikan kerugian.

  3. Keadaan luar biasa yang tidak dapat mengelakkan kejadian yang tidak dijangka. Indeks besar boleh dimasukkan untuk menilai risiko sistematik, mengelakkan tempoh luar biasa.

Arah pengoptimuman strategi

  1. Uji optimasi parameter MIX untuk mendapatkan isyarat dagangan yang lebih tepat.

  2. Mengoptimumkan parameter stop loss untuk memaksimumkan nisbah kerugian.

  3. Uji tahap dan jumlah penambahan yang berbeza untuk mencari kombinasi terbaik.

  4. Anda boleh mempertimbangkan untuk menambah modul kawalan jumlah transaksi untuk membuka atau menutup strategi dalam keadaan jumlah transaksi tertentu.

ringkaskan

Strategi DCA progresif dengan dua indikator menggunakan pelbagai petunjuk dan kaedah teknikal kuantitatif secara komprehensif. Ia membina petunjuk penilaian trend yang jelas dan mengurangkan kos dengan menggunakan kenaikan kedudukan secara beransur-ansur. Pada masa yang sama, langkah-langkah kawalan risiko dan kawalan risiko yang ketat menjadikannya dapat digunakan dengan selamat. Dengan ujian dan pengoptimuman lanjut, strategi ini boleh menjadi program perdagangan kuantitatif dengan kelebihan unik. Ia mempertimbangkan untuk mendapatkan keuntungan yang mencukupi, tetapi juga memberi tumpuan kepada kawalan risiko, dan patut diuji dan digunakan.

Kod sumber strategi
/*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')