feat(data): 添加个股资金流向接口并重构速率限制配置
- 新增 moneyflow 资金流向数据同步模块 - 实现接口级速率限制配置(sync_config.py) - 更新流动性相关因子定义 - 添加非对称量化损失函数
This commit is contained in:
@@ -34,112 +34,99 @@ from src.config.settings import get_settings
|
||||
# ============================================================================
|
||||
|
||||
FACTORS: List[Dict[str, Any]] =[
|
||||
# ==================== 第一类:筹码集中度与离散度因子 ====================
|
||||
{
|
||||
"name": "chip_dispersion_90",
|
||||
"desc": "90%筹码离散度:衡量市场90%持仓筹码的宽度,值越小表示筹码越高度集中(单峰密集),往往是洗盘结束的前兆",
|
||||
"dsl": "(cost_95pct - cost_5pct) / (cost_95pct + cost_5pct)",
|
||||
"name": "amihud_illiq_20",
|
||||
"desc": "Amihud非流动性指标(20日):绝对收益率/成交额。该值越大,说明少量的资金就能砸盘或拉升,流动性极差,隐含极高的风险补偿预期",
|
||||
"dsl": "ts_mean(abs(pct_chg) / (amount + 1), 20)",
|
||||
},
|
||||
{
|
||||
"name": "chip_dispersion_70",
|
||||
"desc": "70%核心筹码离散度:剔除极端的底部死筹和高位套牢盘,反映中间70%主流资金的成本集中度",
|
||||
"dsl": "(cost_85pct - cost_15pct) / (cost_85pct + cost_15pct)",
|
||||
"name": "amivest_liq_20",
|
||||
"desc": "Amivest流动性指标(20日):Amihud的倒数变种,衡量推动1%价格变化需要的资金量。值越低,流动性溢价越高",
|
||||
"dsl": "ts_mean(amount / (abs(pct_chg) + 0.001), 20)",
|
||||
},
|
||||
{
|
||||
"name": "cost_skewness",
|
||||
"desc": "筹码偏度:反映筹码分布的不对称性。大于1说明上方套牢盘拖尾严重,小于1说明下方获利盘雄厚",
|
||||
"dsl": "(cost_95pct - cost_50pct) / (cost_50pct - cost_5pct)",
|
||||
"name": "atr_price_impact",
|
||||
"desc": "真实波幅价格冲击(20日):以ATR(真实波幅)代替绝对收益,剔除跳空影响后的真实交易冲击",
|
||||
"dsl": "ts_atr(high, low, close, 20) / close / (ts_mean(amount, 20) + 1)",
|
||||
},
|
||||
{
|
||||
"name": "dispersion_change_20",
|
||||
"desc": "筹码集中度近期变化率:过去20天筹码宽度的变化比例,持续下降说明主力正在暗中吸筹",
|
||||
"dsl": "ts_pct_change((cost_95pct - cost_5pct) / cost_50pct, 20)",
|
||||
"name": "hui_heubel_ratio",
|
||||
"desc": "Hui-Heubel流动性比率:利用高低价区间占均价的比例,除以成交额占比,捕捉阶段性区间的深度非流动性",
|
||||
"dsl": "((ts_max(high, 20) - ts_min(low, 20)) / ts_min(low, 20)) / (ts_mean(amount, 20) + 1)",
|
||||
},
|
||||
|
||||
# ==================== 第二类:筹码相对位置与压力/支撑因子 ====================
|
||||
# --- 维度 2: 交易摩擦与隐形价差类 (Spread Proxies) ---
|
||||
# 逻辑:A股没有Tick级买卖价差数据,通常用日线的高低价或自协方差来推导隐形买卖价差。价差越大,交易成本越高,持有需高收益补偿。
|
||||
{
|
||||
"name": "price_to_avg_cost",
|
||||
"desc": "整体浮盈比例:当前价格相对加权平均成本的溢价率。高溢价有均值回归压力,负溢价代表超跌",
|
||||
"dsl": "(close - weight_avg) / weight_avg",
|
||||
"name": "corwin_schultz_spread_20",
|
||||
"desc": "Corwin-Schultz买卖价差代理:利用每日(最高价-最低价)/收盘价的均值衡量交易摩擦,摩擦越大的股票往往带有小盘股超额收益",
|
||||
"dsl": "ts_mean((high - low) / close, 20)",
|
||||
},
|
||||
{
|
||||
"name": "price_to_median_cost",
|
||||
"desc": "中位数成本偏离度:价格相对于50%分位点(绝对半数人持仓价)的偏离,向上突破通常是右侧买点",
|
||||
"dsl": "(close - cost_50pct) / cost_50pct",
|
||||
"name": "roll_spread_20",
|
||||
"desc": "Roll买卖价差代理(20日):经典微观结构模型,计算相邻两日收益率的负协方差的平方根,反映做市商的隐形报价跳跃",
|
||||
"dsl": "sqrt(max_(-ts_cov(change, ts_delay(change, 1), 20), 0))",
|
||||
},
|
||||
{
|
||||
"name": "mean_median_dev",
|
||||
"desc": "均值中位数背离:均值显著大于中位数说明高位筹码堆积,上涨阻力大",
|
||||
"dsl": "(weight_avg - cost_50pct) / cost_50pct",
|
||||
"name": "gibbs_effective_spread",
|
||||
"desc": "有效价差代理:使用日内振幅减去隔夜跳空幅度后的纯日内摩擦成本",
|
||||
"dsl": "ts_mean(((high - low) - abs(open - ts_delay(close, 1))) / close, 20)",
|
||||
},
|
||||
{
|
||||
"name": "trap_pressure",
|
||||
"desc": "高位套牢盘压力指数:当前价格距离上方95%高位套牢成本的距离。距离越大,反弹的真空期阻力越小",
|
||||
"dsl": "(cost_95pct - close) / close",
|
||||
},
|
||||
{
|
||||
"name": "bottom_profit",
|
||||
"desc": "底部支撑底仓利润率:当前价格距离底部5%筹码的利润空间。暴跌时大于0说明底仓极度稳定",
|
||||
"dsl": "(close - cost_5pct) / cost_5pct",
|
||||
},
|
||||
{
|
||||
"name": "history_position",
|
||||
"desc": "历史区间分位点:当前价格在个股上市以来历史最高点和最低点之间的相对位置",
|
||||
"dsl": "(close - his_low) / (his_high - his_low)",
|
||||
"name": "overnight_illiq_20",
|
||||
"desc": "隔夜非流动性:开盘价相对于昨日收盘的跳空幅度,除以昨日成交额。隔夜极易跳空的股票具有夜间流动性溢价",
|
||||
"dsl": "ts_mean(abs(open - ts_delay(close, 1)) / (ts_delay(amount, 1) + 1), 20)",
|
||||
},
|
||||
|
||||
# ==================== 第三类:胜率相关的动量与反转因子 ====================
|
||||
# --- 维度 3: 流动性风险与枯竭类 (Liquidity Risk & Depletion) ---
|
||||
# 逻辑:投资者不仅讨厌“平时流动性差”,更讨厌“流动性极其不稳定”。
|
||||
{
|
||||
"name": "winner_rate_surge_5",
|
||||
"desc": "获利盘短期爆发力:胜率在过去5天内的变化值,急剧上升是极强的动量做多信号",
|
||||
"dsl": "ts_delta(winner_rate, 5)",
|
||||
"name": "illiq_volatility_20",
|
||||
"desc": "Amihud非流动性的波动率(20日):衡量价格冲击的不确定性(即流动性风险本身)。波动越大的股越容易踩踏",
|
||||
"dsl": "ts_std(abs(pct_chg) / (amount + 1), 20)",
|
||||
},
|
||||
{
|
||||
"name": "winner_rate_cs_rank",
|
||||
"desc": "获利盘高位反转信号:全市场胜率截面排名,极端高胜率往往面临多头踩踏的获利了结压力(反转因子)",
|
||||
"dsl": "cs_rank(winner_rate)",
|
||||
"name": "amount_cv_20",
|
||||
"desc": "成交额变异系数(20日):成交额的波动率除以均值。反映股票被市场关注的极度不稳定性",
|
||||
"dsl": "ts_std(amount, 20) / (ts_mean(amount, 20) + 1)",
|
||||
},
|
||||
{
|
||||
"name": "winner_rate_dev_20",
|
||||
"desc": "获利盘均线偏离:当前胜率相对过去20天平均胜率的偏离程度,捕捉筹码情绪的边际超买/超卖",
|
||||
"dsl": "winner_rate - ts_mean(winner_rate, 20)",
|
||||
"name": "amount_skewness_20",
|
||||
"desc": "成交额偏度(20日):正偏度意味着平时成交极度清淡,偶尔脉冲式放量。这种“死鱼”状态是经典的非流动性特征",
|
||||
"dsl": "ts_skew(amount, 20)",
|
||||
},
|
||||
{
|
||||
"name": "winner_rate_volatility",
|
||||
"desc": "获利盘波动率:过去20天胜率的波动率。波动率低且胜率高说明单边上涨极度稳健",
|
||||
"dsl": "ts_std(winner_rate, 20)",
|
||||
"name": "low_vol_days_20",
|
||||
"desc": "流动性枯竭天数:过去20天内,成交额低于长期(60日)均值一半的极端缩量天数",
|
||||
"dsl": "ts_count(amount < ts_mean(amount, 60) * 0.5, 20)",
|
||||
},
|
||||
{
|
||||
"name": "smart_money_accumulation",
|
||||
"desc": "潜在主力吸筹隐蔽指标:胜率的60日时序分位数减去价格的时序分位数。值越大说明‘价平而获利盘增’,底部吸筹明显",
|
||||
"dsl": "ts_rank(winner_rate, 60) - ts_rank(close, 60)",
|
||||
"name": "liquidity_shock_momentum",
|
||||
"desc": "流动性恶化动量:近期(5日)非流动性相较于长期的变化。正值代表流动性正在迅速干涸",
|
||||
"dsl": "ts_mean(abs(pct_chg) / (amount + 1), 5) - ts_mean(abs(pct_chg) / (amount + 1), 20)",
|
||||
},
|
||||
|
||||
# ==================== 第四类:量价与筹码交乘因子 ====================
|
||||
# --- 维度 4: 非对称流动性类 (Asymmetric / Downside Illiquidity) ---
|
||||
# 逻辑:买入时没问题,但“大跌时卖不出去(流动性丧失)”是最致命的风险,这部分风险被定价的权重最高。
|
||||
{
|
||||
"name": "winner_vol_corr_20",
|
||||
"desc": "放量突破筹码密集区:胜率与成交量的20日时序相关性,正相关说明增量资金在主动解套上方筹码",
|
||||
"dsl": "ts_corr(winner_rate, vol, 20)",
|
||||
"name": "downside_illiq_20",
|
||||
"desc": "下行非流动性:仅在股价下跌日计算的价格冲击。捕捉‘跌时没人接盘’的极端流动性折价",
|
||||
"dsl": "ts_sum(where(change < 0, abs(change) / (amount + 1), 0), 20) / (ts_count(change < 0, 20) + 1)",
|
||||
},
|
||||
{
|
||||
"name": "cost_base_momentum",
|
||||
"desc": "成本重心上移换手率:过去20天加权平均成本的变化幅度,快速上移说明高位换手极其充分",
|
||||
"dsl": "ts_pct_change(weight_avg, 20)",
|
||||
"name": "upside_illiq_20",
|
||||
"desc": "上行非流动性:仅在股价上涨日计算的价格冲击。捕捉‘涨时抛压极轻’的状态",
|
||||
"dsl": "ts_sum(where(change > 0, abs(change) / (amount + 1), 0), 20) / (ts_count(change > 0, 20) + 1)",
|
||||
},
|
||||
{
|
||||
"name": "bottom_cost_stability",
|
||||
"desc": "底部坚如磐石因子:底部5%成本的60天波动率相对于中位数的比值,波动越小说明死筹越稳固",
|
||||
"dsl": "ts_std(cost_5pct, 60) / cost_50pct",
|
||||
"name": "illiq_asymmetry_20",
|
||||
"desc": "非对称流动性比率:下行流动性恶化程度除以加上行流动性恶化程度。该值远大于1说明下跌时发生严重踩踏,股票本身必须折价(预期收益率补偿极高)",
|
||||
"dsl": "(ts_sum(where(change < 0, abs(change)/(amount+1), 0), 20) + 1) / (ts_sum(where(change > 0, abs(change)/(amount+1), 0), 20) + 1)",
|
||||
},
|
||||
{
|
||||
"name": "pivot_reversion",
|
||||
"desc": "盈亏分界线乖离修复:价格偏离50%分位点除以近20日价格标准差,用于寻找超跌后的均值回归买点",
|
||||
"dsl": "(close - cost_50pct) / ts_std(close, 20)",
|
||||
},
|
||||
{
|
||||
"name": "chip_transition",
|
||||
"desc": "强弱筹码切换度:上方厚度与下方厚度差值的20日变化量。由正变负说明筹码彻底完成了自上而下的转移(洗盘结束)",
|
||||
"dsl": "ts_delta((cost_85pct - cost_50pct) - (cost_50pct - cost_15pct), 20)",
|
||||
"name": "pastor_stambaugh_proxy",
|
||||
"desc": "Pastor-Stambaugh流动性贝塔代理:收益率与滞后一期带有符号(涨跌)成交额的相关性。反映市场由于流动性短缺导致的价格过度反转现象",
|
||||
"dsl": "ts_corr(change, sign(ts_delay(change, 1)) * ts_delay(amount, 1), 20)",
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user