以下概念性的内容,主要源自deepseek 或 grok。次策略相对比较简单,主要就是价格突破N日高点/低点,价格动量(N日的价格差值)突破某阀值,出现开仓信号,实盘测试暂未跑出数据,实盘效果待验证。
1. 概念与核心逻辑
动量突破策略是一种基于价格动量(Momentum)的技术分析交易策略,旨在捕捉价格在突破关键水平(如前期高点、低点或技术指标)时的快速趋势延续。动量反映了价格变化的速度和强度,当动量显著增加且价格突破特定阻力或支撑时,通常预示着趋势的开始或加速。该策略通过识别动量信号并结合突破点,生成买入或卖出交易信号。其核心逻辑为:
- 价格突破:当价格突破特定阻力/支撑位(如N日高点/低点),视为潜在趋势启动信号。
- 动量验证:通过动量指标(如ROC、RSI、动量振荡器)确认突破强度,过滤虚假信号。
- 入场时机:价格突破关键位且动量指标超阈值 → 趋势跟随入场
动量突破策略是一种基于资产价格趋势延续性的量化交易策略。 其核心理念是“强者恒强”,即近期表现良好的资产在未来可能继续上涨,而表现不佳的资产可能继续下跌。动量策略假设资产价格具有惯性效应,即价格趋势在短期内可能持续。 投资者通过识别并跟随这些趋势,期望在价格持续上涨或下跌的过程中获利。
2. 计算公式

动量突破策略计算公式
3. 代码示例(Java)
public String generateSignal(List<StrategyDataDTO> bars, StrategyParams strategyParams) {
double currentPrice = strategyParams.getCurrentPrice();
// 计算周期内最高价和最低价
double highestHigh = StrategyUtils.calculateHighest(bars, strategyParams.getPeriod());
double lowestLow = StrategyUtils.calculateLowest(bars, strategyParams.getPeriod());
/**
* 计算动量,设定动量阀值
* 阈值设定黄金法则
* 波动率匹配原则:
* 阈值 ≈ 2倍品种的20日波动率标准差,阈值=2×StdDev(Close,20)
*/
double momentum = StrategyUtils.calculateMomentum(bars, 10);
double mid = StrategyUtils.calculateSMA(bars, strategyParams.getPeriod()); // 中轨
double momentumThreshold = 2 * StrategyUtils.calculateStdDev(bars, strategyParams.getPeriod(), mid);
// 生成信号
if (currentPrice > highestHigh && momentum > momentumThreshold) {
return "BUY"; // 价格上破,且趋势加速,买入信号 做多
}
if (currentPrice < lowestLow && momentum < -momentumThreshold) {
return "SELL"; // 价格下破,且下跌动能增强,卖出信号 做空
}
}
// 计算价格动量
public static double calculateMomentum(List<StrategyDataDTO> bars, int period) {
if (bars.size() < period) return Double.NaN;
return bars.get(bars.size()-1).getClosePrice().doubleValue()
- bars.get(bars.size()-1 - period).getClosePrice().doubleValue();
}
/**
* 取N 条k 线的最低价
* @param bars
* @param period
* @return
*/
public static double calculateLowest(List<StrategyDataDTO> bars, int period) {
return bars.stream()
.skip(bars.size() - period)
.limit(period)
.mapToDouble(b -> b.getLowPrice().doubleValue())
.min().orElse(0);
}
/**
* 取N 条k 线的最高价
* @param bars
* @param period
* @return
*/
public static double calculateHighest(List<StrategyDataDTO> bars, int period) {
return bars.stream()
.skip(bars.size() - period)
.limit(period)
.mapToDouble(b -> b.getHighPrice().doubleValue())
.max().orElse(0);
}
// 计算标准差
public static double calculateStdDev(List<StrategyDataDTO> strategyDataList, double multiplier, double mid) {
double stdDev = Math.sqrt(strategyDataList.stream()
.mapToDouble(b -> Math.pow(b.getClosePrice().doubleValue() - mid, multiplier))
.average()
.orElse(0));
return stdDev;
}
/**
* 简单移动平均(SMA)
* @param bars
* @param period
* @return
*/
public static double calculateSMA(List<StrategyDataDTO> bars, int period) {
if (bars.size() < period) return 0;
//计算SMA(简单移动平均)
double sma = bars.stream()
.skip(bars.size() - period)
.limit(period)
.mapToDouble(b -> b.getClosePrice().doubleValue())
.average()
.orElse(0);
return sma;
}
4. 策略优缺点分析
优点 |
缺点 |
有效捕捉趋势加速阶段 |
单边行情中可能追涨杀跌 |
结合动量过滤减少假突破 |
参数敏感(需优化周期和阈值) |
适应不同品种波动特性 |
需配合止损规则控制回撤 |
5. 数据采集周期与K线级别
交易风格 |
推荐K线级别 |
参数建议 |
适用场景 |
高频交易 |
1分钟/5分钟 |
N=15, 动量周期=5, 阈值=3% |
加密货币、外汇 |
日内交易 |
15分钟/30分钟 |
N=20, 动量周期=10, 阈值=5% |
原油、股指期货 |
波段交易 |
1小时/日线 |
N=50, 动量周期=20, 阈值=8% |
黄金、铜期货 |
长线投资 |
周线 |
N=100, 动量周期=30, 阈值=10% |
股票指数、大宗商品指数 |
6. 适用场景与合约品种
6.1 最佳适用场景
- 趋势加速阶段:价格突破后伴随动量急剧上升
- 新闻事件驱动:财报发布、政策变动后的突破
- 技术形态突破:三角形、旗形等形态末端突破
6.2 推荐合约品种
品种类型 |
具体合约 |
策略优势 |
高波动性品种 |
比特币(BTC)、原油(CL) |
突破后动量持续性强 |
股指期货 |
纳斯达克(NQ)、德国DAX(FDAX) |
机构资金推动趋势明确 |
外汇期货 |
欧元/美元(6E)、英镑/美元(6B) |
流动性充足,假突破少 |
农产品主力合约 |
大豆(ZS)、玉米(ZC) |
季节性突破规律性强 |
7、动量指标优化选择
指标类型 |
适用场景 |
Java实现代码片段 |
RSI动量过滤 |
过滤超买超卖区的假突破 |
if (rsi > 70 && signal == “BUY”) |
MACD柱状动量 |
捕捉零轴交叉的加速信号 |
macdHistogram > previousMax |
ADX趋势强度 |
确认趋势强度 |
if (adx < 25) pauseTrading() |
成交量加权动量 |
验证资金流入的真实突破 |
momentum * volumeRatio |
8、实盘数据测试结果
奇怪的是这个策略跑了一个月,居然没有一条命中的数据,可能是代码哪里计算出错了,待我检查一下,再更新实盘数据。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/1396409
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!