여러 시간 프레임에 기반한 비트코인 양적 대역 거래 전략

저자:차오장, 날짜: 2023-12-01 13:50:02
태그:

img

전반적인 설명

이 전략은 다양한 시간 프레임에 걸쳐 양적 지표를 결합하여 비트코인의 가격 대역을 식별하고 트렌드 추적 거래를 수행합니다. 5 분 시간 프레임을 채택하고 이익을 위해 대역을 장기적으로 보유하는 것을 목표로합니다.

전략 논리

  1. 일일 시간 프레임에 기초하여 계산된 RSI 지표는 가짜 브레이크를 필터하기 위해 거래량에 기초하여 무게를 가집니다.
  2. 일일 RSI 인디케이터는 양적 밴드 인디케이터를 만들기 위해 EMA에 의해 평평화됩니다.
  3. 5분 시간 프레임은 거래 신호를 생성하기 위해 선형 회귀와 HMA 지표의 조합을 사용합니다.
  4. 양적 범위 지표와 시간 프레임에 걸쳐 거래 신호를 결합함으로써 전략은 중장기 가격 범위를 식별합니다.

이점 분석

  1. 부피 가중된 RSI 지표는 실제 범위를 효과적으로 식별하고 잘못된 파장을 필터링할 수 있습니다.
  2. HMA 지표는 가격 변화에 더 민감하며, 급격한 전환을 파악할 수 있습니다.
  3. 여러 시간 프레임을 결합하면 중장기 범위를 더 정확하게 식별 할 수 있습니다.
  4. 5분 시간 프레임에서 거래하면 더 높은 거래 빈도가 가능합니다.
  5. 밴드 추적 전략으로서, 정확한 지점 선택이 필요하지 않으며 더 긴 기간 동안 유지될 수 있습니다.

위험 분석

  1. 양적 지표는 잘못된 신호를 생성 할 수 있으므로 근본 분석이 권장됩니다.
  2. 간격은 중간 반전을 볼 수 있습니다. 스톱 로스 메커니즘이 있어야 합니다.
  3. 신호 지연은 가장 좋은 입구점을 놓치는 결과를 초래할 수 있습니다.
  4. 수익성 있는 밴드는 더 긴 보유 기간을 필요로 하고 자본 압력 견딜 수 있어야 합니다.

최적화 방향

  1. 다른 매개 변수와 함께 RSI 지표의 테스트 효과
  2. 다른 보조 밴드 표시기를 도입해보세요.
  3. HMA 지표 길이 파라미터 최적화
  4. 스톱 로즈와 수익 전략을 추가합니다.
  5. 밴드 트레이드를 위해 대기 주기를 조정합니다.

결론

이 전략은 시간 프레임과 밴드 추적을 결합하여 비트코인의 중장기 트렌드를 효과적으로 포착합니다. 단기 거래와 비교하면 중장기 밴드 거래는 더 작은 드라우다운과 더 큰 수익 잠재력을 보입니다. 다음 단계는 매개 변수 조정 및 리스크 관리 추가로 수익성과 안정성을 더욱 향상시키는 것입니다.


/*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)
    



더 많은