双移动平均趋势跟踪策略(Dual Moving Average Trend Tracking Strategy)是一种基于两个不同周期的移动平均线来判断市场趋势方向的量化交易策略。该策略使用快速移动平均线和慢速移动平均线的多空状态来确定趋势方向,在趋势方向上进行交易。
该策略使用两个移动平均线,包括快速移动平均线(例如10周期)和慢速移动平均线(例如30周期)。如果两个移动平均线都向上,则判断为多头趋势;如果两个移动平均线都向下,则判断为空头趋势。
具体来说,策略首先计算出快速移动平均线和慢速移动平均线。然后比较当前快速移动平均线与上一周期的大小关系,若当前大与上一周期,则赋值为1,表示向上;否则赋值为-1,表示向下。慢速移动平均线做同样判断。
最后,判断快慢两个移动平均线的判断值。如果两个判断值都为1,则最终判断为1,表示多头趋势;如果两个判断值都为-1,则最终判断为-1,表示空头趋势。如果判断值不一致,则维持上一周期的趋势判断。
在判断出趋势方向后,该策略在多头趋势下做多开仓,在空头趋势下做空开仓。
该策略具有以下优势:
该策略也存在一定风险:
为降低上述风险,可设置移动平均线周期参数更加合理,引入其他技术指标作为辅助判断,设置止损止盈规则,或适当调整仓位。
该策略还可从以下几个方面进行优化:
双移动平均趋势跟踪策略整体思路清晰易懂,通过双移动平均线过滤震荡,判断趋势方向,并按照判断结果进行交易,是一种典型的趋势跟踪策略。该策略可根据个人偏好选择仅做多或仅做空,灵活简单,容易操作。同时策略也存在一定盈利风险,需要加入辅助技术指标、止损止盈等来控制风险,从而获得长期稳定的收益。
/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
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/
// © noro
// 2020
//@version=4
strategy(title = "Noro's TrendMA Strategy", shorttitle = "TrendMA str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_value = 0.1)
//Settings
needlong = input(true, title = "Long")
needshort = input(true, title = "Short")
fast = input(10, minval = 1, title = "MA Fast (red)")
slow = input(30, minval = 2, title = "MA Slow (blue)")
type = input(defval = "SMA", options = ["SMA", "EMA"], title = "MA Type")
src = input(ohlc4, title = "MA Source")
showma = input(true, title = "Show MAs")
showbg = input(false, title = "Show Background")
//MAs
fastma = type == "EMA" ? ema(src, fast) : sma(src, fast)
slowma = type == "EMA" ? ema(src, slow) : sma(src, slow)
//Lines
colorfast = showma ? color.red : na
colorslow = showma ? color.blue : na
plot(fastma, color = colorfast, title = "MA Fast")
plot(slowma, color = colorslow, title = "MA Slow")
//Trend
trend1 = fastma > fastma[1] ? 1 : -1
trend2 = slowma > slowma[1] ? 1 : -1
trend = 0
trend := trend1 == 1 and trend2 == 1 ? 1 : trend1 == -1 and trend2 == -1 ? -1 : trend[1]
//Backgrouns
colbg = showbg == false ? na : trend == 1 ? color.lime : trend == -1 ? color.red : na
bgcolor(colbg, transp = 80)
//Trading
if trend == 1
if needlong
strategy.entry("Long", strategy.long)
if needlong == false
strategy.close_all()
if trend == -1
if needshort
strategy.entry("Short", strategy.short)
if needshort == false
strategy.close_all()