トレンドフォロー移動平均取引戦略


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

トレンドフォロー移動平均取引戦略

概要

この戦略は,トレンドを追跡する移動平均をベースにした取引戦略である.この戦略は,異なるパラメータで設定された最高価格と最低価格の移動平均を使用して,市場のトレンドを判断し,トレンドの転換点で,対応する取引シグナルを生成する.価格が向上を追跡する移動平均を破るとき,多めに行い,価格がダウンを追跡する移動平均を破るとき,空きにする.この戦略は,同時にATRを使用して,ストップとストップのレベルを設定する.

戦略原則

この戦略は,異なるパラメータの設定による最高価格と最低価格の単純な移動平均を使用して,市場動向を判断する.具体的には,移動平均を追跡する2つのグループを作成します.

  1. h1とl1で構成される上位追跡移動平均システム。h1は,市場トレンドの上線を表す最高価格のシンプル移動平均である.l1は,h1を減算したATR値の構成の下線である。価格がh1を突破すると多位シグナルが生成され,価格がl1を突破すると平位シグナルが生成される。

  2. h2とl2からなる下方追跡移動平均システム。h2は最低価格のシンプル移動平均で,市場トレンドの下線を表します.l2はh2とATR値からなる上線です。価格がh2を下を通るとき空き信号を生じます.価格がl2上を通るとき平仓信号を生じます。

双線システムの利用により,トレンドの転換点をより正確に判断し,一部のノイズ取引をフィルターできます.同時に,ATR値は,各株のリスク/利益比率を制御するために,停止と停止のレベルを設定するために使用されます.

優位分析

この戦略の利点は以下の通りです.

  1. トレンドの転換点を正確に識別するために,双線システムによるノイズフィルタリングを使用します.
  2. ATRは動的に波動率を追跡し,単一のストップを効果的に制御する.
  3. 戦略の論理はシンプルでわかりやすく,理解しやすい実装で,初心者の学習に適しています.
  4. 市場環境に応じてパラメータを柔軟に調整できます.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. 双線突破は,トレンドの初期段階の機会を十分に捉えることができない可能性のある遅滞の信号を生成します.
  2. 曲線形のトレンドを識別する移動平均の追跡能力は弱い.
  3. 取引費用の影響は考慮されていません.高周波取引では取引費用がより高い可能性があります.

対策として

  1. 移動平均の周期を適切に短縮して信号をより敏感にします.
  2. MACDなどの他の指標と組み合わせてトレンドの種類を判断し,波動期間の高周波取引を避ける.
  3. ポジションの規模を調整し,取引の頻度を下げる.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 機械学習アルゴリズムを使用してパラメータを自動的に最適化し,市場環境に適応する.
  2. 取引量指数と組み合わせて偽の突破を避ける.
  3. ポジションの大きさとトレンドの強さを関連付ける微調整のルールを追加しました.
  4. トレーラー・ストップなどによる損失防止の最適化

要約する

この戦略は,全体としてシンプルで実用的なトレンド追跡戦略であり,核心理は,双線フィルターとATRダイナミックストップを介してトレンド転換を認識し,単一の損失を制限することである.一定の実戦価値があり,同時に大きな最適化スペースがある.パラメータ調整,他の指標と組み合わせることでより良い効果を得ることができる.

ストラテジーソースコード
/*backtest
start: 2023-12-05 00:00:00
end: 2024-01-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("I Like Winners And Love Loosers!", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

highest_length = input(200, type=input.integer, minval=1, title="Highest Length")
highest_average = input(10, type=input.integer, minval=1, title="Highest Average Length")

lowest_length = input(200, type=input.integer, minval=1, title="Lowest Length")
lowest_average = input(10, type=input.integer, minval=1, title="Lowest Average Length")

atr_length = input(14, type=input.integer, minval=1, title="ATR Length")
atr_multiplier = input(2, type=input.integer, minval=1, title="ATR Multiplier")
a = atr(atr_length) * atr_multiplier

h1 = sma(highest(high, highest_length), highest_average)
l1 = h1 - a

h2 = sma(lowest(low, lowest_length), lowest_average)
l2 = h2 + a

buy1_signal = crossover(close, h1)
sell1_signal = crossunder(close, l1)
strategy.entry("Buy", strategy.long, when=buy1_signal)
strategy.close("Buy", when=sell1_signal)

buy2_signal = crossunder(close, h2)
sell2_signal = crossover(close, l2)
strategy.entry("Sell", strategy.short, when=buy2_signal)
strategy.close("Sell", when=sell2_signal)

y1 = plot(h1, title="H1", color=color.green, transp=50, linewidth=2)
y2 = plot(l1, title="L1", color=color.red, transp=50, linewidth=2)
y3 = plot(h2, title="H2", color=color.green, transp=50, linewidth=2)
y4 = plot(l2, title="L2", color=color.red, transp=50, linewidth=2)

fill(y1,y2,color=color.green)
fill(y3,y4,color=color.red)