均线
均线
自去年以来,自己一直在做着量化交易,版本更新了无数版,加了无数层过滤机制,ATR 止盈止损,动态止损,区间突破,没想到最后最简单有效的仍然是均线策略。
- Trading
Written by
均线
自去年以来,自己一直在做着量化交易,版本更新了无数版,加了无数层过滤机制,ATR 止盈止损,动态止损,区间突破,没想到最后最简单有效的仍然是均线策略。
Written by
自去年以来,自己一直在做着量化交易,版本更新了无数版,加了无数层过滤机制,ATR 止盈止损,动态止损,区间突破... 没想到最后最简单有效的仍然是均线策略。
在量化交易圈流传着这样一句话,“交易系统越简单越有效,普适性也越强”。为什么简单往往更有效,适应性更强?因为参数少,过拟合风险低。参数越多、逻辑越复杂,系统就越容易刚好贴合历史数据中的噪声,回测曲线很好看,实盘却大幅衰减。
简单的交易系统,参数少,逻辑清晰,容错率更高,适应更多市场环境。简单规则通常依赖少数核心变量(价格、成交量等),这些在任何市场都存在复杂模型如果依赖很多特定条件,一旦市场结构变化,就可能整体失效 对“黑天鹅”和极端行情更抗揍。
复杂系统往往为了捕捉各种小机会,会布很多小网,在平稳期很赚,但遇到剧烈波动、流动性骤减时,各模块可能互相冲突,导致大亏。简单系统通常只抓“大级别、大方向”的机会,单笔风险可控,在异常行情中反而容易保命。
真正有效的简单系统,通常是:
简单的是规则,不简单的是背后的思考和对市场的理解,对大多数个人交易者来说,打造简单的交易系统,往往比搞一套复杂系统更现实、也更稳定。
今天来看一个极其简单的量化交易策略,利用均线斜率,均线开口向上,做多,均线开口向下,做空 均线是一个很常见的交易工具,在趋势行情中能很好的跟随趋势获利,震荡行情中价格来回穿插均线,净值回撤。这里我们可以利用均线的斜率角度,提升均线的盈利能力,减少回撤力度,大大增加均线策略的实用性。
周期越大,可信度越高。
Code
//@version=5
strategy("MA Slope Breakout", overlay=true, pyramiding=0, initial_capital=100000, calc_on_every_tick=false, process_orders_on_close=true)
// ===== 参数 =====
maType = input.string("EMA", "均线类型", options=["SMA", "EMA"])
maLen = input.int(20, "均线周期", minval=1)
breakLen = input.int(3, "突破回看周期", minval=1)
angleThreshold = input.float(1.3, "角度阈值(度)", step=0.1)
usePercentSlope = input.bool(true, "用百分比斜率计算角度")
showAngle = input.bool(true, "显示角度")
// ===== 均线 =====
ma = maType == "SMA" ? ta.sma(close, maLen) : ta.ema(close, maLen)
// ===== 斜率角度 =====
// 直接用价格差算角度会受品种价格尺度影响较大,所以默认用“百分比斜率”换算
rawSlope = ma - ma[1]
normSlope = usePercentSlope ? (ma[1] != 0 ? rawSlope / ma[1] * 100 : rawSlope) : rawSlope
angle = math.todegrees(math.atan(normSlope))
// ===== 前N日高低点 =====
prevHigh = ta.highest(high, breakLen)[1]
prevLow = ta.lowest(low, breakLen)[1]
// ===== 交易条件 =====
longCond = angle > angleThreshold and close > prevHigh
shortCond = angle < -angleThreshold and close < prevLow
// ===== 开仓 =====
if longCond and strategy.position_size <= 0
strategy.entry("Long", strategy.long)
if shortCond and strategy.position_size >= 0
strategy.entry("Short", strategy.short)
// ===== 反向信号平仓/反手 =====
if strategy.position_size > 0 and shortCond
strategy.close("Long")
if strategy.position_size < 0 and longCond
strategy.close("Short")下面是该策略在权益为 100% 仓位下的回测示例

