stock-strategy-ma-cross

star 65

均线交叉策略。计算均线交叉点,生成买卖信号。用户说"均线策略"、"MA交叉"、"金叉死叉"时使用此 skill。

jasonhu By jasonhu schedule Updated 3/6/2026

name: stock-strategy-ma-cross description: 均线交叉策略。计算均线交叉点,生成买卖信号。用户说"均线策略"、"MA交叉"、"金叉死叉"时使用此 skill。

stock-strategy-ma-cross - 均线交叉策略

使用场景

当用户需要:

  • 分析股票均线交叉点
  • 生成买卖信号
  • 查看历史信号记录
  • 回测均线策略
  • 导出信号数据

数据文件

位置: 工作空间根目录 signals-ma-cross.md

格式示例:

# 均线交叉信号

## 策略参数
- 策略: ma_cross_enhanced
- 快线周期: 5
- 慢线周期: 10
- MA20周期: 20
- RSI周期: 14
- RSI超买阈值: 70
- RSI超卖阈值: 30
- 持续周期: 2
- K线周期: 5m
- 生成时间: 2026-03-05T15:00:00

## 信号列表

| 时间 | 代码 | 方向 | 价格 | MA20 | RSI | 持续周期 |
|------|------|------|------|------|-----|----------|
| 2026-03-05 14:35 | 000001.SZ | 买入 | 10.52 | 10.40 | 55.2 | 2 |
| 2026-03-06 10:00 | 000001.SZ | 卖出 | 10.85 | 10.92 | 68.5 | 2 |

默认参数

参数 默认值 说明
K线周期 5m 5分钟K线
快线周期 5 短期均线周期
慢线周期 10 长期均线周期
MA20 周期 20 趋势判断均线(可选)
RSI 周期 14 RSI 计算周期
RSI 超买阈值 70 RSI 超买线(可选)
RSI 超卖阈值 30 RSI 超卖线(可选)
持续周期 2 信号确认周期(交叉后持续N根K线)

⚠️ 持续周期说明

  • 持续周期是指在交叉,状态需要持续的K线数量
  • 默认2周期适合短线,可根据K线周期调整
  • 5分钟/15分钟:建议2-3周期
  • 日线:建议2-4周期

支持的K线周期: 1d, 1m, 5m, 15m, 30m, 60m

均线交叉逻辑

基础交叉检测算法

  1. 获取K线收盘价序列
  2. 计算快线 MA(fast_period) 和慢线 MA(slow_period)
  3. 检测相邻时刻的均线关系变化

基础金叉条件

MA_fast[t-1] < MA_slow[t-1]  且  MA_fast[t] > MA_slow[t]

基础死叉条件

MA_fast[t-1] > MA_slow[t-1]  且  MA_fast[t] < MA_slow[t]

增强过滤条件

为提高信号质量,减少假信号,策略采用多条件过滤:

1. MA20 趋势过滤

  • 买入信号:当前价格 > MA20(价格在均线之上,趋势向上)
  • 卖出信号:当前价格 < MA20(价格在均线之下,趋势向下)

2. 持续性确认

要求交叉的状态持续 >= N 根 K 线后才输出信号:

  • 买入信号:快线 > 慢线 的状态已持续 >= N 根 K 线
  • 卖出信号:快线 < 慢线 的状态已持续 >= N 根 K 线

⚠️ 重要:正确的持续性确认逻辑

持续性确认是检查交叉后的K线,而不是交叉前的K线:

金叉发生时刻: T
确认检查: T+1, T+2, ..., T+N
输出信号时刻: T+N

关键点

  1. 检查的是交叉后的K线,不是交叉前
  2. 输出时刻是确认时刻(T+N),价格使用确认时刻的收盘价
  3. 需要预留足够的数据空间(最后一根K线可能无法输出信号)

信号延迟输出机制

时间点 事件 检查内容 输出
T 金叉发生 快线刚好上穿慢线 无输出(等待确认)
T+1 状态持续 快线 > 慢线 无输出
T+2 状态持续 快线 > 慢线 输出买入信号(满足2周期)

注意:输出的是"确认时刻"的信号,价格使用确认时刻的收盘价。

3. RSI 辅助过滤

使用 RSI(14) 判断超买超卖状态:

  • 买入信号:RSI(14) < 70(非超买状态),RSI > 30 更佳(有反弹空间)
  • 卖出信号:RSI(14) > 30(非超卖状态),RSI < 70 更佳(有下跌空间)

完整信号条件

买入信号(全部满足)

1. 金叉发生:MA_fast[t-1] < MA_slow[t-1] 且 MA_fast[t] > MA_slow[t]

2. MA20 趋势过滤(可选):
   - 价格 > MA20(当前在均线之上,趋势向上)

3. 持续性确认:
   - 快线 > 慢线 的状态在交叉后已持续 >= N 根 K 线
   - 即检查 T+1, T+2, ..., T+N 时刻的状态

4. RSI 辅助过滤(可选):
   - RSI(14) < 70(非超买状态)
   - RSI > 30 更佳(有反弹空间)

卖出信号(全部满足)

1. 死叉发生:MA_fast[t-1] > MA_slow[t-1] 且 MA_fast[t] < MA_slow[t]

2. MA20 趋势过滤(可选):
   - 价格 < MA20(当前在均线之下,趋势向下)

3. 持续性确认:
   - 快线 < 慢线 的状态在交叉后已持续 >= N 根 K 线
   - 即检查 T+1, T+2, ..., T+N 时刻的状态

4. RSI 辅助过滤(可选):
   - RSI(14) > 30(非超卖状态)
   - RSI < 70 更佳(有下跌空间)

技术指标计算公式

MA(移动平均)

MA(n) = (P1 + P2 + ... + Pn) / n

其中 P 为收盘价,n 为周期。

RSI(相对强弱指数)

RSI(n) = 100 - 100 / (1 + RS)

其中:
RS = 平均涨幅 / 平均跌幅
n = 14(默认周期)

计算步骤

  1. 计算 price_diff = close[t] - close[t-1]
  2. gains = price_diff > 0 ? price_diff : 0
  3. losses = price_diff < 0 ? abs(price_diff) : 0
  4. avg_gain = SMA(gains, n)
  5. avg_loss = SMA(losses, n)
  6. RS = avg_gain / avg_loss
  7. RSI = 100 - 100 / (1 + RS)

数据量计算

最小数据需求

计算增强版均线交叉所需的最小 K 线数量:

数据量 = max(slow_period, 20) + sustain_period + RSI周期 + 缓冲

其中:
- slow_period: 慢线周期
- 20: MA20 周期
- sustain_period: 持续性确认周期(默认2)
- RSI周期: 14
- 缓冲: 建议 +10 根 K 线

示例(slow=10, sustain_period=2):

所需 K 线 = max(10, 20) + 2 + 14 + 10 = 20 + 2 + 14 + 10 = 46 根
推荐获取 = 46 × 1.5 ≈ 69 根

推荐数据量

slow_period 最少 K 线数 推荐获取
5 46 69
10 46 69
20 56 84

各指标数据需求明细

指标 数据需求 说明
MA(slow_period) slow_period 根 K 线 计算慢线
MA20 20 根 K 线 趋势过滤
RSI(14) 14 + 1 根 K 线 计算价格变化
持续性确认 sustain_period 根 K 线 信号确认延迟(默认2)
交叉检测 1 根 K 线 比较 t 和 t-1
总计 max(slow_period, 20) + sustain_period + 15 含价格变化缓冲

时间范围计算

根据 K 线周期和数据量计算 start_time:

K线周期 每24小时K线数 计算公式
1d 1 N 天前
60m 4 N/4 天前(向上取整)
30m 8 N/8 天前(向上取整)
15m 16 N/16 天前(向上取整)
5m 48 N/48 天前(向上取整)
1m 240 N/240 天前(向上取整)

示例(slow=10, sustain_period=2,推荐获取69根K线):

  • 1d 周期:69 天前 → start_time = 当前日期 - 69天
  • 5m 周期:69/48 ≈ 2 天前 → start_time = 当前日期 - 2天

日期格式YYYYMMDD(如 20260305

数据获取策略

  1. 优先使用 get_market_data_ex(直接查询本地缓存,无需下载)
  2. 仅当数据不足时才调用 download_history_data2
  3. 精确计算 start_time,避免获取过多历史数据

计算 start_time 的步骤

  1. 计算所需 K 线数:bars_needed = max(slow_period, 20) + sustain_period + 14 + 10
  2. 推荐获取数量:bars_recommended = bars_needed * 1.5
  3. 根据周期计算天数:days = ceil(bars_recommended / bars_per_day)
  4. 计算 start_time:当前日期 - days 天

操作指南

1. 运行策略分析

命令示例

  • 分析均线交叉 000001.SZ
  • MA策略 600519.SH --fast 5 --slow 10
  • 金叉死叉 300750.SZ --period 1d

操作流程

  1. 解析股票代码(支持自动补全交易所后缀)
  2. 确保数据已下载(必要时先调用 xtdata download_history_data2)
  3. 获取K线数据(调用 xtdata get_market_data_ex)
  4. 计算快线和慢线
  5. 检测交叉点
  6. 生成信号列表
  7. 存储到 signals-ma-cross.md
  8. 输出分析结果摘要

代码补全规则

输入 补全为
000001 000001.SZ
600000 600000.SH
300750 300750.SZ

交易所判断规则

  • 6 开头 → .SH(上海)
  • 03 开头 → .SZ(深圳)
  • 68 开头 → .SH(科创板)

2. 查看信号

命令示例查看均线信号显示信号列表列出买卖信号

操作流程

  1. 读取 signals-ma-cross.md
  2. 解析信号列表
  3. 按时间排序输出
  4. 若文件不存在,提示暂无信号

3. 清除信号

命令示例清除均线信号清空信号删除所有信号

操作流程

  1. 确认用户意图(危险操作)
  2. 清空 signals-ma-cross.md 或删除文件
  3. 输出清除结果

确认格式

⚠️ 危险操作检测!
操作类型:清除所有均线交叉信号
影响范围:将删除 signals-ma-cross.md 中的所有信号数据
风险评估:信号数据将被永久删除,无法恢复

请确认是否继续?

4. 导出信号

命令示例导出信号导出信号到CSV信号导出

操作流程

  1. 读取 signals-ma-cross.md
  2. 转换为 CSV 格式
  3. 保存为 signals-ma-cross.csv

CSV 格式

时间,代码,方向,价格,MA20,RSI,持续周期
2026-03-05 14:35,000001.SZ,买入,10.52,10.40,55.2,2
2026-03-06 10:00,000001.SZ,卖出,10.85,10.92,68.5,2

与 xtdata 联动

数据下载

精确数据获取原则:仅获取计算所需的最小数据量,避免下载过多历史数据。

计算 start_time 的步骤

  1. 计算所需 K 线数:bars_needed = slow_period * 3
  2. 根据周期计算天数:days = ceil(bars_needed / bars_per_day)
  3. 计算 start_time:当前日期 - days 天

命令示例(假设 slow=10,当前日期 20260305):

# 5分钟K线,需要 69 根,约 2 天
xtdata download_history_data2 --stock-list "['000001.SZ']" --period "5m" --start-time "20260303"

# 日线,需要 69 根,69 天
xtdata download_history_data2 --stock-list "['000001.SZ']" --period "1d" --start-time "20251226"

动态计算模板

bars_needed = max(slow_period, 20) + sustain_period + 14 + 10  # 最小需求
bars_recommended = bars_needed * 1.5              # 推荐数量

period=1d:   start_time = today - ceil(bars_recommended / 1) (天)
period=60m:  start_time = today - ceil(bars_recommended / 4) (天)
period=30m:  start_time = today - ceil(bars_recommended / 8) (天)
period=15m:  start_time = today - ceil(bars_recommended / 16) (天)
period=5m:   start_time = today - ceil(bars_recommended / 48) (天)
period=1m:   start_time = today - ceil(bars_recommended / 240) (天)

获取K线数据

# 使用相同的 start_time 获取数据
xtdata get_market_data_ex --stock-list "['000001.SZ']" --period "5m" --start-time "20260304"

获取股票名称

xtdata get_instrument_detail --stock-code "000001.SZ"

数据准备提示

分析前应确保数据已下载

  • 首次分析某只股票时,或数据可能不是最新的,应先执行下载命令
  • 按需获取:根据参数精确计算所需数据量,避免下载过多历史数据

推荐流程

1. 计算数据量: bars_needed = max(slow_period, 20) + sustain_period + 14 + 10
2. 推荐数量: bars_recommended = bars_needed * 1.5
3. 计算 start_time: 根据 period 和 bars_recommended 推算
4. 优先获取数据: xtdata get_market_data_ex(直接查缓存)
5. 若数据不足: xtdata download_history_data2(下载缺失数据)
6. 计算 MA(快)、MA(慢)、MA20、RSI(14)
7. 检测交叉点并应用过滤条件
8. 生成信号并存储

示例(slow=10, sustain_period=2, period=5m, today=20260305):

bars_needed = max(10, 20) + 2 + 14 + 10 = 46 根K线
bars_recommended = 46 * 1.5 = 69 根
days = ceil(69 / 48) = 2 天
start_time = 20260305 - 2 = 20260303

命令: xtdata get_market_data_ex --stock-list "['000001.SZ']" --period "5m" --start-time "20260303"

信号输出格式

分析完成后,输出以下信息:

📊 均线交叉分析结果

股票: 000001.SZ 平安银行
策略: MA交叉增强版 (快线5 / 慢线10 / MA20)
K线周期: 5分钟

📊 过滤条件:
- MA20 趋势过滤: ✅ 启用
- 持续性确认: ✅ 2周期
- RSI 过滤: ✅ RSI(14), 超买70/超卖30

📈 信号统计:
- 总信号数: 3
- 买入信号: 2
- 卖出信号: 1

📋 信号详情:
| 时间 | 方向 | 价格 | MA20 | RSI | 持续周期 |
|------|------|------|------|-----|----------|
| 2026-03-05 14:35 | 买入 | 10.52 | 10.40 | 55.2 | 2 |
| 2026-03-06 10:00 | 卖出 | 10.85 | 10.92 | 68.5 | 2 |

✅ 信号已保存至 signals-ma-cross.md

注意事项

  1. 持续性确认逻辑:检查交叉的K线,不是交叉前
  2. 信号延迟输出:信号在确认时刻(交叉后N根K线)输出
  3. 默认持续周期为2:适合短线交易,可根据K线周期调整
  4. 快线周期必须小于慢线周期
  5. 需要先下载K线数据才能分析
  6. 信号文件存储在工作空间根目录
  7. 每次分析会追加新信号到现有文件
  8. 建议定期清除旧信号以保持数据清洁
  9. MA20和RSI过滤是可选的:可根据需要启用或禁用
  10. 数据量要求:需要足够的历史数据(推荐60-80根K线)

参数调整建议

K线周期 推荐持续周期 推荐MA20过滤 推荐RSI过滤
1分钟 3-5 可选
5分钟 2-3 可选 可选
15分钟 2-3 可选 可选
30分钟 2-3
60分钟 2-3
日线 2-4

说明

  • 短周期(1分钟、5分钟)波动大,建议降低持续周期,可选启用过滤条件
  • 长周期(30分钟以上)趋势更稳定,建议启用过滤条件以提高信号质量

错误处理

错误情况 处理方式
股票代码无效 提示用户检查代码格式
数据未下载 提示先执行下载命令
快线周期 >= 慢线周期 提示参数错误,要求重新输入
K线数据不足 提示数据量不足以计算指标(需要至少46根K线)
RSI计算失败 检查数据连续性,确保无缺失数据
MA20计算失败 检查数据量是否达到20根K线
xtdata 服务不可用 提示检查 xtdata 服务状态
Install via CLI
npx skills add https://github.com/jasonhu/xqshare --skill stock-strategy-ma-cross
Repository Details
star Stars 65
call_split Forks 21
navigation Branch main
article Path SKILL.md
More from Creator