돈치안 채널에 기초한 거북이 무역 전략

저자:차오장, 날짜: 2024-02-26 14:35:02
태그:

img

전반적인 설명

탕 안치 거북이 거래 전략 (Tang Anqi Turtle Trading Strategy) 은 원래의 거북이 거래 전략의 매우 단순화된 버전이다. 원래의 거북이 전략과 매우 다르다. 전략은 두 개의 돈치안 채널, 빠른 채널과 느린 채널을 사용합니다. 채널 기간은 사용자가 설정하고 있으며, 빠른 채널의 기본 값은 20 바, 느린 채널의 기본 값은 50 바입니다. 전략은 느린 채널의 상부 및 하부 밴드를 입력 거래에 사용하고 빠른 채널의 중간 밴드를 중지 손실을 설정합니다.

전략 논리

이 전략의 핵심 논리는 다음과 같습니다.

  1. 빠른 돈치안 채널을 계산합니다. 상단역은 지난 빠른 바에 대한 가장 높은 높이고, 하단역은 가장 낮은 낮이고, 중단역은 상단역과 하단역의 평균입니다.

  2. 느린 돈치안 채널을 계산합니다: 상단역은 지난 느린 바에 대한 가장 높은 높이고, 하단역은 가장 낮은 낮입니다.

  3. 포지션이 없을 때, 가격이 느린 채널의 상단 밴드에 닿을 때 긴 신호가 발생하고, 가격이 느린 채널의 하단 밴드에 닿을 때 짧은 신호가 발생합니다.

  4. 포지션을 열고 나면, 빠른 채널의 중간 밴드는 스톱 로스로 사용됩니다.

  5. 포지션이 닫히면 포지션이 열리는 시그널과 반대 신호가 있을 때 포지션을 닫습니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 간단한 규칙 실행하기 쉽습니다. 돈치안 채널과 이동 스톱 손실은 이해하기 쉽고 초보자에게 적합합니다.

  2. 사용자 지정 가능한 매개 변수: 사용자가 다른 시장 환경에 적응하기 위해 거래 제품 및 시간 틀에 따라 매개 변수를 조정할 수 있습니다.

  3. 몇 가지 상반된 거래 신호. 채널 대역의 가격 파업에만 의존하고 일반적인 지표에서 잘못된 신호를 피합니다.

  4. 자동 스톱 로스 관리. 빠른 채널 중간 대역에 기반한 이동 스톱 로스는 단일 트레이드에서 손실을 제한할 수 있습니다.

위험 분석

이 전략에 직면한 위험은 다음과 같습니다.

  1. 트렌드가 명확하지 않을 때 더 많은 스톱 손실이 발생합니다. 이것은 전략의 수익성에 영향을 미칩니다.

  2. 더 큰 마감이 가능해요. 트렌드가 역전되면 이전 트렌드 방향의 부동 수익은 손실로 변합니다.

  3. 부적절한 매개 변수 설정은 과도한 공격성 또는 과도한 보수성으로 이어집니다. 반복된 백테스팅을 통해 적절한 값을 찾아야 합니다.

  4. 자동화 거래에 대한 높은 의존성 자동화 거래에서 실패로 이어지는 예외를 피하기 위해 서버 안정성이 중요합니다.

위의 위험을 줄이기 위해 매개 변수를 최적화하고 포지션 크기를 적절히 제한하고 리스크 관리 모듈을 추가할 수 있습니다.

최적화 방향

전략은 다음과 같은 측면에서 개선 될 수 있습니다.

  1. 트렌드 반전 신호를 잡지 않도록 입력 신호에 필터를 추가하십시오. 예를 들어 트렌드 지표를 사용하여 트렌드 방향을 결정하십시오.

  2. 채널 기간과 포지션 사이징과 같은 매개 변수를 최적화하여 다른 거래 도구에 더 잘 맞게하십시오.

  3. 극심한 이벤트에서 과도한 손실을 방지하기 위해 최대 유출 제한 및 일일 손실 제한과 같은 위험 관리 모듈을 추가하십시오.

  4. 스톱 로스 전략을 개선합니다. 예를 들어, 시장 트렌드에 더 적응할 수 있도록 스톱 로스를 채택하십시오.

결론

요약하자면, 탕 안치 거북이 거래 전략은 단순한 트렌드 추적 시스템이다. 그것의 장점은 이해하기 쉽고 자동화되어 있다. 그러나 그것은 또한 특정 위험을 지니고 있으며, 더 실용적으로 만들기 위해 매개 변수 및 위험 관리에 대한 추가 최적화가 필요합니다. 매개 변수 조정, 필터 추가 및 위험 제어 모듈과 같은 조치로 전략은 라이브 거래에서 더 나은 결과를 얻을 수 있습니다.


/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy("Noro's SimpleTurtle Strategy", shorttitle = "SimpleTurtle 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")
sizelong  = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot long, %")
sizeshort = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot short, %")
fast      = input(20, minval=1)
slow      = input(50, minval=1)
showof    = input(true, defval = true, title = "Show offset")
showll    = input(true, defval = true, title = "Show lines")
showdd    = input(false, 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)
plot(ls, offset = offset, color = colorpc)
plot(center, offset = offset, color = colorsl)

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

//Orders
truetime = true
lotlong = 0.0
lotshort = 0.0
lotlong := size != size[1] ? strategy.equity / close * sizelong / 100 : lotlong[1]
lotshort := size != size[1] ? strategy.equity / close * sizeshort / 100 : lotshort[1]

//Orders
strategy.entry("Long", strategy.long, lotlong, stop = hs, when = needlong and strategy.position_size == 0 and truetime)
strategy.entry("Short", strategy.short, lotshort, stop = ls, when = needshort and strategy.position_size == 0 and truetime)
strategy.exit("Long", stop = center, when = needlong and strategy.position_size > 0)
strategy.exit("Short", stop = center, when = needshort and strategy.position_size < 0)
if true
    strategy.close_all()
    strategy.cancel("fast L")
    strategy.cancel("fast S")
    strategy.cancel("slow L")
    strategy.cancel("slow S")
    
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]))
    
    //Label
    min := round(min * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%"
    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)

더 많은