トレンドフォロー戦略は,移動平均値のクロスオーバーに基づいたトレンドトレーディング戦略である.トレンド指数移動平均値 (EMA) とハル移動平均値 (HMA) のクロスオーバーを使用して,トレンド方向を決定し,それに応じて取引信号を生成する.この戦略は,短期振動ではなく長期価格傾向を追求することを目的としている.
この戦略は,異なるパラメータを持つ2つの移動平均値を使用します. EMAは価格変化により速く反応し,短期的なトレンドを判断するために使用されます.
HMA を越えると,上向きのトレンドの始まりとみなされ,戦略は次のバーオープンで市場価格でロングオーダーを行う.HMA を越えると,下向きのトレンドの始まりとみなされ,戦略は次のバーオープンで市場価格でショートに行く.
エントリータイミングを最適化するために,戦略はハイキン・アシオプションを組み込む.有効化すると,買い売り信号は通常のキャンドルスタイルの代わりにハイキン・アシバーに基づきます.ハイキン・アシバーは,元のキャンドルスタイルの短期価格振動をフィルタリングし,偽信号を減らすことができます.
この戦略はストップ・ロスの設定も採用しています. ポジション損失が事前に設定されたストップ・ロスのパーセントに達すると,ポジションは市場価格で閉鎖され,取引毎の最大損失を制限します.
この戦略の利点は以下の通りです.
EMAとHMAのクロスオーバーを使用してトレンドを決定することで,異なる期間の移動平均を活用し,精度を向上させることができます.
トレンドに基づく取引は わずかな振動にこだわるのを避け 不必要な取引を減らすことができます
ハイキン・アシオプションは 誤った信号をフィルターで排除することで 入力のタイミングを最適化します
移動ストップ損失は,取引ごとに最大損失を有効に制限します.
パーソナライズ可能なパラメータは,異なる製品とタイムフレームに最適化することができます.
この戦略のリスクは以下のとおりです.
トレンドフォローシステムとして レンジ・バインド市場では 劣悪なパフォーマンスを示しています
トレンドが逆転すると大きな損失を伴う可能性があります
誤ったストップ損失設定は,不要なストップを引き起こしたり,損失を拡大したりする可能性があります.
パラメーターの調節が悪ければ 過剰取引や不行動につながる可能性があります
EMA と HMA 期間は,異なる製品と時間枠に最適化する必要があります.
ハイキン・アシは 偽脱出のリスクを 完全に回避できません
戦略は以下の側面から改善できます.
傾向の正確性を高めるために MACD,KDJなどの指標を活用します
ボリュームやATRなどのフィルターを追加して 偽ブレーキを減らす
商品や時間枠に基づいて移動平均のパラメータを最適化します
ストップ・ロスの割合を調整して ストップ・ロスの動作を調整します
移動利益停止や部分利益の取りなど,利益の取りの特徴を考慮してください.
ポジションコストベースを最適化するための代替方法をテストする.
トレンドフォロー戦略は,移動平均クロスオーバーを使用してトレンドを特定し,ハイキン・アシと移動ストップ損失経由でパフォーマンスを最適化します. 中長期トレンド取引に適しており,パラメータチューニングと機能拡張によりさらに強化することができます. しかし,ユーザーは逆転や不適切なストップ損失のリスクに気づかなければなりません. 全体的に,異なる製品とタイムフレームで動作するトレンド取引のための普遍的でカスタマイズ可能なフレームワークを提供します. 適切なパラメータテストは,それを適用する際に必要です.
/*backtest start: 2022-10-30 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("𝐉𝐔𝐈𝐂𝐘 𝐓𝐑𝐄𝐍𝐃", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=15) //Heikin Ashi Option ha = input(true, title = "Heikin Ashi Source") src = ha ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, barmerge.gaps_off, barmerge.lookahead_off) : close usestoploss = input(true, title="Stop Loss") //EMA len1 = input.int(9, minval=1, title="EMA Length") ema = ta.ema(src, len1) emaline = plot(ema, title="EMA", color=color.blue, linewidth=2) //HMA len2 = input.int(69, minval=1, title="HMA Length") hma = ta.wma(2*ta.wma(src, len2/2)-ta.wma(src, len2), math.floor(math.sqrt(len2))) hmaline = plot(hma, title="HMA", color=color.purple, linewidth=2) fillcolor = hma < ema ? color.blue : color.purple fill(emaline, hmaline, title="EMA Fill", color=color.new(fillcolor, 80), editable=true) //Stop Loss Conditions stoplosspercent = input.float(title="Stop Loss (%)", defval=-6.5, minval=-50, maxval=0, step=.1) / 100 stoploss = strategy.position_avg_price * (1 + stoplosspercent) stop = stoploss > close and stoploss[1] < close[1] and strategy.position_size > 0 and usestoploss //Buy Sell Conditions buy = hma < ema sell = hma > ema //Trades and Alerts if buy strategy.entry("Long Position", strategy.long, comment="BUY") // alert("{\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) if sell and strategy.openprofit > 0 strategy.close("Long Position", comment="SELL") // alert("{\n\"action\": \"close_at_market_price\",\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) if stop strategy.close("Long Position", comment="STOP") // alert("{\n\"action\": \"close_at_market_price\",\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) //Alternate Labels var pos = 0 if buy and pos <= 0 pos := 1 if sell and pos >= 0 pos := -1 buylabel = pos == 1 and (pos != 1)[1] selllabel = pos == -1 and (pos != -1)[1] //Plot Labels plotshape(buylabel, style=shape.labelup, location=location.belowbar, color=color.blue, text="BUY", textcolor=color.white, size=size.tiny) plotshape(selllabel, style=shape.labeldown, location=location.abovebar, color=color.purple, text="SELL", textcolor=color.white, size=size.tiny) plotshape(stop, style=shape.labeldown, location=location.abovebar, color=color.yellow, text="STOP", textcolor=color.white, size=size.tiny)