
この戦略は,2つの移動平均線の交差を利用して,市場のトレンドの転換を判断し,トレンドに応じて取引を行います. 短期平均線上を通過する際は多行し,短期平均線下を通過する際は空きを取って,トレンドの方向に従います.
この戦略の核心は,2つの移動平均線である:急速平均線 ((デフォルト周期は32)) と遅い平均線 ((デフォルト周期も32で,パラメータで調整できます). 終盤価格上/下でこの2つの平均線を貫通すると,トレンドの逆転が起こり,戦略はそれに従って買入シグナルを生成します.
この均線交差によって,戦略はトレンドをたどり,上昇トレンドで多項を保持し,下降トレンドで空券を保持し,トレンドの反転信号が出るまで続けることができます.
上記のリスクに対して,ATRまたは平均リアル波幅のフィルターなどの適切なフィルターを追加し,波動的な市場の過剰取引を減らすことを考えることができます. 合理的なストップを設定し,単発的な損失を制御し,市場に対応するためにパラメータを継続的に最適化することができます. しかし,戦略自体には限界があります.
上記の最適化は,複雑な市場に対応する戦略の能力を向上させることができるが,過剰な最適化は,曲線フィットにつながり,将来の不良パフォーマンスを引き起こす可能性があることに注意する必要がある.
双均線トレンド追跡戦略は均線交差でトレンドを捕捉し,使いやすい,適用性の高い特徴がある.しかし,それは振動的な市場ではうまく機能せず,極端な状況への対応が不十分であり,パラメータの最適化が困難である.より多くのフィルタリング指標,ダイナミックストップ損失,ポジション管理,多周期結合,パラメータ自適応などの方法を導入することにより,戦略を最適化することができる.しかし,均線戦略自体は,完全な規則を回避する制限があるが,実盤では,市場特性に合わせて柔軟に調整する.全体的に,この戦略は,トレンド追跡の基礎策として使用できますが,単独では不十分であり,組立戦略の一部として最適です.
/*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')