Strategi Perdagangan Band Kuantitatif Bitcoin Berdasarkan Beberapa Kerangka Waktu

Penulis:ChaoZhang, Tanggal: 2023-12-01 13:50:02
Tag:

img

Gambaran umum

Strategi ini mengidentifikasi band harga Bitcoin dengan menggabungkan indikator kuantitatif di berbagai kerangka waktu, dan melakukan perdagangan pelacakan tren.

Logika Strategi

  1. Indikator RSI yang dihitung berdasarkan kerangka waktu harian ditimbang berdasarkan volume perdagangan untuk menyaring breakout palsu.
  2. Indikator RSI harian dihaluskan oleh EMA untuk membangun indikator band kuantitatif.
  3. Kerangka waktu 5 menit menggunakan kombinasi indikator Regresi Linear dan HMA untuk menghasilkan sinyal perdagangan.
  4. Dengan menggabungkan indikator band kuantitatif dan sinyal perdagangan di seluruh kerangka waktu, strategi mengidentifikasi band harga jangka menengah hingga panjang.

Analisis Keuntungan

  1. Indikator RSI yang diberi bobot volume dapat secara efektif mengidentifikasi band yang benar dan menyaring pecah palsu.
  2. Indikator HMA lebih sensitif terhadap perubahan harga dan dapat menangkap perubahan tepat waktu.
  3. Menggabungkan beberapa kerangka waktu mengarah pada identifikasi yang lebih akurat dari rentang jangka menengah hingga jangka panjang.
  4. Perdagangan pada jangka waktu 5 menit memungkinkan frekuensi operasi yang lebih tinggi.
  5. Sebagai strategi pelacakan band, tidak memerlukan pemilihan poin yang akurat dan dapat bertahan untuk jangka waktu yang lebih lama.

Analisis Risiko

  1. Indikator kuantitatif dapat menghasilkan sinyal palsu, analisis fundamental dianjurkan.
  2. Band mungkin melihat pergantian tengah, mekanisme stop-loss harus ada.
  3. Penundaan sinyal dapat menyebabkan hilangnya titik masuk terbaik.
  4. Band yang menguntungkan membutuhkan jangka waktu penyimpanan yang lebih lama, yang membutuhkan toleransi tekanan modal.

Arahan Optimasi

  1. Efektivitas pengujian indikator RSI dengan parameter yang berbeda.
  2. Cobalah untuk memperkenalkan indikator band tambahan lainnya.
  3. Optimalkan parameter panjang indikator HMA.
  4. Tambahkan strategi stop loss dan take profit.
  5. Sesuaikan siklus penantian untuk perdagangan band.

Kesimpulan

Strategi ini secara efektif menangkap tren jangka menengah hingga jangka panjang Bitcoin dengan menggabungkan kerangka waktu dan pelacakan band. Dibandingkan dengan perdagangan jangka pendek, perdagangan band jangka menengah hingga jangka panjang melihat penarikan yang lebih kecil dan potensi keuntungan yang lebih besar. Langkah selanjutnya melibatkan peningkatan lebih lanjut profitabilitas dan stabilitas melalui penyesuaian parameter dan penambahan manajemen risiko.


/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='Pyramiding BTC 5 min', overlay=true, pyramiding=5, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.075)
//the pyramide based on this script  https://www.tradingview.com/script/7NNJ0sXB-Pyramiding-Entries-On-Early-Trends-by-Coinrule/
//
fastLength = input(250, title="Fast filter length ", minval=1)
slowLength = input(500,title="Slow filter length",  minval=1)
source=close
v1=ema(source,fastLength)
v2=ema(source,slowLength)
//
//Backtest dates
fromMonth = input(defval=1, title="From Month")
fromDay = input(defval=10, title="From Day")
fromYear = input(defval=2020, title="From Year")
thruMonth = input(defval=1, title="Thru Month")
thruDay = input(defval=1, title="Thru Day")
thruYear = input(defval=2112, title="Thru Year")

showDate = input(defval=true, title="Show Date Range")

start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= start and time <= finish ? true : false


leng=1
p1=close[1]

len55 = 10
//taken from https://www.tradingview.com/script/Ql1FjjfX-security-free-MTF-example-JD/
HTF = input("1D", type=input.resolution)
ti = change( time(HTF) ) != 0
T_c = fixnan( ti ? close : na )

vrsi = rsi(cum(change(T_c) * volume), leng)
pp=wma(vrsi,len55)

d=(vrsi[1]-pp[1])
len100 = 10
x=ema(d,len100)
//
zx=x/-1
col=zx > 0? color.lime : color.orange

//

tf10 = input("1", title = "Timeframe", type = input.resolution, options = ["1", "5", "15", "30", "60","120", "240","360","720", "D", "W"])

length = input(50, title = "Period", type = input.integer)
shift = input(1, title = "Shift", type = input.integer)

hma(_src, _length)=>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length)=>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

b =security(syminfo.tickerid, tf10, hma3(close[1], length)[shift])
//plot(a,color=color.gray)
//plot(b,color=color.yellow)
close_price = close[0]
len = input(25)

linear_reg = linreg(close_price, len, 0)


filter=input(true)

buy=crossover(linear_reg, b)

longsignal = (v1 > v2 or filter == false ) and buy and window()

//set take profit

ProfitTarget_Percent = input(3)
Profit_Ticks = close * (ProfitTarget_Percent / 100) / syminfo.mintick

//set take profit

LossTarget_Percent = input(10)
Loss_Ticks = close * (LossTarget_Percent / 100) / syminfo.mintick


//Order Placing

strategy.entry("Entry 1", strategy.long, when=strategy.opentrades == 0 and longsignal)

strategy.entry("Entry 2", strategy.long, when=strategy.opentrades == 1 and longsignal)

strategy.entry("Entry 3", strategy.long, when=strategy.opentrades == 2 and longsignal)

strategy.entry("Entry 4", strategy.long, when=strategy.opentrades == 3 and longsignal)

strategy.entry("Entry 5", strategy.long, when=strategy.opentrades == 4 and longsignal)





if strategy.position_size > 0
    strategy.exit(id="Exit 1", from_entry="Entry 1", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 2", from_entry="Entry 2", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 3", from_entry="Entry 3", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 4", from_entry="Entry 4", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 5", from_entry="Entry 5", profit=Profit_Ticks, loss=Loss_Ticks)
    



Lebih banyak