移動平均を追跡する戦略

作者: リン・ハーンチャオチャン開催日:2023年10月20日17時02分52秒
タグ:

img

概要

移動平均追跡戦略は,単純な移動平均に基づいたトレンドフォローする戦略である.価格傾向の方向性を決定するために200日間の単純な移動平均を使用する.価格が移動平均を超えると,それは長い.価格が移動平均を下回ると,それは短い.この戦略は,トレンドを追跡し,利益を得る.

戦略の論理

戦略は以下の原則に基づいています.

  1. 価格動向を決定するために200日間の単純な移動平均値 (slowMA) を使います.
  2. 閉じる価格が slowMAを上回ると 上向きの傾向を示します だからロングをします
  3. 閉じる価格が slowMAを下回ると ダウン傾向を示します だからショートします
  4. 最後の長時間と短いエントリ時間を記録するために,last_longとlast_short変数を使用します.
  5. クロスオーバー関数を使用して,last_long と last_short の間のクロスオーバーを検出し,トレード信号を生成します.
  6. バックテスト期間中,ロング・シグナル (long_signal) を受信するとロング・シグナル (long_signal) と,ショート・シグナル (short_signal) を受信するとショート・シグナル (short_signal) とします.

この戦略は,平均的な方向を移動してトレンドを追跡し,MAのクロスオーバーが起きたとき,トレンドから利益を得るために逆のトレードを行います.

利点分析

この戦略には以下の利点があります.

  1. 戦略の論理は シンプルで 分かりやすく 実行できます
  2. 長期移動平均はノイズをフィルターし,主要なトレンドをロックします.
  3. 適切なタイミングでリバース・トレードを行うことで,トレンド逆転の際に 重要な価格変動を捉えることができます.
  4. 複数の指標の複雑さを回避するために 1 つの指標のみを使用します
  5. 人間の介入なしに 明確な入出規則

リスク分析

リスクもあります:

  1. 長期的MAは短期的調整に敏感ではなく,短期的な機会を逃している.
  2. 逆転損失を伴う主要なトレンド逆転を特定する能力が弱い.
  3. ストップ・ロスのメカニズムがないため 大幅な引き上げになる
  4. 固定パラメータは 異なる製品や市場環境に 適応性が低い.
  5. バックテストは 戦略が過去のデータだけに 基づいてテストされるため 過剰に適したリスクです

リスクは以下の最適化によって対処できます.

  1. 短期的な傾向も把握するために短期的なMAを追加します.
  2. 音量フィルターを追加して 誤った信号を 避けます
  3. トレンド逆転の識別を改善するために,トレンドをフォローする指標を追加します.
  4. シングルトレード損失を制御するために ダイナミックストップロスを追加します
  5. 適応性を向上させるためにパラメータ最適化方法を使用する.
  6. 耐久性テストを 異なる市場環境で

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

この戦略は,次の側面においてさらに最適化することができる.

  1. 最適なパラメータを見つけるために,ウォーク・フォワード分析のような方法を用いて MA 期間パラメータを最適化します.

  2. 短期間の MA を追加して,長期的および短期的トレンドを追跡します.

  3. MACDのようなトレンド指標を組み込み,トレンド逆転の識別を改善します.

  4. ストップ・ロスのメカニズムを追加します.

  5. 耐久性試験は,異なる製品と期間で行われます.

  6. パーマータ適応最適化のために機械学習を使用します

結論

移動平均追跡戦略は,シンプルで実践的なトレンドフォロー戦略である. 明確な論理を持ち,トレンドを把握するために容易に実装できる. しかし,短期的訂正に敏感でないことやリスク制御が弱いような弱点もある. 戦略を複数の側面から最適化してより堅牢で,よりパラメータ化され,より強力なリスク管理を実現することができます. 全体的に,移動平均追跡戦略は良い応用価値があり,定量取引における重要なトレンド取引概念です.


/*backtest
start: 2023-09-19 00:00:00
end: 2023-10-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("MA X 200 BF", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2012, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// MA 200 /////////////
slowMA = sma(close, input(200))

/////////////// Strategy ///////////////
long = close > slowMA
short = close < slowMA

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long_signal)
    strategy.entry("Short Entry", strategy.short, when=short_signal)
    strategy.exit("Long Ex", "Long Entry")
    strategy.exit("Short Ex", "Short Entry")

/////////////// Plotting /////////////// 
plot(slowMA, color = long ? color.lime : color.red, linewidth=2)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)

もっと