この戦略は,2つの技術指標,改変されたハル移動平均値 (HMA) とイチモク・キンコ・ヒョウ (IKHS) を組み合わせ,中長期市場傾向を把握することを目的としている.主なアイデアは,HMAとIKHSのキジュンセン (ベースライン) の間のクロスオーバー信号を利用し, IKHSのクモ (クラウド) をフィルタリング条件として使ってトレンド方向を決定し,取引決定を下すことである.
この戦略は,変更されたハル移動平均値とイチモク・キンコ・ヒョーを組み合わせて,比較的安定したトレンドフォロー取引システムを構築する. 戦略論理は明確で実行しやすいが,一定の利点もある. しかし,戦略のパフォーマンスは依然として市場状況とパラメータ設定の影響を受け,さらなる最適化と改善を必要とする. 実用的な応用では,よりよい取引結果を得るために,特定の市場特性とリスク偏好に基づいて適切な調整と管理を行うことが必要である.
/*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")