수정 헐 이동 평균과 이치모쿠 긴코 효를 기반으로 한 양적 거래 전략

HMA IKHS WMA
생성 날짜: 2024-04-28 13:39:00 마지막으로 수정됨: 2024-04-28 13:39:00
복사: 11 클릭수: 564
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

수정 헐 이동 평균과 이치모쿠 긴코 효를 기반으로 한 양적 거래 전략

개요

이 전략은 수정된 헐 이동 평균 ((HMA) 와 일목적 균형 ((Ichimoku Kinko Hyo) 의 두 가지 기술 지표를 결합하여 시장의 중·장기 경향을 포착하기 위한 것이다. 전략의 주요 아이디어는 HMA와 일목적 균형의 기준선 ((Kijun Sen) 의 교차 신호를 이용하는 것이며, 동시에 일목적 균형의 구름 ((Kumo) 을 필터링 조건으로 결합하여 시장의 경향 방향을 판단하고 거래를 하는 것이다.

전략 원칙

  1. 수정된 헐 이동 평균 ((HMA) 을 계산
    • WMA ((중도 이동 평균) 을 계산하고 이중 평준화를 통해 수정된 HMA를 얻는다.
  2. 첫눈에 평형한 지표들을 계산하는 방법
    • 회전선 ((Tenkan Sen), 기준선 ((Kijun Sen), 선행 상선 ((Senkou Span A) 과 선행 하선 ((Senkou Span B) 을 계산
  3. 거래 신호를 생성합니다.
    • HMA 상의 기준선을 통과하고 클로즈오프가 클라우드 상에 있을 때, 다중 신호가 생성된다.
    • HMA 아래에서 기준선을 통과하고 클라우드 아래에서 클로즈 시가있을 때 코카이 신호가 발생합니다.
  4. 거래 실행
    • 상위 또는 하위 신호에 따라 거래 동작
  5. 거래에서 탈퇴
    • HMA가 역방향으로 기준선을 통과했을 때, 현재 지분을 종료합니다.

전략적 이점

  1. HMA와 일목요연한 균형의 두 가지 효과적인 트렌드 추적 지표가 결합되어 시장의 추세를 더 잘 포착할 수 있습니다.
  2. 초점 평형의 구름을 필터링 조건으로 사용하여 가짜 신호를 효과적으로 줄이고 거래의 승률을 높일 수 있습니다.
  3. 수정된 HMA는 전통적인 이동 평균에 비해 더 빠른 응답 속도와 더 낮은 지연을 가지고 있으며 시장의 변화를 적시에 반영할 수 있습니다.
  4. 전략 논리는 명확하고, 이해하기 쉽고, 실행 가능하며, 다양한 시장과 시간대에 적용됩니다.

전략적 위험

  1. 시장의 흔들림이나 추세가 불명확할 때, 이 전략은 더 많은 가짜 신호를 생성할 수 있으며, 이로 인해 더 많은 거래와 자본 손실이 발생할 수 있습니다.
  2. 전략의 매개 변수 설정은 거래 결과에 큰 영향을 미치며, 다른 매개 변수 조합은 다른 성과를 초래할 수 있습니다.
  3. 이 전략은 시장의 급격한 사건과 비합리적인 행동을 고려하지 않으며, 극단적인 시장 조건에서 더 큰 위험에 직면할 수 있습니다.

전략 최적화 방향

  1. 신호의 신뢰성 및 안정성을 높이기 위해 다른 기술 지표 또는 시장 감정 지표를 도입하십시오.
  2. 최적화 전략 변수, 예를 들어 기계 학습이나 유전 알고리즘을 통해 최적의 변수 조합을 찾는 방법
  3. 전략의 리스크 을 제어하기 위해 스톱 로즈, 포지션 관리 등의 리스크 관리 모듈을 추가하는 것을 고려하십시오.
  4. 다양한 시장과 시간적 특성에 따라 전략의 타겟 조정 및 최적화

요약하다

이 전략은 수정된 헐 이동 평균과 일회성 균형을 결합하여 비교적 안정적인 트렌드 추적 거래 시스템을 구축한다. 전략의 논리는 명확하고 구현하기 쉽지만 또한 장점이 있다. 그러나 전략의 성능은 여전히 시장 조건과 파라미터 설정에 영향을 받으며 추가적인 최적화와 개선이 필요합니다. 실제 응용에서는 특정 시장 특성과 위험 선호도에 따라 전략이 적절하게 조정되고 관리되어 더 나은 거래 결과를 얻을 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-04-20 00:00:00
end: 2024-04-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hull MA_X + Ichimoku Kinko Hyo Strategy", shorttitle="HMX+IKHS", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)

// Hull Moving Average Parameters
keh = input(12, title="Double HullMA")
n2ma = 2 * wma(close, round(keh/2)) - wma(close, keh)
sqn = round(sqrt(keh))
hullMA = wma(n2ma, sqn)

// Ichimoku Kinko Hyo Parameters
tenkanSenPeriods = input(9, title="Tenkan Sen Periods")
kijunSenPeriods = input(26, title="Kijun Sen Periods")
senkouSpanBPeriods = input(52, title="Senkou Span B Periods")
displacement = input(26, title="Displacement")

// Ichimoku Calculations
highestHigh = highest(high, max(tenkanSenPeriods, kijunSenPeriods))
lowestLow = lowest(low, max(tenkanSenPeriods, kijunSenPeriods))
tenkanSen = (highest(high, tenkanSenPeriods) + lowest(low, tenkanSenPeriods)) / 2
kijunSen = (highestHigh + lowestLow) / 2
senkouSpanA = ((tenkanSen + kijunSen) / 2)
senkouSpanB = (highest(high, senkouSpanBPeriods) + lowest(low, senkouSpanBPeriods)) / 2

// Plot Ichimoku
p1 = plot(tenkanSen, color=color.blue, title="Tenkan Sen")
p2 = plot(kijunSen, color=color.red, title="Kijun Sen")
p3 = plot(senkouSpanA, color=color.green, title="Senkou Span A", offset=displacement)
p4 = plot(senkouSpanB, color=color.orange, title="Senkou Span B", offset=displacement)
fill(p3, p4, color=color.gray, title="Kumo Shadow")

// Trading Logic
longCondition = crossover(hullMA, kijunSen) and close > senkouSpanA[displacement] and close > senkouSpanB[displacement]
shortCondition = crossunder(hullMA, kijunSen) and close < senkouSpanA[displacement] and close < senkouSpanB[displacement]

// Strategy Execution
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Exit Logic - Exit if HullMA crosses KijunSen in the opposite direction
exitLongCondition = crossunder(hullMA, kijunSen)
exitShortCondition = crossover(hullMA, kijunSen)

if (exitLongCondition)
    strategy.close("Long")
if (exitShortCondition)
    strategy.close("Short")