Strategi Pelacakan kurva RSI Cryptocurrency

Penulis:ChaoZhang, Tanggal: 2023-09-11 17:24:59
Tag:

Strategi ini dirancang untuk pasar cryptocurrency, menggunakan kombinasi indikator RSI dan RVI periode ultra panjang untuk menentukan entri dan keluar.

Secara khusus, entri panjang diambil ketika RVI menunjukkan zona beli, dan RSI super panjang melintasi di atas level overbought. Exits terjadi ketika RVI memasuki zona sell, dan RSI melintasi di bawah level oversold untuk stop loss.

Keuntungan dari strategi ini adalah RSI ultra panjang dapat lebih akurat menentukan tren untuk menghindari whipsaws. RVI membantu dalam mengukur tekanan beli / jual untuk presisi masuk yang lebih tinggi. Metode stop loss memungkinkan pemotongan kerugian tepat waktu untuk mengurangi penarikan.

Namun, baik RSI dan RVI memiliki masalah yang tertinggal, dan tidak dapat dengan cepat menangkap titik balik. Parameter yang longgar atau berhenti bergerak diperlukan untuk beradaptasi dengan lonjakan.

Singkatnya, strategi pelacakan kurva RSI cryptocurrency dapat menghasilkan hasil yang layak bila dikombinasikan dengan pergerakan tren yang kuat.


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

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99

strategy(title="Crypto RSI + RVI Strategy", overlay=true, initial_capital = 1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.03, pyramiding=1  )

Period = input(100, minval=1)
BuyZone = input(49, minval=1)
SellZone = input(50, minval=1)

length=Period
MA_s=0.0
pos=0.0
possig=0.0
nU=0.0
nD=0.0
nRes=0.0
ob=SellZone
os=BuyZone

WiMA(src, length) => 
    MA_s=0.0
    MA_s:=(src + nz(MA_s[1] * (length-1)))/length
    MA_s

calc_rsi_volume(fv, length) =>    
    up=iff(fv>fv[1],abs(fv-fv[1])*volume,0)
    dn=iff(fv<fv[1],abs(fv-fv[1])*volume,0)
    upt=WiMA(up,length)
    dnt=WiMA(dn,length)
    100*(upt/(upt+dnt))

rsi_v = calc_rsi_volume(close, length)

// u=plot(ob)
// l=plot(os)
// fill(u,l,color.red)
// plot(50)
// plot(rsi_v, color=color.red, linewidth=1)

 

reverse = input(false, title="Trade reverse")
xPrice = close
StdDev = stdev(xPrice, Period)
d = iff(close > close[1], 0, StdDev)
u = iff(close > close[1], StdDev, 0)
nU := (13 * nz(nU[1],0) + u) / 14
nD := (13 * nz(nD[1],0) + d) / 14
nRes := 100 * nU / (nU + nD)
pos := iff(nRes < BuyZone, -1,
       iff(nRes > SellZone, 1, nz(pos[1], 0))) 
possig := iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))       

 


long=crossover (rsi_v,ob) and (possig == 1) 
short=crossunder(rsi_v,os) and (possig == -1)

g(v, p) => round(v * (pow(10, p))) / pow(10, p)
risk     = input(100)
leverage = input(2.5)
c = g((strategy.equity * leverage / open) * (risk / 100), 4)

strategy.entry("long",1,c,when=long)
strategy.close("long",when=short)
//strategy.entry("short",0,when=short)

 

// ------------------------- Strategy Logic --------------------------------- //
var longOpeneda = false
var shortOpeneda = false
var int timeOfBuya = na

 

longCondition= long and not longOpeneda 

if longCondition
    longOpeneda := true
    timeOfBuya := time


longExitSignala = short
exitLongCondition = longOpeneda[1] and longExitSignala

if exitLongCondition
    longOpeneda := false
    timeOfBuya := na

//plotshape(longCondition, style=shape.labelup, location=location.belowbar, color=color.color.green, size=size.tiny, title="BUY", text="BUY", textcolor=color.color.white)
//plotshape(exitLongCondition, style=shape.labeldown, location=location.abovebar, color=color.color.red, size=size.tiny, title="SELL", text="SELL", textcolor=color.color.white)
sl=input(0.2)
tp=input(1.0)
strategy.exit("long_tp/sl", "long", profit=close * tp / syminfo.mintick, loss=close * sl / syminfo.mintick, comment='long_tp/sl', alert_message = 'closelong')
strategy.exit("short_tp/sl", "short", profit=close * tp / syminfo.mintick, loss=close * sl / syminfo.mintick, comment='short_tp/sl',  alert_message = 'closeshort')


Lebih banyak