Skill: zhaoteng-qd/convertible-bond-assistant (version 1.0.0)

--- name: convertible-bond-assistant description: 可转债打新助手 - 免费工具。提供可转债申购日历、新债分析、上市溢价预测、中签率查询、强赎下修提醒。适用于 A 股可转债投资者。 author: Your Name contact: email: [REDACTED_SECRET] metadata: openclaw: requires: bins: ["python3"] packages: ["requests", "pandas", "beautifulsoup4"] --- # 可转债打新助手 一个免费的可转债投资辅助工具，提供申购日历、新债分析、溢价预测等功能。 **版本**: 1.0.0 **许可证**: MIT **定价**: 免费（引流工具） --- ## 🎯 核心功能 ### 1. 打新日历 - 可申购新股列表（今日、明日、本周） - 申购代码、申购上限 - 中签缴款提醒 ### 2. 新债分析 - 发行规模、转股价格 - 债券评级（AAA/AA+/AA 等） - 正股基本面分析 - 行业对比 ### 3. 上市溢价预测 - 基于同行业转债对比 - 基于正股估值分析 - 历史数据回测准确率 ### 4. 中签率查询 - 历史中签率统计 - 申购户数分析 - 单账户中签概率 ### 5. 强赎/下修提醒 - 强赎条件监控 - 下修公告推送 - 回售条款提示 ### 6. 已上市转债追踪 - 实时价格 - 转股溢价率 - 到期收益率 --- ## 🚀 使用方式 ### 快速开始 ```bash # 安装依赖 pip3 install requests pandas beautifulsoup4 # 运行主程序 python3 main.py ``` ### 触发词 - "可转债打新" - "新债申购" - "转债分析" - "可转债日历" - "强赎提醒" --- ## 📁 目录结构 ``` convertible-bond-assistant/ ├── SKILL.md # 技能说明 ├── main.py # 主入口 ├── cb_calendar.py # 打新日历 ├── cb_analysis.py # 新债分析 ├── cb_premium_predict.py # 溢价预测 ├── cb_monitor.py # 监控提醒 ├── data/ │ └── cb_history.csv # 历史数据缓存 └── references/ ├── API.md # 数据源说明 └── USER_GUIDE.md # 用户指南 ``` --- ## 📊 功能示例 ### 查询今日可申购转债 ```python from cb_calendar import get_today_subscribable result = get_today_subscribable() print(result) ``` **输出示例:** ``` 今日可申购转债 (2026-03-07): 1. 赛龙转债 (123205) - 发行规模：7.5 亿元 - 评级：AA- - 申购上限：100 万 - 正股：赛龙科技 (300xxx) 2. 恒泰转债 (123206) - 发行规模：10 亿元 - 评级：AA - 申购上限：100 万 - 正股：恒泰股份 (600xxx) ``` ### 新债分析 ```python from cb_analysis import analyze_new_cb result = analyze_new_cb("123205") print(result) ``` **输出示例:** ``` 赛龙转债 (123205) 分析: - 发行规模：7.5 亿（小规模，易炒作） - 转股价格：15.23 元 - 正股 PE：25 倍（行业中低） - 行业：汽车零部件 - 评级：AA- - 预测上市溢价：25-35% - 建议：积极申购 ``` --- ## 🔌 数据源 | 数据类型 | 来源 | 更新频率 | |---------|------|---------| | 发行公告 | 巨潮资讯 | 实时 | | 申购日历 | 东方财富 | 每日 | | 行情数据 | 新浪财经 | 实时 | | 历史数据 | 集思录 | 每日 | --- ## ⚙️ 配置说明 ### 数据缓存配置 编辑 `main.py`: ```python CACHE_EXPIRE_MINUTES = 30 # 缓存有效期 ``` ### 提醒配置 编辑 `cb_monitor.py`: ```python ALERT_THRESHOLD = { 'premium_rate': 30, # 溢价率超过 30% 提醒 'strong_redemption': True, # 强赎提醒 'downward_revision': True, # 下修提醒 } ``` --- ## 📝 更新日志 ### v1.0.0 (2026-03-07) - 初始版本发布 - 支持打新日历查询 - 支持新债基础分析 - 支持溢价预测 - 支持强赎/下修监控 --- ## 🙏 致谢 - 东方财富网提供公开数据 - 集思录提供社区参考 - OpenClaw 提供自动化平台 --- ## 📬 反馈 欢迎提交问题和建议！ **作者**: Your Name **邮箱**: [REDACTED_SECRET]

path: cb_analysis.py
content: #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
可转债新债分析模块
提供转债基本面分析、行业对比等功能
"""

import json
from datetime import datetime

# 模拟转债数据
MOCK_CB_DATA = {
    "123205": {
        "code": "123205",
        "name": "赛龙转债",
        "amount": 7.5,
        "balance": 7.5,
        "convert_price": 15.23,
        "stock_code": "300123",
        "stock_name": "赛龙科技",
        "stock_pe": 25.3,
        "stock_pb": 3.2,
        "industry": "汽车零部件",
        "rating": "AA-",
        "issue_date": "2026-03-07",
        "list_date": "2026-03-28",
        "maturity": 6,  # 年
        "coupon_rate": [0.3, 0.5, 1.0, 1.5, 2.0, 2.5],  # 每年利率
        "redemption_price": 108,  # 强赎价格
    },
    "123206": {
        "code": "123206",
        "name": "恒泰转债",
        "amount": 10.0,
        "balance": 10.0,
        "convert_price": 8.56,
        "stock_code": "600456",
        "stock_name": "恒泰股份",
        "stock_pe": 18.5,
        "stock_pb": 1.8,
        "industry": "化工",
        "rating": "AA",
        "issue_date": "2026-03-07",
        "list_date": "2026-03-28",
        "maturity": 6,
        "coupon_rate": [0.4, 0.6, 1.0, 1.5, 2.0, 2.5],
        "redemption_price": 107,
    },
}

# 行业平均数据
INDUSTRY_AVERAGE = {
    "汽车零部件": {"pe": 28.5, "cb_premium": 35},
    "化工": {"pe": 15.2, "cb_premium": 25},
    "医药生物": {"pe": 35.0, "cb_premium": 40},
    "电子": {"pe": 32.0, "cb_premium": 38},
    "机械设备": {"pe": 22.0, "cb_premium": 30},
    "食品饮料": {"pe": 30.0, "cb_premium": 32},
}


def analyze_cb(cb_code):
    """
    分析可转债
    
    Args:
        cb_code: 转债代码
        
    Returns:
        dict: 分析结果
    """
    if cb_code not in MOCK_CB_DATA:
        return get_default_analysis(cb_code)
    
    cb = MOCK_CB_DATA[cb_code]
    industry = cb['industry']
    
    # 获取行业对比
    industry_pe = INDUSTRY_AVERAGE.get(industry, {}).get('pe', 25)
    
    # 判断 PE 水平
    if cb['stock_pe'] < industry_pe * 0.8:
        pe_level = "行业较低"
    elif cb['stock_pe'] > industry_pe * 1.2:
        pe_level = "行业较高"
    else:
        pe_level = "行业中等"
    
    # 规模判断
    if cb['amount'] < 5:
        size_desc = "超小盘，易被炒作"
    elif cb['amount'] < 10:
        size_desc = "小规模，较易炒作"
    elif cb['amount'] < 30:
        size_desc = "中等规模"
    else:
        size_desc = "大规模，波动较小"
    
    # 评级判断
    rating_score = {
        'AAA': 5,
        'AA+': 4,
        'AA': 3,
        'AA-': 2,
        'A+': 1,
    }
    rating_val = rating_score.get(cb['rating'], 2)
    
    # 综合建议
    if rating_val >= 3 and cb['amount'] < 10 and cb['stock_pe'] < industry_pe:
        recommendation = "⭐⭐⭐ 积极申购（评级高 + 规模小 + 估值低）"
    elif rating_val >= 2 and cb['amount'] < 15:
        recommendation = "⭐⭐ 建议申购（资质尚可）"
    elif rating_val >= 2:
        recommendation = "⭐ 谨慎申购（规模偏大）"
    else:
        recommendation = "⚠️ 不建议申购（评级偏低）"
    
    return {
        'code': cb['code'],
        'name': cb['name'],
        'amount': cb['amount'],
        'balance': cb['balance'],
        'convert_price': cb['convert_price'],
        'stock_pe': cb['stock_pe'],
        'stock_pe_level': pe_level,
        'stock_pb': cb['stock_pb'],
        'industry': cb['industry'],
        'rating': cb['rating'],
        'size_desc': size_desc,
        'recommendation': recommendation,
    }


def get_default_analysis(cb_code):
    """返回默认分析结果（用于未知转债）"""
    return {
        'code': cb_code,
        'name': '未知转债',
        'amount': 0,
        'balance': 0,
        'convert_price': 0,
        'stock_pe': 0,
        'stock_pe_level': '未知',
        'stock_pb': 0,
        'industry': '未知',
        'rating': 'N/A',
        'size_desc': '未知',
        'recommendation': '⚠️ 数据不足，请查询官方公告',
    }


def compare_industry(cb_code):
    """
    行业对比分析
    
    Args:
        cb_code: 转债代码
        
    Returns:
        dict: 对比结果
    """
    if cb_code not in MOCK_CB_DATA:
        return None
    
    cb = MOCK_CB_DATA[cb_code]
    industry = cb['industry']
    
    industry_data = INDUSTRY_AVERAGE.get(industry, {})
    
    if not industry_data:
        return {
            'industry': industry,
            'message': '该行业暂无对比数据',
        }
    
    return {
        'industry': industry,
        'stock_pe': cb['stock_pe'],
        'industry_avg_pe': industry_data['pe'],
        'pe_diff': cb['stock_pe'] - industry_data['pe'],
        'industry_cb_premium': industry_data['cb_premium'],
        'conclusion': f"正股 PE{'低于' if cb['stock_pe'] < industry_data['pe'] else '高于'}行业平均",
    }


def calculate_cb_value(cb_code):
    """
    计算转债内在价值
    
    Args:
        cb_code: 转债代码
        
    Returns:
        dict: 估值结果
    """
    if cb_code not in MOCK_CB_DATA:
        return None
    
    cb = MOCK_CB_DATA[cb_code]
    
    # 简化估值模型
    # 纯债价值 = 未来现金流折现
    bond_value = sum(
        cb['coupon_rate'][i] / (1.03 ** (i + 1))
        for i in range(len(cb['coupon_rate']))
    ) + 100 / (1.03 ** 6)
    
    # 转股价值 = 正股价格 / 转股价 * 100
    # 这里简化处理
    conversion_value = 100  # 假设平价
    
    # 转债价值 = max(纯债价值，转股价值) + 期权价值
    option_value = cb['amount'] * 0.5  # 规模越小，期权价值越高
    if cb['amount'] < 5:
        option_value = 15
    elif cb['amount'] < 10:
        option_value = 10
    elif cb['amount'] < 20:
        option_value = 5
    
    total_value = max(bond_value, conversion_value) + option_value
    
    return {
        'bond_value': round(bond_value, 2),
        'conversion_value': round(conversion_value, 2),
        'option_value': round(option_value, 2),
        'total_value': round(total_value, 2),
        'rating': cb['rating'],
    }


if __name__ == "__main__":
    # 测试
    print("赛龙转债分析:")
    result = analyze_cb("123205")
    print(f"  发行规模：{result['amount']}亿 - {result['size_desc']}")
    print(f"  评级：{result['rating']}")
    print(f"  正股 PE: {result['stock_pe']}倍 ({result['stock_pe_level']})")
    print(f"  建议：{result['recommendation']}")
    
    print("\n行业对比:")
    comp = compare_industry("123205")
    print(f"  行业：{comp['industry']}")
    print(f"  正股 PE: {comp['stock_pe']} vs 行业平均 {comp['industry_avg_pe']}")


path: cb_calendar.py
content: #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
可转债打新日历模块
获取可申购转债列表
"""

import requests
from datetime import datetime, timedelta
import json

# 模拟数据（实际应调用 API）
# 数据来源：东方财富可转债频道
MOCK_SUBSCRIBABLE = [
    {
        "code": "123205",
        "name": "赛龙转债",
        "amount": 7.5,
        "rating": "AA-",
        "max_subscribe": 100,
        "stock_name": "赛龙科技",
        "stock_code": "300123",
        "industry": "汽车零部件",
        "subscribe_date": "2026-03-07",
    },
    {
        "code": "123206",
        "name": "恒泰转债",
        "amount": 10.0,
        "rating": "AA",
        "max_subscribe": 100,
        "stock_name": "恒泰股份",
        "stock_code": "600456",
        "industry": "化工",
        "subscribe_date": "2026-03-07",
    },
]

MOCK_CALENDAR = [
    {
        "code": "123207",
        "name": "明阳转债",
        "subscribe_date": "2026-03-10",
        "amount": 15.0,
        "rating": "AA+",
    },
    {
        "code": "123208",
        "name": "智科转债",
        "subscribe_date": "2026-03-12",
        "amount": 6.0,
        "rating": "A+",
    },
]


def get_subscribable_cbs(date=None):
    """
    获取指定日期可申购转债
    
    Args:
        date: 日期字符串 YYYY-MM-DD，默认今天
        
    Returns:
        list: 可申购转债列表
    """
    if date is None:
        date = datetime.now().strftime("%Y-%m-%d")
    
    # TODO: 实际应调用东方财富 API
    # 这里使用模拟数据演示
    
    # 筛选今日可申购
    today_cbs = [cb for cb in MOCK_SUBSCRIBABLE if cb['subscribe_date'] == date]
    
    if not today_cbs:
        # 如果没有今日数据，返回模拟数据用于演示
        return MOCK_SUBSCRIBABLE
    
    return today_cbs


def get_cb_calendar(start_date=None, end_date=None):
    """
    获取可转债申购日历
    
    Args:
        start_date: 开始日期 YYYY-MM-DD
        end_date: 结束日期 YYYY-MM-DD
        
    Returns:
        list: 日历数据
    """
    if start_date is None:
        start_date = datetime.now().strftime("%Y-%m-%d")
    if end_date is None:
        end_date = (datetime.now() + timedelta(days=7)).strftime("%Y-%m-%d")
    
    # 合并所有数据
    all_cbs = MOCK_SUBSCRIBABLE + MOCK_CALENDAR
    
    # 筛选日期范围内的
    result = []
    for cb in all_cbs:
        cb_date = cb['subscribe_date']
        if start_date <= cb_date <= end_date:
            result.append({
                'date': cb_date,
                'code': cb['code'],
                'name': cb['name'],
                'amount': cb.get('amount', 0),
                'rating': cb.get('rating', 'N/A'),
            })
    
    # 按日期排序
    result.sort(key=lambda x: x['date'])
    
    return result


def fetch_from_dongfangcai():
    """
    从东方财富获取真实数据
    
    API 端点示例（需要逆向工程）:
    http://data.eastmoney.com/kzz/default.html
    
    Returns:
        list: 转债数据
    """
    # TODO: 实现真实 API 调用
    # 需要处理反爬虫
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer': 'http://data.eastmoney.com/kzz/',
    }
    
    try:
        # 示例 URL（实际需要找到正确的 API）
        url = "http://datacenter-web.eastmoney.com/api/data/v1/get"
        params = {
            'reportName': 'RPT_BOND_CB_ISSUE',
            'columns': 'ALL',
            'filter': '',
            'pageNum': 1,
            'pageSize': 50,
        }
        
        response = requests.get(url, params=params, headers=headers, timeout=10)
        if response.status_code == 200:
            data = response.json()
            return parse_dongfangcai_data(data)
    except Exception as e:
        print(f"获取数据失败：{e}")
    
    return None


def parse_dongfangcai_data(data):
    """解析东方财富数据"""
    # TODO: 实现数据解析逻辑
    result = []
    
    # 根据实际 API 返回结构解析
    if 'result' in data and 'data' in data['result']:
        for item in data['result']['data']:
            result.append({
                'code': item.get 'SECURITY_CODE'),
                'name': item.get('SECURITY_NAME'),
                'amount': item.get('ISSUE_AMOUNT'),
                'rating': item.get('RATING'),
                'subscribe_date': item.get('SUBSCRIBE_DATE'),
                'stock_name': item.get('STOCK_NAME'),
                'stock_code': item.get('STOCK_CODE'),
            })
    
    return result


if __name__ == "__main__":
    # 测试
    print("今日可申购转债:")
    today = get_subscribable_cbs()
    for cb in today:
        print(f"  {cb['name']} ({cb['code']}) - {cb['amount']}亿")
    
    print("\n本周申购日历:")
    calendar = get_cb_calendar()
    for item in calendar:
        print(f"  {item['date']}: {item['name']} ({item['code']})")


path: cb_monitor.py
content: #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
可转债监控提醒模块
强赎、下修、回售等条款监控
"""

from datetime import datetime, timedelta

# 模拟转债监控数据
MOCK_MONITOR_DATA = [
    {
        'code': '123100',
        'name': '小康转债',
        'current_price': 185.5,
        'convert_value': 178.2,
        'days_to_redemption': 5,
        'redemption_condition': '已触发',
        'redemption_price': 102,
        'announcement_date': '2026-03-05',
        'last_trading_date': '2026-03-12',
    },
    {
        'code': '123150',
        'name': '九洲转债',
        'current_price': 112.3,
        'convert_value': 98.5,
        'down_revision_count': 2,
        'down_revision_date': '2026-02-28',
        'next_down_revision_possible': '2026-04-01',
    },
    {
        'code': '123180',
        'name': '浙 22 转债',
        'current_price': 98.5,
        'convert_value': 95.2,
        'years_to_maturity': 1.5,
        'put_option_condition': '接近触发',
        'put_option_price': 101,
    },
]


def check_strong_redemption():
    """
    检查强赎提醒
    
    强赎条件（通常）:
    - 正股连续 30 个交易日中至少 15 日收盘价 >= 转股价 * 130%
    - 或者转债余额 < 3000 万元
    
    Returns:
        list: 强赎提醒列表
    """
    alerts = []
    
    for cb in MOCK_MONITOR_DATA:
        if cb.get('redemption_condition') == '已触发':
            alerts.append({
                'type': '⚠️ 强赎提醒',
                'code': cb['code'],
                'name': cb['name'],
                'reason': f"强赎条件已触发，最后交易日 {cb['last_trading_date']}",
                'deadline': cb['last_trading_date'],
                'current_price': cb['current_price'],
                'redemption_price': cb['redemption_price'],
                'loss_warning': f"如不及时操作，将亏损 {cb['current_price'] - cb['redemption_price']}元/张",
            })
    
    return alerts


def check_downward_revision():
    """
    检查下修提醒
    
    下修条件（通常）:
    - 正股连续 30 个交易日中至少 15 日收盘价 <= 转股价 * 85%
    - 董事会可提议下修转股价
    
    Returns:
        list: 下修提醒列表
    """
    alerts = []
    
    for cb in MOCK_MONITOR_DATA:
        # 检查已下修
        if cb.get('down_revision_date'):
            alerts.append({
                'type': '📉 下修公告',
                'code': cb['code'],
                'name': cb['name'],
                'reason': f"已下修转股价，下修日期 {cb['down_revision_date']}",
                'deadline': cb.get('next_down_revision_possible', 'N/A'),
                'revision_count': cb.get('down_revision_count', 1),
            })
        
        # 检查可能下修
        if cb.get('current_price', 100) < 105 and cb.get('convert_value', 100) < 95:
            if not cb.get('down_revision_date'):
                alerts.append({
                    'type': '👀 可能下修',
                    'code': cb['code'],
                    'name': cb['name'],
                    'reason': f"正股持续低于转股价，可能下修",
                    'deadline': cb.get('next_down_revision_possible', '待公告'),
                })
    
    return alerts


def check_put_option():
    """
    检查回售提醒
    
    回售条件（通常）:
    - 最后 2 年，正股连续 30 日收盘价 <= 转股价 * 70%
    - 或者改变募集资金用途
    
    Returns:
        list: 回售提醒列表
    """
    alerts = []
    
    for cb in MOCK_MONITOR_DATA:
        if cb.get('put_option_condition') == '接近触发':
            alerts.append({
                'type': '💰 回售机会',
                'code': cb['code'],
                'name': cb['name'],
                'reason': f"回售条件接近触发，回售价 {cb['put_option_price']}元",
                'deadline': '需关注公告',
                'current_price': cb['current_price'],
                'put_price': cb['put_option_price'],
            })
    
    return alerts


def check_maturity_reminder():
    """
    检查到期提醒
    
    Returns:
        list: 到期提醒列表
    """
    alerts = []
    today = datetime.now()
    
    for cb in MOCK_MONITOR_DATA:
        years_to_maturity = cb.get('years_to_maturity', 5)
        if years_to_maturity < 2:
            alerts.append({
                'type': '⏰ 到期提醒',
                'code': cb['code'],
                'name': cb['name'],
                'reason': f"距离到期还有约{int(years_to_maturity * 365)}天",
                'deadline': f"{today.year + int(years_to_maturity)}年",
                'years_left': years_to_maturity,
            })
    
    return alerts


def get_all_alerts():
    """
    获取所有提醒
    
    Returns:
        list: 所有提醒
    """
    all_alerts = []
    
    all_alerts.extend(check_strong_redemption())
    all_alerts.extend(check_downward_revision())
    all_alerts.extend(check_put_option())
    all_alerts.extend(check_maturity_reminder())
    
    return all_alerts


def format_alert_message(alert):
    """
    格式化提醒消息
    
    Args:
        alert: 提醒字典
        
    Returns:
        str: 格式化后的消息
    """
    lines = [
        f"{alert['type']}: {alert['name']} ({alert['code']})",
        f"  原因：{alert['reason']}",
        f"  截止：{alert['deadline']}",
    ]
    
    if 'loss_warning' in alert:
        lines.append(f"  ⚠️ {alert['loss_warning']}")
    
    if 'current_price' in alert and 'redemption_price' in alert:
        lines.append(f"  现价：{alert['current_price']}元，强赎价：{alert['redemption_price']}元")
    
    return '\n'.join(lines)


if __name__ == "__main__":
    # 测试
    print("=== 强赎提醒 ===")
    redemption = check_strong_redemption()
    if redemption:
        for alert in redemption:
            print(format_alert_message(alert))
    else:
        print("暂无强赎提醒")
    
    print("\n=== 下修提醒 ===")
    revision = check_downward_revision()
    if revision:
        for alert in revision:
            print(format_alert_message(alert))
    else:
        print("暂无下修提醒")
    
    print("\n=== 所有提醒汇总 ===")
    all_alerts = get_all_alerts()
    if all_alerts:
        print(f"共 {len(all_alerts)} 条提醒:")
        for alert in all_alerts:
            print(f"  - {alert['type']}: {alert['name']}")
    else:
        print("✅ 暂无提醒")


path: cb_premium_predict.py
content: #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
可转债上市溢价预测模块
基于历史数据和行业对比预测上市溢价率
"""

from datetime import datetime
import random

# 模拟历史数据
HISTORY_PREMIUM = [
    {'name': 'XX 转债', 'industry': '汽车零部件', 'premium': 35, 'list_date': '2026-02-15'},
    {'name': 'YY 转债', 'industry': '汽车零部件', 'premium': 28, 'list_date': '2026-02-20'},
    {'name': 'ZZ 转债', 'industry': '化工', 'premium': 22, 'list_date': '2026-02-18'},
    {'name': 'AA 转债', 'industry': '化工', 'premium': 26, 'list_date': '2026-02-25'},
    {'name': 'BB 转债', 'industry': '医药生物', 'premium': 45, 'list_date': '2026-02-10'},
    {'name': 'CC 转债', 'industry': '电子', 'premium': 40, 'list_date': '2026-02-28'},
]

# 近期新债平均溢价（模拟）
RECENT_AVG_PREMIUM = 32  # 近 3 个月新债平均上市溢价率

# 行业平均溢价
INDUSTRY_PREMIUM = {
    '汽车零部件': 32,
    '化工': 24,
    '医药生物': 42,
    '电子': 38,
    '机械设备': 30,
    '食品饮料': 35,
    '计算机': 40,
    '通信': 36,
    '电气设备': 33,
    '有色金属': 28,
}

# 转债数据
CB_DATA = {
    "123205": {
        "name": "赛龙转债",
        "industry": "汽车零部件",
        "amount": 7.5,
        "rating": "AA-",
        "stock_pe": 25.3,
    },
    "123206": {
        "name": "恒泰转债",
        "industry": "化工",
        "amount": 10.0,
        "rating": "AA",
        "stock_pe": 18.5,
    },
}


def predict_premium_rate(cb_code):
    """
    预测转债上市溢价率
    
    Args:
        cb_code: 转债代码
        
    Returns:
        dict: 预测结果
    """
    if cb_code not in CB_DATA:
        return get_default_prediction(cb_code)
    
    cb = CB_DATA[cb_code]
    industry = cb['industry']
    
    # 1. 行业平均溢价
    industry_avg = INDUSTRY_PREMIUM.get(industry, 30)
    
    # 2. 近期市场平均
    recent_avg = RECENT_AVG_PREMIUM
    
    # 3. 规模调整（规模越小，溢价越高）
    if cb['amount'] < 5:
        size_adjust = 5
    elif cb['amount'] < 10:
        size_adjust = 3
    elif cb['amount'] < 20:
        size_adjust = 0
    else:
        size_adjust = -3
    
    # 4. 评级调整
    rating_adjust = {
        'AAA': 5,
        'AA+': 3,
        'AA': 0,
        'AA-': -2,
        'A+': -5,
    }.get(cb['rating'], 0)
    
    # 5. 正股估值调整（PE 越低，溢价越高）
    industry_pe_avg = {
        '汽车零部件': 28,
        '化工': 15,
        '医药生物': 35,
        '电子': 32,
    }.get(industry, 25)
    
    if cb['stock_pe'] < industry_pe_avg * 0.8:
        pe_adjust = 3
    elif cb['stock_pe'] > industry_pe_avg * 1.2:
        pe_adjust = -3
    else:
        pe_adjust = 0
    
    # 综合计算
    base_premium = (industry_avg + recent_avg) / 2
    predicted = base_premium + size_adjust + rating_adjust + pe_adjust
    
    # 限制范围
    predicted = max(10, min(60, predicted))
    
    # 预测区间
    lower = max(5, predicted - 8)
    upper = min(70, predicted + 8)
    
    # 预测价格（假设转股价值 100 元）
    predicted_price = 100 * (1 + predicted / 100)
    
    # 置信度
    confidence = "高" if abs(predicted - industry_avg) < 5 else "中"
    
    return {
        'code': cb_code,
        'name': cb['name'],
        'predicted_premium': round(predicted, 1),
        'premium_range': [round(lower, 1), round(upper, 1)],
        'predicted_price': round(predicted_price, 2),
        'confidence': confidence,
        'industry_avg_premium': industry_avg,
        'recent_avg_premium': recent_avg,
        'stock_valuation': f"PE {cb['stock_pe']}倍",
        'factors': {
            'size_adjust': size_adjust,
            'rating_adjust': rating_adjust,
            'pe_adjust': pe_adjust,
        }
    }


def get_default_prediction(cb_code):
    """返回默认预测（未知转债）"""
    return {
        'code': cb_code,
        'name': '未知转债',
        'predicted_premium': 30,
        'premium_range': [22, 38],
        'predicted_price': 130.0,
        'confidence': '低',
        'industry_avg_premium': 30,
        'recent_avg_premium': RECENT_AVG_PREMIUM,
        'stock_valuation': '未知',
        'factors': {},
    }


def get_industry_comparison(industry):
    """
    获取行业溢价对比
    
    Args:
        industry: 行业名称
        
    Returns:
        list: 同行业转债列表
    """
    result = [cb for cb in HISTORY_PREMIUM if cb['industry'] == industry]
    return result


def calculate_accuracy():
    """
    计算预测准确率（回测）
    
    Returns:
        dict: 准确率统计
    """
    # 模拟回测结果
    total = len(HISTORY_PREMIUM)
    accurate = sum(1 for cb in HISTORY_PREMIUM if abs(cb['premium'] - RECENT_AVG_PREMIUM) < 10)
    
    return {
        'total_samples': total,
        'accurate_predictions': accurate,
        'accuracy_rate': round(accurate / total * 100, 1),
        'avg_error': round(abs(HISTORY_PREMIUM[0]['premium'] - RECENT_AVG_PREMIUM), 1),
    }


if __name__ == "__main__":
    # 测试
    print("赛龙转债溢价预测:")
    result = predict_premium_rate("123205")
    print(f"  预测溢价率：{result['predicted_premium']}%")
    print(f"  合理区间：{result['premium_range'][0]}% - {result['premium_range'][1]}%")
    print(f"  预测价格：{result['predicted_price']}元")
    print(f"  置信度：{result['confidence']}")
    print(f"  影响因素：{result['factors']}")
    
    print("\n预测准确率回测:")
    accuracy = calculate_accuracy()
    print(f"  样本数：{accuracy['total_samples']}")
    print(f"  准确率：{accuracy['accuracy_rate']}%")


path: main.py
content: #!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
可转债打新助手 - 主入口
免费工具，提供可转债申购日历、新债分析、溢价预测等功能
"""

import sys
import json
from datetime import datetime, timedelta
from cb_calendar import get_subscribable_cbs, get_cb_calendar
from cb_analysis import analyze_cb, compare_industry
from cb_premium_predict import predict_premium_rate
from cb_monitor import check_strong_redemption, check_downward_revision

# ============ 配置 ============
CACHE_FILE = "data/cb_history.csv"
CACHE_EXPIRE_MINUTES = 30

# ============ 主功能函数 ============

def get_today_subscribable():
    """获取今日可申购转债"""
    today = datetime.now().strftime("%Y-%m-%d")
    result = get_subscribable_cbs(today)
    return format_subscribable_output(result, today)

def get_week_subscribable():
    """获取本周可申购转债"""
    today = datetime.now()
    week_end = today + timedelta(days=7)
    result = get_cb_calendar(today.strftime("%Y-%m-%d"), week_end.strftime("%Y-%m-%d"))
    return format_calendar_output(result)

def analyze_new_cb(cb_code):
    """分析新债"""
    result = analyze_cb(cb_code)
    return format_analysis_output(result)

def predict_listing_premium(cb_code):
    """预测上市溢价率"""
    result = predict_premium_rate(cb_code)
    return format_premium_output(result)

def check_all_alerts():
    """检查所有提醒（强赎、下修）"""
    alerts = []
    
    # 强赎提醒
    strong_redemption = check_strong_redemption()
    if strong_redemption:
        alerts.extend(strong_redemption)
    
    # 下修提醒
    downward_rev = check_downward_revision()
    if downward_rev:
        alerts.extend(downward_rev)
    
    return format_alerts_output(alerts)

# ============ 格式化输出 ============

def format_subscribable_output(data, date):
    """格式化申购列表输出"""
    if not data:
        return f"今日 ({date}) 暂无可申购转债"
    
    lines = [f"📅 今日可申购转债 ({date})\n"]
    for i, cb in enumerate(data, 1):
        lines.append(f"{i}. {cb['name']} ({cb['code']})")
        lines.append(f"   - 发行规模：{cb['amount']}亿元")
        lines.append(f"   - 评级：{cb['rating']}")
        lines.append(f"   - 申购上限：{cb['max_subscribe']}万")
        lines.append(f"   - 正股：{cb['stock_name']} ({cb['stock_code']})")
        lines.append(f"   - 行业：{cb['industry']}")
        lines.append("")
    
    return "\n".join(lines)

def format_calendar_output(data):
    """格式化日历输出"""
    if not data:
        return "本周暂无可申购转债"
    
    lines = ["📆 本周可转债申购日历\n"]
    for item in data:
        lines.append(f"{item['date']}: {item['name']} ({item['code']})")
    
    return "\n".join(lines)

def format_analysis_output(data):
    """格式化分析结果输出"""
    lines = [
        f"📊 {data['name']} ({data['code']}) 分析",
        "",
        f"• 发行规模：{data['amount']}亿（{'小规模，易炒作' if data['amount'] < 10 else '中等规模'}）",
        f"• 转股价格：{data['convert_price']}元",
        f"• 正股 PE：{data['stock_pe']}倍（{data['stock_pe_level']}）",
        f"• 行业：{data['industry']}",
        f"• 评级：{data['rating']}",
        f"• 债券余额：{data['balance']}亿元",
        "",
        f"💡 建议：{data['recommendation']}",
    ]
    return "\n".join(lines)

def format_premium_output(data):
    """格式化溢价预测输出"""
    lines = [
        f"📈 {data['name']} 上市溢价预测",
        "",
        f"• 预测溢价率：{data['predicted_premium']}%",
        f"• 合理区间：{data['premium_range'][0]}% - {data['premium_range'][1]}%",
        f"• 预测上市价格：{data['predicted_price']}元",
        f"• 置信度：{data['confidence']}",
        "",
        f"📊 参考依据：",
        f"  - 同行业转债平均溢价：{data['industry_avg_premium']}%",
        f"  - 近 3 月新债平均溢价：{data['recent_avg_premium']}%",
        f"  - 正股估值水平：{data['stock_valuation']}",
    ]
    return "\n".join(lines)

def format_alerts_output(alerts):
    """格式化提醒输出"""
    if not alerts:
        return "✅ 暂无强赎/下修提醒"
    
    lines = ["⚠️ 重要提醒\n"]
    for alert in alerts:
        lines.append(f"• {alert['type']}: {alert['name']} ({alert['code']})")
        lines.append(f"  原因：{alert['reason']}")
        lines.append(f"  截止日：{alert['deadline']}")
        lines.append("")
    
    return "\n".join(lines)

# ============ CLI 入口 ============

def print_help():
    """打印帮助信息"""
    help_text = """
可转债打新助手 - 使用指南

命令:
  today          - 查询今日可申购转债
  week           - 查询本周可申购转债
  analyze <代码>  - 分析指定转债
  predict <代码>  - 预测上市溢价率
  alerts         - 查看强赎/下修提醒
  help           - 显示帮助信息

示例:
  python main.py today
  python main.py analyze 123205
  python main.py predict 123205
  python main.py alerts
"""
    print(help_text)

def main():
    if len(sys.argv) < 2:
        print_help()
        return
    
    command = sys.argv[1].lower()
    
    if command == "today":
        print(get_today_subscribable())
    
    elif command == "week":
        print(get_week_subscribable())
    
    elif command == "analyze" and len(sys.argv) >= 3:
        cb_code = sys.argv[2]
        print(analyze_new_cb(cb_code))
    
    elif command == "predict" and len(sys.argv) >= 3:
        cb_code = sys.argv[2]
        print(predict_listing_premium(cb_code))
    
    elif command == "alerts":
        print(check_all_alerts())
    
    elif command == "help":
        print_help()
    
    else:
        print(f"未知命令：{command}")
        print_help()

if __name__ == "__main__":
    main()


path: PUBLISH_GUIDE.md
content: # 技能发布指南

## 📤 发布到 ClawHub

### 第一步：登录 ClawHub

```bash
clawhub login
```

这会打开浏览器让你登录 clawhub.com 账号。

### 第二步：验证登录

```bash
clawhub whoami
```

应该显示你的用户名。

### 第三步：发布技能

在技能目录下执行：

```bash
cd C:\Users\tzhao\.openclaw\workspace\skills\convertible-bond-assistant
clawhub publish .
```

或者从 workspace 根目录：

```bash
clawhub publish skills/convertible-bond-assistant
```

### 第四步：设置免费

登录 clawhub.com 网站：
1. 进入你的技能页面
2. 点击 "Edit"
3. 设置价格为 **免费** (0 USDT)
4. 添加标签：`可转债` `打新` `免费` `A 股` `理财`
5. 保存

---

## 📝 技能描述建议

**名称**: 可转债打新助手

**简短描述**: 
```
免费可转债投资工具 - 申购日历、新债分析、溢价预测、强赎提醒。A 股可转债投资者必备神器！
```

**详细描述**:
```
🎯 核心功能：
- 打新日历：每日可申购转债提醒
- 新债分析：基本面 + 行业对比 + 申购建议
- 溢价预测：基于历史数据和行业对比预测上市价格
- 监控提醒：强赎/下修/回售预警

💰 完全免费 - 引流工具，欢迎使用！

📊 数据源：东方财富、新浪财经、集思录

⚠️ 免责声明：仅供参考，不构成投资建议
```

**标签**:
```
可转债，打新，A 股，理财，免费工具，投资，申购，溢价预测
```

---

## 🎯 推广建议

### 1. ClawHub 平台内
- 在技能描述中提及其他付费技能（涨停板分析、龙虎榜追踪）
- 添加"相关技能"链接

### 2. 社交媒体
- 小红书：分享可转债打新收益截图
- 知乎：回答可转债相关问题，附带技能链接
- 雪球：发布可转债分析文章

### 3. 社群推广
- 可转债投资微信群/QQ 群
- 理财论坛（集思录、雪球）

---

## 📊 预期效果

### 第一阶段（1-2 周）
- 目标：100+ 下载
- 策略：免费 + 社群推广

### 第二阶段（3-4 周）
- 目标：500+ 下载
- 策略：用户口碑 + 内容营销

### 第三阶段（2 月后）
- 目标：引流到付费技能
- 转化率：5-10%
- 预期付费用户：25-50 人

---

## 🔄 更新维护

### 每周
- 检查数据源是否可用
- 修复用户反馈的 Bug

### 每月
- 更新历史数据
- 优化预测算法

### 版本迭代
```bash
# 修改 SKILL.md 中的版本号
# 例如：1.0.0 → 1.0.1

# 重新发布
clawhub publish .
```

---

## ⚠️ 注意事项

1. **数据准确性**: 在技能说明中注明"仅供参考"
2. **合规性**: 不要承诺收益，避免投资建议嫌疑
3. **免责声明**: 明确标注"不构成投资建议"
4. **数据源**: 确保使用公开数据，避免版权问题

---

**最后更新**: 2026-03-07


path: README.md
content: # 可转债打新助手 🎯

**免费工具** - 可转债投资必备神器

[![ClawHub](https://img.shields.io/badge/ClawHub-skill-blue)](https://clawhub.com)
[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)

---

## ✨ 功能亮点

- 📅 **打新日历** - 每日可申购转债提醒
- 📊 **新债分析** - 基本面 + 行业对比
- 📈 **溢价预测** - 上市价格智能预测
- ⚠️ **监控提醒** - 强赎/下修/回售预警

---

## 🚀 快速开始

### 安装依赖
```bash
pip3 install -r requirements.txt
```

### 使用示例
```bash
# 今日可申购
python main.py today

# 新债分析
python main.py analyze 123205

# 溢价预测
python main.py predict 123205

# 监控提醒
python main.py alerts
```

---

## 📖 完整文档

- [用户指南](references/USER_GUIDE.md)
- [API 文档](references/API.md)
- [技能说明](SKILL.md)

---

## 💡 投资策略

### 无脑申购条件
- ✅ 评级 AA 及以上
- ✅ 规模 < 20 亿
- ✅ 正股非 ST

### 预期收益
- 平均每签赚 **200-500 元**
- 中签率约 **0.001%-0.01%**

---

## ⚠️ 风险提示

1. 约 5-10% 新债可能破发
2. 强赎忘记操作可能亏损 50%+
3. 低评级转债有违约风险

---

## 📦 项目结构

```
convertible-bond-assistant/
├── main.py                    # 主入口
├── cb_calendar.py             # 打新日历
├── cb_analysis.py             # 新债分析
├── cb_premium_predict.py      # 溢价预测
├── cb_monitor.py              # 监控提醒
├── requirements.txt           # 依赖
├── SKILL.md                   # 技能说明
├── README.md                  # 本文件
├── data/                      # 数据缓存
└── references/                # 文档
    ├── USER_GUIDE.md
    └── API.md
```

---

## 🙏 致谢

- 数据源：东方财富、新浪财经、集思录
- 平台支持：OpenClaw

---

## 📞 反馈

欢迎提交 Issue 或 Pull Request！

**版本**: 1.0.0  
**作者**: Your Name  
**更新日期**: 2026-03-07


path: references/API.md
content: # 数据源 API 文档

## 📡 数据来源说明

本技能使用以下公开数据源：

---

## 一、可转债发行数据

### 东方财富网
**URL**: http://data.eastmoney.com/kzz/

**数据内容**:
- 可转债发行列表
- 申购日历
- 发行公告

**API 示例** (需逆向工程):
```
http://datacenter-web.eastmoney.com/api/data/v1/get
?reportName=RPT_BOND_CB_ISSUE
&columns=ALL
&filter=(SECURITY_TYPE_CODE="041001001")
&pageNum=1&pageSize=50
```

**字段说明**:
- SECURITY_CODE: 转债代码
- SECURITY_NAME: 转债名称
- ISSUE_AMOUNT: 发行金额（亿元）
- RATING: 信用评级
- SUBSCRIBE_DATE: 申购日期
- STOCK_CODE: 正股代码
- STOCK_NAME: 正股名称

---

## 二、可转债行情数据

### 新浪财经
**URL**: http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php

**API 示例**:
```
http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php
?market=hs_kzz
&symbol=sh123205
```

**返回字段**:
- code: 转债代码
- name: 转债名称
- price: 当前价格
- change: 涨跌额
- changepercent: 涨跌幅
- volume: 成交量
- amount: 成交额

---

## 三、正股数据

### 腾讯财经
**URL**: http://qt.gtimg.cn/

**API 示例**:
```
http://qt.gtimg.cn/q=sh600000
```

**返回字段**:
- 正股价格
- 涨跌幅
- PE/PB
- 总市值

---

## 四、转股价值计算

**公式**:
```
转股价值 = 正股价格 / 转股价格 × 100
转股溢价率 = (转债价格 - 转股价值) / 转股价值 × 100%
```

**数据需求**:
- 正股价格（实时）
- 转股价格（发行公告）
- 转债价格（实时）

---

## 五、强赎/下修数据

### 巨潮资讯网
**URL**: http://www.cninfo.com.cn/

**数据内容**:
- 强赎公告
- 下修公告
- 回售公告

**爬取方式**:
```python
# 搜索关键词
keywords = ["可转债强赎", "可转债下修", "可转债回售"]

# 解析公告
for keyword in keywords:
    search_url = f"http://www.cninfo.com.cn/new/commonUrl/pageOfSearch?url=disclosure/list/search&keyWord={keyword}"
```

---

## 六、历史数据

### 集思录
**URL**: https://www.jisilu.cn/data/cbnew/

**数据内容**:
- 可转债列表
- 转股溢价率
- 到期收益率
- 双低值

**注意**: 集思录需要登录，建议使用其 API（如有）或手动导出。

---

## 📦 数据缓存策略

### 缓存层级
1. **实时数据**（价格、涨跌幅）：5 分钟缓存
2. **日频数据**（申购日历、公告）：每日更新
3. **历史数据**（历史溢价率）：每周更新

### 缓存实现
```python
import sqlite3
from datetime import datetime, timedelta

class DataCache:
    def __init__(self, db_path="data/cache.db"):
        self.conn = sqlite3.connect(db_path)
    
    def get(self, key, expire_minutes=30):
        # 检查缓存是否过期
        cursor = self.conn.execute(
            "SELECT data, updated_at FROM cache WHERE key=?",(key,)
        )
        row = cursor.fetchone()
        
        if row:
            data, updated_at = row
            if datetime.now() - updated_at < timedelta(minutes=expire_minutes):
                return json.loads(data)
        
        return None
    
    def set(self, key, data):
        self.conn.execute(
            "INSERT OR REPLACE INTO cache (key, data, updated_at) VALUES (?, ?, ?)",
            (key, json.dumps(data), datetime.now())
        )
        self.conn.commit()
```

---

## ⚠️ 注意事项

1. **反爬虫**: 部分网站有反爬措施，需要设置 User-Agent、Referer
2. **频率限制**: 建议单个 IP 每分钟请求 < 60 次
3. **数据准确性**: 实时数据可能有延迟，以交易所为准
4. **合规性**: 仅用于个人学习研究，勿用于商业用途

---

## 🔧 开发建议

### 1. 使用 akshare（推荐）
```python
import akshare as ak

# 获取可转债列表
cb_list = ak.bond_cb_jsl()

# 获取可转债行情
cb行情 = ak.bond_zh_hs_spot()
```

**优点**:
- 免费开源
- 数据全面
- 更新及时

**安装**:
```bash
pip install akshare
```

### 2. 使用 Tushare Pro
```python
import tushare as ts

# 初始化
ts.set_token('your_token')
pro = ts.pro_api()

# 获取可转债信息
cb_info = pro.cb_basic()
```

**优点**:
- 数据规范
- 接口稳定

**缺点**:
- 需要积分
- 部分数据收费

---

## 📞 数据更新

如遇数据源变更或 API 失效，请更新对应模块：

1. `cb_calendar.py` - 申购日历数据
2. `cb_analysis.py` - 正股基本面数据
3. `cb_premium_predict.py` - 历史溢价数据
4. `cb_monitor.py` - 公告数据

---

**最后更新**: 2026-03-07


path: references/USER_GUIDE.md
content: # 可转债打新助手 - 用户指南

## 📖 快速入门

### 1. 安装依赖

```bash
pip3 install requests pandas beautifulsoup4
```

### 2. 基本使用

```bash
# 查看今日可申购转债
python main.py today

# 查看本周申购日历
python main.py week

# 分析指定转债
python main.py analyze 123205

# 预测上市溢价
python main.py predict 123205

# 查看强赎/下修提醒
python main.py alerts
```

---

## 🎯 功能详解

### 一、打新日历

#### 命令
```bash
python main.py today
python main.py week
```

#### 输出示例
```
📅 今日可申购转债 (2026-03-07)

1. 赛龙转债 (123205)
   - 发行规模：7.5 亿元
   - 评级：AA-
   - 申购上限：100 万
   - 正股：赛龙科技 (300123)
   - 行业：汽车零部件

2. 恒泰转债 (123206)
   - 发行规模：10.0 亿元
   - 评级：AA
   - 申购上限：100 万
   - 正股：恒泰股份 (600456)
   - 行业：化工
```

#### 申购建议
- **评级 AA 及以上**：积极申购
- **规模 < 10 亿**：优先申购（易炒作）
- **行业热门**：优先申购（医药、电子、新能源）

---

### 二、新债分析

#### 命令
```bash
python main.py analyze 123205
```

#### 输出示例
```
📊 赛龙转债 (123205) 分析

• 发行规模：7.5 亿（小规模，易炒作）
• 转股价格：15.23 元
• 正股 PE：25.3 倍（行业中等）
• 行业：汽车零部件
• 评级：AA-

💡 建议：⭐⭐⭐ 积极申购（评级高 + 规模小 + 估值低）
```

#### 分析维度
1. **发行规模**：越小越易被炒作
2. **评级**：AAA > AA+ > AA > AA- > A+
3. **正股估值**：PE 越低越好
4. **行业景气度**：热门行业溢价更高

---

### 三、溢价预测

#### 命令
```bash
python main.py predict 123205
```

#### 输出示例
```
📈 赛龙转债 上市溢价预测

• 预测溢价率：33.5%
• 合理区间：25.5% - 41.5%
• 预测上市价格：133.50 元
• 置信度：高

📊 参考依据：
  - 同行业转债平均溢价：32%
  - 近 3 月新债平均溢价：32%
  - 正股估值水平：PE 25.3 倍
```

#### 预测逻辑
- **行业对比**：同行业转债平均溢价
- **市场情绪**：近 3 月新债平均表现
- **规模调整**：小规模 +3~5%，大规模 -3%
- **评级调整**：高评级 +3~5%，低评级 -3~5%

---

### 四、监控提醒

#### 命令
```bash
python main.py alerts
```

#### 提醒类型

**1. 强赎提醒** ⚠️
- 条件：正股连续 30 日中 15 日 >= 转股价×130%
- 风险：如不操作，按 102 元强赎，可能亏损 50%+
- 操作：及时卖出或转股

**2. 下修公告** 📉
- 条件：正股连续 30 日中 15 日 <= 转股价×85%
- 机会：下修后转股价值提升
- 操作：可继续持有

**3. 回售机会** 💰
- 条件：最后 2 年，正股 <= 转股价×70%
- 机会：可按 101 元回售给公司
- 操作：关注公告

**4. 到期提醒** ⏰
- 条件：距离到期 < 2 年
- 风险：时间价值衰减
- 操作：考虑卖出或换仓

---

## 💡 投资策略

### 打新策略

#### 无脑申购（低风险）
- 评级 AA 及以上
- 发行规模 < 20 亿
- 正股非 ST

**预期收益**：平均每签赚 200-500 元

#### 精选申购（中风险）
- 评级 AA-及以上
- 规模 < 10 亿（优先）
- 行业景气（医药、电子、新能源）
- 正股 PE < 行业平均

**预期收益**：平均每签赚 300-800 元

#### 放弃申购
- 评级 A+及以下
- 正股连续亏损
- 行业夕阳产业
- 发行规模 > 50 亿

---

### 上市卖出策略

#### 保守型
- 开盘溢价 > 30%：全部卖出
- 开盘溢价 20-30%：卖出一半
- 开盘溢价 < 20%：继续持有

#### 激进型
- 规模 < 5 亿：继续持有（可能炒作）
- 规模 5-10 亿：逢高减仓
- 规模 > 20 亿：上市即卖出

---

### 持仓策略

#### 摊大饼策略
- 买入 10-20 只低价转债（< 110 元）
- 分散行业
- 等待轮动上涨

**预期年化**：10-20%

#### 双低策略
- 选择低价（< 110 元）+ 低溢价（< 20%）
- 兼顾债性和股性
- 进可攻退可守

**预期年化**：15-25%

---

## ⚠️ 风险提示

1. **破发风险**：约 5-10% 新债上市破发
2. **强赎风险**：忘记操作可能亏损 50%+
3. **信用风险**：低评级转债可能违约
4. **流动性风险**：小规模转债成交不活跃

---

## 📞 常见问题

### Q: 申购需要市值吗？
A: 不需要！可转债申购零门槛，有股票账户即可。

### Q: 中签率大概多少？
A: 通常 0.001%-0.01%，平均 100 次中 1 次。

### Q: 中一签要缴多少钱？
A: 1 签=10 张=1000 元。

### Q: 什么时候缴款？
A: T 日申购，T+2 日公布中签，T+2 日缴款。

### Q: 上市第一天什么时候卖？
A: 集合竞价（9:15-9:25）或开盘后半小时。

---

## 📚 学习资源

- 集思录：https://www.jisilu.cn/
- 东方财富可转债：http://data.eastmoney.com/kzz/
- 可转债投资入门书籍：《可转债投资实战技巧》

---

## 🙏 反馈

如有问题或建议，欢迎联系作者！

**版本**: 1.0.0  
**更新日期**: 2026-03-07


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)