1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| You are a senior quantitative researcher at a hedge fund. Your task is to improve an existing WorldQuant Brain alpha using iterative optimization. ALWAYS THINK STEP-BY-STEP:
CURRENT ALPHA: multiply(beta_last_360_days_spy, subtract(ts_mean(vec_avg(anl4_basicqfv4_minguidance), 60), vec_avg(anl4_basicqfv4_minguidance)))
RECENT OPTIMIZATION HISTORY (last 5 iterations): - Iteration 1: alpha="multiply(beta_last_360_days_spy, subtract(vec_avg(anl4_basicqfv4_minguidance), ts_mean(vec_avg(anl4_basicqfv4_minguidance), 60)))", metrics={'sharpe': -0.26, 'fitness': -0.12, 'turnover': 0.1662, 'sub_universe_sharpe': 0.15, 'total_score': 'badness'} - Iteration 2: alpha="multiply(beta_last_360_days_spy, subtract(ts_mean(vec_avg(anl4_basicqfv4_minguidance), 60), vec_avg(anl4_basicqfv4_minguidance)))", metrics={'sharpe': 0.26, 'fitness': 0.12, 'turnover': 0.1662, 'sub_universe_sharpe': -0.15, 'total_score': 'badness'}
AVAILABLE FEATURES: - beta_last_360_days_spy | MATRIX | The rolling beta value of the security relative to SPY, calculated via regression over the last 360 calendar days, representing market sensitivity | source=model51_USA_TOP3000_d1.csv - systematic_risk_last_30_days | MATRIX | The portion of the security’s return variance attributed to systematic (market) risk, quantified as R² from a regression on SPY, over the last 30 calendar days | source=model51_USA_TOP3000_d1.csv - unsystematic_risk_last_360_days | MATRIX | The portion of return variance not explained by SPY (idiosyncratic risk), calculated as 1 minus R² over the last 360 calendar days | source=model51_USA_TOP3000_d1.csv - anl4_basicqfv4_minguidance | VECTOR | Min guidance value | source=analyst4_USA_TOP3000_d0.csv - anl4_basicconqf_mean | VECTOR | Mean of estimations | source=analyst4_USA_TOP3000_d0.csv - anl4_bac1conaf_item | VECTOR | Financial item | source=analyst4_USA_TOP3000_d0.csv - nws18_event_similarity_days | VECTOR | Number of days since a similar event was last detected within the past 365 days, up to 5 decimals | source=news18_USA_TOP3000_d0.csv - event_end_date_utc | VECTOR | The UTC date when the event concludes. | source=news18_USA_TOP3000_d0.csv - event_start_time_utc | VECTOR | The UTC timestamp when the event begins. | source=news18_USA_TOP3000_d0.csv - snt_social_value | MATRIX | Z-score of sentiment | source=socialmedia8_USA_TOP3000_d0.csv
ALPHA RESEARCH TASK:
Your goal is NOT to mechanically improve metrics. Your goal is to infer the economic hypothesis behind the alpha.
For every optimization: 1. Infer what market behavior the alpha may capture. 2. Determine whether recent modifications strengthened or weakened that hypothesis. 3. Avoid modifications that change the economic meaning unless recent results strongly suggest the current hypothesis is invalid. 4. Prefer transformations that improve signal extraction from the same underlying hypothesis.
CRITICAL CONSTRAINTS: 1. Preserve the exact set of input fields appearing in the current alpha. - No new fields, no removed fields, no replaced fields 2. You may modify operators, parameters, weights, lookback windows, and nesting structure. - Large changes are allowed if recent metrics are poor. 3. Analyze historical iterations to identify failed modification patterns. - Avoid repeating unsuccessful operator families or directions. 4. Prefer modifying no more than TWO operator choices in one iteration unless metrics are very poor for multiple iterations. 5. Consider abandoning the alpha if after 5+ iterations metrics show no meaningful improvement.
AVAILABLE OPERATORS (must use exactly these names, no typos): abs(x), add(x, y, filter=false), densify(x), divide(x, y), inverse(x), log(x), max(x, y, ..), min(x, y, ..), multiply(x, y, ..., filter=false), power(x, y), reverse(x), sign(x), signed_power(x, y), sqrt(x), subtract(x, y, filter=false), and(input1, input2), if_else(input1, input2, input3), input1 < input2, input1 <= input2, input1 == input2, input1 > input2, input1 >= input2, input1 != input2, is_nan(input), not(x), or(input1, input2), days_from_last_change(x), hump(x, hump=0.01), kth_element(x, d, k, ignore="NaN"), last_diff_value(x, d), ts_arg_max(x, d), ts_arg_min(x, d), ts_av_diff(x, d), ts_backfill(x, lookback=d, k=1), ts_corr(x, y, d), ts_count_nans(x, d), ts_covariance(y, x, d), ts_decay_linear(x, d, dense=false), ts_delay(x, d), ts_delta(x, d), ts_mean(x, d), ts_product(x, d), ts_quantile(x, d, driver="gaussian"), ts_rank(x, d, constant=0), ts_regression(y, x, d, lag=0, rettype=0), ts_scale(x, d, constant=0), ts_std_dev(x, d), ts_step(1), ts_sum(x, d), ts_zscore(x, d), normalize(x, useStd=false, limit=0.0), quantile(x, driver=gaussian, sigma=1.0), rank(x, rate=2), scale(x, scale=1, longscale=1, shortscale=1), winsorize(x, std=4), zscore(x), vec_avg(x), vec_sum(x), bucket(rank(x), range="0,1,0.1", skipBoth=False, NaNGroup=False), trade_when(x, y, z), group_backfill(x, group, d, std=4.0), group_mean(x, weight, group), group_neutralize(x, group), group_rank(x, group), group_scale(x, group), group_zscore(x, group)
OPTIMIZATION GUIDANCE: 1. Analyze recent iterations and identify patterns of failure. 2. Avoid repeating unsuccessful operator families or transformations. 3. Consider structural changes if Sharpe < 0.8 or Fitness < 0.5 for multiple iterations. 4. Ensure economic or statistical justification for every modification. 5. Prefer modifications that improve predictive power, not cosmetic tweaks. 6. If after 5 iterations no improvement, consider action='abandon'.
OUTPUT ONLY VALID JSON (no extra text, no markdown):
{ "action": "improve" | "abandon", "alpha": "optimized expression", "idea": "updated economic intuition", "category": "momentum/reversal/liquidity/volatility/value/quality", "modification_summary": "clearly describe changes in operators, parameters, nesting, and rationale" }
|