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


作成日: 2024-01-05 13:09:37 最終変更日: 2024-01-05 13:09:37
コピー: 0 クリック数: 657
1
フォロー
1621
フォロワー

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

この記事では,単純移動平均に基づいたトレンドフォロー戦略を詳細に分析する.この戦略は,複数の時間枠の均線組み合わせを使用して取引信号を生成する.これは典型的なトレンドフォロー戦略の1つです.

戦略概要

この戦略は同時に21日,50日,100日,200日のシンプル移動平均を使用する.価格がこれらの均線を破るときに買入と売却のシグナルを生成する.さらに,戦略はDonchianチャネルを利用して,価格が20日と55日の最高価格または最低価格を補足するときに取引シグナルを生成する.この戦略は,傾向が顕著な市場に適しており,複数の時間枠でトレンドをロックして利益を得る.

戦略原則

核心となる原則は,複数の均線時間枠を使用してトレンドの方向を判断することです.具体的には,戦略は,4つの異なる時間長さのシンプル移動平均を使用しています: 21 日線,50 日線,100 日線,および200 日線.これらの均線の時間帯は,短期から長期に拡大され,さまざまなレベルのトレンドを識別するために使用されます.

短期平均線が長期平均線を横切るときに買入シグナルが生じます。これは市場傾向が転向し,上昇チャネルに入ることを意味する。短期平均線が長期平均線を横切るときに売りシグナルが生じます。これは市場傾向が逆転し,下行チャネルに入ることを意味する。

さらに,戦略は,ドンチアン通路を利用して補足取引信号を与える.つまり,価格が20日目または55日目の最高価格/最低価格を突破すると,購入/販売信号を誘発し,トレンドの利潤をロックする.

総じて,この戦略は均等線理論とドンチアン通路を組み合わせて,多時間枠でトレンドの方向を判断し,典型的なトレンドフォロー戦略である.

戦略的優位性

  1. 多時間枠のデザインで,中長期の明確なトレンドを効果的に捉える
  2. 均線とドンチアン通路を使用し,信号はより信頼性がある.
  3. シンプルで量子取引の初心者のための実践

戦略リスク

  1. 偽の突破リスク. 価格が一時的に急激に波動し,均線またはドンチアンチャネルが誤った信号を発する可能性があります.
  2. この戦略は,明確なトレンドのある市場環境に適しています.
  3. 参数最適化のスペースは限られている.移動平均とドンチアンチャネルは有効な参数調整が困難である

リスクに対応する解決策:

  1. フィルタリング条件を追加し,偽の突破を避ける.例えば,取引量条件を追加する.
  2. ストップダスの幅を適切に短縮して,震災に対応する.
  3. 自動最適化パラメータをマシーン・ラーニング・アルゴリズムで導入してみる

戦略最適化の方向性

  1. 取引量に基づくフィルタリング条件を追加し,価格の急激な変動で誤ったシグナルを避ける
  2. 移動平均を,価格をより平らにする指標に置き換える試み,例えばKaufman自律移動平均
  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)