가격 채널 추세 추종 전략


생성 날짜: 2023-10-31 17:44:19 마지막으로 수정됨: 2023-10-31 17:44:19
복사: 0 클릭수: 636
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

가격 채널 추세 추종 전략

스펙트럼 연령화 전략

개요

스펙트럼 연령 전략은 가격 채널을 기반으로 한 트렌드 추적 전략이다. 그것은 빠른 속도와 느린 둥근 통로를 사용하여 트렌드 방향을 식별하고, 회귀 시에는 낮은 가격에 구매하고 높은 가격에 판매한다. 이 전략의 장점은 트렌드를 자동으로 추적 할 수 있다는 것입니다.

전략 원칙

이 전략은 먼저 빠른 통로 주기를 20개의 K선으로, 느린 통로 주기를 50개의 K선으로 정의한다. 빠른 통로는 스톱 로즈 가격을 설정하는데, 느린 통로는 트렌드 방향과 입시 시기를 판단하는데 사용된다.

전략은 먼저 빠른 통로의 최고 가격과 최저 가격을 계산하고 중선을 스톱 로프 라인으로 씁니다. 동시에 느린 통로의 최고 가격과 최저 가격을 계산하고 통로의 상단과 하단으로 입점 라인을 사용합니다.

가격이 느린 통로 상단선을 뚫을 때, 더 많은 것을; 가격이 느린 통로 하단선을 뚫을 때, 공백을 다. 진입 후, 중지 지점은 빠른 통로 중선에 설정된다.

이렇게 하면, 느린 통로는 큰 트렌드 방향을 판단하고, 빠른 통로는 작은 범위에서 브레이크 판단 스톱 포인트를 추적한다. 큰 트렌드가 반전될 때, 가격은 먼저 빠른 통로 스톱 라인을 뚫고 스톱을 달성한다.

전략적 이점

  • 자동으로 트렌드를 추적하고, 적시에 멈춥니다. 이중 채널 구조를 사용하면 트렌드를 자동으로 추적하고, 트렌드가 역전되면 빠르게 멈춥니다.

  • 반향 개시 포지션은 특정 추세 필터 효과를 갖는다. 가격이 통로 경계를 돌파했을 때만 포지션을 개시하면 일부 비 추세적 가짜 돌파구를 제거 할 수 있다.

  • 리스크가 조절된다. 단위 손실을 제어할 수 있는 단위 손실이 가까운 거리이다.

전략적 위험

  • 큰 회수. 트렌드 추적 전략 회수는 큰 수 있고, 심리적 준비가 필요합니다.

  • 스톱포인트가 너무 가깝다. 빠른 통로 주기가 짧고, 스톱포인트 거리가 가깝고, 쉽게 잡힐 수 있다. 빠른 통로 주기를 적절히 풀어줄 수 있다.

  • 과도한 거래가 발생하기 쉽다. 이중 통로 구조는 구매 및 판매 지점이 많으며, 합리적인 위치 관리가 필요합니다.

최적화 방향

  • 포지션 개시 필터링 조건을 추가한다. 포지션 개시 조건에 volatility와 같은 지표를 추가할 수 있으며, 경향성이 약한 돌파구를 필터링한다.

  • 최적화 채널 사이클 파라미터. 보다 체계적인 방법으로 최적화된 채널 파라미터 조합을 찾을 수 있다.

  • 여러 시간 주기의 의사결정을 결합한다. 더 높은 시간 주기에 큰 트렌드를 확인하고, 더 낮은 주기에 구체적인 거래를 할 수 있다.

  • 동적으로 조정되는 스톱 로드 거리 시장의 변동 정도에 따라 동적으로 조정되는 스톱 로드 거리

요약하다

스펙트럼 나이 전략은 전반적으로 표준화된 트렌드 추적 전략이다. 가격 통로를 사용하여 트렌드 방향을 판단하고, 위험을 제어하기 위해 스톱로스를 설정한다. 이 전략은 장점이 있지만, 회수와 스톱포트 지나치게 가까운 문제도 있다. 통로 파라미터를 최적화하고, 필터 조건을 추가하는 등의 방법을 통해 더 나은 전략 효과를 얻을 수 있다. 그러나 주의할 점은, 트렌드 추적 전략은 거래자의 정신에 대한 요구가 높으며, 회수에 대한 심리적 준비가 필요하다는 것이다.

전략 소스 코드
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy("Noro's RiskTurtle Strategy", shorttitle = "RiskTurtle str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong  = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
risk      = input(2, minval = 0.1, maxval = 99, title = "Risk size, %")
fast      = input(20, minval = 1, title = "Fast channel (for stop-loss)")
slow      = input(50, minval = 1, title = "Slow channel (for entries)")
showof    = input(true, defval = true, title = "Show offset")
showll    = input(true, defval = true, title = "Show lines")
showdd    = input(true, defval = true, title = "Show label (drawdown)")
showbg    = input(true, defval = true, title = "Show background")
fromyear  = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear    = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth   = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday   = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today     = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Donchian price channel fast
hf = highest(high, fast)
lf = lowest(low, fast)
center = (hf + lf) / 2

//Donchian price chennal slow
hs = highest(high, slow)
ls = lowest(low, slow)

//Lines
colorpc = showll ? color.blue : na
colorsl = showll ? color.red : na
offset = showof ? 1 : 0
plot(hs, offset = offset, color = colorpc, title = "Slow channel high")
plot(ls, offset = offset, color = colorpc, title = "Slow channel low")
plot(center, offset = offset, color = colorsl, title = "Fast channel stop-loss")

//Background
size = strategy.position_size
colorbg = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(colorbg, transp = 70)

//Var
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = true

//Lot size
risksize = -1 * risk
risklong = ((center / hs) - 1) * 100
coeflong = abs(risksize / risklong)
lotlong = (strategy.equity / close) * coeflong
riskshort = ((center / ls) - 1) * 100
coefshort = abs(risksize / riskshort)
lotshort = (strategy.equity / close) * coefshort

//Orders
strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and hs > 0 and truetime)
strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and ls > 0 and truetime)
strategy.exit("LongExit", "Long", stop = center, when = needlong and strategy.position_size > 0)
strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")
    
if showdd

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Max loss size
    equity := strategy.position_size == 0 ? strategy.equity : equity[1]
    loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0
    maxloss := min(nz(maxloss[1]), loss)
    
    //Label
    min := round(min * 100) / 100
    maxloss := round(maxloss * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*10)
    osy = highest(100)
    // la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)