
이중 통로 돌파구 (Turtle strategy) 는 돈치안 통로 지표를 사용하여 거래 신호를 구축하는 돌파구 전략이다. 이 전략은 동시에 빠른 통로와 느린 통로를 구축한다. 빠른 통로는 스톱 로즈 가격을 설정하고 느린 통로는 포지션 개시 및 포지션 신호를 생성한다. 가격이 느린 통로를 돌파 할 때, 더 많이 한다. 가격이 궤도를 무너뜨렸을 때, 공백을 한다. 이 전략은 트렌드 추적 강도, 회수 및 잘 제어되는 특징을 가지고 있다.
쌍채널 돌파구 전략의 핵심 논리는 Donchian channel 지표에 기초한다. Donchian channel은 최고 가격과 최저 가격으로 계산되며, 상단, 하단, 중간에 포함된다. 이 전략은 동시에 빠른 채널과 느린 채널을 생성하며, 파라미터는 사용자에 의해 설정되며, 기본 느린 채널은 50K 라인, 빠른 채널은 20K 라인이다.
느린 통로의 상단 및 하단 궤도 (블루 라인) 는 거래 신호를 생성하기 위해 사용됩니다. 가격이 상단 궤도를 돌파 할 때, 더 많은 것을하십시오. 가격이 하단 궤도를 넘어갈 때, 공백하십시오. 빠른 통로의 중간 궤도 (붉은 라인) 는 손실을 막기 위해 사용됩니다.
이렇게 하면, 느린 통로는 신호를 생성하고, 빠른 통로는 상실을 담당하며, 쌍용 통로는 협력하여 거래 신호의 안정성을 보장하고, 위험을 제어합니다. 배경 색은 현재 포지션 방향을 나타냅니다. 녹색은 다중, 빨간색은 공백을 나타냅니다.
또한, 전략은 위험수준과 포지션 관리를 설정한다. 위험수준은 기본적으로 2%, 포지션은 위험수준과 채널 변동률에 따라 계산된다. 따라서 각 위험을 효과적으로 제어하고 단계적으로 포지션을 증가시킬 수 있다.
두 개의 통로로 Turtle를 뚫는 전략은 다음과 같은 장점을 가지고 있습니다.
트렌드를 추적하는 능력이 강하다. Donchian 채널을 사용하여 추세를 판단하여 중장선 트렌드를 효과적으로 포착할 수 있다.
철수 및 위험 제어 ᄂ. 고속 통로 중간 경로는 손실을 중지하고, 상단에서 중간 경로와 하단에서 중간 경로는 위험 지역입니다. 이것은 각 손실이 제어 될 수 있음을 보장합니다. 전략은 또한 위험 수치를 설정하여 계좌 최대 손실을 직접 제한합니다.
거래 신호는 안정적입니다. 느린 통로 파라미터가 많고, 통로가 형성되기에는 시간이 오래 걸리며, 빈번한 거래를 피할 수 있습니다. 빠른 통로가 스톱로스로서는 단기 조정기를 잡을 수 있습니다. 둘을 함께 사용하면 안정적인 거래 신호가 형성됩니다.
포지션 및 위험 관리 개량. Donchian channel 변동률을 활용한 전략으로 포지션 규모를 계산하고, 위험 틈을 제어한다. 점진적으로 포지션을 추가하는 것은 다공간 쌍방의 포지션을 균형있게 만든다.
시각화 지표 직관. 듀얼 채널, 스톱로스 라인, 포지션 배경이 명확하게 그려져 거래 논리가 분명하다. 최대 인출, 최대 손실과 같은 핵심 지표를 보여줍니다.
두 개의 채널을 통해 Turtle를 돌파하는 전략은 위험도 있습니다.
디스크의 가격을 효과적으로 활용할 수 없다. Turtle 전략은 통로가 뚫렸을 때만 포지션을 열고, 더 정확한 상황을 활용하여 포지션을 증가시킬 수 없다. 이것은 최적화로 개선할 수 있다.
정지 손실은 쉽게 추적할 수 있다. Turtle 전략의 정지 손실은 고정된 빠른 통로 중간 궤도이다. 활발한 시장에서 이것은 정지 손실을 수축할 수 있다. 이것은 동적으로 중간 궤도 파라미터를 조정할 필요가 있다.
이중 통로 파라미터는 미세하게 조정해야 한다. 통로 파라미터는 합리적으로 안정적인 신호를 생성하기 위해 적절하게 설정되어야 한다. 현재 고정된 파라미터는 시장의 변화에 적응할 수 없으며, 적응 기능을 도입해야 한다.
야간 거래 및 거래 전 정보를 이용할 수 없습니다. 현재 전략은 실물 거래 상황을 기준으로만 트렌드를 판단하고, 거래 전과 후의 거래 상황을 사용하여 거래 결정을 안내 할 수 없습니다. 이는 데이터 조정으로 개선 될 수 있습니다.
이중 통로 돌파구 전략은 다음과 같은 몇 가지 최적화 방향이 있습니다.
디스크에서 가격 조정 포지션을 사용한다. 디스크에서 가격과 통로의 거리에 따라 포지션 크기를 조정할 수 있다. 단순하게 더 많은 공백을 하지 않는다.
스톱 손실 전략의 지능화. 고정된 스톱 손실 중간 궤도를 동적 계산으로 전환하여 스톱 손실 포인트가 추적되는 타격을 피하십시오.
통로 매개 변수가 자동으로 시장 상황에 따라 조정될 수 있도록 함.
매각 전과 매각 후의 시장 상황을 판단한다. 전략 판단에서 실매 가격뿐만 아니라 매매 전과 매매 후의 가격을 고려하여 더 포괄적인 시장 상황을 얻는다.
여러 주식이나 지수 거래와 결합하여. 여러 주식, 다른 주식 및 지수 간의 조정 가능한 스쿼리 거래에 전략을 적용하여 알파를 얻습니다.
쌍채널 브레이크 터틀 전략은 전체적으로 안정적이고 효율적이며 위험 통제가 있는 트렌드 추적 전략이다. 전략은 빠른 채널과 느린 채널을 동시에 사용하고 거래 신호의 안정성을 보장하고 위험 관리를 수행한다. 또한, 배경 색상, 최대 회수 및 포지션 관리는 전략을 관리하고 최적화하는 것을 쉽게 만든다.
/*backtest
start: 2023-12-05 00:00:00
end: 2024-01-04 00:00:00
period: 1h
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)