
도앙치 해파리 거래 전략은 매우 간소화된 해파리 거래 전략이다. 그것은 원시 해파리 거래 전략과는 크게 다르다. 이 전략은 두 개의 도앙치 통로를 사용한다. 빠른 통로와 느린 통로이다. 통로 주기는 사용자에 의해 설정되며, 기본값은 빠른 통로 20 K선, 느린 통로 50 K선이다. 이 전략은 느린 통로의 상하 궤도를 이용하여 진입을 하고, 빠른 통로의 중도 궤도를 이용하여 손실을 설정한다.
이 전략의 핵심 논리는 다음과 같습니다.
빠른 통로를 계산: 가장 가까운 fast근 K 선의 최고값을 통로 상단궤, 최저값을 통로 하단궤. 통로 중도 궤도는 상단궤의 평균값이다.
느린 통로를 계산한다: 가장 가까운 slow root K 선의 최고 값은 통로 상단, 최저 값은 통로 하단이다.
포지션이 없을 때, 더 많은 신호를 하면 가격이 느린 통로에 닿아 올라간다. 공백 신호를 하면 가격이 느린 통로로 내려간다.
창고 개설 후 고속 통로 중철을 상쇄선으로 사용한다.
포지션 보유 과정에서 거래 신호가 포지션 개설 신호와 반대되면 평위 포지션이 출전한다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
규칙은 간단하고 실행하기 쉽다. 唐通道 및 이동식 중지 (移动止损) 은 이해하기 쉽고, 초보자에게 적합하다.
사용자 정의 가능한 매개 변수. 사용자는 거래 종류와 시간 주기에 따라 매개 변수를 조정하여 다른 시장 환경에 적응할 수 있다.
충돌 거래 신호가 적다. 가격 돌파 통로 상하 궤도를 Generate만 의존하고, 일반적인 지표가 가짜 신호를 생성하는 상황을 피한다.
자동 중지 위험 관리 ᆞ 고속 통로 중 궤도 이동 중지, 단일 중지 제한 할 수 있습니다.
이 전략에는 다음과 같은 위험들이 있습니다.
가격 변동 동향이 명확하지 않은 경우 더 많은 정지 손실이 발생한다. 이것은 전략의 수익성에 영향을 미칩니다.
회귀가 큰 가능성이 있다. 트렌드가 전환되면 전진 방향의 파동 손실도 실제 손실로 변한다.
매개 변수 설정을 잘못하면 과격하거나 보수적으로 될 수 있다. 이것은 반복 테스트를 통해 적절한 값을 얻어야 한다.
기계화 거래의 의존도가 높습니다. 서버의 안정성을 보장하고, 정상 자동화 거래가 불가능하게 되는 이상적인 상황을 피해야 합니다.
위와 같은 위험을 줄이기 위해, 최적화 파라미터 설정, 적절한 포지션 크기를 제한, 풍력 제어 모듈을 추가하는 등의 방법으로 개선 할 수 있습니다.
이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.
포지션 개시 필터링 조건을 추가하여 트렌드 전환점이 신호를 놓치지 않도록하십시오. 예를 들어, 트렌드 지수와 같은 지표와 결합하여 트렌드 분석을 판단하십시오.
최적화 파라미터 설정을 통해 다른 거래 유형에 더 적합하게 만듭니다. 예를 들어, 빠른 느린 통로 주기와 포지션 크기 등.
리스크 컨트롤 모듈을 추가한다. 예를 들어 최대 철수, 일일 손실 제한 등이다. 위험 사건으로 인해 큰 손실을 피한다.
트레일링 스톱 (trailing stop) 과 같은 동적 스톱 방법을 최적화하여 스톱을 시장 추세에 더 적합하게 만듭니다.
타운치 해파리 거래 전략은 전체적으로 매우 간단한 트렌드 추적 전략이다. 그것의 장점은 이해하기 쉽고, 자동화 실행하기 쉽고, 프로그램 거래에 적합하다. 그러나 또한 일정한 위험이 있으며, 실제 시장 상황과 더 잘 맞게 하기 위해 추가 최적화를 필요로 한다. 매개 변수를 조정, 신호 포지션을 최적화, 위험 제어 모듈을 추가하는 등의 수단을 통해 전략의 실전 효과를 더 좋게 할 수 있다.
/*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)