TSI 지표와 Hull 이동 평균에 기초한 양적 거래 전략

저자:차오장, 날짜: 2023-12-18 16:56:22
태그:

img

전반적인 설명

이 전략은 TSI 지표와 헐 이동 평균에 기초한 양적 거래 전략 (Quantitative Trading Strategy Based on TSI Indicator and Hull Moving Average) 이라고 불린다. 주요 아이디어는 TSI 지표와 헐 이동 평균을 결합하여 주식, 암호화폐 또는 외환의 트렌드를 식별하고 트렌드가 시작되면 거래 신호를 생성하는 것입니다.

전략 논리

이 전략은 TSI 지표를 사용하여 가격 추세와 동력을 결정합니다. TSI 지표는 가격 변화율의 이중 평형 이동 평균에 기반합니다. TSI 값이 이동 평균을 넘을 때 구매 신호를 생성하고 그 아래를 넘을 때 판매 신호를 생성합니다.

이 전략은 또한 헐 이동 평균을 사용하여 가격 추세를 결정한다. 헐 이동 평균은 이중 가중 이동 평균으로 구성되어 있으며 시장 소음을 효과적으로 필터링할 수 있다. 빠른 선이 느린 선 위에 넘어가면 상승 추세가 확인되고, 아래를 넘어가면 하락 추세가 확인된다.

TSI 지표가 신호를 생성할 때, 헐 이동 평균이 같은 방향으로의 경향을 확인하면 해당 거래 신호가 트리거됩니다. 또한, 전략은 또한 경향을 확인하기 위해 촛불 몸의 방향을 검사합니다. 신호는 표시 신호, 헐 신호 및 촛불 몸의 방향이 일관되게 정렬되었을 때만 생성됩니다.

이점 분석

트렌드, 모멘텀 및 이동 평균의 지표를 결합함으로써이 전략은 시장 트렌드의 시작을 효과적으로 식별하고 과도한 잘못된 신호를 피할 수 있습니다. 이중 매끄러운 이동 평균은 또한 약간의 소음을 필터합니다.

단일 지표 전략과 비교하면, 이 전략은 여러 지표를 결합하여 신호를 필터링하여 신호의 품질을 크게 향상시킬 수 있다. 여러 확인 조건은 또한 신호가 트리거될 때 매우 신뢰할 수 있게 한다.

위험 분석

이 전략은 트렌드 시작을 효과적으로 식별 할 수 있지만 시장 통합 중 일부 잘못된 신호와 과도한 거래를 일으킬 수 있습니다. 부적절한 매개 변수 설정은 불필요한 출구로 이어질 수 있습니다.

위험을 줄이기 위해, 허크 기간 또는 TSI 매개 변수를 적절히 조정 할 수 있습니다. 또한 제어 손실에 정지 할 수 있습니다. 최적화 과정에서 최상의 매개 변수를 위해 높은 신호-소음 비율을 보장하는 데 주의가 필요합니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 커브를 부드럽게하고 가짜 신호를 필터하기 위해 Hull Moving Average 매개 변수를 최적화
  2. 감수성과 안정성을 균형을 맞추기 위해 TSI 매개 변수를 최적화
  3. 손실 크기를 제어하기 위해 손실 중지 전략을 추가
  4. 단기 잡음을 필터링하기 위해 신호 길이를 조정
  5. 다른 제품과 시간 프레임에 대한 테스트
  6. 신호 검증을 위한 다른 지표를 포함

결론

이 전략은 TSI 지표와 홀 이동 평균을 결합하여 시장 추세를 확인한 후 거래 신호를 생성합니다. 이 전략은 높은 타이밍과 신호 품질을 가지고 있습니다. 매개 변수 최적화 및 전략 조합을 통해 수익성이 크게 향상되고 위험을 줄일 수 있습니다. 이 전략은 중장기 트렌드를 식별하는 데 적합하며 특히 암호화폐 및 외환 시장에서 유망한 응용 전망이 있습니다.


/*backtest
start: 2022-12-11 00:00:00
end: 2023-12-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("TSI/HullMA/VWMA strategy", shorttitle="TSI/HullMA/VWMA", overlay=true, default_qty_type=strategy.percent_of_equity, max_bars_back=420, default_qty_value=100, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0)
TP = input(defval=200.00, title="TargetPoint in $", type=float, step=1)
SL = input(defval=-2000.00, title="StopLoss in $", type=float, step=1)
signal = input(title="Signal Length",  defval=6)
keh=input(title="HullMA cross",defval=2)
a=input(title="VWMA",defval=2)
long=35,short=35,linebuy=4,linesell=-4,ot=1,p=ohlc4[0]
double_smooth(src, long, short) =>
    fist_smooth = ema(src, long)
    ema(fist_smooth, short)
pc = change(p)
rvwma=vwma(p,round(a))
rvwma2=vwma(p,round(a*2))
n2ma=2*wma(p,round(keh/2))
nma=wma(p,keh)
diff=n2ma-nma
sqn=round(sqrt(keh))
n2ma1=2*wma(p[1],round(keh/2))
nma1=wma(p[1],keh)
diff1=n2ma1-nma1
sqn1=round(sqrt(keh))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
hullbuy=n1>n2 and n1>n2[1] and rvwma>rvwma2
hullsell=n1<n2 and n1<n2[1] and rvwma<rvwma2
candlebuy=ohlc4[0]>ohlc4[1] and ohlc4[0]>ohlc4[2] and ohlc4[0]>ohlc4[3]
candlesell=ohlc4[0]<ohlc4[1] and ohlc4[0]<ohlc4[2] and ohlc4[0]<ohlc4[3]
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)
strategy.entry("buy", true, na, when = tsi_value>ema(tsi_value, signal) and candlebuy and hullbuy)
strategy.entry("sell", false, na, when = tsi_value<ema(tsi_value, signal) and candlesell and hullsell)
strategy.close_all(when = strategy.openprofit>TP or strategy.openprofit<SL)

더 많은