移動平均のクロスオーバーシステム

作者: リン・ハーンチャオチャン,日付: 2024-01-03 16:22:18
タグ:

img

概要

これは,移動平均のクロスオーバー信号に基づいたトレンドフォロー戦略である. 急速移動平均が下からスロームービング平均を上回ると,購入信号が生成される. 急速移動平均が上からスロームービング平均を下に回ると,販売信号が生成される.

戦略の論理

この戦略は,20期間の単純な移動平均と30期間の単純な移動平均という2つの移動平均を使用する.20期間のMAが30期間のMAを上回ると,購入信号が生成される.20期間のMAが30期間のMAを下回ると,販売信号が誘発される.

移動平均値自体はトレンド指標として機能し,市場のトレンド方向を効果的に描写する.クロスオーバー原則により,戦略はトレンド逆転点を間に合って把握し,取引信号を生成することができる.20日期と30日期は,騒音に敏感すぎずに市場のトレンドを反映するように適切に設定されている.

利点分析

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

  1. 論理はシンプルで明快で,理解し実行しやすく,初心者にも適しています.
  2. トレンドに沿った取引は,反トレンドのポジションや不必要な損失を避けます.
  3. 移動平均値は,市場の騒音を排除し,誤った信号を避けるためのフィルタリング効果を有する.
  4. パラメータ設定は過度に敏感にならないように合理的です.

リスク分析

この戦略の主なリスクは以下のとおりです.

  1. 移動平均のクロスオーバーが頻繁に行われる場合,市場の統合中に頻繁にストップ・ロスのオーダーが発動できる.
  2. 強いトレンドの間,移動平均値が遅れているため,一部の利益が失われた.
  3. 不適切なパラメータ設定が安定性に影響を与える可能性があります.

解決策:

  1. 移動平均周期を調整し,曲線を滑らかにし,クロスオーバー頻度を減らすために三角移動平均等を使用する.
  2. 傾向を判断するために他の指標を使用し,統合中に取引を避ける.
  3. パラメータを最適化して 最高の組み合わせを見つけます

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

戦略を最適化するための主な側面:

  1. 異なる種類の移動平均をテストする.例えば,重度の移動平均,三角形の移動平均など.
  2. 統合中にシグナルを避けるために他の技術指標を追加する.
  3. エリオット波やチャネル理論などの他の分析技術を組み込み 傾向を決定します
  4. マシン学習モデルを採用し,パラメータを動的に最適化する.
  5. 量子ツールを活用し,マネーマネジメントを精巧にするためにストップ・ロスト/リターン・テイク・テクニックを適用します.

結論

移動平均クロスオーバーシステムは,トレンドをフォローするシンプルで効果的な戦略である.論理は明確で分かりやすく,初心者が学ぶのに非常に適しています.移動平均クロスオーバーとトレンドに沿った取引からの利益に基づいて取引信号を生成します.戦略は,より安定して効率化するために多くの方法で最適化することができます.


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gliese581d

//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,  
 default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)


//SETTINGS

longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)

long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])

ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)


//MOVING AVERAGES

ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)


//STRATEGY

//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false

start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)

in_time =true

strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)

strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)


//PLOTTING

//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)

plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)

もっと