该策略利用两条移动平均线的交叉来判断市场趋势的转变,并根据趋势进行买卖操作。当短期均线上穿长期均线时做多,短期均线下穿长期均线时做空,以跟随趋势方向进行交易。
该策略的核心是两条移动平均线:一条快速均线(默认周期为32)和一条慢速均线(默认周期也为32,可通过参数调整)。当收盘价上穿/下穿这两条均线形成的通道时,代表趋势发生逆转,策略据此产生买卖信号:
通过这种均线交叉的方式,策略可以跟随趋势,在上涨趋势中持有多单,在下跌趋势中持有空单,直到趋势出现反转信号。
针对以上风险,可以考虑增加适当过滤,比如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')