MACD和MA组合交易策略文档
|
|
策略概述
|
|
该策略是一个综合的技术分析交易系统,结合了EMA指标、MACD指标、价格突破信号和波动率过滤,形成了一套完整的开仓、平仓和持仓管理机制。
|
|
策略核心逻辑
|
|
开仓条件
|
|
多头开仓条件
|
|
EMA金叉:短期EMA(12周期)上穿长期EMA(26周期)
|
MACD柱状线扩张+金叉:
|
DIF线(MACD线)上穿DEA线(信号线)形成金叉
|
MACD柱状线在零轴上方且呈扩张趋势
|
价格突破前高:价格突破前15个周期的高点
|
波动率过滤:波动率在0.5%~5%之间
|
|
空头开仓条件
|
|
EMA死叉:短期EMA(12周期)下穿长期EMA(26周期)
|
MACD柱状线收缩+死叉:
|
DIF线下穿DEA线形成死叉
|
MACD柱状线在零轴下方且呈收缩趋势
|
价格跌破前低:价格跌破前低并形成顶背离
|
波动率过滤:波动率在0.5%~5%之间
|
|
平仓条件
|
|
平仓逻辑遵循以下优先级:
|
|
止损触发:当价格达到预设的止损比例时平仓
|
止盈触发:当价格达到预设的止盈比例时平仓
|
MACD反向信号:当出现反向的MACD信号时平仓
|
|
平仓流程
|
|
plaintext
|
开始平仓检查
|
|
|
v
|
是否持仓? --否--> 结束
|
|
|
v
|
检查止损 --触发止损--> 平仓
|
|
|
v
|
检查止盈 --触发止盈--> 平仓
|
|
|
v
|
检查MACD反向信号 --出现死叉/金叉--> 平仓
|
|
|
v
|
保持持仓
|
|
|
策略参数
|
|
默认参数
|
|
短期EMA周期:12
|
长期EMA周期:26
|
MACD信号线周期:9
|
波动率计算周期:20
|
止损比例:1%
|
止盈比例:2%
|
|
自定义参数
|
|
用户可以根据需要调整以下参数:
|
|
shortPeriod:短期EMA周期
|
longPeriod:长期EMA周期
|
signalPeriod:MACD信号线周期
|
volatilityPeriod:波动率计算周期
|
stopLossRatio:止损比例
|
takeProfitRatio:止盈比例
|
|
策略实现细节
|
|
关键技术指标
|
|
EMA指标:使用指数移动平均线,对近期价格赋予更高权重
|
MACD指标:
|
DIF:短期EMA与长期EMA的差值
|
DEA:DIF的指数移动平均线
|
MACD柱状图:DIF与DEA的差值
|
波动率指标:使用标准差与平均值的比值计算波动率
|
|
信号检测
|
|
金叉/死叉检测:通过比较连续两个周期的DIF和DEA值判断交叉信号
|
柱状线扩张/收缩检测:通过比较连续三个周期的MACD柱状线值判断趋势
|
价格突破检测:通过比较当前价格与前15个周期的最高/最低价判断突破信号
|
波动率过滤:确保波动率在0.5%~5%的合理范围内
|
|
代码结构
|
|
主要类
|
|
MacdMaStrategy:策略主类,包含开仓、平仓逻辑
|
MACDCalculator:MACD指标计算类
|
EMACalculator:EMA指标计算类
|
Volatility:波动率计算类
|
BullishSignalDetector:多头信号检测类
|
BearishSignalDetector:空头信号检测类
|
PriceData:价格数据实体类
|
MACDResult:MACD计算结果封装类
|
|
核心方法
|
|
analyze() :主分析方法,处理价格数据并生成交易信号
|
generateTradingOrder() :生成交易指令,返回包含side和posSide的组合
|
isLongEntryCondition() :多头开仓条件检查
|
isShortEntryCondition() :空头开仓条件检查
|
shouldClosePosition() :平仓条件检查
|
isStopLossTriggered() :止损触发检查
|
isTakeProfitTriggered() :止盈触发检查
|
|
使用示例
|
|
java
|
// 创建策略实例(使用默认参数)
|
MacdMaStrategy strategy = new MacdMaStrategy();
|
|
// 示例:模拟历史价格数据
|
List<BigDecimal> historicalPrices = new ArrayList<>();
|
for (int i = 0; i < 50; i++) {
|
historicalPrices.add(new BigDecimal("100.00").add(new BigDecimal(i * 0.5)));
|
}
|
|
// 模拟实时价格流处理
|
for (int i = 0; i < 20; i++) {
|
BigDecimal newPrice = new BigDecimal("125.00").add(new BigDecimal(i * 0.2));
|
historicalPrices.add(newPrice);
|
|
// 使用策略分析最新价格数据并生成交易指令
|
MacdMaStrategy.TradingOrder order = strategy.generateTradingOrder(historicalPrices);
|
|
// 根据指令执行交易操作
|
if (order != null) {
|
if (order.getSide().equals("buy") && order.getPosSide().equals("long")) {
|
System.out.println("[交易操作] 买入开多");
|
} else if (order.getSide().equals("sell") && order.getPosSide().equals("short")) {
|
System.out.println("[交易操作] 卖出开空");
|
} else if (order.getSide().equals("sell") && order.getPosSide().equals("long")) {
|
System.out.println("[交易操作] 卖出平多");
|
} else if (order.getSide().equals("buy") && order.getPosSide().equals("short")) {
|
System.out.println("[交易操作] 买入平空");
|
}
|
}
|
}
|
|
|
交易指令说明
|
|
策略生成的交易指令包含以下组合:
|
|
操作类型 side posSide 说明
|
开多 buy long 买入开多
|
开空 sell short 卖出开空
|
平多 sell long 卖出平多
|
平空 buy short 买入平空
|
|
策略优势
|
|
多维度验证:结合了趋势指标(EMA)、动量指标(MACD)、价格形态和波动率过滤
|
严格的风险控制:设置了明确的止损和止盈机制
|
自适应市场:通过波动率过滤避免在极端市场条件下交易
|
清晰的交易逻辑:开仓和平仓条件明确,易于理解和验证
|
|
注意事项
|
|
数据质量:策略依赖于高质量的历史价格数据
|
参数优化:建议根据不同的交易品种和时间周期优化参数
|
回测验证:在实盘交易前进行充分的回测验证
|
市场适应性:策略可能在某些市场环境下表现更好,建议结合其他分析方法
|
|
总结
|
|
该MACD和MA组合交易策略是一个稳健的技术分析系统,通过多维度的指标验证和严格的风险控制,为交易者提供了一套系统化的交易决策框架。策略的实现遵循了模块化设计原则,便于维护和扩展。
|