三重移动平均线交叉系统


创建日期: 2023-09-28 15:33:14 最后修改: 2023-09-28 15:33:14
复制: 1 点击次数: 569
avatar of ChaoZhang ChaoZhang
1
关注
1259
关注者

概述

三重移动平均线交叉系统是一种典型的跟踪趋势的股票交易策略。它利用三条不同时间长度的移动平均线的交叉作为买入和卖出信号。当短期移动平均线上穿中期移动平均线,并且中期移动平均线上穿长期移动平均线时产生买入信号;当短期移动平均线下穿中期移动平均线,并且中期移动平均线下穿长期移动平均线时产生卖出信号。

策略原理

该策略基于三条移动平均线:长线期移动平均线ma1、中期移动平均线ma2和短期移动平均线ma3。首先计算这三条线:

length1 = input(18,'长线') 
length2 = input(9,'中线')
length3 = input(4,'短线')

ma1 := sma(close,length1) 
ma2 := sma(close,length2)
ma3 := sma(close,length3)

其中,length1、length2和length3分别定义三条移动平均线的时间长度。sma函数计算close价格在对应长度上的简单移动平均值。

然后使用三条移动平均线的交叉判断买入和卖出时机:

if ma2 > ma1 and ma3 > ma3[1] 
    strategy.entry("Long", strategy.long)

if ma2 < ma1 and ma3 < ma3[1]
    strategy.entry("Short", strategy.short) 

当中期线ma2上穿长期线ma1,并且短期线ma3上穿前一周期的ma3时,发出做多信号。当中期线ma2下穿长期线ma1,并且短期线ma3下穿前一周期的ma3时,发出做空信号。

策略优势

  • 使用三条移动平均线,可以比较清晰地判断趋势的变化。
  • 长短线的组合可以过滤掉一些短期的市场噪音,锁定较长线的趋势。
  • 规则简单容易操作。
  • 可以通过调整三条移动平均线的参数来适应不同的市场环境。

策略风险

  • 买点卖点都是事后确认的,不能完全避免亏损。
  • 当股价在移动平均线附近震荡时,会出现多次假信号。
  • 长期线过长会错过趋势转折点。短期线过短会因噪音频繁交易。
  • 不能很好地处理横盘市。

可以通过适当优化参数、结合其他指标作为过滤条件来减少这些风险。

策略优化方向

  • 可以测试不同长度参数的组合,寻找最佳参数。
  • 可以加入止损来控制亏损。
  • 可以添加其他指标判断力度和背离,避免误判。例如MACD,KD等。
  • 可以根据实际情况选择合适的止盈策略。

总结

三重移动平均线交叉策略属于简单实用的趋势跟踪策略。它根据三条移动平均线的交叉判断行情趋势的变化,以产生交易信号。该策略优点是规则简单,可以有效跟踪趋势,适合中长线操作。但也存在一定的假信号风险和回撤风险。可以通过参数优化、加入辅助指标等方法进行改进,以适应不同市场环境。总体来说,三重移动平均线交叉策略是量化交易的一个基础入门策略,对于学习算法交易是一个很好的开始。

策略源码
/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 2h
basePeriod: 15m
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/
// © dongyun

//@version=4
strategy("三重交叉修正模式系统", overlay=true)
//strategy.risk.allow_entry_in(strategy.direction.long)
length1 = input(18,'长线')
length2 = input(9,'中线')
length3 = input(4,'短线')

ma1 =0.0
ma2 = 0.0
ma3 = 0.0

ma1 := sma(close,length1)
ma2 := sma(close,length2)
ma3 := sma(close,length3)

plot(ma1)
plot(ma2)
plot(ma3)

if ma2 > ma1 and ma3 > ma3[1]
	strategy.entry("Long", strategy.long, when=strategy.position_size <= 0)

if ma2 < ma1 and ma3 < ma3[1]
	strategy.entry("Short", strategy.short, when=strategy.position_size > 0)