シンプルなトレンド フォローする戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-05 13:09:37
タグ:

img

この記事では,単純な移動平均値に基づくトレンドフォロー戦略を詳細に分析します. 戦略は,典型的なトレンドフォロー戦略に属する,異なるタイムフレームの移動平均値の組み合わせを使用して取引信号を生成します.

戦略の概要

この戦略は,21日,50日,100日および200日間の単純な移動平均を同時に使用する.価格がこれらの移動平均を突破したとき,購入および販売信号を生成する.さらに,この戦略は,価格が20日または55日間の最高/最低価格を突破したときの取引信号を補完するためにドンチアンチャネルを使用する.この戦略は,複数のタイムフレームを通じてトレンド利益をロックする,明らかなトレンドを有する市場に適している.

戦略原則

基本原理は,トレンド方向を決定するために複数の移動平均時間枠を使用することです.具体的には,戦略は21日,50日,100日,200日という異なる時間跨度を持つ4つの単純な移動平均を使用しています.これらの移動平均の時間跨度は,短期から長期に徐々に拡大し,異なるレベルのトレンドを特定するために使用されます.

短期移動平均値が長期平均値を超えると,買い信号が生成される.これは市場のトレンドが逆転して上向きに進んだことを示唆する.短期移動平均値が長期平均値を下回ると,売り信号が生成される.これは市場のトレンドが逆転して下向きに進んだことを示唆する.

さらに,この戦略は,ドンチアンチャネルを使用して取引信号を補完します.つまり,価格が20日または55日間の最高/最低価格を突破すると,購入/販売信号も起動してトレンド利益をロックします.

概要すると,戦略は,典型的なトレンドフォロー戦略に属するトレンド方向を決定するために,複数のタイムフレームを通じて移動平均理論とドンキアンチャネルを組み合わせます.

利点

  1. 多時間枠設計は 中長期の傾向を効果的に把握できる
  2. 移動平均値とドンキアン・チャネルの両方の使用により,信号がより信頼性が高くなります
  3. 導入が簡単で,初心者向けに適しています.

リスク

  1. 誤ったブレイクのリスク.価格は,移動平均値またはドンチアンチャネルからの誤った信号を引き起こし,一定期間激動する可能性があります.
  2. 範囲市場での損失を止めるのは簡単です.この戦略は,明らかな傾向を持つ市場に適しています.
  3. パラメータ最適化のための余地が限られている.移動平均値とドンキアンチャネルのパラメータを効果的に調整することは困難です.

リスクに対する解決策

  1. 偽のブレイクを避けるためにフィルター条件を追加する,例えばボリューム条件を追加する
  2. 適度にストップ・ロスの範囲を削減し,範囲市場に対応する
  3. パラメータを自動最適化するために機械学習アルゴリズムを導入してみましょう

オプティマイゼーションの方向性

  1. 価格変動の激しい時に間違ったシグナルを避けるために,ボリュームベースのフィルターを追加します.
  2. 移動平均値を,カフマンの適応移動平均値のような価格をよりよく調整できる指標に置き換えるようにしてください.
  3. 機械学習アルゴリズムを適用し,現在の市場状況により適性するためにパラメータを自動最適化する
  4. トレンド強さを測定するための波動性指標を組み込むこと.

結論

この記事では,マルチタイムフレーム移動平均値とドンチアンチャネルに基づく単純なトレンドフォロー戦略を詳細に分析しています. 戦略は,異なる長さの移動平均値を使用してトレンド方向を決定し,実装が簡単でシンプルで明確な原則を持っています. 同時に,利点,潜在的なリスク,将来の最適化アイデアも議論されています. 深い理解と適切な最適化により,この戦略は定量的な取引のための有用なツールになることができると信じています.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Trend Following", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 10)

maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=float)
entryLong = false
entryShort = false

// strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity)

if (close > highest(high[1], 20))
    strategy.entry("Long fast", strategy.long)
    entryLong = true
    

if (close < lowest(low[1], 20))
    strategy.entry("Short fast", strategy.short)
    entryShort = true
    
if (close > highest(high[1], 55))
    strategy.entry("Long slow", strategy.long)
    entryLong = true

if (close < lowest(low[1], 55))
    strategy.entry("Short slow", strategy.short)
    entryShort = true

len1 = input(21, minval=1, title="21 SMA")
src1 = input(close, title="21 SMA")
out1 = sma(src1, len1)
plot(out1, title="21 SMA", color= white)

len2 = input(50, minval=1, title="50 SMA")
src2 = input(close, title="50 SMA")
out2 = sma(src2, len2)
plot(out2, title="50 SMA", color= blue)

len3 = input(100, minval=1, title="100 SMA")
src3 = input(close, title="100 SMA")
out3 = sma(src3, len3)
plot(out3, title="100 SMA", color= orange)

len4 = input(200, minval=1, title="200 SMA")
src4 = input(close, title="200 SMA")
out4 = sma(src4, len4)
plot(out4, title="200 SMA", color= green)



もっと