Strategi Perdagangan Band Kuantitatif Bitcoin Berdasarkan Pelbagai Jangka Masa

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

img

Ringkasan

Strategi ini mengenal pasti rentang harga Bitcoin dengan menggabungkan penunjuk kuantitatif merentasi jangka masa yang berbeza, dan menjalankan perdagangan penjejakan trend.

Logika Strategi

  1. Penunjuk RSI yang dikira berdasarkan jangka masa harian menimbang berdasarkan jumlah dagangan untuk menapis pecah palsu.
  2. Penunjuk RSI harian dihaluskan oleh EMA untuk membina penunjuk band kuantitatif.
  3. Jangka masa 5 minit menggunakan gabungan Indikator Regresi Linear dan HMA untuk menjana isyarat perdagangan.
  4. Dengan menggabungkan penunjuk rentang kuantitatif dan isyarat perdagangan merentasi bingkai masa, strategi itu mengenal pasti rentang harga jangka menengah hingga panjang.

Analisis Kelebihan

  1. Indikator RSI berwajaran jumlah dapat dengan berkesan mengenal pasti jalur yang benar dan menapis pecah palsu.
  2. Penunjuk HMA lebih sensitif terhadap perubahan harga dan dapat menangkap perubahan tepat pada masanya.
  3. Menggabungkan pelbagai jangka masa membawa kepada pengenalan rentang jangka menengah hingga jangka panjang yang lebih tepat.
  4. Perdagangan pada jangka masa 5 minit membolehkan kekerapan operasi yang lebih tinggi.
  5. Sebagai strategi pengesanan pita, ia tidak memerlukan pemilihan titik yang tepat dan boleh bertahan untuk tempoh yang lebih lama.

Analisis Risiko

  1. Penunjuk kuantitatif boleh menghasilkan isyarat palsu, analisis asas disyorkan.
  2. Band mungkin melihat pembalikan pertengahan, mekanisme stop-loss harus di tempat.
  3. Kelewatan isyarat boleh menyebabkan kehilangan titik masuk terbaik.
  4. Band yang menguntungkan memerlukan tempoh yang lebih lama, yang memerlukan toleransi tekanan modal.

Arahan pengoptimuman

  1. Ujian keberkesanan penunjuk RSI dengan parameter yang berbeza.
  2. Cuba memperkenalkan penunjuk jalur tambahan yang lain.
  3. Mengoptimumkan parameter panjang penunjuk HMA.
  4. Tambah strategi stop loss dan mengambil keuntungan.
  5. Sesuaikan kitaran penyelenggaraan untuk perdagangan band.

Kesimpulan

Strategi ini secara berkesan menangkap trend jangka menengah hingga jangka panjang Bitcoin dengan menggabungkan bingkai masa dan penjejakan band. Berbanding dengan perdagangan jangka pendek, perdagangan band jangka menengah hingga panjang melihat penurunan yang lebih kecil dan potensi keuntungan yang lebih besar. Langkah seterusnya melibatkan peningkatan keuntungan dan kestabilan melalui penyesuaian parameter dan penambahan pengurusan 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 lanjut