재귀적 볼륨 거래 전략


생성 날짜: 2024-01-31 16:56:31 마지막으로 수정됨: 2024-01-31 16:56:31
복사: 0 클릭수: 596
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

재귀적 볼륨 거래 전략

개요

이 전략은 알렉스그로버가 개발한 회귀띠 지표의 트렌드 추적 및 돌파 전략이다. 전략은 회귀띠 지표를 사용하여 가격 트렌드와 핵심 지원 저항 지점을 판단하고, 동력 조건 필터링 가짜 돌파를 결합하여, 낮은 주파수이지만 높은 품질의 입구를 구현한다.

전략 원칙

회귀띠 지표 계산

회귀띠 지표는 상반대, 하반대, 중선으로 구성된다. 지표의 계산 방법은 다음과 같다:

상단 = 최대 값 (前 K 선의 상단, 종점값 + n)*변동률) 하위역 = 최저값 ((전 K 선의 하위역, 마감값 - n*변동률)
중간선 = (상단 + 하단) / 2

여기서 n은 축소 계수이며, 변동률은 ATR, 표준 격차, 평균 채널 및 특수 RFV 방법을 선택할 수 있다. 길이는 지표의 민감도를 제어하는 변수이며, 값이 클수록 지표가 촉발되지 않는다.

전략적 거래 규칙

전략은 먼저 하단선 방향이 계속 상승하고 상단선 방향이 계속 하락하는지를 검출하여 가짜 돌파구를 제거한다.

가격대가 하위권으로 떨어지면 더 많이 하고, 상위권으로 넘어지면 더 많이 하라고 한다.

또한, 전략에는 상쇄 손실 논리도 설정되어 있습니다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 재귀 프레임워크를 활용하여, 지표 계산이 효율적이고, 반복적인 계산을 피합니다.
  2. 지표의 매개 변수는 조정할 수 있으며, 시장의 다양한 환경에 적응할 수 있습니다.
  3. 트렌드와 돌파구를 결합하여 가짜 돌파구를 피하십시오.
  4. 동력 조건 필터링, 거래 신호 품질을 보장

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 잘못된 매개 변수 설정으로 인해 거래 빈도가 너무 높거나 신호 품질이 좋지 않을 수 있습니다.
  2. 대주기 추세가 변하면 더 큰 손실이 발생할 수 있습니다.
  3. 극단적 인 시장 점유율의 미흡한 통제는 손실을 확대할 수 있습니다.

이러한 위험은 최적화 변수, 스톱로스 설정, 슬라이드 포인트를 높임으로 조절할 수 있다.

최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. 여러 주기적 지표와 결합하여 여러 시간 프레임 거래
  2. 기계 학습 모듈을 추가하여 변수 적응 최적화를 구현합니다.
  3. 양적 연관성 분석을 추가하여 최적의 변수 조합을 찾습니다.
  4. Deep Learning을 사용하여 가격 경로를 예측하여 신호의 정확성을 향상시킵니다.

요약하다

이 전략은 전체적으로 매우 실용적이고 효율적인 트렌드 추적 전략이다. 이는 회수 프레임워크를 결합하여 계산 자원을 절약하고, 트렌드를 지원하는 저항을 사용하여 큰 트렌드 방향을 판단하고, 동력 조건을 필터링하는 가짜 돌파구를 증가시켜 거래 신호 품질을 보장한다. 매개 변수 조정과 위험 통제가 이루어지면 더 나은 효과를 얻을 수 있다. 더 복잡한 시장 환경에 적응하기 위해 추가 연구 및 최적화를 할 가치가 있다.

전략 소스 코드
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
// Original indicator by alexgrover
strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000)
length = input.int(260, step=10, title='Length')
src = input(close, title='Source')
method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method')
bandDirectionCheck = input.bool(true, title='Bands Hold Direction')
lookback = input(3)
//----
atr = ta.atr(length)
stdev = ta.stdev(src, length)
ahlr = ta.sma(high - low, length)
rfv = 0.
rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1]
//-----
f(a, b, c) =>
    method == a ? b : c
v(x) =>
    f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x))))
//----
sc = 2 / (length + 1)
a = 0.
a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src)))
b = 0.
b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src)))
c = (a+b)/2

// Colors
beColor = #675F76
buColor = #a472ff

// Plots
pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band')
pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band')
pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band')
fill(pC, pA, color=color.new(beColor,90))
fill(pC, pB, color=color.new(buColor,90))

// Band keeping direction
// By Adulari
longc = 0
shortc = 0
for i = 0 to lookback-1
    if b[i] > b[i+1]
        longc:=longc+1
    if a[i] < a[i+1]
        shortc:=shortc+1
bhdLong = if bandDirectionCheck
    longc==lookback
else
    true
bhdShort = if bandDirectionCheck
    shortc==lookback
else
    true

// Strategy
if b>=low and bhdLong
    strategy.entry(id='Long',direction=strategy.long)
if high>=a and bhdShort
    strategy.entry(id='Short',direction=strategy.short)

// TP at middle line
//if low<=c and strategy.position_size<0 and strategy.position_avg_price>close
    //strategy.exit(id="Short",limit=close)
//if high>=c and strategy.position_size>0 and strategy.position_avg_price<close
    //strategy.exit(id="Long",limit=close)