← 返回
未分类

可持续因子

A股可持续因子自进化策略 — 基于华泰金工AutoResearch自进化Skill框架, 将"可持续投资逻辑、因子边界、组合约束、评价指标"写入策略协议, 实现选股策略的自动迭代与版本管理。 触发场景:设计可持续因子策略、A股ESG增强选股、因子自进化迭代、 可持续投资组合构建、绿色因子选股。
A股可持续因子自进化策略 — 基于华泰金工AutoResearch自进化Skill框架, 将"可持续投资逻辑、因子边界、组合约束、评价指标"写入策略协议, 实现选股策略的自动迭代与版本管理。 触发场景:设计可持续因子策略、A股ESG增强选股、因子自进化迭代、 可持续投资组合构建、绿色因子选股。
Real-Green AI
未分类 community v1.0.0 1 版本 100000 Key: 无需
★ 0
Stars
📥 50
下载
💾 0
安装
1
版本
#latest

概述

A股可持续因子自进化策略 Skill

策略定位

策略类型:可持续因子驱动 × 自进化Skill框架

核心逻辑:将可持续投资逻辑结构化为策略协议(Strategy Protocol),通过版本管理(Version Management)和样本隔离(Sample Isolation)实现策略的自动迭代进化,而非无约束参数搜索。

适用市场:沪深A股(主板、科创板、创业板、北交所)

版本说明:v1.0 — 初始版本,融合华泰金工自进化Skill三框架 + A股ESG评分体系 + 可持续因子库


自进化Skill三层框架

框架一:策略协议(Strategy Protocol)

策略协议是将投资逻辑、可调边界、约束条件写入Skill的核心层,确保迭代方向符合可持续投资研究规范。

# scripts/sustainability_strategy_protocol.py

STRATEGY_PROTOCOL = {
    # 策略元信息
    "strategy_name": "A股可持续因子策略",
    "version": "1.0.0",
    "author": "RealGreen AI",
    "created_date": "2025-01-01",
    "last_updated": "2025-01-01",

    # 可持续投资逻辑约束(硬约束,不可越过)
    "investment_logic": {
        "core_principle": "可持续价值成长 — 兼顾ESG质量与长期成长性",
        "esg_minimum": {
            "ESG总分": 60,          # 综合ESG最低60分(百分制)
            "E环境": 50,            # 环境维度最低门槛
            "S社会": 50,            # 社会维度最低门槛
            "G治理": 55,            # 治理维度门槛略高(A股特色)
        },
        "exclusion_sectors": [
            "象牙/稀有皮革", "军工武器制造", "博彩业",
            "传统烟草制造", "场外衍生品"
        ],
        "controversial_activities_threshold": {
            "adult_content": 0.0,   # 成人内容:零容忍
            "gambling": 0.0,        # 博彩:零容忍
            "tobacco": 0.1,         # 烟草:营收占比>10%排除
            "alcohol": 0.2,         # 酒精:营收占比>20%排除
            "nuclear": 0.0,         # 核武器:零容忍
            "coal_power": 0.3,      # 燃煤发电:营收占比>30%排除
        },
    },

    # 可调边界参数(可在版本迭代中调整)
    "adjustable_bounds": {
        "esg_top_percentile": {"min": 0.20, "max": 0.50, "default": 0.30},
        "sustainability_score_min": {"min": 50, "max": 80, "default": 60},
        "financial_quality_min": {"min": 30, "max": 60, "default": 40},
        "value_weight": {"min": 0.10, "max": 0.40, "default": 0.20},
        "growth_weight": {"min": 0.10, "max": 0.40, "default": 0.20},
        "momentum_lookback_days": {"min": 20, "max": 120, "default": 60},
    },

    # 组合约束(硬约束)
    "portfolio_constraints": {
        "max_stock_weight": 0.05,          # 单票最大5%
        "max_industry_weight": 0.25,       # 单行业最大25%
        "min_daily_volume": 10_000_000,    # 最小日均成交额(元)
        "min_stocks": 30,                  # 最小持仓数
        "max_stocks": 100,                 # 最大持仓数
        "turnover_rate_target": {"min": 0.20, "max": 1.0},  # 换手率目标区间
    },

    # A股特有风险约束(硬约束)
    "astock_risk_bounds": {
        "max_pledge_ratio": 0.30,          # 股权质押≤30%
        "max_goodwill_ratio": 0.30,        # 商誉/净资产≤30%
        "max_related_party_tx": 0.20,       # 关联交易≤20%
        "exclude_st": True,                 # 排除ST/*ST
        "exclude_suspended": True,          # 排除停牌股
        "exclude_newly_listed_days": 90,    # 排除上市不足90天
        "violation_lookback_days": 365,     # 违规追溯期(天)
    },
}

框架二:版本管理(Version Management)

每次策略迭代生成新版本,保留完整历史记录。

# scripts/version_manager.py

class StrategyVersionManager:
    """
    策略版本管理器
    每次迭代记录:版本号、参数变更、原因、评价结果
    """
    def __init__(self, db_path="outputs/strategy_versions.db"):
        self.db_path = db_path
        self._init_db()

    def create_version(self, strategy_name, params, reason, signals):
        """创建新版本"""
        version_id = self._generate_version_id()
        evaluation = self._run_evaluation(signals)

        record = {
            "version_id": version_id,
            "strategy_name": strategy_name,
            "timestamp": datetime.now(),
            "params": json.dumps(params),
            "reason": reason,
            "evaluation": evaluation,
            "status": "candidate"  # candidate / approved / rejected
        }
        self._save_record(record)
        return version_id

    def compare_versions(self, version_a, version_b):
        """对比两个版本的绩效差异"""
        pass

    def get_best_version(self, metric="sharpe_ratio"):
        """按指定指标返回最优版本"""
        pass

版本命名规范v{主版本}.{次版本}.{修订号}

  • 主版本:投资逻辑重大变更
  • 次版本:参数区间调整
  • 修订号:微调/热修复

框架三:样本隔离(Sample Isolation)

防止信息泄露,确保评价结果可信。

# scripts/sample_isolation.py

class SampleIsolationEngine:
    """
    样本隔离引擎
    三重隔离:时间隔离 + 行业隔离 + 因子隔离
    """
    def __init__(self):
        self.train_window = 252 * 3   # 训练集:3年
        self.warmup_window = 60       # 预热期:60天
        self.test_window = 252        # 测试集:1年
        self.purge_window = 20        # purge期:20天(防止look-ahead bias)

    def split_samples(self, df_prices, df_factors):
        """三重样本划分"""
        # 1. 时间隔离:训练/测试严格分离
        train_period = df_prices.index[:-self.test_window]
        test_period = df_prices.index[-self.test_window:]

        # 2. 行业隔离:确保测试集行业分布稳定
        # (如果测试期行业构成变化过大需额外处理)

        # 3. 因子隔离:确保因子值无未来信息泄露
        df_factors = self._apply_purge(df_factors, self.purge_window)

        return train_period, test_period, df_factors

    def run_kfold_purged_cv(self, df, n_splits=5, embargo_pct=0.1):
        """K折Purge交叉验证(防止过度拟合)"""
        pass

核心工作流(6步)

Step 1 — 准备原始数据

# 可持续因子数据源
sustainability_raw = {
    # ESG评级数据(优先级从高到低)
    "primary_esg": {
        "Wind ESG": "8000+公司,月更新,200+指标",
        "华证ESG": "与SASB对齐,季度更新",
    },
    "secondary_esg": {
        "中证ESG": "本土特色(扶贫权重高)",
        "富时罗素ESG": "国际标准对齐",
    },

    # 可持续特色因子数据
    "sustainability_data": {
        "carbon_intensity": "碳排放强度(吨CO2/万元营收)",
        "green_revenue_ratio": "绿色营收占比",
        "renewable_energy_pct": "可再生能源使用比例",
        "safety_incident_rate": "安全生产事故率",
        "employee_satisfaction": "员工满意度(若有)",
        "supply_chain_esg": "供应链ESG审查覆盖比例",
        "community_investment": "社区投资额/营收",
        "tax_paid_per_revenue": "税负透明度(支付的各项税费/营收)",
    },

    # 财务因子
    "financial_raw": {
        "value_factors": ["PB", "PE", "PS", "PCF", "EV/EBITDA"],
        "quality_factors": ["ROE", "ROA", "gross_margin", "debt_ratio", "cash_ratio"],
        "growth_factors": ["revenue_yoy", "profit_yoy", "cash_flow_yoy"],
        "momentum_factors": ["return_20d", "return_60d", "return_120d"],
        # A股特有质量因子
        "astock_quality": ["audit_opinion", "cash_conversion_cycle", "accrual_ratio"],
    },
}

Step 2 — 构建可持续因子评分

# scripts/sustainability_scorer.py

from sustainability_scorer import (
    build_sustainability_score,
    add_policy_orientation_score,
    add_green_premium_factor,
    add_transition_risk_factor,
)

# 基础可持续评分(E×0.35 + S×0.30 + G×0.35,行业标准化)
df_sust = build_sustainability_score(df_esg, industry_mapping="sw_level1")

# 政策导向加分(A股特色)
df_sust = add_policy_orientation_score(df_sust)
# 输出:policy_score(新质生产力、碳中和、专精特新等政策加成)

# 绿色溢价因子(绿色业务占比×绿色溢价系数)
df_sust = add_green_premium_factor(df_sust)
# 输出:green_premium_factor

# 转型风险因子(高碳行业低碳转型能力评分)
df_sust = add_transition_risk_factor(df_sust)
# 输出:transition_risk_score

Step 3 — A股特有风险过滤

from screening_model import AStockRiskFilter

risk_filter = AStockRiskFilter(
    max_pledge_ratio=0.30,
    max_goodwill_ratio=0.30,
    max_related_tx=0.20,
    exclude_st=True,
    exclude_suspended=True,
    exclude_newly_listed_days=90,
    violation_lookback_days=365,
)
df_filtered = risk_filter.apply(df_sust)

Step 4 — 可持续因子正面筛选

from sustainability_screening import SustainableFactorScreener

screener = SustainableFactorScreener(
    # 策略协议参数(来自Step 1定义的协议)
    protocol=STRATEGY_PROTOCOL,

    # 可持续因子筛选配置
    sustainability_top_pct=0.30,     # 可持续评分前30%入选
    min_sustainability_score=60,     # 可持续评分最低门槛
    min_esg_subscore={
        "E": 50, "S": 50, "G": 55,
    },

    # 多因子权重配置(可在版本迭代中调整)
    factor_weights={
        "sustainability_score": 0.40,  # 可持续评分
        "financial_quality": 0.20,    # 财务质量
        "value_factor": 0.20,         # 估值价值
        "growth_factor": 0.20,        # 成长性
    },

    # 可持续特色筛选
    green_revenue_min=0.10,           # 绿色营收最低占比
    exclude_fossil_fuels=True,       # 排除化石燃料开采
    exclude_tobacco=True,            # 排除烟草

    # 板块差异化
    board_bonus={"科创板": 0.10, "创业板": 0.05},
)
screened = screener.screen(df_filtered)

Step 5 — 组合构建

from portfolio_builder import build_sustainable_portfolio

portfolio = build_sustainable_portfolio(
    screened,
    # 组合约束(来自策略协议)
    max_w=0.05,
    max_ind_w=0.25,
    min_liquidity=10_000_000,
    min_stocks=30,
    max_stocks=100,
    # 可持续特色约束
    min_green_holdings=0.50,         # 绿色持仓占比≥50%
    max_fossil_exposure=0.05,        # 化石燃料敞口≤5%
    min_diversity_score=0.30,        # 组合多样性(行业/板块分散度)
)

Step 6 — 回测验证 + 版本迭代

from backtest_engine import run_backtest
from version_manager import StrategyVersionManager

# 创建版本管理器
vm = StrategyVersionManager()

# 运行回测
bt_results = run_backtest(
    signal_df=portfolio,
    test_period="2022-01-01",  # 样本隔离:训练期外
    benchmark="000300.SH",
    initial_capital=100_000_000,
    transaction_cost=0.0015,
    slippage=0.001,
)

# 评估结果
evaluation = {
    "annual_return": bt_results["annual_return"],
    "sharpe_ratio": bt_results["sharpe_ratio"],
    "max_drawdown": bt_results["max_drawdown"],
    "turnover_rate": bt_results["turnover_rate"],
    "sustainability_score_avg": bt_results["avg_esg_score"],
}

# 创建策略新版本记录
if evaluation["sharpe_ratio"] > 0.7:
    new_version = vm.create_version(
        strategy_name="A股可持续因子策略",
        params=screener.get_current_params(),
        reason="夏普比率突破0.7,调整可持续评分权重",
        signals=portfolio,
    )
    print(f"✅ 新版本已创建: {new_version}")
else:
    print("⚠️ 当前版本未达标,需进一步迭代")

可持续因子库(行业差异化权重)

因子分类

类别因子名称适用行业权重建议预期方向
------------------------------------------
E环境碳排放强度全行业0.15负向
能耗强度(万元GDP)高耗能行业0.10负向
环保研发投入比全行业0.08正向
可再生能源使用比例电力/制造0.08正向
绿色营收占比全行业0.10正向
环境违规记录全行业0.05负向(硬约束)
S社会员工利润率全行业0.08正向
安全生产评分工业/制造0.10正向
社区投资占比全行业0.05正向
供应链ESG覆盖制造业/零售0.07正向
数据安全事件互联网/金融0.05负向
G治理股权质押比例全行业0.08负向
独董比例全行业0.05正向
商誉风险全行业0.08负向
关联交易透明度全行业0.05正向
税负透明度全行业0.05正向
政策导向碳中和受益度新能源/绿电0.10正向
专精特新认定科创/创业板0.08正向
国产替代贡献半导体/高端制造0.08正向
乡村振兴参与农业/消费品0.05正向

行业权重配置示例

# references/industry_sustainability_weights.py

INDUSTRY_WEIGHTS = {
    # 行业:(E权重, S权重, G权重)
    "煤炭": (0.40, 0.25, 0.35),     # E权重高,关注转型风险
    "钢铁": (0.35, 0.30, 0.35),
    "电力": (0.40, 0.25, 0.35),     # E权重高,关注清洁能源转型
    "化工": (0.35, 0.30, 0.35),
    "半导体": (0.20, 0.30, 0.50),   # G权重高,关注国产替代+治理
    "新能源": (0.45, 0.25, 0.30),   # E权重极高
    "医药": (0.15, 0.40, 0.45),     # S+G权重高,关注产品安全+研发
    "食品饮料": (0.10, 0.45, 0.45), # S权重高,关注食品安全
    "互联网": (0.10, 0.40, 0.50),   # S+G权重高,关注数据安全+员工关怀
    "银行": (0.15, 0.30, 0.55),     # G权重极高,关注资产质量+合规
    "保险": (0.10, 0.35, 0.55),
    "房地产": (0.30, 0.30, 0.40),
    "传媒": (0.05, 0.50, 0.45),     # S权重高,关注内容合规
    "轻工制造": (0.20, 0.40, 0.40),
    "汽车": (0.30, 0.30, 0.40),
}

参数默认值

SUSTAINABILITY_STRATEGY_PARAMS = {
    # 策略协议参数
    "strategy_version": "1.0.0",
    "core_principle": "可持续价值成长",
    "esg_minimum_total": 60,
    "esg_minimum_E": 50,
    "esg_minimum_S": 50,
    "esg_minimum_G": 55,

    # 可持续因子权重
    "sustainability_score_weight": 0.40,
    "financial_quality_weight": 0.20,
    "value_factor_weight": 0.20,
    "growth_factor_weight": 0.20,

    # 筛选参数
    "sustainability_top_pct": 0.30,
    "min_sustainability_score": 60,
    "green_revenue_min": 0.10,
    "financial_min_percentile": 40,

    # 组合约束
    "max_stock_weight": 0.05,
    "max_industry_weight": 0.25,
    "min_stocks": 30,
    "max_stocks": 100,
    "min_liquidity": 10_000_000,
    "min_green_holdings": 0.50,

    # 调仓参数
    "rebalance_freq": "quarterly",

    # A股特有风险参数(来自策略协议)
    "max_pledge_ratio": 0.30,
    "max_goodwill_ratio": 0.30,
    "max_related_tx": 0.20,
    "exclude_st": True,
    "exclude_suspended": True,
    "exclude_newly_listed_days": 90,

    # 样本隔离参数
    "train_window_days": 756,       # 训练窗口:3年
    "test_window_days": 252,        # 测试窗口:1年
    "purge_window_days": 20,        # Purge窗口:20天

    # 评价指标(版本迭代参照)
    "evaluation_metrics": {
        "target_sharpe": 0.70,
        "max_acceptable_drawdown": 0.20,
        "target_annual_return": 0.10,
        "max_turnover_rate": 1.0,
    },
}

自进化迭代机制

迭代触发条件

策略自动迭代在以下条件满足时触发:

ITERATION_TRIGGERS = {
    "ic_decay": {
        "threshold": 0.02,         # IC衰减至<0.02触发
        "lookback": 60,             # 近60天IC均值
    },
    "rolling_performance": {
        "threshold": 0.80,         # 滚动年化收益<基准×0.80触发
        "window": 252,              # 滚动窗口
    },
    "factor_boundary_breach": {
        "description": "可调边界参数触及边界时触发(需重新搜索最优值)",
    },
    "scheduled": {
        "frequency": "quarterly",   # 每季度定期评估
    },
}

迭代搜索空间

# 允许迭代的参数及搜索范围(来自adjustable_bounds)
SEARCH_SPACE = {
    "esg_top_percentile": np.linspace(0.20, 0.50, 7),
    "sustainability_score_min": [50, 55, 60, 65, 70],
    "financial_quality_min": [30, 35, 40, 45, 50],
    "value_weight": np.linspace(0.10, 0.40, 7),
    "growth_weight": np.linspace(0.10, 0.40, 7),
    "green_revenue_min": [0.05, 0.10, 0.15, 0.20],
}

版本接受标准

VERSION_APPROVAL_CRITERIA = {
    "must_pass": [
        "样本外夏普比率 > 0.60",
        "样本外年化收益率 > 基准指数收益",
        "样本外最大回撤 < 25%",
        "绿色持仓占比 ≥ 50%",
        "无新增重大违规记录",
    ],
    "improvement_required": [
        "夏普比率提升 ≥ 5%(相比上一版本)",
        "或年化收益提升 ≥ 3%(相比上一版本)",
        "或换手率下降 ≥ 10%(相比上一版本)",
    ],
    "version_guardrails": [
        "单次参数调整幅度 ≤ 20%(防止剧烈跳变)",
        "最多连续拒绝3次新版本后需人工介入",
        "每年强制人工review一次策略协议",
    ],
}

交付物格式

执行策略后输出:

  1. 持仓清单CSV
    • stock_code, stock_name, industry, ESG总分, E/S/G分, 可持续评分, 权重, 风险评分
  1. 可持续特征报告
    • 行业分布图(带绿色/非绿色标注)
    • ESG评分直方图
    • E/S/G雷达图
    • 绿色营收分布
    • 政策导向评分分布
  1. 回测绩效报告
    • 年化收益率、夏普比率、最大回撤、信息比率
    • 相对于基准的超额收益分解
    • 换手率与交易成本
    • 可持续指标:组合ESG平均分、绿色持仓占比、碳强度
  1. 版本迭代日志
    • 每次迭代的参数变更记录
    • 版本间绩效对比
    • 迭代原因说明

参考文档

文件内容何时读取
---------------------
references/industry_sustainability_weights.py30+行业E/S/G权重配置构建可持续评分时
references/parameter_tuning.md参数调优指南与回测框架参数优化时
references/sustainability_factors.md可持续因子详细说明Step 2因子构建时
references/version_approval.md版本接受标准详细说明版本评估时
scripts/sustainability_scorer.py可持续评分核心代码执行评分时
scripts/sustainability_strategy_protocol.py策略协议定义代码策略初始化时

注意事项

  1. 策略自进化边界:迭代仅在adjustable_bounds范围内搜索参数,不可越过investment_logic中的硬约束
  2. 样本隔离必须:训练集/测试集必须严格分离,purge window必须≥20天,防止look-ahead bias
  3. 数据时滞:A股ESG披露为半年度/年度,建议结合舆情数据做实时预警
  4. 版本纪律:每次迭代必须记录reason,连续拒绝3次后需人工介入review策略协议
  5. 绿色溢价时变:2020年后绿色溢价才显著,需定期验证因子有效性
  6. 漂绿风险:建议加入负面新闻舆情因子,剔除舆情极差公司

免责声明

本Skill生成的策略代码和参数仅供研究参考,不构成投资建议。回测结果不代表未来收益,A股市场存在政策风险、流动性风险等多种不确定因素。策略自进化需在严格的版本管理框架下进行,人工review不可省略。

版本历史

共 1 个版本

  • v1.0.0 适用于A股的可持续因子筛选引擎,基于Hermes架构的自进化的ESG投资策略 当前
    2026-05-28 13:26 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

professional

A股量化 AkShare

mbpz
A股量化数据分析工具,基于AkShare库获取A股行情、财务数据、板块信息等。用于回答关于A股股票查询、行情数据、财务分析、选股等问题。
★ 195 📥 63,549
professional

All-Market Financial Data Hub

financial-ai-analyst
基于东方财富数据库,支持自然语言查询金融数据,覆盖A股、港股、美股、基金、债券等资产,提供实时行情、公司信息、估值、财务报表等,适用于投资研究、交易复盘、市场监控、行业分析、信用研究、财报审计、资产配置等场景,满足机构与个人需求。返回结果为
★ 131 📥 42,518
business-ops

企业ESG数据收集

user_89306994
ESG数据收集全流程助手。依据"ESG数据收集五步法",支持数据清单梳理、收集模板设计、流程标准化、执行跟进与数据归档管理。当用户提到ESG数据收集、ESG报告数据整理、指标填报、部门数据汇总、ESG数据库建设、ESG数据质量管控时激活。
★ 0 📥 249