feat(data): 添加个股资金流向接口并重构速率限制配置
- 新增 moneyflow 资金流向数据同步模块 - 实现接口级速率限制配置(sync_config.py) - 更新流动性相关因子定义 - 添加非对称量化损失函数
This commit is contained in:
@@ -123,133 +123,133 @@ SELECTED_FACTORS = [
|
||||
"GTJA_alpha048",
|
||||
"GTJA_alpha049",
|
||||
"GTJA_alpha050",
|
||||
# "GTJA_alpha051",
|
||||
# "GTJA_alpha052",
|
||||
# "GTJA_alpha053",
|
||||
# "GTJA_alpha054",
|
||||
# "GTJA_alpha056",
|
||||
# "GTJA_alpha057",
|
||||
# "GTJA_alpha058",
|
||||
# "GTJA_alpha059",
|
||||
# "GTJA_alpha060",
|
||||
# "GTJA_alpha061",
|
||||
# "GTJA_alpha062",
|
||||
# "GTJA_alpha063",
|
||||
# "GTJA_alpha064",
|
||||
# "GTJA_alpha065",
|
||||
# "GTJA_alpha066",
|
||||
# "GTJA_alpha067",
|
||||
# "GTJA_alpha068",
|
||||
# "GTJA_alpha070",
|
||||
# "GTJA_alpha071",
|
||||
# "GTJA_alpha072",
|
||||
# "GTJA_alpha073",
|
||||
# "GTJA_alpha074",
|
||||
# "GTJA_alpha076",
|
||||
# "GTJA_alpha077",
|
||||
# "GTJA_alpha078",
|
||||
# "GTJA_alpha079",
|
||||
# "GTJA_alpha080",
|
||||
# "GTJA_alpha081",
|
||||
# "GTJA_alpha082",
|
||||
# "GTJA_alpha083",
|
||||
# "GTJA_alpha084",
|
||||
# "GTJA_alpha085",
|
||||
# "GTJA_alpha086",
|
||||
# "GTJA_alpha087",
|
||||
# "GTJA_alpha088",
|
||||
# "GTJA_alpha089",
|
||||
# "GTJA_alpha090",
|
||||
# "GTJA_alpha091",
|
||||
# "GTJA_alpha092",
|
||||
# "GTJA_alpha093",
|
||||
# "GTJA_alpha094",
|
||||
# "GTJA_alpha095",
|
||||
# "GTJA_alpha096",
|
||||
# "GTJA_alpha097",
|
||||
# "GTJA_alpha098",
|
||||
# "GTJA_alpha099",
|
||||
# "GTJA_alpha100",
|
||||
# "GTJA_alpha101",
|
||||
# "GTJA_alpha102",
|
||||
# "GTJA_alpha103",
|
||||
# "GTJA_alpha104",
|
||||
# "GTJA_alpha105",
|
||||
# "GTJA_alpha106",
|
||||
# "GTJA_alpha107",
|
||||
# "GTJA_alpha108",
|
||||
# "GTJA_alpha109",
|
||||
# "GTJA_alpha110",
|
||||
# "GTJA_alpha111",
|
||||
# "GTJA_alpha112",
|
||||
# # "GTJA_alpha113",
|
||||
# "GTJA_alpha114",
|
||||
# "GTJA_alpha115",
|
||||
# "GTJA_alpha117",
|
||||
# "GTJA_alpha118",
|
||||
# "GTJA_alpha119",
|
||||
# "GTJA_alpha120",
|
||||
# # "GTJA_alpha121",
|
||||
# "GTJA_alpha122",
|
||||
# "GTJA_alpha123",
|
||||
# "GTJA_alpha124",
|
||||
# "GTJA_alpha125",
|
||||
# "GTJA_alpha126",
|
||||
# "GTJA_alpha127",
|
||||
# "GTJA_alpha128",
|
||||
# "GTJA_alpha129",
|
||||
# "GTJA_alpha130",
|
||||
# "GTJA_alpha131",
|
||||
# "GTJA_alpha132",
|
||||
# "GTJA_alpha133",
|
||||
# "GTJA_alpha134",
|
||||
# "GTJA_alpha135",
|
||||
# "GTJA_alpha136",
|
||||
# # "GTJA_alpha138",
|
||||
# "GTJA_alpha139",
|
||||
# # "GTJA_alpha140",
|
||||
# "GTJA_alpha141",
|
||||
# "GTJA_alpha142",
|
||||
# "GTJA_alpha145",
|
||||
# # "GTJA_alpha146",
|
||||
# "GTJA_alpha148",
|
||||
# "GTJA_alpha150",
|
||||
# "GTJA_alpha151",
|
||||
# "GTJA_alpha152",
|
||||
# "GTJA_alpha153",
|
||||
# "GTJA_alpha154",
|
||||
# "GTJA_alpha155",
|
||||
# "GTJA_alpha156",
|
||||
# "GTJA_alpha157",
|
||||
# "GTJA_alpha158",
|
||||
# "GTJA_alpha159",
|
||||
# "GTJA_alpha160",
|
||||
# "GTJA_alpha161",
|
||||
# # "GTJA_alpha162",
|
||||
# "GTJA_alpha163",
|
||||
# "GTJA_alpha164",
|
||||
# # "GTJA_alpha165",
|
||||
# "GTJA_alpha166",
|
||||
# "GTJA_alpha167",
|
||||
# "GTJA_alpha168",
|
||||
# "GTJA_alpha169",
|
||||
# "GTJA_alpha170",
|
||||
# "GTJA_alpha171",
|
||||
# "GTJA_alpha173",
|
||||
# "GTJA_alpha174",
|
||||
# "GTJA_alpha175",
|
||||
# "GTJA_alpha176",
|
||||
# "GTJA_alpha177",
|
||||
# "GTJA_alpha178",
|
||||
# "GTJA_alpha179",
|
||||
# "GTJA_alpha180",
|
||||
# # "GTJA_alpha183",
|
||||
# "GTJA_alpha184",
|
||||
# "GTJA_alpha185",
|
||||
# "GTJA_alpha187",
|
||||
# "GTJA_alpha188",
|
||||
# "GTJA_alpha189",
|
||||
# "GTJA_alpha191",
|
||||
"GTJA_alpha051",
|
||||
"GTJA_alpha052",
|
||||
"GTJA_alpha053",
|
||||
"GTJA_alpha054",
|
||||
"GTJA_alpha056",
|
||||
"GTJA_alpha057",
|
||||
"GTJA_alpha058",
|
||||
"GTJA_alpha059",
|
||||
"GTJA_alpha060",
|
||||
"GTJA_alpha061",
|
||||
"GTJA_alpha062",
|
||||
"GTJA_alpha063",
|
||||
"GTJA_alpha064",
|
||||
"GTJA_alpha065",
|
||||
"GTJA_alpha066",
|
||||
"GTJA_alpha067",
|
||||
"GTJA_alpha068",
|
||||
"GTJA_alpha070",
|
||||
"GTJA_alpha071",
|
||||
"GTJA_alpha072",
|
||||
"GTJA_alpha073",
|
||||
"GTJA_alpha074",
|
||||
"GTJA_alpha076",
|
||||
"GTJA_alpha077",
|
||||
"GTJA_alpha078",
|
||||
"GTJA_alpha079",
|
||||
"GTJA_alpha080",
|
||||
"GTJA_alpha081",
|
||||
"GTJA_alpha082",
|
||||
"GTJA_alpha083",
|
||||
"GTJA_alpha084",
|
||||
"GTJA_alpha085",
|
||||
"GTJA_alpha086",
|
||||
"GTJA_alpha087",
|
||||
"GTJA_alpha088",
|
||||
"GTJA_alpha089",
|
||||
"GTJA_alpha090",
|
||||
"GTJA_alpha091",
|
||||
"GTJA_alpha092",
|
||||
"GTJA_alpha093",
|
||||
"GTJA_alpha094",
|
||||
"GTJA_alpha095",
|
||||
"GTJA_alpha096",
|
||||
"GTJA_alpha097",
|
||||
"GTJA_alpha098",
|
||||
"GTJA_alpha099",
|
||||
"GTJA_alpha100",
|
||||
"GTJA_alpha101",
|
||||
"GTJA_alpha102",
|
||||
"GTJA_alpha103",
|
||||
"GTJA_alpha104",
|
||||
"GTJA_alpha105",
|
||||
"GTJA_alpha106",
|
||||
"GTJA_alpha107",
|
||||
"GTJA_alpha108",
|
||||
"GTJA_alpha109",
|
||||
"GTJA_alpha110",
|
||||
"GTJA_alpha111",
|
||||
"GTJA_alpha112",
|
||||
# "GTJA_alpha113",
|
||||
"GTJA_alpha114",
|
||||
"GTJA_alpha115",
|
||||
"GTJA_alpha117",
|
||||
"GTJA_alpha118",
|
||||
"GTJA_alpha119",
|
||||
"GTJA_alpha120",
|
||||
# "GTJA_alpha121",
|
||||
"GTJA_alpha122",
|
||||
"GTJA_alpha123",
|
||||
"GTJA_alpha124",
|
||||
"GTJA_alpha125",
|
||||
"GTJA_alpha126",
|
||||
"GTJA_alpha127",
|
||||
"GTJA_alpha128",
|
||||
"GTJA_alpha129",
|
||||
"GTJA_alpha130",
|
||||
"GTJA_alpha131",
|
||||
"GTJA_alpha132",
|
||||
"GTJA_alpha133",
|
||||
"GTJA_alpha134",
|
||||
"GTJA_alpha135",
|
||||
"GTJA_alpha136",
|
||||
# "GTJA_alpha138",
|
||||
"GTJA_alpha139",
|
||||
# "GTJA_alpha140",
|
||||
"GTJA_alpha141",
|
||||
"GTJA_alpha142",
|
||||
"GTJA_alpha145",
|
||||
# "GTJA_alpha146",
|
||||
"GTJA_alpha148",
|
||||
"GTJA_alpha150",
|
||||
"GTJA_alpha151",
|
||||
"GTJA_alpha152",
|
||||
"GTJA_alpha153",
|
||||
"GTJA_alpha154",
|
||||
"GTJA_alpha155",
|
||||
"GTJA_alpha156",
|
||||
"GTJA_alpha157",
|
||||
"GTJA_alpha158",
|
||||
"GTJA_alpha159",
|
||||
"GTJA_alpha160",
|
||||
"GTJA_alpha161",
|
||||
# "GTJA_alpha162",
|
||||
"GTJA_alpha163",
|
||||
"GTJA_alpha164",
|
||||
# "GTJA_alpha165",
|
||||
"GTJA_alpha166",
|
||||
"GTJA_alpha167",
|
||||
"GTJA_alpha168",
|
||||
"GTJA_alpha169",
|
||||
"GTJA_alpha170",
|
||||
"GTJA_alpha171",
|
||||
"GTJA_alpha173",
|
||||
"GTJA_alpha174",
|
||||
"GTJA_alpha175",
|
||||
"GTJA_alpha176",
|
||||
"GTJA_alpha177",
|
||||
"GTJA_alpha178",
|
||||
"GTJA_alpha179",
|
||||
"GTJA_alpha180",
|
||||
# "GTJA_alpha183",
|
||||
"GTJA_alpha184",
|
||||
"GTJA_alpha185",
|
||||
"GTJA_alpha187",
|
||||
"GTJA_alpha188",
|
||||
"GTJA_alpha189",
|
||||
"GTJA_alpha191",
|
||||
"chip_dispersion_90",
|
||||
"chip_dispersion_70",
|
||||
"cost_skewness",
|
||||
@@ -270,12 +270,27 @@ SELECTED_FACTORS = [
|
||||
"bottom_cost_stability",
|
||||
"pivot_reversion",
|
||||
"chip_transition",
|
||||
# "amivest_liq_20",
|
||||
# "atr_price_impact",
|
||||
# "hui_heubel_ratio",
|
||||
# "corwin_schultz_spread_20",
|
||||
# "roll_spread_20",
|
||||
# "gibbs_effective_spread",
|
||||
# "overnight_illiq_20",
|
||||
# "illiq_volatility_20",
|
||||
# "amount_cv_20",
|
||||
# "amount_skewness_20",
|
||||
# "low_vol_days_20",
|
||||
# "liquidity_shock_momentum",
|
||||
# "downside_illiq_20",
|
||||
# "upside_illiq_20",
|
||||
# "illiq_asymmetry_20",
|
||||
# "pastor_stambaugh_proxy"
|
||||
]
|
||||
|
||||
# 因子定义字典(完整因子库,用于存放尚未注册到metadata的因子)
|
||||
FACTOR_DEFINITIONS = {"cs_rank_circ_mv": "cs_rank(circ_mv)"}
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Label 配置(统一绑定 label_name 和 label_dsl)
|
||||
# =============================================================================
|
||||
@@ -308,11 +323,11 @@ def get_label_factor(label_name: str) -> dict:
|
||||
# 辅助函数
|
||||
# =============================================================================
|
||||
def register_factors(
|
||||
engine: FactorEngine,
|
||||
selected_factors: List[str],
|
||||
factor_definitions: dict,
|
||||
label_factor: dict,
|
||||
excluded_factors: Optional[List[str]] = None,
|
||||
engine: FactorEngine,
|
||||
selected_factors: List[str],
|
||||
factor_definitions: dict,
|
||||
label_factor: dict,
|
||||
excluded_factors: Optional[List[str]] = None,
|
||||
) -> List[str]:
|
||||
"""注册因子。
|
||||
|
||||
@@ -393,11 +408,11 @@ def register_factors(
|
||||
|
||||
|
||||
def prepare_data(
|
||||
engine: FactorEngine,
|
||||
feature_cols: List[str],
|
||||
start_date: str,
|
||||
end_date: str,
|
||||
label_name: str,
|
||||
engine: FactorEngine,
|
||||
feature_cols: List[str],
|
||||
start_date: str,
|
||||
end_date: str,
|
||||
label_name: str,
|
||||
) -> pl.DataFrame:
|
||||
"""准备数据。
|
||||
|
||||
@@ -455,11 +470,11 @@ def stock_pool_filter(df: pl.DataFrame) -> pl.Series:
|
||||
"""
|
||||
# 代码筛选(排除创业板、科创板、北交所)
|
||||
code_filter = (
|
||||
~df["ts_code"].str.starts_with("30") # 排除创业板
|
||||
& ~df["ts_code"].str.starts_with("68") # 排除科创板
|
||||
& ~df["ts_code"].str.starts_with("8") # 排除北交所
|
||||
& ~df["ts_code"].str.starts_with("9") # 排除北交所
|
||||
& ~df["ts_code"].str.starts_with("4") # 排除北交所
|
||||
~df["ts_code"].str.starts_with("30") # 排除创业板
|
||||
& ~df["ts_code"].str.starts_with("68") # 排除科创板
|
||||
& ~df["ts_code"].str.starts_with("8") # 排除北交所
|
||||
& ~df["ts_code"].str.starts_with("9") # 排除北交所
|
||||
& ~df["ts_code"].str.starts_with("4") # 排除北交所
|
||||
)
|
||||
|
||||
# 在已筛选的股票中,选取流通市值最小的500只
|
||||
@@ -474,7 +489,6 @@ def stock_pool_filter(df: pl.DataFrame) -> pl.Series:
|
||||
# 定义筛选所需的基础列
|
||||
STOCK_FILTER_REQUIRED_COLUMNS = ["circ_mv"]
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# 输出配置
|
||||
# =============================================================================
|
||||
@@ -518,7 +532,7 @@ def get_output_path(model_type: str, test_start: str, test_end: str) -> str:
|
||||
|
||||
|
||||
def get_model_save_path(
|
||||
model_type: str,
|
||||
model_type: str,
|
||||
) -> Optional[str]:
|
||||
"""生成模型保存路径。
|
||||
|
||||
@@ -544,11 +558,11 @@ def get_model_save_path(
|
||||
|
||||
|
||||
def save_model_with_factors(
|
||||
model,
|
||||
model_path: str,
|
||||
selected_factors: list[str],
|
||||
factor_definitions: dict,
|
||||
fitted_processors: list | None = None,
|
||||
model,
|
||||
model_path: str,
|
||||
selected_factors: list[str],
|
||||
factor_definitions: dict,
|
||||
fitted_processors: list | None = None,
|
||||
) -> str:
|
||||
"""保存模型及关联的因子信息和处理器。
|
||||
|
||||
|
||||
@@ -54,31 +54,27 @@ N_QUANTILES = 20
|
||||
|
||||
# 排除的因子列表
|
||||
EXCLUDED_FACTORS = [
|
||||
"GTJA_alpha010",
|
||||
"GTJA_alpha005",
|
||||
"GTJA_alpha002",
|
||||
"GTJA_alpha027",
|
||||
"GTJA_alpha051",
|
||||
"GTJA_alpha044",
|
||||
"GTJA_alpha041",
|
||||
"GTJA_alpha131",
|
||||
"GTJA_alpha103",
|
||||
"GTJA_alpha087",
|
||||
"GTJA_alpha093",
|
||||
"GTJA_alpha092",
|
||||
"GTJA_alpha073",
|
||||
"GTJA_alpha127",
|
||||
"GTJA_alpha117",
|
||||
"GTJA_alpha124",
|
||||
"GTJA_alpha162",
|
||||
"GTJA_alpha177",
|
||||
"GTJA_alpha188",
|
||||
"smart_money_accumulation",
|
||||
"GTJA_alpha014",
|
||||
"GTJA_alpha056",
|
||||
"GTJA_alpha085",
|
||||
"GTJA_alpha154",
|
||||
"GTJA_alpha141",
|
||||
'active_market_cap',
|
||||
'close_vwap_deviation',
|
||||
'sharpe_ratio_20',
|
||||
'upper_shadow_ratio',
|
||||
'volume_ratio_5_20',
|
||||
'GTJA_alpha090',
|
||||
'GTJA_alpha084',
|
||||
'GTJA_alpha066',
|
||||
'GTJA_alpha150',
|
||||
'GTJA_alpha148',
|
||||
'GTJA_alpha106',
|
||||
'GTJA_alpha109',
|
||||
'GTJA_alpha108',
|
||||
'GTJA_alpha176',
|
||||
'GTJA_alpha169',
|
||||
'GTJA_alpha156',
|
||||
'chip_dispersion_70',
|
||||
'winner_rate_cs_rank',
|
||||
'atr_price_impact',
|
||||
'low_vol_days_20',
|
||||
'liquidity_shock_momentum',
|
||||
]
|
||||
|
||||
# LambdaRank 模型参数配置
|
||||
|
||||
@@ -52,55 +52,36 @@ TRAINING_TYPE = "regression"
|
||||
|
||||
# 排除的因子列表
|
||||
EXCLUDED_FACTORS = [
|
||||
"GTJA_alpha036",
|
||||
"GTJA_alpha032",
|
||||
"GTJA_alpha010",
|
||||
"GTJA_alpha005",
|
||||
"CP",
|
||||
"BP",
|
||||
"debt_to_equity",
|
||||
"current_ratio",
|
||||
"GTJA_alpha002",
|
||||
"GTJA_alpha027",
|
||||
"GTJA_alpha064",
|
||||
"GTJA_alpha062",
|
||||
"GTJA_alpha043",
|
||||
"GTJA_alpha044",
|
||||
"GTJA_alpha120",
|
||||
"GTJA_alpha117",
|
||||
"GTJA_alpha103",
|
||||
"GTJA_alpha104",
|
||||
"GTJA_alpha105",
|
||||
"GTJA_alpha073",
|
||||
"GTJA_alpha077",
|
||||
"GTJA_alpha085",
|
||||
"GTJA_alpha090",
|
||||
"GTJA_alpha087",
|
||||
"GTJA_alpha083",
|
||||
"GTJA_alpha092",
|
||||
"GTJA_alpha133",
|
||||
"GTJA_alpha131",
|
||||
"GTJA_alpha126",
|
||||
"GTJA_alpha124",
|
||||
"GTJA_alpha162",
|
||||
"GTJA_alpha164",
|
||||
"GTJA_alpha157",
|
||||
"GTJA_alpha177",
|
||||
"price_to_avg_cost",
|
||||
"cost_skewness",
|
||||
"GTJA_alpha191",
|
||||
"GTJA_alpha180",
|
||||
"history_position",
|
||||
"bottom_profit",
|
||||
"mean_median_dev",
|
||||
"smart_money_accumulation",
|
||||
"GTJA_alpha013",
|
||||
"GTJA_alpha099",
|
||||
"GTJA_alpha107",
|
||||
"GTJA_alpha119",
|
||||
"GTJA_alpha141",
|
||||
"GTJA_alpha130",
|
||||
"GTJA_alpha173",
|
||||
'GTJA_alpha016',
|
||||
'volatility_20',
|
||||
'current_ratio',
|
||||
'GTJA_alpha001',
|
||||
'GTJA_alpha141',
|
||||
'GTJA_alpha129',
|
||||
'GTJA_alpha164',
|
||||
'amivest_liq_20',
|
||||
'GTJA_alpha012',
|
||||
'debt_to_equity',
|
||||
'turnover_deviation',
|
||||
'GTJA_alpha073',
|
||||
'GTJA_alpha043',
|
||||
'GTJA_alpha032',
|
||||
'GTJA_alpha028',
|
||||
'GTJA_alpha090',
|
||||
'GTJA_alpha108',
|
||||
'GTJA_alpha105',
|
||||
'GTJA_alpha091',
|
||||
'GTJA_alpha119',
|
||||
'GTJA_alpha104',
|
||||
'GTJA_alpha163',
|
||||
'GTJA_alpha157',
|
||||
'cost_skewness',
|
||||
'GTJA_alpha176',
|
||||
'chip_transition',
|
||||
'amount_skewness_20',
|
||||
'GTJA_alpha148',
|
||||
'mean_median_dev',
|
||||
'downside_illiq_20',
|
||||
]
|
||||
|
||||
# 模型参数配置
|
||||
|
||||
Reference in New Issue
Block a user