
トレンド追跡戦略は,移動平均に基づいてトレンドを追跡する取引戦略である.この戦略は,指数移動平均 ((EMA) と振動移動平均 ((HMA) の交差を用い,市場トレンドの方向を判断し,それに応じて買入と売却のシグナルを生成する.戦略は,中短線トレンド取引に適用され,短期的な振動ではなく,より長い時間の周期的な価格トレンドを追跡することを目的としている.
この戦略は,2つの異なるパラメータの移動平均を使用します:短い周期のEMAと長い周期のHMA.EMAは,短期的なトレンドを判断するために価格の変化に迅速に反応します.HMAは,長期的なトレンドの方向を判断するために価格の変化に遅い反応します.
短期EMAで長期HMAを突破すると,価格が上昇傾向に入ると考えられ,この戦略は次のK線開盤時に市場価格で買い;短期EMAで長期HMAを突破すると,価格が下降傾向に入ると考えられ,この戦略は次のK線開盤時に市場価格で売られる.
市場に出るタイミングを最適化するために,策略にはヘイキン・アシに基づくオプションが追加された.このオプションをオンにした後,策略の売買信号は原始K線ではなくヘイキン・アシ線に基づきます.ヘイキン・アシ線は,オシレータの原始K線をフィルターできるので,偽信号を減らすのに役立ちます.
この戦略には,ストップ・ロスの設定も追加されている. 保有損失が既定のストップ・ロスの幅に達すると,戦略は市場価格でストップ・ロスを行う. この動きは,単一取引の最大損失を制限する.
この戦略の利点は以下の通りです.
EMAとHMAを交差してトレンドの方向を判断することで,異なる周期平均の優位性を利用して判断の正確性を向上させることができる.
トレンドベースの取引は,小規模な振動でポジションを逆転させないことで,不必要な取引の回数を減らすことができます.
Heikin-Ashiのオプションは,偽信号をフィルタリングして,市場投入のタイミングを最適化します.
モバイル・ストップ・ストラトジーを採用することで,単一取引の最大損失を効果的に制御できます.
策略のパラメータはカスタマイズされ,ユーザーは異なる品種と周期に応じて調整して適応性を向上させることができます.
この戦略には以下のリスクもあります.
トレンドフォロー戦略として, 市場をまとめると, 悪い結果が出ています.
市場が逆転すると,大きな損失を招く可能性があります.
ストップダメージの設定が不適切である場合,不必要なストップダメージが発生し,損失が拡大する可能性があります.
パラメータの設定が不適切である場合,取引が頻繁になるか,全く動かないこともあります.
EMAとHMAの周期設定は,異なる品種と周期に対して最適化する必要があります.
偽の突破のリスクを完全にフィルターできない.
この戦略は以下の点で最適化できます.
MACD,KDJなど,より多くの指標の組み合わせの判断傾向を利用して判断の正確性を向上させる.
偽突破の確率を下げるために,取引量,ATRなどの指標をさらに加えた.
移動平均のパラメータを最適化して,異なる品種と取引周期に適合させる.
止損幅の設定を最適化して,止損を合理的にし,過度に緩やかまたは過度に硬くしないようにする.
移動停止,部分停止などの利益保護機能を追加することを検討し,利益をロックする.
持仓コストの計算を最適化するために,異なる代替持仓コスト計算方法をテストする.
トレンド追跡戦略は,移動平均を交差してトレンドの方向を判断し,Heikin-Ashiと移動ストップを使用して,戦略のパフォーマンスを最適化します.この戦略は,中長線トレンドを追跡するのに適しており,パラメータの最適化と機能拡張により戦略の効果をさらに改善できます.しかし,ユーザーは逆転とストップのリスクの存在を認識する必要があります.品種と周期に対してパラメータテストが必要です.全体的に,この戦略は,トレンドを活用するための汎用的でカスタマイズ可能な枠組みを提供します.
/*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)