trading.ai/STRATEGY_USAGE.md
aaron 283901df18 Initial commit: A股量化交易系统
主要功能:
- K线形态策略: 两阳+阴+阳突破形态识别
- 信号时间修复: 使用K线时间而非发送时间
- 换手率约束: 最后阳线换手率不超过40%
- 汇总通知: 钉钉webhook单次发送所有信号
- 数据获取: 支持AKShare数据源
- 舆情分析: 北向资金、热门股票等

技术特性:
- 支持日线/周线/月线多时间周期
- EMA20趋势确认
- 实体比例验证
- 突破价格确认
- 流动性约束检查

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-16 15:59:48 +08:00

6.4 KiB
Raw Blame History

K线形态策略使用指南

策略介绍

"两阳线+阴线+阳线"形态突破策略,用于识别股票的技术性突破信号。

策略逻辑

  1. 形态识别: 连续4根K线形成"阳线+阳线+阴线+阳线"的组合
  2. 实体验证: 前两根阳线的实体部分须占振幅的55%以上
  3. 最后阳线验证: 最后一根阳线的实体部分须占振幅的40%以上
  4. 突破确认: 最后一根阳线的收盘价须高于阴线的最高价
  5. 趋势确认: 最后一根阳线的收盘价须在EMA20上方

信号触发条件

  • 形态完整匹配
  • 前两根阳线实体比例达标(>55%
  • 最后阳线实体比例达标(>40%
  • 价格突破确认
  • EMA20趋势确认

配置说明

1. 启用策略

config/config.yaml 中配置:

strategy:
  kline_pattern:
    enabled: true                # 启用K线形态策略
    min_entity_ratio: 0.55       # 前两根阳线实体最小占振幅比例55%
    final_yang_min_ratio: 0.40   # 最后阳线实体最小占振幅比例40%
    timeframes: ["daily", "weekly", "monthly"]  # 支持的时间周期
    scan_stocks_count: 50        # 扫描股票数量限制
    analysis_days: 60            # 分析的历史天数

2. 通知配置

钉钉机器人通知

notification:
  dingtalk:
    enabled: true                # 启用钉钉通知
    webhook_url: "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"
    at_all: false               # 是否@所有人
    at_mobiles: []              # @指定手机号列表

要获取钉钉webhook地址

  1. 打开钉钉群聊
  2. 点击群设置 → 智能群助手 → 添加机器人 → 自定义
  3. 设置机器人名称和头像
  4. 选择安全设置关键词、加签或IP地址
  5. 复制webhook地址到配置文件

使用方法

1. 启动系统

source venv/bin/activate
python main.py

2. 可用命令

# 显示策略信息
> strategy

# 扫描单只股票K线形态
> scan 000001.SZ

# 扫描市场K线形态使用双数据源同花顺热股+东财人气榜,注意:耗时较长)
> scanmarket

# 测试通知功能
> testnotify

# 显示帮助
> help

# 退出程序
> quit

3. 程序化使用

from src.data.data_fetcher import ADataFetcher
from src.utils.notification import NotificationManager
from src.strategy.kline_pattern_strategy import KLinePatternStrategy

# 初始化组件
data_fetcher = ADataFetcher()
notification_manager = NotificationManager(notification_config)

strategy_config = {
    'min_entity_ratio': 0.55,
    'timeframes': ['daily', 'weekly', 'monthly'],
    'scan_stocks_count': 50,
    'analysis_days': 60
}

strategy = KLinePatternStrategy(data_fetcher, notification_manager, strategy_config)

# 分析单只股票
results = strategy.analyze_stock("000001.SZ")

# 扫描市场
market_results = strategy.scan_market(max_stocks=20)

信号示例

成功信号示例

当检测到形态信号时,系统会:

  1. 日志记录:
策略信号: 两阳+阴+阳突破 | 000001.SZ(平安银行) | daily | 11.44元
额外信息: {'阳线1实体比例': '56.2%', '阳线2实体比例': '58.0%', '突破幅度': '0.62%', '阴线最高价': '11.37', '突破价格': '11.44'}
  1. 钉钉通知(如已配置):
# 📈 两阳+阴+阳突破信号提醒

**股票信息:**
- 代码: `000001.SZ`
- 名称: `平安银行`
- 价格: `11.44`- 时间周期: `daily`

**信号时间:** 2025-09-16 09:10:15

**策略说明:** 两阳线+阴线+阳线形态突破

**额外信息:**
- 阳线1实体比例: `56.2%`
- 阳线2实体比例: `58.0%`
- 突破幅度: `0.62%`
- 阴线最高价: `11.37`
- 突破价格: `11.44`

注意事项

1. 数据源

  • 优先使用adata真实数据
  • 如无法获取真实数据,会生成模拟数据进行测试
  • 模拟数据中会人为插入形态信号用于验证策略逻辑

2. 时间周期

  • daily: 日线数据,信号较频繁
  • weekly: 周线数据,从日线转换而来
  • monthly: 月线数据,信号较少但质量较高

3. 风险控制

  • 策略仅用于信号识别,不包含仓位管理
  • 实盘使用时请结合其他指标和风险控制措施
  • 建议设置止损和止盈规则

4. 性能优化

  • scan_stocks_count 控制扫描数量,避免过度消耗资源
  • analysis_days 控制历史数据量,影响分析速度
  • 市场扫描建议在非交易时间进行

数据源说明

股票扫描范围

系统在进行市场扫描时优先使用双数据源合并策略:

  1. 数据源组合:

    • 同花顺热股TOP100:热度值、概念标签、人气标签
    • 东方财富人气榜TOP100:人气排名、价格变动、成交活跃度
    • 智能去重:自动识别重复股票,保留最优质数据
  2. 合并优势:

    • 覆盖面更广,减少遗漏优质股票
    • 两大平台数据互补,提升准确性
    • 关注度和活跃度双重验证
    • 提升信号质量和市场代表性
  3. 数据特征:

    • 股票代码、名称、涨跌幅
    • 热度值、人气排名
    • 概念标签AI PC、脑机接口、新能源等
    • 数据源标识,便于追踪
  4. 回退机制:

    • 双数据源获取失败时,单独使用同花顺数据
    • 热股数据完全失败时,回退到全市场股票
    • 确保系统稳定运行

扩展开发

添加新的形态策略

  1. src/strategy/ 下创建新的策略模块
  2. 继承或参考 KLinePatternStrategy 的设计
  3. 在配置文件中添加相应配置项
  4. 在主程序中集成新策略

自定义通知方式

  1. src/utils/notification.py 中添加新的通知器类
  2. NotificationManager 中集成新通知器
  3. 在配置文件中添加相应配置

优化检测算法

  1. 修改 detect_pattern() 方法中的逻辑
  2. 调整 calculate_kline_features() 中的特征计算
  3. 添加更多的过滤条件和验证规则

故障排除

常见问题

  1. 无法获取数据: 检查网络连接和adata配置
  2. 钉钉通知失败: 验证webhook地址和安全设置
  3. 策略未启用: 检查配置文件中的 enabled 设置
  4. 内存占用过高: 减少 scan_stocks_countanalysis_days

调试模式

运行测试脚本进行调试:

python test_strategy.py

日志查看

查看详细日志:

tail -f logs/trading.log