이 전략은 두 가지 기술 지표: 수정된 Hull Moving Average (HMA) 와 Ichimoku Kinko Hyo (IKHS) 를 결합하여 중장기 시장 트렌드를 파악하는 것을 목표로 한다. 주요 아이디어는 HMA와 IKHS의 Kijun Sen (기본선) 사이의 교차 신호를 활용하는 한편, IKHS의 Kumo (구름) 을 필터링 조건으로 사용하여 트렌드 방향을 결정하고 거래 결정을 내리는 것이다.
이 전략은 수정된 헐 이동평균과 이치모쿠 킨코 히오를 결합하여 상대적으로 안정적인 트렌드를 따르는 거래 시스템을 구축합니다. 전략 논리는 명확하고 구현하기 쉽고 또한 특정 장점이 있습니다. 그러나 전략의 성능은 여전히 시장 조건과 매개 변수 설정에 의해 영향을 받으며 추가 최적화 및 개선이 필요합니다. 실제 응용에서는 더 나은 거래 결과를 얻기 위해 특정 시장 특성과 위험 선호도에 따라 적절한 조정 및 관리를 수행해야합니다.
/*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")