加密货币RSI曲线跟踪策略
该策略专门为加密货币市场设计,通过组合使用超长周期RSI指标和RVI指标来判断入场和出场时机。
具体来说,当RVI指标显示处于买入区,并且超长周期RSI指标上穿超买线时,做多入场。平仓条件为RVI指标进入卖出区,RSI指标下穿超卖区时止损出场。
这种策略的优势在于超长周期RSI可以更准确地判断趋势,避免被套。RVI指标辅助判断买卖压力,提高入场精确性。止损方式可以及时止损,降低回撤。
但是,RSI和RVI指标都具有滞后性,无法及时捕捉转折点。需要适当放宽参数,或加入移动止损来应对突发事件。此外,RSI指标对复杂行情解析能力较弱。
总的来说,加密货币RSI曲线跟踪策略可配合强势趋势行情获得不错效果。但交易者仍需积极管理仓位,优化参数,并关注基本面因素,方可获得长期稳定收益。
/*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')