この戦略の主なアイデアは,平滑したハイケンアシを計算するために平滑した移動平均を使用し,価格動向を特定し,価格が平滑したハイケンアシと黄金十字を持つときロング,死十字があるときショートに行くことです.
戦略はまず,平滑移動平均を計算するための関数 smoothedMovingAvgを定義し,前期の平滑移動平均値と,特定の重量に基づいて,現在の期間の平滑移動平均を計算するために最新の価格を使用します.
オープン価格,高値,低値,閉値に基づいて ハイケン・アシの閉値を計算する関数 getHAClose を定義します
メイン戦略論理では,最初に異なる期間の元の価格を取得し,スムーズモビング平均を計算するためにスムーズモビングAvg関数を使用して, getHAClose関数を使用してスムーズヘイケンアシ閉値を計算します.
最後に,価格がスムーズなハイケンアシ閉値を超えるとロングになり,価格がそれ以下を超えるとポジションを閉じる.価格がスムーズなハイケンアシ閉値を下回るとショートになり,価格がそれ以上を超えるとポジションを閉じる.
この戦略の最大の利点は,平滑したハイケンアシを計算するために平滑した移動平均を使用することで,価格動向をより正確に決定し,不安定な期間に誤った信号を生むのを避けるためにいくつかのノイズをフィルタリングすることが可能である.さらに,ハイケンアシ自体は,価格と組み合わせると判断の精度をさらに向上させる傾向を強調する利点があります.
この戦略が直面する主なリスクは,
調整の不適切なパラメータ設定は,戦略が価格逆転の機会を逃したり,間違ったシグナルを生成させる可能性があります.最適なパラメータは,繰り返しバックテストと最適化によって見つけなければなりません.
価格が急激に変動すると,平滑移動平均値は価格変化に遅れ,ストップ損失を誘発したり,逆転機会を逃す可能性があります.この時点で,リスクを軽減するためにポジションサイズを減らすことが必要です.
上記のリスクに対処するために,調整パラメータ,ストップ・ロスのメカニズム,各取引ポジションのサイズ削減などの方法がリスクを軽減し,戦略の安定性を向上させるために使用できます.
戦略は,次の側面でも最適化できます.
市場変動が増加するときにパラメータを自動的に調整するための適応性調整パラメータを導入する.
他の指標とフィルターとして組み合わせることで,価格統合中に間違った信号を発行しないようにします.例はMACD,KDなどです.
トレード損失を制御するストップ損失メカニズムを追加します. ストップ損失の割合または波動性ストップ損失を設定できます.
取引製品,取引セッションなどを最適化して,最も利点のある製品やセッションに焦点を当てます.
上記の最適化によって,戦略の曲線適合リスクはさらに削減され,戦略の適応性と安定性が向上できます.
この戦略の全体的な論理は明確で理解しやすい. 価格動向を決定し,それに応じてロングとショートポジションを設定するためにスムーズなハイケンアシを計算することによって. その最大の利点は,ノイズをフィルタリングし,信号判断の精度を向上させることができるということです. しかし,パラメータ最適化や迅速な逆転を逃すリスクにも一定の困難があります. 適応メカニズムを導入し,指標の組み合わせを拡大し,詳細な研究に価値があるようにすることで,さらなる最適化を行うことができます.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Smoothed Heiken Ashi Strategy", overlay=true) // Inputs g_TimeframeSettings = 'Display & Timeframe Settings' time_frame = input.timeframe(title='Timeframe for HA candle calculation', defval='', group=g_TimeframeSettings) g_SmoothedHASettings = 'Smoothed HA Settings' smoothedHALength = input.int(title='HA Price Input Smoothing Length', minval=1, maxval=500, step=1, defval=10, group=g_SmoothedHASettings) // Define a function for calculating the smoothed moving average smoothedMovingAvg(src, len) => smma = 0.0 smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len smma // Function to get Heiken Ashi close getHAClose(o, h, l, c) => ((o + h + l + c) / 4) // Calculate smoothed HA candles smoothedHAOpen = request.security(syminfo.tickerid, time_frame, open) smoothedMA1close = smoothedMovingAvg(request.security(syminfo.tickerid, time_frame, close), smoothedHALength) smoothedHAClose = getHAClose(smoothedHAOpen, smoothedHAOpen, smoothedHAOpen, smoothedMA1close) // Plot Smoothed Heiken Ashi candles plotcandle(open=smoothedHAOpen, high=smoothedHAOpen, low=smoothedHAOpen, close=smoothedHAClose, color=color.new(color.blue, 0), wickcolor=color.new(color.blue, 0)) // Strategy logic longCondition = close > smoothedHAClose shortCondition = close < smoothedHAClose strategy.entry("Buy", strategy.long, when=longCondition) strategy.close("Buy", when=shortCondition) plotshape(series=longCondition, title="Buy Signal", color=color.green, style=shape.labelup, location=location.belowbar) plotshape(series=shortCondition, title="Sell Signal", color=color.red, style=shape.labeldown, location=location.abovebar)