この戦略は,市場動向の変化を決定するために2つの移動平均値のクロスオーバーを使用し,トレンド方向に基づいて購入/販売の決定を行います.短期MMAが長期MMAを超越したとき,短期MMAが長期MMAを下回ると,トレンドに従うことを目的として,長期間MMAを超越したとき,長期間MMAが短くなります.
この戦略の核心は2つの移動平均値である.高速MA (デフォルト期間32) と遅いMA (デフォルト期間32もパラメータによって調整可能).閉じる価格がこれらの2つのMAによって形成されたチャネルの上下を横断すると,トレンド逆転を示し,戦略はそれに応じて購入/売却信号を生成します.
このMAクロスオーバー方法によって,戦略はトレンドをフォローし,逆転信号が現れるまで上昇傾向における長ポジションと下落傾向における短ポジションを保持することができます.
これらのリスクに対処するために,ATRまたは平均真の範囲フィルターなどの適切なフィルターを追加することで,範囲市場での過剰取引を減らすこと,単一の取引損失を制御するために合理的なストップ損失を設定し,市場に適応するためにパラメータを継続的に最適化することを検討することができます.しかし,戦略の固有の制限は完全に回避することは困難です.
上記の最適化は,複雑な市場に対処する戦略の能力を向上させることができるが,曲線フィットメントと将来の業績の低下につながる可能性がある過剰な最適化を避けるために注意しなければならない.
ダブルMAトレンドフォローストラテジーは,MAクロスオーバーを通じてトレンドを捉える.シンプルで,使いやすい,広く適用可能である.しかし,市場範囲でパフォーマンスが悪く,極端な動きに不十分に対応し,パラメータ最適化に困難に直面している.
戦略は,より多くのフィルタリング指標,ダイナミックストップ・ロス,ポジションサイズ,マルチタイムフレーム分析,適応パラメータを導入することで最適化することができる.しかし,MA戦略の固有の制限は完全に回避することは困難で,市場の特徴に基づいて柔軟な調整を行うライブ取引では依然として注意が必要です.
全体的に,この戦略は基本的トレンドフォロー戦略として機能しますが,単独では難しいので,戦略のポートフォリオの一部としてより適しています.
/*backtest start: 2023-03-16 00:00:00 end: 2024-03-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //study(title="Demo - SSL Basic", shorttitle="Demo - SSL Basic", overlay=true) strategy(title='Demo - SSL Basic', shorttitle='Demo - SSL Basic', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.15) // Backtest Date Range start_date_long = input(title='Backtest Long Start Date', defval=timestamp('01 Jan 2018 00:00 +0530')) end_date_long = input(title='Backtest Long End Date', defval=timestamp('25 Jan 2030 00:00 +0530')) backtest_range = true // Inputs maType = input.string(title='SSL MA Type', options=['SMA', 'EMA', 'WMA'], defval='SMA') sslLen = input(title='SSL Length', defval=32) showCross = input(title='Show Crossover?', defval=true) showEntry = input(title='Show Entry?', defval=true) showTrend = input(title='Show Trend Colors?', defval=true) // Calc MA for SSL Channel calc_ma(close, len, type) => float result = 0 if type == 'SMA' // Simple result := ta.sma(close, len) result if type == 'EMA' // Exponential result := ta.ema(close, len) result if type == 'WMA' // Weighted result := ta.wma(close, len) result result // Add SSL Channel maHigh = calc_ma(high, sslLen, maType) maLow = calc_ma(low, sslLen, maType) Hlv = int(na) Hlv := close > maHigh ? 1 : close < maLow ? -1 : Hlv[1] sslDown = Hlv < 0 ? maHigh : maLow sslUp = Hlv < 0 ? maLow : maHigh ss1 = plot(sslDown, title='Down SSL', linewidth=2, color=showTrend ? na : color.red) ss2 = plot(sslUp, title='Up SSL', linewidth=2, color=showTrend ? na : color.lime) // Conditions longCondition = ta.crossover(sslUp, sslDown) shortCondition = ta.crossover(sslDown, sslUp) // Strategy if shortCondition strategy.close('Long', comment='Long Exit', alert_message='JSON') if longCondition strategy.close('Short', comment='Short Exit', alert_message='JSON') if backtest_range and longCondition strategy.entry('Long', strategy.long, comment='Long Entry', alert_message='JSON') if backtest_range and shortCondition strategy.entry('Short', strategy.short, comment= 'Short Entry', alert_message='JSON') // Plots fill(ss1, ss2, color=showTrend ? sslDown < sslUp ? color.new(color.lime, transp=75) : color.new(color.red, transp=75) : na, title='Trend Colors')