이 전략은 트렌드 추적 거래 전략을 형성하기 위해 상대 강도 지수 (TSI), 상품 채널 지수 (CCI) 및 헐 이동 평균 (Hull MA) 지표를 통합합니다. 시간 또는 더 높은 시간 프레임에서 모든 거래 품종에 대한 장기 추적 거래를 수행 할 수 있습니다.
이 전략은 주로 TSI와 CCI 지표를 사용하여 시장의 유동 방향과 과잉 구매/ 과잉 판매 상황을 판단하고, Hull MA를 사용하여 중간 가격 흐름을 결정하며, 세 가지 지표가 포지션 개설의 기본 조건으로 결합됩니다.
구체적으로, TSI의 빠른 선이 느린 선 위에 넘어가면 CCI 지표가 +20 && n1 이상으로 넘어가면, 길게 간다; TSI의 빠른 선이 느린 선 아래로 넘어가면, CCI 지표가 -20 && n1 아래로 넘어가면, 짧게 간다.
서로 다른 주기에 걸친 지표로 확인함으로써, 중장기 동향을 추적하기 위해 잘못된 파급을 효과적으로 필터링할 수 있습니다.
이것은 비교적 안정적이고 효율적인 트렌드 추적 전략이며 다음과 같은 주요 장점이 있습니다.
장기적인 트렌드 방향을 판단하기 위해 TSI를 사용하는 것이 더 신뢰할 수 있으며, 단기 시장 소음의 간섭을 피합니다.
CCI 지표가 추가되면 과잉 구매/ 과잉 판매 현상을 확인하고 일부 잘못된 신호를 필터링할 수 있습니다.
헐 MA
다른 매개 변수를 가진 지표의 통합은 신호의 신뢰성을 향상시키고 간섭 가능성을 줄일 수 있습니다.
전략의 유연한 매개 변수 설정은 다른 시장 주기에 최적화 될 수 있습니다.
이 전략은 비교적 안정적이지만, 여전히 몇 가지 위험이 있습니다.
시장은 급격한 변동으로 인해 상대적으로 큰 손실을 초래할 수 있습니다.
TSI Diff 및 CCI 표시기 모두 잘못된 신호와 지연을 가질 수 있으며 일부 입력 지점이 빠질 수 있습니다.
부적절한 매개 변수 설정은 과도하게 높은 거래 빈도 또는 신호 품질 감소로 이어질 수 있습니다.
대책:
단일 손실을 제어하기 위해 스톱 손실을 적절히 조정합니다.
신호의 정확성을 높이기 위해 다른 표시기로 확인합니다.
시장에 따라 매개 변수를 조정하여 전략의 안정성을 보장합니다.
이 전략은 다음 측면에서도 최적화 될 수 있습니다.
가장 잘 어울리는 것을 찾기 위해 매개 변수 지표의 다양한 조합을 시도합니다.
매개 변수의 적응적 최적화를 위해 기계 학습 알고리즘을 도입합니다.
보다 안정적인 수익을 위해 자본 관리 모듈을 늘려야 합니다.
전략 승률을 높이기 위해 더 많은 필터를 포함합니다.
이것은 미래의 최적화의 초점이 될 것입니다.
이 전략은 비교적 안정적이고 효율적인 트렌드 추적 전략을 형성하기 위해 TSI, CCI 및 Hull MA 지표를 포괄적으로 활용합니다. 신호 품질을 향상시키기 위해 다중 주기의 지표의 장점을 성공적으로 활용합니다. 다음 단계는 매개 변수 최적화, 필터 향상 및 기타 방법을 통해 전략의 안정성과 수익성을 더욱 향상시키는 것입니다.
/*backtest start: 2022-11-21 00:00:00 end: 2023-11-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="TSI CCI Hull", shorttitle="TSICCIHULL", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills= false, calc_on_every_tick=true, pyramiding=0) long = input(title="Long Length", type=input.integer, defval=50) short = input(title="Short Length", type=input.integer, defval=50) signal = input(title="Signal Length", type=input.integer, defval=25) price=input(title="Source",type=input.source,defval=open) Period=input(25, minval=1) lineupper = input(title="Upper Line", type=input.integer, defval=100) linelower = input(title="Lower Line", type=input.integer, defval=-100) p=price length= Period double_smooth(src, long, short) => fist_smooth = ema(src, long) ema(fist_smooth, short) pc = change(price) double_smoothed_pc = double_smooth(pc, long, short) double_smoothed_abs_pc = double_smooth(abs(pc), long, short) tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc) keh = tsi_value*5 > linelower ? color.red : color.lime teh = ema(tsi_value*5, signal*5) > lineupper ? color.red : color.lime meh = ema(tsi_value*5, signal*5) > tsi_value*5 ? color.red : color.lime i1=plot(tsi_value*5, title="TSI Value", color=color.black, linewidth=1,transp=100) i2=plot(ema(tsi_value*5, signal*5), title="TSI Signal", color=color.black, linewidth=1,transp=100) fill(i1,i2,color=meh,transp=85) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.black, linewidth=10) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.white, linewidth=8,transp=0) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=meh, linewidth=5) n2ma = 2 * wma(p, round(length / 2)) nma = wma(p, length) diff = n2ma - nma sqn = round(sqrt(length)) n1 = wma(diff, sqn) cci = (p - n1) / (0.015 * dev(p, length)) c = cci > 0 ? color.lime : color.red c1 = cci > 20 ? color.lime : color.silver c2 = cci < -20 ? color.red : color.silver cc=plot(cci, color=c, title="CCI Line", linewidth=2) cc2=plot(cci[1], color=color.gray, linewidth=1,transp=100) fill(cc,cc2,color=c,transp=85) plot(cross(20, cci) ? 20 : na, style=plot.style_cross,title="CCI cross UP", color=c1, linewidth=2,transp=100,offset=-2) plot(cross(-20, cci) ? -20 : na, style=plot.style_cross,title="CCI cross down", color=c2, linewidth=2,transp=100,offset=-2) TSI1=ema(tsi_value*5, signal*5) TSI2=ema(tsi_value*5, signal*5)[2] hullma_smoothed = wma(2*wma(n1, Period/2)-wma(n1, Period), round(sqrt(Period))) //plot(hullma_smoothed*200) longCondition = TSI1>TSI2 and hullma_smoothed<price and cci>0 if (longCondition and cci>cci[1] and cci > 0 and n1>n1[1]) strategy.entry("Buy Here", strategy.long) shortCondition = TSI1<TSI2 and hullma_smoothed>price and cci<0 if (shortCondition and cci<cci[1] and cci < 0 and n1<n1[1]) strategy.entry("Sell Here", strategy.short)