
이 글은 Hull 이동 평균 ((HMA) 을 기반으로 한 최적화 된 양적 거래 전략에 대해 소개합니다. 이 전략은 다주기 분석과 동적 손실 메커니즘을 결합합니다. 이 전략은 유명한 Hull Suite를 기반으로 개선되었으며, trailing stop 또는 지연된 trailing stop를 구현하기 위해 PineScript v5의 “strategy.exit ((() ” 명령이 추가되었습니다. 이 전략은 HMA의 빠른 반응 특성을 주로 시장 추세를 포착하는 데 사용하며, 동시에 여러 주기의 시간을 분석하여 신호의 신뢰성을 향상시킵니다.
헐 이동 평균 ((HMA): 전략의 핵심은 HMA와 그 변종 ((EHMA와 THMA) 를 사용하여 시장의 흐름을 식별하는 것이다. HMA는 전통적인 이동 평균에 비해 더 빠른 반응 속도와 더 적은 지연을 가지고 있다.
다중 주기 분석: 전략은 다른 시간 주기 HMA를 비교하여 거래 신호를 생성한다. 이 방법은 가짜 신호를 줄이고 거래의 정확성을 향상시킬 수 있다.
동적 중지: 전략은 수익이 일정 포인트에 도달한 후에 활성화되는 트레일링 스톱 메커니즘을 사용하여 수익을 효과적으로 잠금하고 위험을 제어 할 수 있습니다.
거래 시간 제어: 전략은 사용자가 특정 거래 시간을 정의 할 수 있도록 허용합니다. 이것은 낮은 변동성 또는 유동성이 부족한 시간에 거래를 피하는 데 도움이됩니다.
방향 제어: 전략은 거래 방향을 선택 할 수있는 옵션을 제공하여 다른 시장 환경과 거래 스타일에 적응 할 수 있습니다.
유연성: 전략은 사용자가 다른 시장 조건에 적응하기 위해 다른 헐 이동 평균 변형을 ((HMA, EHMA, THMA) 선택할 수 있습니다.
리스크 관리가 훌륭합니다. 동적 스톱 메커니즘을 사용하여 전략은 잠재적인 손실을 제한하면서 이익을 보호 할 수 있습니다.
적응력: 다중 주기 분석 방법은 전략이 다른 시장 환경에 적응할 수 있도록 하며, 가짜 신호의 영향을 줄일 수 있다.
시각적 효과: 전략은 색상 코딩 HMA 스트립 그래프와 같은 다양한 시각적 옵션을 제공하여 거래자가 시장 추세를 더 직관적으로 이해할 수 있도록 도와줍니다.
높은 수준의 자동화: 전략은 완전히 자동화되어 실행될 수 있으며, 인적 감정적 영향과 조작 오류의 가능성을 줄일 수 있다.
과도한 거래: 전략이 빠른 반응에 기반한 HMA로 인해 가로 시장에서 과도한 가짜 신호가 발생할 수 있으며, 과도한 거래가 발생할 수 있습니다.
슬라이드 리스크: 스칼핑 기술을 사용하는 전략으로, 특히 유동성이 낮은 시장에서 높은 슬라이드 리스크에 직면할 수 있다.
매개 변수 민감성: 전략의 성능은 매개 변수 설정에 크게 의존하며, 잘못된 매개 변수는 정책의 부실한 성능을 초래할 수 있다.
시장 조건의 변화: 급격한 시장 조건의 변화에 따라 전략은 유효성을 유지하기 위해 매개 변수를 다시 최적화해야 할 수 있습니다.
기술 의존성: 전략의 실행은 안정적인 네트워크 연결과 거래 플랫폼에 의존하며, 기술 장애로 인해 큰 손실이 발생할 수 있습니다.
시장 정서 지표를 증가 시키십시오: VIX, 옵션 암시 변동률과 같은 시장 정서 지표를 결합하면 다양한 시장 환경에 더 잘 적응 할 수 있습니다.
기계 학습 알고리즘을 도입: HMA 파라미터와 스톱 손실 수준을 동적으로 조정하는 기계 학습 기술을 사용하여 전략의 적응성을 향상시킬 수 있습니다.
거래량 분석: 거래량 데이터와 결합하면 트렌드 판단의 정확도를 높이고, 가짜 돌파구로 인한 손실을 줄일 수 있다.
최적화 시간 프레임 선택: 다양한 시간 프레임 조합을 재검토하여 최적의 다중 주기 분석 설정을 찾습니다.
리스크 평준화 방법을 도입: 다품종 거래에서 리스크 평준화 방법을 사용하여 자금을 배분하면 전체 포트폴리오의 위험을 더 잘 제어 할 수 있습니다.
HMA 최적화 다주기 수량 거래 전략과 동적 스톱은 유연하고 효율적인 거래 시스템입니다. 그것은 Hull 이동 평균의 신속한 반응 특성, 다주기 분석의 안정성 및 동적 스톱의 위험 제어를 결합하여 거래자에게 포괄적 인 양적 거래 솔루션을 제공합니다. 이 전략은 빠르게 변화하는 시장에서 우수한 성능을 발휘하지만, 거래자는 시장 조건의 변화에 주의를 기울이고 유효성을 유지하기 위해 매개 변수를 적시에 조정해야합니다. 지속적인 최적화 및 새로운 기술 요소를 도입함으로써이 전략은 다양한 시장 환경에서 경쟁력을 유지할 잠재력이 있습니다. 그러나 사용자는 양적 거래의 잠재적인 위험을 충분히 인식하고 실제 거래에서 신중하게 사용해야합니다.
/*backtest
start: 2023-07-25 00:00:00
end: 2024-07-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © anotherDAPTrader
//Based upon Hull Suite by InSilico and others//
//with SCALP exit//
//@version=5
strategy('DAP Hull Sweet Scalp v1 Strategy', overlay=true)
// Session //
session = input(title='Session (Goes flat at end of session!)', defval='1800-1700')
//Check if it's in session//
is_session(session) =>
not na(time(timeframe.period, session))
//Call the function
Session = is_session(session)
//Start and end of the session
start = Session and not Session[1]
end = not Session and Session[1]
//Plot the background color to see the session
bgcolor(Session ? color.new(color.white, 0) : na)
// trade directions //
strat_dir_input = input.string(title='Strategy Direction', defval='long', options=['long', 'short', 'all'])
strat_dir_value = strat_dir_input == 'long' ? strategy.direction.long : strat_dir_input == 'short' ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
src = close
modeSwitch = input.string('Hma', title='Hull Variation', options=['Hma', 'Thma', 'Ehma'])
length = input(55, title='Length(180-200 for floating S/R , 55 for swing entry)')
switchColor = input(true, 'Color Hull according to trend?')
candleCol = input(false, title='Color candles based on Hull\'s Trend?')
visualSwitch = input(true, title='Show as a Band?')
thicknesSwitch = input(1, title='Line Thickness')
transpSwitch = input.int(40, title='Band Transparency', step=5)
//FUNCTIONS
//HMA
HMA(_src, _length) =>
ta.wma(2 * ta.wma(_src, _length / 2) - ta.wma(_src, _length), math.round(math.sqrt(_length)))
//EHMA
EHMA(_src, _length) =>
ta.ema(2 * ta.ema(_src, _length / 2) - ta.ema(_src, _length), math.round(math.sqrt(_length)))
//THMA
THMA(_src, _length) =>
ta.wma(ta.wma(_src, _length / 3) * 3 - ta.wma(_src, _length / 2) - ta.wma(_src, _length), _length)
//SWITCH
Mode(modeSwitch, src, len) =>
modeSwitch == 'Hma' ? HMA(src, len) : modeSwitch == 'Ehma' ? EHMA(src, len) : modeSwitch == 'Thma' ? THMA(src, len / 2) : na
//OUT
HULL = Mode(modeSwitch, src, length)
MHULL = HULL[0]
SHULL = HULL[2]
//COLOR
hullColor = switchColor ? HULL > HULL[2] ? #00ff00 : #ff0000 : #ff9800
//PLOT
///< Frame
Fi1 = plot(MHULL, title='MHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title='SHULL', color=hullColor, linewidth=thicknesSwitch, transp=50)
///< Ending Filler
fill(Fi1, Fi2, title='Band Filler', color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color=candleCol ? switchColor ? hullColor : na : na)
// Scalp //
slPoints = input.int(title='Profit Points Before Stop', minval=0, maxval=1000, step=1, defval=1, confirm=false)
slOffset = input.int(title='Then Trailing Stop Loss of ', minval=1, maxval=1000, step=1, defval=1, confirm=false)
//trades//
// Long Entry Function//
if Session and ta.crossover(HULL[0] , HULL[2])
strategy.entry('long', strategy.long)
strategy.exit('trailing stop', from_entry='long', trail_points=slPoints, trail_offset=slOffset)
// Short Entry Function//
if Session and ta.crossunder(HULL[0] , HULL[2])
strategy.entry('short', strategy.short)
strategy.exit('trailing stop', from_entry='short', trail_points=slPoints, trail_offset=slOffset)
if end
strategy.close_all("End of Session - Go FLat")