248 lines
6.4 KiB
Markdown
248 lines
6.4 KiB
Markdown
# 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.tushare_fetcher import TushareFetcher
|
||
from src.utils.notification import NotificationManager
|
||
from src.strategy.kline_pattern_strategy import KLinePatternStrategy
|
||
|
||
# 初始化组件
|
||
data_fetcher = TushareFetcher()
|
||
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. 数据源
|
||
|
||
- 优先使用TuShare真实数据
|
||
- 如无法获取真实数据,会生成模拟数据进行测试
|
||
- 模拟数据中会人为插入形态信号用于验证策略逻辑
|
||
|
||
### 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. **无法获取数据**: 检查网络连接和TuShare配置
|
||
2. **钉钉通知失败**: 验证webhook地址和安全设置
|
||
3. **策略未启用**: 检查配置文件中的 `enabled` 设置
|
||
4. **内存占用过高**: 减少 `scan_stocks_count` 和 `analysis_days`
|
||
|
||
### 调试模式
|
||
|
||
运行测试脚本进行调试:
|
||
```bash
|
||
python test_strategy.py
|
||
```
|
||
|
||
### 日志查看
|
||
|
||
查看详细日志:
|
||
```bash
|
||
tail -f logs/trading.log
|
||
``` |