移動平均追跡戦略は,単純な移動平均に基づいたトレンドフォローする戦略である.価格傾向の方向性を決定するために200日間の単純な移動平均を使用する.価格が移動平均を超えると,それは長い.価格が移動平均を下回ると,それは短い.この戦略は,トレンドを追跡し,利益を得る.
戦略は以下の原則に基づいています.
この戦略は,平均的な方向を移動してトレンドを追跡し,MAのクロスオーバーが起きたとき,トレンドから利益を得るために逆のトレードを行います.
この戦略には以下の利点があります.
リスクもあります:
リスクは以下の最適化によって対処できます.
この戦略は,次の側面においてさらに最適化することができる.
最適なパラメータを見つけるために,ウォーク・フォワード分析のような方法を用いて MA 期間パラメータを最適化します.
短期間の MA を追加して,長期的および短期的トレンドを追跡します.
MACDのようなトレンド指標を組み込み,トレンド逆転の識別を改善します.
ストップ・ロスのメカニズムを追加します.
耐久性試験は,異なる製品と期間で行われます.
パーマータ適応最適化のために機械学習を使用します
移動平均追跡戦略は,シンプルで実践的なトレンドフォロー戦略である. 明確な論理を持ち,トレンドを把握するために容易に実装できる. しかし,短期的訂正に敏感でないことやリスク制御が弱いような弱点もある. 戦略を複数の側面から最適化してより堅牢で,よりパラメータ化され,より強力なリスク管理を実現することができます. 全体的に,移動平均追跡戦略は良い応用価値があり,定量取引における重要なトレンド取引概念です.
/*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)