# K线形态策略使用指南 ## 策略介绍 "两阳线+阴线+阳线"形态突破策略,用于识别股票的技术性突破信号。 ### 策略逻辑 1. **形态识别**: 连续4根K线形成"阳线+阳线+阴线+阳线"的组合 2. **实体验证**: 前两根阳线的实体部分须占振幅的55%以上 3. **最后阳线验证**: 最后一根阳线的实体部分须占振幅的40%以上 4. **突破确认**: 最后一根阳线的收盘价须高于阴线的最高价 5. **趋势确认**: 最后一根阳线的收盘价须在EMA20上方 ### 信号触发条件 - ✅ 形态完整匹配 - ✅ 前两根阳线实体比例达标(>55%) - ✅ 最后阳线实体比例达标(>40%) - ✅ 价格突破确认 - ✅ EMA20趋势确认 ## 配置说明 ### 1. 启用策略 在 `config/config.yaml` 中配置: ```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. 通知配置 #### 钉钉机器人通知 ```yaml 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. 启动系统 ```bash source venv/bin/activate python main.py ``` ### 2. 可用命令 ```bash # 显示策略信息 > strategy # 扫描单只股票K线形态 > scan 000001.SZ # 扫描市场K线形态(使用双数据源:同花顺热股+东财人气榜,注意:耗时较长) > scanmarket # 测试通知功能 > testnotify # 显示帮助 > help # 退出程序 > quit ``` ### 3. 程序化使用 ```python 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'} ``` 2. **钉钉通知**(如已配置): ```markdown # 📈 两阳+阴+阳突破信号提醒 **股票信息:** - 代码: `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_count` 和 `analysis_days` ### 调试模式 运行测试脚本进行调试: ```bash python test_strategy.py ``` ### 日志查看 查看详细日志: ```bash tail -f logs/trading.log ```