개선된 소용돌이 지표에 기초한 양적 거래 전략

저자:차오장, 날짜: 2023-11-14 14:40:54
태그:

img

전반적인 설명

이 전략은 소용돌이 지표 전략의 업그레이드 버전이다. 원래의 소용돌이 지표에 기반하여, 임계 기준에 기반한 트레이드를 트리거하는 것, EMA로 소용돌이 라인을 매끄는 것, 스톱 로스 및 영리 취득을 추가하는 것, 롱, 쇼트, 또는 롱/쇼트 전략을 구현하는 것 등 여러 가지 새로운 기능을 포함합니다. 양적 거래에서 향상된 소용돌이 지표를 적용하려는 투자자에게 적합합니다.

원칙

이 전략의 핵심 지표는 향상된 소용돌이 지표이다. 전통적인 소용돌이 지표는 가격 변동의 절대 합을 계산하여 양수 및 음수 소용돌이 선을 형성한다. 양수선이 음수선을 넘을 때 구매 신호를 보낸다. 음수선이 양수선을 넘을 때 판매 신호를 보낸다.

이 전략은 전통적인 스 지표에 다음과 같은 업그레이드를 합니다.

  1. 라인 크로스 (line cross) 에만 의존하는 대신, 임계 (threshold) 의 개념을 도입한다. 거래는 양선과 음선 사이의 스프레드가 미리 설정된 임계 (threshold) 를 초과할 때만 시작된다. 이것은 작고 중요하지 않은 크로스를 필터링하는 데 도움이 된다.

  2. 회전선들은 EMA로 평평화되어 곡선 경련을 줄입니다.

  3. 스톱 로스 및 수익 취득 기능이 추가됩니다. 손실/이익 비율은 더 나은 위험 통제를 위해 미리 설정 할 수 있습니다.

  4. 트레이더들은 다양한 필요에 맞게 단기, 단기 또는 단기/장기 전략을 선택할 수 있습니다.

이러한 개선으로 전략은 추세를 보다 안정적으로 감지할 수 있고 백테스트에서도 좋은 성과를 거둘 수 있습니다.

이점 분석

  1. 개선 된 스 지표 는 유효 하지 않은 신호 를 필터링 하고 거짓 중단 을 피 합니다. EMA 평형 은 또한 소음을 줄이는 데 도움 이 됩니다.

  2. 단순한 교차가 아닌 신호에 대한 문턱을 사용하면 트렌드 반전 지점을 더 안정적으로 감지 할 수 있습니다.

  3. 스톱 로스/프로피트 테이크 기능은 이성적인 거래 원칙에 따라 각 거래의 위험을 제어하기 위해 수익/손실 비율을 미리 설정할 수 있습니다.

  4. 단장, 단장 또는 단장/단장 중 하나를 선택하면 다양한 시장 단계에 적응하고 다른 거래자의 필요에 맞게 유연성을 제공합니다.

  5. 이 전략은 잘 설계된 매개 변수와 좋은 백테스트 결과를 가지고 있어 실용적인 가치를 지니고 있습니다.

위험 분석

  1. 이 전략은 주로 트렌딩 시장에서 작동합니다. 범위 제한 시장에서 성능이 떨어질 수 있습니다.

  2. 스 라인은 가격 변동에 민감합니다. 부적절한 설정은 과잉 거래로 이어질 수 있습니다.

  3. 임계값이 너무 높으면 거래가 빠질 수 있습니다. 너무 낮으면 잘못된 신호를 생성 할 수 있습니다. 최적의 수준을 찾기 위해 광범위한 테스트가 필요합니다.

  4. 블랙 스완 이벤트 도중 Stop Loss 를 취득 할 수 있습니다. 거래자는 이 위험에 대해 경계해야합니다.

최적화 방향

  1. 신호 확인과 더 포괄적인 판단을 위해 다른 지표와 결합하는 것을 고려하십시오.

  2. 다른 주식에서 매개 변수 감도를 테스트하고 설정을 최적화합니다.

  3. 주요 트렌드를 따라 스톱을 조정하기 위해 적응적인 스톱 손실 기술을 연구하십시오.

  4. 기계 학습 등을 도입하여 자동으로 매개 변수를 최적화합니다.

  5. 이 전략에 기반한 인덱싱 방법을 탐구하여 역량을 확장합니다.

결론

이 전략은 전통적인 소용돌이 지표에 대해 여러 가지 개선 사항을 수행하고 비교적 성숙하고 신뢰할 수있는 양적 거래 시스템을 형성합니다. 트렌드 필터링과 위험 통제를 결합하여 분산 트레이드에서 과잉 리스크를 피하고 지표 자체의 트렌드 캡처 기능을 활용합니다. 추가 매개 변수 최적화 및 조합 기술로 전략을 더 안정적이고 반응 할 수 있습니다. 전반적으로 소용돌이 지표 전략의 업그레이드 버전으로 실용적인 가치를 가지고 있습니다.


/*backtest
start: 2023-10-14 00:00:00
end: 2023-11-13 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// [Guz] Custom Vortex
// Custom version of the Vortex indicators that adds many features:
// -Triggers trades after a threshold is reached instead of the normal vortex lines cross (once the difference between the 2 lines is important enough)
// -Smooths the Vortex lines with an EMA
// -Adds Take Profit and Stop Loss selection
// -Adds the possibility to go Long only, Short only or both of them
// ! notice that it uses 10% position size and 0.04% trade fee, found on some crypto exchanges futures contracts
// Allows testing leverage with position size moddification (values above 100%, to be done with caution)
// Not an investment advice 

//@version=4
strategy(title="%-[Guz] Vortex Indicator Custom", shorttitle="%-[Guz] Vortex Indicator Custom", overlay=true)

period_ = input(300, title="Length", minval=2)
VMP = sum( abs( high - low[1]), period_ )
VMM = sum( abs( low - high[1]), period_ )
STR = sum( atr(1), period_ )
ema_len = input(title="EMA Length", defval=7)
tresh= input(title="Threshold", defval=16.2, step=0.1)
VIP = ema(VMP / STR,ema_len)
VIM = ema(VMM / STR,ema_len)
//plot(VIP, title="VI +", color=#2962FF)
//plot(VIM, title="VI -", color=#E91E63)

condition_long = crossover(VIP-VIM, tresh/100)
condition_close = cross(VIP-VIM,0)
condition_short = crossunder(VIP-VIM, -tresh/100)

is_short=input(true,title="Do Short?")
is_long=input(true,title="Do Long?")


if (condition_long and is_long)
    strategy.entry("VortexLE", strategy.long, comment="Long Algo")
if (condition_short and is_short)
	strategy.entry("VortexSE", strategy.short, comment="Short Algo")
if (condition_close)
    strategy.close_all()

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)


stop_loss_long_percent = input(2.5, title="Stop Loss Long", minval=0.1, step=0.1)
stop_loss_long = (1-stop_loss_long_percent/100)*strategy.position_avg_price

take_profit_long_percent = input(1.5, title="Take Profit Long", minval=0.1, step=0.1)
take_profit_long = (1+take_profit_long_percent/100)*strategy.position_avg_price


stop_loss_short_percent = input(2.5,title="Stop Loss Short", minval=0.1, step=0.1) 
stop_loss_short = (1+stop_loss_short_percent/100)*strategy.position_avg_price

take_profit_short_percent = input(1.7,title="Take Profit Short", minval=0.1, step=0.1)
take_profit_short = (1-take_profit_short_percent/100)*strategy.position_avg_price

strategy.exit("TP-SL Long", "VortexLE",  limit = take_profit_long , stop = stop_loss_long) //, trail_price = trail_price_long , trail_offset = trail_offset_long) //, trail_offset=tsl_offset_tick, trail_price=tsl_offset_tick) 
strategy.exit("TP-SL Short", "VortexSE",  limit = take_profit_short , stop = stop_loss_short)  
 


더 많은