diff --git a/generated_alpha/2026/01/14/Pro_deepseek-ai_DeepSeek-V3.1-Terminus_172610.txt b/generated_alpha/2026/01/14/Pro_deepseek-ai_DeepSeek-V3.1-Terminus_172610.txt new file mode 100644 index 0000000..501965b --- /dev/null +++ b/generated_alpha/2026/01/14/Pro_deepseek-ai_DeepSeek-V3.1-Terminus_172610.txt @@ -0,0 +1,30 @@ +group_neutralize(ts_rank(volume,20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(turnover,20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_delta(close,1),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_mean(volume,5),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_std_dev(turnover,10),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_corr(volume,turnover,10),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_sum(volume,5),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_delay(volume,5),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_zscore(volume,10),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_av_diff(volume,10),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(divide(volume,ts_mean(volume,20)),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(subtract(turnover,ts_mean(turnover,20)),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(multiply(volume,turnover),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_delta(turnover,5),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_product(divide(volume,ts_delay(volume,1)),5),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_scale(volume,20),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(sign(ts_delta(volume,1)),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(greater(volume,ts_delay(volume,1)),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_count_nans(volume,10),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_covariance(volume,turnover,10),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(if_else(volume>ts_mean(volume,20),1,-1),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_arg_max(volume,10),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_arg_min(turnover,10),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_backfill(volume,10),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(signed_power(volume,0.5),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_decay_linear(volume,5),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_quantile(volume,10),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(add(volume,turnover),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(abs(ts_delta(volume,1)),20),pv13_h_min20_top3000_sector) +group_neutralize(ts_rank(ts_regression(volume,turnover,10),20),pv13_h_min20_top3000_sector) \ No newline at end of file diff --git a/generated_alpha/2026/01/14/Qwen_Qwen3-VL-235B-A22B-Instruct_173201.txt b/generated_alpha/2026/01/14/Qwen_Qwen3-VL-235B-A22B-Instruct_173201.txt new file mode 100644 index 0000000..d747482 --- /dev/null +++ b/generated_alpha/2026/01/14/Qwen_Qwen3-VL-235B-A22B-Instruct_173201.txt @@ -0,0 +1,29 @@ +ts_zscore(add(ts_mean(volume, 20), ts_mean(turnover, 20)), 60) +ts_rank(divide(ts_delta(price, 5), price), 120) +group_zscore(ts_std_dev(volume, 30), sector) +ts_scale(ts_corr(volume, turnover, 60), 90) +ts_av_diff(ts_mean(price, 10), 20) +ts_quantile(ts_delta(volume, 10), 60) +ts_arg_max(ts_mean(turnover, 5), 30) +ts_arg_min(ts_std_dev(price, 10), 20) +ts_backfill(ts_delta(price, 1), 5, 1) +ts_count_nans(ts_mean(volume, 5), 10) +ts_covariance(volume, turnover, 30) +ts_decay_linear(ts_mean(price, 5), 10) +ts_delay(ts_zscore(volume, 20), 5) +ts_product(ts_mean(turnover, 5), 10) +ts_regression(price, volume, 30, 0, 0) +ts_std_dev(ts_delta(price, 5), 20) +ts_sum(ts_mean(volume, 5), 10) +ts_zscore(ts_mean(turnover, 10), 30) +group_neutralize(ts_rank(volume, 60), industry) +group_scale(ts_mean(price, 5), sector) +group_rank(ts_std_dev(turnover, 10), industry) +ts_rank(ts_delta(ts_mean(volume, 5), 5), 30) +ts_av_diff(ts_mean(price, 10), 20) +ts_quantile(ts_delta(turnover, 5), 60) +ts_arg_max(ts_mean(volume, 5), 20) +ts_arg_min(ts_std_dev(turnover, 5), 10) +ts_backfill(ts_delta(price, 1), 3, 1) +ts_count_nans(ts_mean(turnover, 5), 10) +ts_covariance(price, volume, 30) \ No newline at end of file diff --git a/generated_alpha/2026/01/14/deepseek-ai_DeepSeek-V3.2-Exp_173100.txt b/generated_alpha/2026/01/14/deepseek-ai_DeepSeek-V3.2-Exp_173100.txt new file mode 100644 index 0000000..1cffa4d --- /dev/null +++ b/generated_alpha/2026/01/14/deepseek-ai_DeepSeek-V3.2-Exp_173100.txt @@ -0,0 +1,36 @@ +group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector) +group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector) +group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector) +group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector) + +add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)) +add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)) +subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) + +ts_rank(ts_mean(market_breadth, 60), 60) +ts_rank(ts_mean(vix, 60), 60) +add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)) +ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) + +if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1) +if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1) + +multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)) +multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))) + +ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60) +ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60) + +multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)) +multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)) + +group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)), pv13_h_min20_top3000_sector) +group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)), pv13_h_min20_top3000_sector) + +subtract(group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)), pv13_h_min20_top3000_sector), group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)), pv13_h_min20_top3000_sector)) + +ts_zscore(subtract(group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)), pv13_h_min20_top3000_sector), group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)), pv13_h_min20_top3000_sector)), 20) + +winsorize(ts_zscore(subtract(group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)), pv13_h_min20_top3000_sector), group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)), pv13_h_min20_top3000_sector)), 20), 4) + +scale(winsorize(ts_zscore(subtract(group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)), pv13_h_min20_top3000_sector), group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)), pv13_h_min20_top3000_sector)), 20), 4)) \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..1366821 --- /dev/null +++ b/main.py @@ -0,0 +1,404 @@ +# -*- coding: utf-8 -*- +import os +import random +import sys +import openai +import httpx +import csv +from datetime import datetime +import jieba +import time + +sys.path.append(os.path.join(os.path.abspath(__file__).split('AlphaGenerator')[0] + 'AlphaGenerator')) +PROJECT_PATH = os.path.join(os.path.abspath(__file__).split('AlphaGenerator')[0] + 'AlphaGenerator') + +PREPARE_PROMPT = os.path.join(PROJECT_PATH, 'prepare_prompt') +KEYS_TEXT = os.path.join(PREPARE_PROMPT, 'keys_text.txt') + +USE_AI = 1 + +TEMPERATURE = 0.1 + +RANDOM_DATA_SETS_COUNT = 100 + +SILICONFLOW_API_KEY = "sk-pvdiisdowmuwkrpnxsrlhxaovicqibmlljwrwwvbbdjaitdl" +SILICONFLOW_BASE_URL = "https://api.siliconflow.cn/v1" +MODELS = [ + 'Pro/deepseek-ai/DeepSeek-V3.1-Terminus', + 'deepseek-ai/DeepSeek-V3.2-Exp', + 'Qwen/Qwen3-VL-235B-A22B-Instruct', + # 'MiniMaxAI/MiniMax-M2', + # 'zai-org/GLM-4.6', + # 'inclusionAI/Ring-flash-2.0', + # 'zai-org/GLM-4.6', + # 'inclusionAI/Ling-flash-2.0', + # 'inclusionAI/Ring-flash-2.0', +] + + +def process_text(text): + filter_list = ['\n', '\t', '\r', '\b', '\f', '\v', ':', '的', '或', '10', '天', '了', '可', '是', '该', ',', ' ', '、', '让', '和', '集', + '/', '日', '在', '(', '_', '-', ')', '(', '上', '距', '与', '比', '下', '及', ')', '...', ';', '%', '&', '+', ',', '.', + ':', ';', '<', '=', '>', '?', '[', ']', '|', '—', '。' + ] + + text_list = jieba.lcut(text) + results = [] + for tl in text_list: + should_include = True + for fl in filter_list: + if fl == tl: + should_include = False + break + if should_include: + results.append(tl.lower()) + + results = [item for item in results if item != '"' and len(item) > 2] + + if results: + return list(set(results)) + else: + return None + + +def keysTextLoader(): + if not os.path.exists(KEYS_TEXT): + print(f"文件不存在: {KEYS_TEXT}") + exit(1) + with open(KEYS_TEXT, 'r', encoding='utf-8') as f: + text_list = [line.strip() for line in f if line.strip()] + if not text_list: + print('关键词文本无数据, 程序退出') + exit(1) + + result_str = process_text(';'.join(text_list)) + + print(f'\n关键词文本处理结果: {result_str}\n') + + return result_str + + +def txtFileLoader(file_path): + if not os.path.exists(file_path): + print(f"文件不存在: {file_path}") + exit(1) + with open(file_path, 'r', encoding='utf-8') as f: + return [line.strip() for line in f if line.strip()] + + +def csvFileLoader(file_path, keys_text): + if not os.path.exists(file_path): + print(f"文件不存在: {file_path}") + exit(1) + + data_dict = {} # 使用字典来存储,以id为键 + + with open(file_path, 'r', encoding='utf-8') as f: + reader = csv.reader(f) + for row in reader: + for key in keys_text: + if key in row[11] or key in row[12]: + item_id = row[0] + # 如果id不存在,或者想要保留第一个出现的记录 + if item_id not in data_dict: + data_dict[item_id] = { + 'id': int(row[0]), + 'data_set_name': f"可以使用:{row[1]}", + 'description': f"不可使用,仅供参考:{row[2]}" + } + + # 将字典的值转换为列表 + return list(data_dict.values()) + + +def extend_data_sets(file_path, original_data_sets): + result = original_data_sets.copy() + + if not os.path.exists(file_path): + print(f"文件不存在: {file_path}") + return result + + all_data_sets = [] + with open(file_path, 'r', encoding='utf-8') as f: + reader = csv.reader(f) + for row in reader: + all_data_sets.append({ + 'id': int(row[0]), + 'data_set_name': f"可以使用:{row[1]}", + 'description': f"不可使用,仅供参考:{row[2]}", + }) + + if RANDOM_DATA_SETS_COUNT and RANDOM_DATA_SETS_COUNT > 0: + total_count = len(original_data_sets) + RANDOM_DATA_SETS_COUNT + + # 找出所有可用的数据集(不在原始数据中的) + available_datasets = [] + + # 先获取原始数据集的所有ID + original_ids = [] + for item in original_data_sets: + original_ids.append(item['id']) + + # 找出不在原始数据中的数据集 + for dataset in all_data_sets: + exists = False + for oid in original_ids: + if dataset['id'] == oid: + exists = True + break + if not exists: + available_datasets.append(dataset) + + # 计算最多能添加多少个 + max_can_add = len(available_datasets) + need_to_add = RANDOM_DATA_SETS_COUNT + + if need_to_add > max_can_add: + print(f"警告:要求添加{need_to_add}个,但只有{max_can_add}个可用") + need_to_add = max_can_add + + # 随机选择需要数量的数据集 + random_selected = random.sample(available_datasets, need_to_add) + + # 添加到结果 + result.extend(random_selected) + + final_result = [] + for item in result: + final_result.append({ + 'data_set_name': item['data_set_name'], + 'description': item['description'] + }) + + return final_result + + +def promptLoader(alpha_prompt_path): + if not os.path.exists(alpha_prompt_path): + print("alpha_prompt.txt文件不存在") + exit(1) + with open(alpha_prompt_path, 'r', encoding='utf-8') as f: + prompt = f.read().strip() + if not prompt: + print("alpha_prompt.txt是空的") + exit(1) + return prompt.replace('\n\n', '\n') + + +def operatorLoader(operator_prompt_path): + if not os.path.exists(operator_prompt_path): + print("operator.txt文件不存在") + exit(1) + with open(operator_prompt_path, 'r', encoding='utf-8') as f: + operator_lines = [line.strip() for line in f.readlines() if line.strip()] + if not operator_lines: + print("operator.txt是空的") + exit(1) + return "\n".join(operator_lines) + +def mistakesNoteBookLoader(mistakes_notebook_path): + if not os.path.exists(mistakes_notebook_path): + print("mistakes_notebook.txt文件不存在") + return '' + with open(mistakes_notebook_path, 'r', encoding='utf-8') as f: + mistakes_notebook_lines = [line.strip() for line in f.readlines() if line.strip()] + if not mistakes_notebook_lines: + print("mistakes_notebook.txt是空的") + exit(1) + return "\n".join(mistakes_notebook_lines) + +def create_result_folder(): + folder_name = "generated_alpha" + if not os.path.exists(folder_name): + os.makedirs(folder_name) + + now = datetime.now() + year_folder = os.path.join(folder_name, str(now.year)) + month_folder = os.path.join(year_folder, f"{now.month:02d}") + day_folder = os.path.join(month_folder, f"{now.day:02d}") + + if not os.path.exists(year_folder): + os.makedirs(year_folder) + if not os.path.exists(month_folder): + os.makedirs(month_folder) + if not os.path.exists(day_folder): + os.makedirs(day_folder) + + return day_folder + + +def call_siliconflow(prompt, model): + try: + client = openai.OpenAI( + api_key=SILICONFLOW_API_KEY, + base_url=SILICONFLOW_BASE_URL + ) + + response = client.chat.completions.create( + model=model, + messages=[ + {"role": "system", "content": "你是一个专业的量化投资专家,擅长编写Alpha因子。"}, + {"role": "user", "content": prompt} + ], + temperature=TEMPERATURE + ) + + return response.choices[0].message.content + + except openai.AuthenticationError: + print("API密钥错误") + except openai.RateLimitError: + print("调用频率限制") + except openai.APIError as e: + print(f"API错误: {e}") + except Exception as e: + print(f"其他错误: {e}") + exit(1) + + +def save_result(result, folder, model_name): + now = datetime.now() + time_filename = now.strftime("%H%M%S") + + filename = f"{model_name}_{time_filename}.txt" + filepath = os.path.join(folder, filename) + + with open(filepath, 'w', encoding='utf-8') as f: + f.write(result) + + print(f"结果保存到: {filepath}") + + +def get_user_info(): + headers = {"Authorization": f"Bearer {SILICONFLOW_API_KEY}"} + url = "https://api.siliconflow.cn/v1/user/info" + response = httpx.get(url, headers=headers) + data = response.json()['data'] + balance = data['totalBalance'] + print(f"余额: {balance}") + return float(balance) + + +def manual_prompt(prompt): + manual_prompt_path = os.path.join(PROJECT_PATH, "manual_prompt") + + if not os.path.exists(manual_prompt_path): + os.makedirs(manual_prompt_path) + + now = datetime.now() + year_folder = os.path.join(manual_prompt_path, str(now.year)) + month_folder = os.path.join(year_folder, f"{now.month:02d}") + day_folder = os.path.join(month_folder, f"{now.day:02d}") + + if not os.path.exists(year_folder): + os.makedirs(year_folder) + if not os.path.exists(month_folder): + os.makedirs(month_folder) + if not os.path.exists(day_folder): + os.makedirs(day_folder) + + # 文件名后添加保存时间 + filename = f"manual_prompt_{now.strftime('%Y%m%d%H%M%S')}.txt" + filepath = os.path.join(day_folder, filename) + + with open(filepath, 'w', encoding='utf-8') as f: + f.write(prompt) + + print(f"手动提示词保存到: {filepath}") + + +def call_ai(prompt, model): + balance = get_user_info() + + folder = create_result_folder() + + print(f"正在调用AI...{model}") + result = call_siliconflow(prompt, model) + + if result: + print(f"AI回复: {result[:200]}...") + model_name = model.replace("/", "_") + save_result(result, folder, model_name) + used_balance = balance - get_user_info() + print(f'本次调用 api 使用额度 {used_balance}') + else: + print("AI调用失败") + + +def prepare_prompt(data_sets): + prompt = '' + + # 读取基础提示词 + alpha_prompt_path = os.path.join(PREPARE_PROMPT, "alpha_prompt.txt") + prompt += promptLoader(alpha_prompt_path) + + # 读取操作符 + prompt += "\n\n以下是我的账号有权限使用的操作符, 请严格按照操作符, 进行生成,组合因子\n\n" + prompt += "========================= 操作符开始 =======================================\n" + prompt += "注意: Operator: 后面的是操作符(是可以使用的),\nDescription: 此字段后面的是操作符对应的描述或使用说明(禁止使用, 仅供参考), Description字段后面的内容是使用说明, 不是操作符\n" + prompt += "特别注意!!!! 必须按照操作符字段Operator的使用说明生成 alpha" + operator_prompt_path = os.path.join(PREPARE_PROMPT, "operator.txt") + operator = operatorLoader(operator_prompt_path) + prompt += operator + prompt += "\n========================= 操作符结束 =======================================\n\n" + + prompt += "========================= 数据字段开始 =======================================\n" + prompt += "注意: data_set_name: 后面的是数据字段(可以使用), description: 此字段后面的是数据字段对应的描述或使用说明(不能使用), description_cn字段后面的内容是中文使用说明(不能使用)\n\n" + for data_set in data_sets: + prompt += str(data_set) + '\n' + + prompt += "========================= 数据字段结束 =======================================\n\n" + + prompt += "以上数据字段和操作符, 按照Description说明组合, 但是每一个 alpha 组合的使用的数据字段和操作符不要过于集中, 在符合语法的情况下, 多尝试不同的组合\n\n" + + mistakes_note_book_path = os.path.join(PREPARE_PROMPT, "mistakes_notebook.txt") + mistakesNoteBook = mistakesNoteBookLoader(mistakes_note_book_path) + if mistakesNoteBook: + prompt += mistakesNoteBook + + return prompt + + +def main(): + # 将金融逻辑, 分割成标签 + keys_text = keysTextLoader() + + # 分割好的标签, 搜索对应的数据集, 返回匹配到的结果 + data_sets_path = os.path.join(PREPARE_PROMPT, "all_data_combined.csv") + result_data_sets = csvFileLoader(data_sets_path, keys_text) + + if not result_data_sets: + print(f'搜索数据集为空, 程序退出') + exit(1) + + # 扩展数据集 + mistakes_notebook_path = os.path.join(PREPARE_PROMPT, "all_data_combined.csv") + if RANDOM_DATA_SETS_COUNT: + print('=' * 100) + print(f'扩展前 {len(result_data_sets)} 条数据') + result_data_sets = extend_data_sets(mistakes_notebook_path, result_data_sets) + print(f'扩展后 {len(result_data_sets)} 条数据') + print('=' * 100) + + print(f'从数据集中提取了 {len(result_data_sets)} 条数据') + if len(result_data_sets) > 500: + data_sets = random.sample(result_data_sets, 10) + else: + data_sets = result_data_sets + + # 组合提示词 + prompt = prepare_prompt(data_sets) + + # # 如果需要手动在页面段模型, 使用提示词, 打开这个, 将生成的提示词存到本地 + manual_prompt(prompt) + + if USE_AI: + for model in MODELS: + # 如果需要使用模型, 打开这个 + call_ai(prompt, model) + + time.sleep(5) + + +if __name__ == "__main__": + main() diff --git a/manual_prompt/2026/01/14/manual_prompt_20260114172557.txt b/manual_prompt/2026/01/14/manual_prompt_20260114172557.txt new file mode 100644 index 0000000..8744170 --- /dev/null +++ b/manual_prompt/2026/01/14/manual_prompt_20260114172557.txt @@ -0,0 +1,350 @@ +Liquidity Stratification Pricing Factor +Hypothesis +During periods of liquidity tightening or market stress, investors' preference for asset liquidity increases sharply, leading to an intensified phenomenon of liquidity stratification. High-liquidity stocks experience relatively smaller declines due to a "liquidity premium," while low-liquidity stocks are sold off significantly due to a "liquidity discount." When market stress eases and the liquidity environment shifts towards easing, previously overly discounted low-liquidity stocks often exhibit stronger mean reversion and generate more substantial rebounds. Conversely, in the initial phase of a shift from loose to tight market liquidity, high-liquidity stocks may demonstrate stronger defensive characteristics. +Implementation Plan +Construct a comprehensive liquidity measurement indicator incorporating trading volume, turnover rate, bid-ask spread, and the Amihud illiquidity ratio. Use a time-series market regime identification operator (e.g., based on thresholds for market breadth, monetary conditions index, or volatility index VIX) to determine the prevailing "liquidity regime" of the market. During phases identified as a transition from "tight" to "easy," apply positive weights to the portfolio of stocks with the worst prior liquidity (bottom 20% based on the composite indicator). In the initial phase of liquidity "tightening," apply positive weights to the portfolio of stocks with the best liquidity (top 20%). Utilize cross-sectional ranking and group assignment to construct the investment portfolio. +Alpha Factor Optimization Suggestions +Pure liquidity metrics can be strongly influenced by firm market capitalization and industry attributes. A two-step neutralization process is recommended: First, perform liquidity ranking within industries to eliminate differences in industry trading characteristics. Second, after factor construction, control for exposure to the size factor. Furthermore, introducing the "duration of liquidity shock" as a weighting parameter could help refine the strategy. Stocks that have endured liquidity pressure for a longer period could be assigned higher weights during the reversal phase to more precisely capture the rebound momentum following suppression. +*=========================================================================================* +输出格式: +输出必须是且仅是纯文本。 +每一行是一个完整、独立、语法正确的WebSim表达式。 +严禁任何形式的解释、编号、标点包裹(如引号)、Markdown格式或额外文本。 +===================== !!! 重点(输出方式) !!! ===================== +现在,请严格遵守以上所有规则,开始生成可立即在WebSim中运行的复合因子表达式。 +不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 +**输出格式**(一行一个表达式, 每个表达式中间需要添加一个空行, 只要表达式本身, 不需要赋值, 不要解释, 不需要序号, 也不要输出多余的东西): +表达式 +表达式 +表达式 +... +表达式 +================================================================= +重申:请确保所有表达式都使用WorldQuant WebSim平台函数,不要使用pandas、numpy或其他Python库函数。输出必须是一行有效的WQ表达式。 +以下是我的账号有权限使用的操作符, 请严格按照操作符, 以及我提供的数据集, 进行生成,组合 30 个alpha: +不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 +================================================================= +ts_product ts_zscore ts_mean ts_scale add sign subtract ts_delta ts_rank greater ts_av_diff ts_quantile ts_count_nans ts_covariance +ts_arg_min divide ts_corr multiply if_else ts_sum ts_delay group_zscore ts_arg_max ts_std_de ts_backfill +以上这些操作符不能传入事件类型的数据集, 只能传入时间序列数据集, 不能传入事件数据,不能传入事件数据,不能传入事件数据 + +以下是我的账号有权限使用的操作符, 请严格按照操作符, 进行生成,组合因子 + +========================= 操作符开始 ======================================= +注意: Operator: 后面的是操作符(是可以使用的), +Description: 此字段后面的是操作符对应的描述或使用说明(禁止使用, 仅供参考), Description字段后面的内容是使用说明, 不是操作符 +特别注意!!!! 必须按照操作符字段Operator的使用说明生成 alphaOperator: abs(x) +Description: Absolute value of x +Operator: add(x, y, filter = false) +Description: Add all inputs (at least 2 inputs required). If filter = true, filter all input NaN to 0 before adding +Operator: densify(x) +Description: Converts a grouping field of many buckets into lesser number of only available buckets so as to make working with grouping fields computationally efficient +Operator: divide(x, y) +Description: x / y +Operator: inverse(x) +Description: 1 / x +Operator: log(x) +Description: Natural logarithm. For example: Log(high/low) uses natural logarithm of high/low ratio as stock weights. +Operator: max(x, y, ..) +Description: Maximum value of all inputs. At least 2 inputs are required +Operator: min(x, y ..) +Description: Minimum value of all inputs. At least 2 inputs are required +Operator: multiply(x ,y, ... , filter=false) +Description: Multiply all inputs. At least 2 inputs are required. Filter sets the NaN values to 1 +Operator: power(x, y) +Description: x ^ y +Operator: reverse(x) +Description: - x +Operator: sign(x) +Description: if input > 0, return 1; if input < 0, return -1; if input = 0, return 0; if input = NaN, return NaN; +Operator: signed_power(x, y) +Description: x raised to the power of y such that final result preserves sign of x +Operator: sqrt(x) +Description: Square root of x +Operator: subtract(x, y, filter=false) +Description: x-y. If filter = true, filter all input NaN to 0 before subtracting +Operator: and(input1, input2) +Description: Logical AND operator, returns true if both operands are true and returns false otherwise +Operator: if_else(input1, input2, input 3) +Description: If input1 is true then return input2 else return input3. +Operator: input1 < input2 +Description: If input1 < input2 return true, else return false +Operator: input1 <= input2 +Description: Returns true if input1 <= input2, return false otherwise +Operator: input1 == input2 +Description: Returns true if both inputs are same and returns false otherwise +Operator: input1 > input2 +Description: Logic comparison operators to compares two inputs +Operator: input1 >= input2 +Description: Returns true if input1 >= input2, return false otherwise +Operator: input1!= input2 +Description: Returns true if both inputs are NOT the same and returns false otherwise +Operator: is_nan(input) +Description: If (input == NaN) return 1 else return 0 +Operator: not(x) +Description: Returns the logical negation of x. If x is true (1), it returns false (0), and if input is false (0), it returns true (1). +Operator: or(input1, input2) +Description: Logical OR operator returns true if either or both inputs are true and returns false otherwise +Operator: days_from_last_change(x) +Description: Amount of days since last change of x +Operator: hump(x, hump = 0.01) +Description: Limits amount and magnitude of changes in input (thus reducing turnover) +Operator: kth_element(x, d, k) +Description: Returns K-th value of input by looking through lookback days. This operator can be used to backfill missing data if k=1 +Operator: last_diff_value(x, d) +Description: Returns last x value not equal to current x value from last d days +Operator: ts_arg_max(x, d) +Description: Returns the relative index of the max value in the time series for the past d days. If the current day has the max value for the past d days, it returns 0. If previous day has the max value for the past d days, it returns 1 +Operator: ts_arg_min(x, d) +Description: Returns the relative index of the min value in the time series for the past d days; If the current day has the min value for the past d days, it returns 0; If previous day has the min value for the past d days, it returns 1. +Operator: ts_av_diff(x, d) +Description: Returns x - tsmean(x, d), but deals with NaNs carefully. That is NaNs are ignored during mean computation +Operator: ts_backfill(x,lookback = d, k=1, ignore="NAN") +Description: Backfill is the process of replacing the NAN or 0 values by a meaningful value (i.e., a first non-NaN value) +Operator: ts_corr(x, y, d) +Description: Returns correlation of x and y for the past d days +Operator: ts_count_nans(x ,d) +Description: Returns the number of NaN values in x for the past d days +Operator: ts_covariance(y, x, d) +Description: Returns covariance of y and x for the past d days +Operator: ts_decay_linear(x, d, dense = false) +Description: Returns the linear decay on x for the past d days. Dense parameter=false means operator works in sparse mode and we treat NaN as 0. In dense mode we do not. +Operator: ts_delay(x, d) +Description: Returns x value d days ago +Operator: ts_delta(x, d) +Description: Returns x - ts_delay(x, d) +Operator: ts_mean(x, d) +Description: Returns average value of x for the past d days. +Operator: ts_product(x, d) +Description: Returns product of x for the past d days +Operator: ts_quantile(x,d, driver="gaussian" ) +Description: It calculates ts_rank and apply to its value an inverse cumulative density function from driver distribution. Possible values of driver (optional ) are "gaussian", "uniform", "cauchy" distribution where "gaussian" is the default. +Operator: ts_rank(x, d, constant = 0) +Description: Rank the values of x for each instrument over the past d days, then return the rank of the current value + constant. If not specified, by default, constant = 0. +Operator: ts_regression(y, x, d, lag = 0, rettype = 0) +Description: Returns various parameters related to regression function +Operator: ts_scale(x, d, constant = 0) +Description: Returns (x - ts_min(x, d)) / (ts_max(x, d) - ts_min(x, d)) + constant. This operator is similar to scale down operator but acts in time series space +Operator: ts_std_dev(x, d) +Description: Returns standard deviation of x for the past d days +Operator: ts_step(1) +Description: Returns days' counter +Operator: ts_sum(x, d) +Description: Sum values of x for the past d days. +Operator: ts_zscore(x, d) +Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean: (x - tsmean(x,d)) / tsstddev(x,d). This operator may help reduce outliers and drawdown. +Operator: normalize(x, useStd = false, limit = 0.0) +Description: Calculates the mean value of all valid alpha values for a certain date, then subtracts that mean from each element +Operator: quantile(x, driver = gaussian, sigma = 1.0) +Description: Rank the raw vector, shift the ranked Alpha vector, apply distribution (gaussian, cauchy, uniform). If driver is uniform, it simply subtract each Alpha value with the mean of all Alpha values in the Alpha vector +Operator: rank(x, rate=2) +Description: Ranks the input among all the instruments and returns an equally distributed number between 0.0 and 1.0. For precise sort, use the rate as 0 +Operator: scale(x, scale=1, longscale=1, shortscale=1) +Description: Scales input to booksize. We can also scale the long positions and short positions to separate scales by mentioning additional parameters to the operator +Operator: winsorize(x, std=4) +Description: Winsorizes x to make sure that all values in x are between the lower and upper limits, which are specified as multiple of std. +Operator: zscore(x) +Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean +Operator: vec_avg(x) +Description: Taking mean of the vector field x +Operator: vec_sum(x) +Description: Sum of vector field x +Operator: bucket(rank(x), range="0, 1, 0.1" or buckets = "2,5,6,7,10") +Description: Convert float values into indexes for user-specified buckets. Bucket is useful for creating group values, which can be passed to GROUP as input +Operator: trade_when(x, y, z) +Description: Used in order to change Alpha values only under a specified condition and to hold Alpha values in other cases. It also allows to close Alpha positions (assign NaN values) under a specified condition +Operator: group_backfill(x, group, d, std = 4.0) +Description: If a certain value for a certain date and instrument is NaN, from the set of same group instruments, calculate winsorized mean of all non-NaN values over last d days +Operator: group_mean(x, weight, group) +Description: All elements in group equals to the mean +Operator: group_neutralize(x, group) +Description: Neutralizes Alpha against groups. These groups can be subindustry, industry, sector, country or a constant +Operator: group_rank(x, group) +Description: Each elements in a group is assigned the corresponding rank in this group +Operator: group_scale(x, group) +Description: Normalizes the values in a group to be between 0 and 1. (x - groupmin) / (groupmax - groupmin) +Operator: group_zscore(x, group) +Description: Calculates group Z-score - numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean. zscore = (data - mean) / stddev of x for each instrument within its group. +========================= 操作符结束 ======================================= + +========================= 数据字段开始 ======================================= +注意: data_set_name: 后面的是数据字段(可以使用), description: 此字段后面的是数据字段对应的描述或使用说明(不能使用), description_cn字段后面的内容是中文使用说明(不能使用) + +{'data_set_name': '可以使用:call_breakeven_10', 'description': "不可使用,仅供参考:Price at which a stock's call options with expiration 10 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:call_breakeven_1080', 'description': "不可使用,仅供参考:Price at which a stock's call options with expiration 1080 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:call_breakeven_120', 'description': "不可使用,仅供参考:Price at which a stock's call options with expiration 120 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:call_breakeven_150', 'description': "不可使用,仅供参考:Price at which a stock's call options with expiration 150 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:call_breakeven_180', 'description': "不可使用,仅供参考:Price at which a stock's call options with expiration 180 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:call_breakeven_20', 'description': "不可使用,仅供参考:Price at which a stock's call options with expiration 20 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:call_breakeven_270', 'description': "不可使用,仅供参考:Price at which a stock's call options with expiration 270 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:call_breakeven_30', 'description': "不可使用,仅供参考:Price at which a stock's call options with expiration 30 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:call_breakeven_60', 'description': "不可使用,仅供参考:Price at which a stock's call options with expiration 60 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:option_breakeven_30', 'description': "不可使用,仅供参考:Price at which a stock's options with expiration 30 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:option_breakeven_360', 'description': "不可使用,仅供参考:Price at which a stock's options with expiration 360 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:option_breakeven_720', 'description': "不可使用,仅供参考:Price at which a stock's options with expiration 720 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:put_breakeven_1080', 'description': "不可使用,仅供参考:Price at which a stock's put options with expiration 1080 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:put_breakeven_120', 'description': "不可使用,仅供参考:Price at which a stock's put options with expiration 120 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:put_breakeven_150', 'description': "不可使用,仅供参考:Price at which a stock's put options with expiration 150 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:put_breakeven_180', 'description': "不可使用,仅供参考:Price at which a stock's put options with expiration 180 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:put_breakeven_720', 'description': "不可使用,仅供参考:Price at which a stock's put options with expiration 720 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:fnd6_capxv', 'description': '不可使用,仅供参考:Capital Expend Property, Plant and Equipment Schd V'} +{'data_set_name': '可以使用:fnd6_ciother', 'description': '不可使用,仅供参考:Comp. Inc. - Other Adj.'} +{'data_set_name': '可以使用:fnd6_newa2v1300_oiadp', 'description': '不可使用,仅供参考:Operating Income After Depreciation'} +{'data_set_name': '可以使用:fnd6_newqeventv110_gdwliaq', 'description': '不可使用,仅供参考:Impairment of Goodwill After-tax'} +{'data_set_name': '可以使用:fnd6_newqeventv110_spcedq', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Diluted'} +{'data_set_name': '可以使用:fnd6_newqv1300_ciotherq', 'description': '不可使用,仅供参考:Comp Inc - Other Adj'} +{'data_set_name': '可以使用:fnd6_oiadps', 'description': '不可使用,仅供参考:Operating Income after Depreciation'} +{'data_set_name': '可以使用:fnd6_txtubpospinc', 'description': '不可使用,仅供参考:Increase - Prior Tax Positions'} +{'data_set_name': '可以使用:sales_ps', 'description': '不可使用,仅供参考:Sales per Share (Quarterly)'} +{'data_set_name': '可以使用:multi_factor_acceleration_score_derivative', 'description': '不可使用,仅供参考:Change in the acceleration of multi-factor score compared to previous period.'} +{'data_set_name': '可以使用:anl4_netdebt_flag', 'description': '不可使用,仅供参考:Net debt - forecast type (revision/new/...)'} +{'data_set_name': '可以使用:min_reported_eps_guidance', 'description': '不可使用,仅供参考:Reported Earnings Per Share - Minimum guidance value for the annual period'} +{'data_set_name': '可以使用:pv13_h2_min2_1k_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} +{'data_set_name': '可以使用:pv13_h_min22_1000_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} +{'data_set_name': '可以使用:pv13_h_min24_500_sector', 'description': '不可使用,仅供参考:Grouping fields for top 500'} +{'data_set_name': '可以使用:pv13_h_min2_focused_sector', 'description': '不可使用,仅供参考:Grouping fields for top 200'} +{'data_set_name': '可以使用:pv13_h_min52_1k_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} +{'data_set_name': '可以使用:news_max_up_amt', 'description': '不可使用,仅供参考:The after the news high minus the price at the time of the news'} +{'data_set_name': '可以使用:nws18_sse', 'description': '不可使用,仅供参考:Sentiment of phrases impacting the company'} +{'data_set_name': '可以使用:fn_def_tax_assets_liab_net_q', 'description': '不可使用,仅供参考:Amount, after allocation of valuation allowances and deferred tax liability, of deferred tax asset attributable to deductible differences and carryforwards, without jurisdictional netting.'} +{'data_set_name': '可以使用:fn_def_tax_liab_a', 'description': '不可使用,仅供参考:Amount, after deferred tax asset, of deferred tax liability attributable to taxable differences without jurisdictional netting.'} +{'data_set_name': '可以使用:fn_op_lease_min_pay_due_in_2y_a', 'description': '不可使用,仅供参考:Amount of required minimum rental payments for operating leases having an initial or remaining non-cancelable lease term in excess of 1 year due in the 2nd fiscal year following the latest fiscal year. Excludes interim and annual periods when interim periods are reported on a rolling approach, from latest balance sheet date.'} +{'data_set_name': '可以使用:fn_treasury_stock_shares_a', 'description': '不可使用,仅供参考:Number of common and preferred shares that were previously issued and that were repurchased by the issuing entity and held in treasury on the financial statement date. This stock has no voting rights and receives no dividends.'} +{'data_set_name': '可以使用:fnd6_newa1v1300_capx', 'description': '不可使用,仅供参考:Capital Expenditures'} +{'data_set_name': '可以使用:anl4_ptp_median', 'description': '不可使用,仅供参考:Pretax income - median of estimations'} +{'data_set_name': '可以使用:fn_business_acq_ppne_a', 'description': '不可使用,仅供参考:Business Combination, Assumed Property, Plant and Equipment'} +{'data_set_name': '可以使用:fnd6_txdfo', 'description': '不可使用,仅供参考:Deferred Taxes - Foreign'} +{'data_set_name': '可以使用:fnd6_lul3', 'description': '不可使用,仅供参考:Liabilities Level 3 (Unobservable)'} +{'data_set_name': '可以使用:fn_def_tax_assets_net_a', 'description': '不可使用,仅供参考:Deferred Tax Assets Net Of Valuation Allowance'} +{'data_set_name': '可以使用:fn_prepaid_expense_q', 'description': '不可使用,仅供参考:Carrying amount for an unclassified balance sheet date of expenditures made in advance of when the economic benefit of the cost will be realized, and which will be expensed in future periods with the passage of time or when a triggering event occurs. For a classified balance sheet, represents the noncurrent portion of prepaid expenses (the current portion has a separate concept).'} +{'data_set_name': '可以使用:nws12_afterhsz_maxdnamt', 'description': '不可使用,仅供参考:The price at the time of the news minus the after the news low'} +{'data_set_name': '可以使用:nws12_prez_maxup', 'description': '不可使用,仅供参考:Percent change from the price at the time of the news to the after the news high'} +{'data_set_name': '可以使用:goodwill_min_guidance_qtr', 'description': '不可使用,仅供参考:Minimum guidance value for Total Goodwill'} +{'data_set_name': '可以使用:anl4_fsdtlestmtbscv104_item', 'description': '不可使用,仅供参考:Financial item'} +{'data_set_name': '可以使用:fn_comp_fair_value_assumptions_weighted_avg_vol_rate_q', 'description': '不可使用,仅供参考:Weighted average expected volatility rate of share-based compensation awards.'} +{'data_set_name': '可以使用:option_breakeven_20', 'description': "不可使用,仅供参考:Price at which a stock's options with expiration 20 days in the future break even based on its recent bid/ask mean."} +{'data_set_name': '可以使用:news_mins_1_pct_dn', 'description': '不可使用,仅供参考:Number of minutes that elapsed before price went down 1 percentage point'} +{'data_set_name': '可以使用:fnd6_newqv1300_lnoq', 'description': '不可使用,仅供参考:Liabilities Netting & Other Adjustments'} +{'data_set_name': '可以使用:cashflow_per_share_estimate_count', 'description': '不可使用,仅供参考:Cash Flow Per Share - number of estimations - delay1'} +{'data_set_name': '可以使用:fnd6_newqv1300_ancq', 'description': '不可使用,仅供参考:Non-Current Assets - Total'} +{'data_set_name': '可以使用:fnd6_cptnewqv1300_nopiq', 'description': '不可使用,仅供参考:Non-Operating Income (Expense) - Total'} +{'data_set_name': '可以使用:fnd6_newqv1300_dpactq', 'description': '不可使用,仅供参考:Depreciation, Depletion and Amortization (Accumulated)'} +{'data_set_name': '可以使用:anl4_dez1safv4_est', 'description': '不可使用,仅供参考:Estimation value'} +{'data_set_name': '可以使用:fnd6_fiao', 'description': '不可使用,仅供参考:Financing Activities - Other'} +{'data_set_name': '可以使用:anl4_dei3lqfv110_item', 'description': '不可使用,仅供参考:Financial item'} +{'data_set_name': '可以使用:fnd6_newqv1300_cogsq', 'description': '不可使用,仅供参考:Cost of Goods Sold'} +{'data_set_name': '可以使用:fnd6_lifr', 'description': '不可使用,仅供参考:LIFO Reserve'} +{'data_set_name': '可以使用:fnd6_cptmfmq_dlttq', 'description': '不可使用,仅供参考:Long-Term Debt - Total'} +{'data_set_name': '可以使用:dividend_estimate_maximum', 'description': '不可使用,仅供参考:Dividend per share - The highest value among forecasts with a delay of 1 quarter'} +{'data_set_name': '可以使用:earnings_per_share_standard_deviation', 'description': '不可使用,仅供参考:Earnings per share - standard deviation of estimations'} +{'data_set_name': '可以使用:anl4_ads1detailafv110_estvalue', 'description': '不可使用,仅供参考:Estimation value'} +{'data_set_name': '可以使用:est_cashflow_fin', 'description': '不可使用,仅供参考:Cash Flow From Financing - mean of estimations'} +{'data_set_name': '可以使用:fn_repurchased_shares_value_q', 'description': '不可使用,仅供参考:Shares repurchased and either retired or put into treasury stock, likely as part of a share buyback plan.'} +{'data_set_name': '可以使用:implied_volatility_mean_30', 'description': '不可使用,仅供参考:At-the-money option-implied volatility mean for 30 days'} +{'data_set_name': '可以使用:pretax_income_standalone_value', 'description': '不可使用,仅供参考:Pretax Profit - actual value for the quarter'} +{'data_set_name': '可以使用:rp_css_price', 'description': '不可使用,仅供参考:Composite sentiment score of stock price news'} +{'data_set_name': '可以使用:earnings_per_share_nongaap_value', 'description': '不可使用,仅供参考:Non-GAAP Earnings Per Share - Actual Value'} +{'data_set_name': '可以使用:fnd6_newqeventv110_txdiq', 'description': '不可使用,仅供参考:Income Taxes - Deferred'} +{'data_set_name': '可以使用:max_free_cash_flow_guidance', 'description': '不可使用,仅供参考:The maximum guidance value for Free Cash Flow on an annual basis.'} +{'data_set_name': '可以使用:fscore_bfl_profitability', 'description': '不可使用,仅供参考:The purpose of this metric is to rank stock based on their ability to generate cash flows.'} +{'data_set_name': '可以使用:fnd6_newqeventv110_glcedq', 'description': '不可使用,仅供参考:Gain/Loss on Sale (Core Earnings Adjusted) Diluted EPS'} +{'data_set_name': '可以使用:historical_volatility_10', 'description': '不可使用,仅供参考:Close-to-close Historical volatility over 10 days'} +{'data_set_name': '可以使用:anl4_epsr_flag', 'description': '不可使用,仅供参考:GAAP Earnings - estimation type (revision/new/...), per share'} +{'data_set_name': '可以使用:nws12_prez_eodlow', 'description': '不可使用,仅供参考:Lowest price reached between the time of news and the end of the session.'} +{'data_set_name': '可以使用:anl4_basicdetailrec_bk', 'description': '不可使用,仅供参考:Broker name (int)'} +{'data_set_name': '可以使用:fnd6_newqv1300_aol2q', 'description': '不可使用,仅供参考:Assets Level 2 (Observable)'} +{'data_set_name': '可以使用:anl4_fsactualqfv4_actual', 'description': '不可使用,仅供参考:Announced financial data'} +{'data_set_name': '可以使用:nws18_qcm', 'description': '不可使用,仅供参考:News sentiment of relevant news with high confidence'} +{'data_set_name': '可以使用:pv13_new_1l_scibr', 'description': '不可使用,仅供参考:grouping fields'} +{'data_set_name': '可以使用:anl4_fsactualafv4_actual', 'description': '不可使用,仅供参考:Announced financial data'} +{'data_set_name': '可以使用:nws12_mainz_prevwap', 'description': '不可使用,仅供参考:Pre session volume weighted average price'} +{'data_set_name': '可以使用:fnd6_recd', 'description': '不可使用,仅供参考:Receivables - Estimated Doubtful'} +{'data_set_name': '可以使用:anl4_ads1detailqfv110_bk', 'description': '不可使用,仅供参考:Broker name (int)'} +{'data_set_name': '可以使用:fnd6_newa1v1300_aociother', 'description': '不可使用,仅供参考:Accum Other Comp Inc - Other Adjustments'} +{'data_set_name': '可以使用:est_rd_expense', 'description': '不可使用,仅供参考:Research and Development Expense - mean of estimations'} +{'data_set_name': '可以使用:fscore_bfl_quality', 'description': '不可使用,仅供参考:The purpose of this metric is to measure both the sustainability and certainty of earnings.'} +{'data_set_name': '可以使用:pv13_revere_level', 'description': '不可使用,仅供参考:Level of the sector within the hierarchy'} +{'data_set_name': '可以使用:anl4_netprofit_median', 'description': '不可使用,仅供参考:Net profit - Median of estimations'} +{'data_set_name': '可以使用:fnd6_newa1v1300_ano', 'description': '不可使用,仅供参考:Assets Netting & Other Adjustments'} +{'data_set_name': '可以使用:dividend_estimate_average', 'description': '不可使用,仅供参考:Dividend per share - average of estimations - delay 1'} +{'data_set_name': '可以使用:relative_valuation_rank_derivative', 'description': '不可使用,仅供参考:Change in ranking for valuation metrics compared to previous period.'} +{'data_set_name': '可以使用:forward_price_270', 'description': '不可使用,仅供参考:Forward price at 270 days derived from a synthetic long option with payoff similar to long stock + option dynamics. Combination of long ATM call and short ATM put.'} +{'data_set_name': '可以使用:pv13_h_min20_top3000_sector', 'description': '不可使用,仅供参考:grouping fields'} +{'data_set_name': '可以使用:nws12_afterhsz_3s', 'description': '不可使用,仅供参考:Number of minutes that elapsed before price went down 3 percentage points'} +{'data_set_name': '可以使用:research_development_expense', 'description': '不可使用,仅供参考:Research & Development Expense - Actual Value (Annual)'} +{'data_set_name': '可以使用:fnd6_newqeventv110_invfgq', 'description': '不可使用,仅供参考:Inventory - Finished Goods'} +{'data_set_name': '可以使用:news_ls', 'description': '不可使用,仅供参考:Whether a long or short position would have been more advantageous: If (EODHigh - Last) > (Last - EODLow) Then LS = 1; If (EODHigh - Last) = (Last - EODLow) Then LS= 0; If (EODHigh - Last) < (Last - EODLow) Then LS = -1.'} +{'data_set_name': '可以使用:fn_comp_options_out_number_a', 'description': '不可使用,仅供参考:Number of options outstanding, including both vested and non-vested options.'} +{'data_set_name': '可以使用:fnd6_newa1v1300_ibadj', 'description': '不可使用,仅供参考:Income Before Extraordinary Items - Adjusted for Common Stock Equivalents'} +{'data_set_name': '可以使用:anl4_cfi_median', 'description': '不可使用,仅供参考:Cash Flow From Investing - median of estimations'} +{'data_set_name': '可以使用:fn_accum_depr_depletion_and_amortization_ppne_q', 'description': '不可使用,仅供参考:Amount of accumulated depreciation, depletion and amortization for physical assets used in the normal conduct of business to produce goods and services.'} +{'data_set_name': '可以使用:fnd6_newqeventv110_cimiiq', 'description': '不可使用,仅供参考:Comprehensive Income - Noncontrolling Interest'} +{'data_set_name': '可以使用:news_open_gap', 'description': '不可使用,仅供参考:(DayOpen - PrevClose) / PrevClose'} +{'data_set_name': '可以使用:fnd6_eventv110_setepsq', 'description': '不可使用,仅供参考:Settlement (Litigation/Insurance) Basic EPS Effect'} +{'data_set_name': '可以使用:fnd2_a_ltrmdmrepoplinnext12m', 'description': '不可使用,仅供参考:Amount of long-term debt payable, sinking fund requirements, and other securities issued that are redeemable by holder at fixed or determinable prices and dates maturing in the next fiscal year following the latest fiscal year. Excludes interim and annual periods when interim periods are reported on a rolling approach, from latest balance sheet date.'} +{'data_set_name': '可以使用:nws12_afterhsz_2s', 'description': '不可使用,仅供参考:Number of minutes that elapsed before price went down 2 percentage points'} +{'data_set_name': '可以使用:anl4_norec', 'description': '不可使用,仅供参考:The number of brokers with no recommendation'} +{'data_set_name': '可以使用:implied_volatility_put_1080', 'description': '不可使用,仅供参考:At-the-money option-implied volatility for Put Option for 3 years'} +{'data_set_name': '可以使用:cash', 'description': '不可使用,仅供参考:Cash'} +{'data_set_name': '可以使用:earnings_per_share_minimum', 'description': '不可使用,仅供参考:Earnings per share - The lowest estimation'} +{'data_set_name': '可以使用:fnd6_niadj', 'description': '不可使用,仅供参考:Net Income Adjusted for Common/Ordinary Stock (Capital) Equivalents'} +{'data_set_name': '可以使用:fnd6_newa2v1300_ppent', 'description': '不可使用,仅供参考:Property, Plant and Equipment - Total (Net)'} +{'data_set_name': '可以使用:rp_css_revenue', 'description': '不可使用,仅供参考:Composite sentiment score of revenue news'} +{'data_set_name': '可以使用:fnd6_eventv110_optlifeq', 'description': '不可使用,仅供参考:Life of Options - Assumption (# yrs)'} +{'data_set_name': '可以使用:anl4_cff_flag', 'description': '不可使用,仅供参考:Cash Flow From Financing Activities - forecast type (revision/new/...)'} +{'data_set_name': '可以使用:pv13_hierarchy_min51_f4_sector', 'description': '不可使用,仅供参考:grouping fields'} +{'data_set_name': '可以使用:fnd6_snms', 'description': '不可使用,仅供参考:Segment Name'} +{'data_set_name': '可以使用:pcr_vol_all', 'description': "不可使用,仅供参考:Ratio of put volume to call volume for all maturities on stock's options."} +{'data_set_name': '可以使用:anl4_netdebt_high', 'description': '不可使用,仅供参考:Net debt - the highest estimation'} +{'data_set_name': '可以使用:fn_assets_fair_val_l1_a', 'description': '不可使用,仅供参考:Asset Fair Value, Recurring, Level 1'} +{'data_set_name': '可以使用:max_book_value_per_share_guidance', 'description': '不可使用,仅供参考:Book value per share - Maximum value among forecasts'} +{'data_set_name': '可以使用:anl4_cuo1guidaf_minguidance', 'description': '不可使用,仅供参考:Minimum guidance value'} +{'data_set_name': '可以使用:anl4_qfd1_az_div_median', 'description': '不可使用,仅供参考:Dividend per share - median of estimations'} +{'data_set_name': '可以使用:fn_oth_comp_grants_weighted_avg_grant_date_fair_value_q', 'description': '不可使用,仅供参考:Quarterly Share-Based Compensation Equity Instruments Other Than Options Nonvested Weighted Average Grant Date Fair Value'} +{'data_set_name': '可以使用:eps_guidance_value_quarterly', 'description': '不可使用,仅供参考:Earnings Per Share - Basic value'} +{'data_set_name': '可以使用:min_net_debt_guidance', 'description': '不可使用,仅供参考:The minimum guidance value for Net Debt on an annual basis.'} +{'data_set_name': '可以使用:nws12_prez_41rta', 'description': '不可使用,仅供参考:Fourteen-day Average True Range'} +{'data_set_name': '可以使用:fnd6_mrc3', 'description': '不可使用,仅供参考:Rental Commitments - Minimum - 3rd Year'} +{'data_set_name': '可以使用:fnd6_newqeventv110_pncpd12', 'description': '不可使用,仅供参考:Core Pension Adjustment 12MM Diluted EPS Effect Preliminary'} +{'data_set_name': '可以使用:anl4_tbve_ft', 'description': '不可使用,仅供参考:Tangible Book Value per Share - forecast type (revision/new/...)'} +{'data_set_name': '可以使用:fnd6_cibegni', 'description': '不可使用,仅供参考:Comp Inc - Beginning Net Income'} +{'data_set_name': '可以使用:fnd6_optvolq', 'description': '不可使用,仅供参考:Volatility - Assumption (%)'} +{'data_set_name': '可以使用:anl4_qfd1_az_div_number', 'description': '不可使用,仅供参考:Dividend per share - number of estimations'} +========================= 数据字段结束 ======================================= + +以上数据字段和操作符, 按照Description说明组合, 但是每一个 alpha 组合的使用的数据字段和操作符不要过于集中, 在符合语法的情况下, 多尝试不同的组合 + +你再检查一下, 如果你使用了 +Operator abs does not support event inputs +Operator ts_mean does not support event inputs +Operator ts_scale does not support event inputs +Operator add does not support event inputs +Operator sign does not support event inputs +Operator greater does not support event inputs +Operator ts_av_diff does not support event inputs +Operator ts_quantile does not support event inputs +Operator ts_arg_min does not support event inputs +Operator divide does not support event inputs +Operator ts_corr does not support event inputs +Operator ts_decay_linear does not support event inputs +Operator ts_sum does not support event inputs +Operator ts_delay does not support event inputs +Operator ts_arg_max does not support event inputs +Operator ts_std_dev does not support event inputs +Operator ts_regression does not support event inputs +Operator ts_backfill does not support event inputs +Operator signed_power does not support event inputs +Operator ts_product does not support event inputs +Operator ts_zscore does not support event inputs +Operator group_rank does not support event inputs +Operator subtract does not support event inputs +Operator ts_delta does not support event inputs +Operator ts_rank does not support event inputs +Operator ts_count_nans does not support event inputs +Operator ts_covariance does not support event inputs +Operator multiply does not support event inputs +Operator if_else does not support event inputs +Operator group_neutralize does not support event inputs +Operator group_zscore does not support event inputs +Operator winsorize does not support event inputs +注意, 以上操作符不能使用事件类型的数据集, 以上操作符禁止使用事件类型的数据集!! \ No newline at end of file diff --git a/merge_today_alphas/2026/01/14/merge_alphas_2026_01_14_18_05_27.txt b/merge_today_alphas/2026/01/14/merge_alphas_2026_01_14_18_05_27.txt new file mode 100644 index 0000000..c17a383 --- /dev/null +++ b/merge_today_alphas/2026/01/14/merge_alphas_2026_01_14_18_05_27.txt @@ -0,0 +1,166 @@ +ts_rank(divide(ts_delta(price, 5), price), 120) + +group_neutralize(ts_rank(multiply(volume,turnover),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(ts_covariance(volume,turnover,10),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(greater(volume,ts_delay(volume,1)),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(divide(volume,ts_mean(volume,20)),20),pv13_h_min20_top3000_sector) + +ts_backfill(ts_delta(price, 1), 5, 1) + +ts_std_dev(ts_delta(price, 5), 20) + +ts_zscore(subtract(group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)), pv13_h_min20_top3000_sector), group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)), pv13_h_min20_top3000_sector)), 20) + +group_neutralize(ts_rank(ts_delay(volume,5),20),pv13_h_min20_top3000_sector) + +ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60) + +winsorize(ts_zscore(subtract(group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)), pv13_h_min20_top3000_sector), group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)), pv13_h_min20_top3000_sector)), 20), 4) + +ts_backfill(ts_delta(price, 1), 3, 1) + +ts_arg_min(ts_std_dev(turnover, 5), 10) + +multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)) + +ts_rank(ts_delta(ts_mean(volume, 5), 5), 30) + +group_neutralize(ts_rank(ts_decay_linear(volume,5),20),pv13_h_min20_top3000_sector) + +ts_sum(ts_mean(volume, 5), 10) + +group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)), pv13_h_min20_top3000_sector) + +ts_count_nans(ts_mean(volume, 5), 10) + +ts_quantile(ts_delta(turnover, 5), 60) + +group_neutralize(ts_rank(ts_delta(close,1),20),pv13_h_min20_top3000_sector) + +ts_delay(ts_zscore(volume, 20), 5) + +group_neutralize(ts_rank(subtract(turnover,ts_mean(turnover,20)),20),pv13_h_min20_top3000_sector) + +if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1) + +ts_arg_min(ts_std_dev(price, 10), 20) + +group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector) + +ts_covariance(price, volume, 30) + +group_neutralize(ts_rank(ts_arg_min(turnover,10),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(ts_product(divide(volume,ts_delay(volume,1)),5),20),pv13_h_min20_top3000_sector) + +multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)) + +add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)) + +group_neutralize(ts_rank(add(volume,turnover),20),pv13_h_min20_top3000_sector) + +ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60) + +group_neutralize(ts_rank(ts_zscore(volume,10),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(ts_sum(volume,5),20),pv13_h_min20_top3000_sector) + +group_rank(ts_std_dev(turnover, 10), industry) + +group_neutralize(ts_rank(signed_power(volume,0.5),20),pv13_h_min20_top3000_sector) + +ts_rank(ts_mean(market_breadth, 60), 60) + +group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)), pv13_h_min20_top3000_sector) + +add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)) + +group_zscore(ts_std_dev(volume, 30), sector) + +ts_zscore(ts_mean(turnover, 10), 30) + +group_neutralize(ts_rank(volume,20),pv13_h_min20_top3000_sector) + +subtract(group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)), pv13_h_min20_top3000_sector), group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)), pv13_h_min20_top3000_sector)) + +group_neutralize(ts_rank(ts_av_diff(volume,10),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(ts_delta(turnover,5),20),pv13_h_min20_top3000_sector) + +ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) + +group_neutralize(ts_rank(abs(ts_delta(volume,1)),20),pv13_h_min20_top3000_sector) + +group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector) + +ts_av_diff(ts_mean(price, 10), 20) + +multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))) + +group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector) + +group_scale(ts_mean(price, 5), sector) + +group_neutralize(ts_rank(ts_backfill(volume,10),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(if_else(volume>ts_mean(volume,20),1,-1),20),pv13_h_min20_top3000_sector) + +ts_quantile(ts_delta(volume, 10), 60) + +add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)) + +ts_zscore(add(ts_mean(volume, 20), ts_mean(turnover, 20)), 60) + +ts_arg_max(ts_mean(volume, 5), 20) + +scale(winsorize(ts_zscore(subtract(group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) < ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.2), 1, 0), 60)), pv13_h_min20_top3000_sector), group_neutralize(multiply(multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1), reverse(ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250))), ts_sum(if_else(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) > ts_quantile(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector)), 250, "gaussian"), 0.8), 1, 0), 60)), pv13_h_min20_top3000_sector)), 20), 4)) + +ts_rank(ts_mean(vix, 60), 60) + +group_neutralize(ts_rank(volume, 60), industry) + +group_neutralize(ts_rank(ts_arg_max(volume,10),20),pv13_h_min20_top3000_sector) + +ts_arg_max(ts_mean(turnover, 5), 30) + +group_neutralize(ts_rank(turnover,20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(ts_corr(volume,turnover,10),20),pv13_h_min20_top3000_sector) + +ts_count_nans(ts_mean(turnover, 5), 10) + +group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector) + +ts_covariance(volume, turnover, 30) + +ts_regression(price, volume, 30, 0, 0) + +group_neutralize(ts_rank(ts_regression(volume,turnover,10),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(ts_count_nans(volume,10),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(ts_quantile(volume,10),20),pv13_h_min20_top3000_sector) + +ts_decay_linear(ts_mean(price, 5), 10) + +if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) < 0, 1, -1) + +ts_scale(ts_corr(volume, turnover, 60), 90) + +ts_product(ts_mean(turnover, 5), 10) + +group_neutralize(ts_rank(ts_std_dev(turnover,10),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(ts_mean(volume,5),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(sign(ts_delta(volume,1)),20),pv13_h_min20_top3000_sector) + +group_neutralize(ts_rank(ts_scale(volume,20),20),pv13_h_min20_top3000_sector) + +multiply(if_else(ts_delta(add(ts_rank(ts_mean(market_breadth, 60), 60), ts_rank(ts_mean(vix, 60), 60)), 5) > 0, 1, -1), ts_rank(subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))), 250)) + +subtract(add(group_zscore(ts_mean(volume, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(turnover, 20), pv13_h_min20_top3000_sector)), add(group_zscore(ts_mean(bid_ask_spread, 20), pv13_h_min20_top3000_sector), group_zscore(ts_mean(amihud_illiquidity, 20), pv13_h_min20_top3000_sector))) + diff --git a/prepare_prompt/alpha_prompt.txt b/prepare_prompt/alpha_prompt.txt index 558f174..61ad3b5 100644 --- a/prepare_prompt/alpha_prompt.txt +++ b/prepare_prompt/alpha_prompt.txt @@ -1,11 +1,13 @@ -任务指令: 你需要根据以下这个金融逻辑, 组合创新 alpha -数字化客户粘性溢价 -假设 -在数字经济时代,拥有高度数字化客户互动渠道和强大用户粘性的公司(如高频使用的移动应用、高活跃度的在线社区、高转化率的私域流量),能够以更低的边际成本获取更高质量的用户数据和现金流。这种数字化粘性构筑了强大的竞争护城河,其价值尚未被传统财务指标充分定价,有望在未来产生持续的超额收益。 -实施方案 -整合月活跃用户(MAU)增长率、用户日均使用时长、用户生命周期价值(LTV)与获客成本(CAC)的比率等数字化运营数据字段。使用时序动量算子(如ts_rank)对过去一年内“用户时长增长率”与“LTV/CAC比率”的综合得分进行排序。对排名持续提升且处于前30%的公司赋予正向阿尔法权重,并结合横截面标准化确保信号在同类商业模式公司(如消费互联网、金融科技)内进行比较。 -阿尔法因子优化建议 -数字化粘性的价值在不同增长阶段(导入期、成长期、成熟期)差异显著。建议引入“增长阶段分档”算子,根据用户规模增速和营收增速对公司进行动态分类,在各自的阶段组内计算粘性指标的相对强弱,以避免对处于不同生命周期公司的误判。此外,可叠加“变现效率变化”指标(如每用户平均收入(ARPU)的环比加速度),在粘性提升的同时,筛选出变现能力同步增强的标的,以增强信号的纯度。 +Liquidity Stratification Pricing Factor + +Hypothesis +During periods of liquidity tightening or market stress, investors' preference for asset liquidity increases sharply, leading to an intensified phenomenon of liquidity stratification. High-liquidity stocks experience relatively smaller declines due to a "liquidity premium," while low-liquidity stocks are sold off significantly due to a "liquidity discount." When market stress eases and the liquidity environment shifts towards easing, previously overly discounted low-liquidity stocks often exhibit stronger mean reversion and generate more substantial rebounds. Conversely, in the initial phase of a shift from loose to tight market liquidity, high-liquidity stocks may demonstrate stronger defensive characteristics. + +Implementation Plan +Construct a comprehensive liquidity measurement indicator incorporating trading volume, turnover rate, bid-ask spread, and the Amihud illiquidity ratio. Use a time-series market regime identification operator (e.g., based on thresholds for market breadth, monetary conditions index, or volatility index VIX) to determine the prevailing "liquidity regime" of the market. During phases identified as a transition from "tight" to "easy," apply positive weights to the portfolio of stocks with the worst prior liquidity (bottom 20% based on the composite indicator). In the initial phase of liquidity "tightening," apply positive weights to the portfolio of stocks with the best liquidity (top 20%). Utilize cross-sectional ranking and group assignment to construct the investment portfolio. + +Alpha Factor Optimization Suggestions +Pure liquidity metrics can be strongly influenced by firm market capitalization and industry attributes. A two-step neutralization process is recommended: First, perform liquidity ranking within industries to eliminate differences in industry trading characteristics. Second, after factor construction, control for exposure to the size factor. Furthermore, introducing the "duration of liquidity shock" as a weighting parameter could help refine the strategy. Stocks that have endured liquidity pressure for a longer period could be assigned higher weights during the reversal phase to more precisely capture the rebound momentum following suppression. *=========================================================================================* diff --git a/prepare_prompt/keys_text.txt b/prepare_prompt/keys_text.txt index b69ec7f..6a68ba2 100644 --- a/prepare_prompt/keys_text.txt +++ b/prepare_prompt/keys_text.txt @@ -1,11 +1,12 @@ -Name -Supply Chain Financial Resilience Factor +Liquidity Stratification Pricing Factor Hypothesis -Supply chain financial resilience reflects the stability and risk resistance of capital flow between a company and its upstream and downstream partners. During periods of macroeconomic tightening or industry credit events, companies with fragile supply chain financial networks (e.g., over-reliance on a single financing channel, highly concentrated accounts receivable, or abnormally extended payment terms) are more prone to liquidity crises, leading to stock price declines. Conversely, companies with strong supply chain financial resilience (e.g., diversified financing channels, healthy accounts payable structure, stable capital flow synergy with core partners) can better withstand shocks and may even leverage crises to increase market share, potentially resulting in more resilient stock price performance or alpha generation. +During periods of liquidity tightening or market stress, investors' preference for asset liquidity increases sharply, leading to an intensified phenomenon of liquidity stratification. High-liquidity stocks experience relatively smaller declines due to a "liquidity premium," while low-liquidity stocks are sold off significantly due to a "liquidity discount." When market stress eases and the liquidity environment shifts towards easing, previously overly discounted low-liquidity stocks often exhibit stronger mean reversion and generate more substantial rebounds. Conversely, in the initial phase of a shift from loose to tight market liquidity, high-liquidity stocks may demonstrate stronger defensive characteristics. Implementation Plan -Integrate data fields such as accounts receivable concentration (top five customers' share), distribution of accounts payable days, proportion of commercial paper financing, and whether the company is connected to a core enterprise credit circulation platform to construct a "Supply Chain Financial Resilience Score." Use a time-series stability operator (e.g., ts_stddev) to calculate the volatility of this score during the past three periods of widening credit spreads—lower volatility indicates stronger resilience. Employ a cross-sectional bucketing operator to group securities by their industrial chain and compute the percentile rank of the resilience score within each group. Assign positive alpha weights to securities with consistently improving ranks or those stably in the top 30%. +Construct a comprehensive liquidity measurement indicator incorporating trading volume, turnover rate, bid-ask spread, and the Amihud illiquidity ratio. Use a time-series market regime identification operator (e.g., based on thresholds for market breadth, monetary conditions index, or volatility index VIX) to determine the prevailing "liquidity regime" of the market. During phases identified as a transition from "tight" to "easy," apply positive weights to the portfolio of stocks with the worst prior liquidity (bottom 20% based on the composite indicator). In the initial phase of liquidity "tightening," apply positive weights to the portfolio of stocks with the best liquidity (top 20%). Utilize cross-sectional ranking and group assignment to construct the investment portfolio. Alpha Factor Optimization Suggestions -The effectiveness of this factor may be influenced by the overall monetary policy cycle. It is recommended to introduce a macro-state identification operator (e.g., defining "loose" and "tight" states based on treasury term spreads or credit spreads) to dynamically adjust the factor's weight or neutralization method under different states. During tight cycles, the allocation weight of this factor can be amplified; during loose cycles, consider reducing its weight or applying a composite neutralization approach incorporating industry and market cap neutralization to strip out the beta returns driven by systemic liquidity abundance. \ No newline at end of file +Pure liquidity metrics can be strongly influenced by firm market capitalization and industry attributes. A two-step neutralization process is recommended: First, perform liquidity ranking within industries to eliminate differences in industry trading characteristics. Second, after factor construction, control for exposure to the size factor. Furthermore, introducing the "duration of liquidity shock" as a weighting parameter could help refine the strategy. Stocks that have endured liquidity pressure for a longer period could be assigned higher weights during the reversal phase to more precisely capture the rebound momentum following suppression. + +"volume", "turnover", "spread", "illiquidity", "amihud", "bid", "ask", "vix", "liquidity", "tight", "easy", "monetary", "condition", "stress", "market", "breadth", "regime", "duration" \ No newline at end of file diff --git a/手动创建新金融逻辑.txt b/手动创建新金融逻辑.txt index 68a8312..7214666 100644 --- a/手动创建新金融逻辑.txt +++ b/手动创建新金融逻辑.txt @@ -146,7 +146,7 @@ ESG争议事件爆发后,市场往往存在短期过度反应,导致股价 建议按ESG争议类型(环境违规、社会责任缺失、公司治理缺陷)进行分组,不同类型争议的修复周期与市场敏感度差异较大,分组后可提升因子针对性。同时,引入行业ESG基准值做中性化处理,消除行业属性对ESG表现及整改难度的影响;可叠加流动性因子过滤,避免因股价修复过程中流动性不足导致的交易成本上升。 -帮我写一份类似这样的金融逻辑的描述, +帮我写一份类似这样的金融逻辑的描述, 需要符合金融直觉 如果你不清楚我有什么数据集字段, 可以不用说, 只需要逻辑描述清晰就行 输出的格式和我上面给你的例子一样, 但是要创新一个金融逻辑研究方向 diff --git a/手动处理每天alpha.txt b/手动处理每天alpha.txt index 9589789..fe3ac91 100644 --- a/手动处理每天alpha.txt +++ b/手动处理每天alpha.txt @@ -56,34 +56,4 @@ subtract(ts_rank(ts_sum(sales_ps, 20), 60), ts_rank(ts_sum(ebit, 20), 60)) if_else(ts_rank(sales_ps, 60) > 0.7, ts_rank(divide(sales_ps, ebit), 60), ts_rank(sales_ps, 60)) -group_zscore(ts_rank(ts_corr(sales_ps, ebit, 20), 60), pv13_h_min2_focused_sector) - -multiply(ts_rank(ts_delta(sales_ps, 5), 60), ts_rank(ts_av_diff(sales_ps, 10), 60)) - -ts_rank(subtract(ts_zscore(sales_ps, 60), ts_zscore(ebit, 60)), 120) - -add(ts_rank(ts_mean(sales_ps, 20), 60), ts_rank(ts_mean(divide(sales_ps, ebit), 20), 60)) - -group_zscore(ts_rank(multiply(ts_delta(sales_ps, 5), ts_zscore(ebit, 60)), 120), pv13_h_min2_focused_sector) - -if_else(ts_delta(sales_ps, 10) > 0, ts_rank(sales_ps, 60), ts_rank(ebit, 60)) - -subtract(ts_rank(ts_product(sales_ps, 20), 60), ts_rank(ts_product(ebit, 20), 60)) - -ts_rank(divide(ts_delta(sales_ps, 5), ts_delta(ebit, 5)), 120) - -multiply(ts_rank(ts_corr(sales_ps, ebit, 20), 60), ts_rank(ts_av_diff(sales_ps, 10), 60)) - -group_zscore(ts_rank(add(ts_zscore(sales_ps, 60), ts_zscore(ebit, 60)), 120), pv13_h_min2_focused_sector) - -ts_rank(subtract(ts_sum(sales_ps, 20), ts_sum(ebit, 20)), 60) - -if_else(ts_rank(divide(sales_ps, ebit), 60) > ts_rank(sales_ps, 60), ts_rank(divide(sales_ps, ebit), 60), ts_rank(sales_ps, 60)) - -subtract(ts_rank(ts_av_diff(sales_ps, 10), 60), ts_rank(ts_av_diff(ebit, 10), 60)) - -multiply(ts_delta(sales_ps, 5), ts_rank(ts_zscore(ebit, 60), 120)) - -ts_rank(add(ts_mean(sales_ps, 20), ts_mean(ebit, 20)), 120) - -group_zscore(ts_rank(divide(ts_delta(sales_ps, 5), ts_av_diff(ebit, 10)), 60), pv13_h_min2_focused_sector) \ No newline at end of file +group_zscore(ts_rank(ts_corr(sales_ps, ebit, 20), 60), pv13_h_min2_focused_sector) \ No newline at end of file diff --git a/手动获取数据集词根.txt b/手动获取数据集词根.txt index 9696a1e..ece4382 100644 --- a/手动获取数据集词根.txt +++ b/手动获取数据集词根.txt @@ -11,6 +11,9 @@ 建议引入“情绪拐点识别算子”,通过ts_slope或ts_change_rate识别情绪趋势的转折点,仅在拐点确认后触发仓位调整,以降低假信号。同时,可叠加“品牌护城河强度”作为调节变量——在品牌忠诚度高、替代品少的行业中,情绪滞后效应更显著,可对这类公司赋予更高权重。此外,建议在季度财报发布前后对情绪因子进行动态再平衡,以捕捉业绩兑现对情绪定价的加速作用。 +你是一个 alpha 金融量化专家 +以上这个金融逻辑, 如果你现在需要写 alpha, 大概需要什么数据集呢? 将数据集列举出来 + 【数据特点】 指标数据采用EAV结构存储: - name字段:存储指标名称