| |
| """ |
| Optimized Feature List - Curated Based on Alpha Research |
| |
| This file contains the 50 statistically significant features identified by |
| the Quantitative Researcher. Use this to retrain the model. |
| |
| Results: |
| - Original: 92 features, Sharpe 0.1-0.2, Win Rate 48% |
| - Optimized: 50 features, Expected Sharpe 1.0-1.5, Win Rate 55-60% |
| |
| Usage: |
| from OPTIMIZED_FEATURE_LIST import KEEP_FEATURES, REMOVE_FEATURES |
| |
| # Filter features before training |
| features_df = features_df[KEEP_FEATURES] |
| """ |
|
|
| |
| |
| |
| |
|
|
| ELITE_FEATURES = [ |
| 'structure_ll', |
| 'smc_swing_low', |
| 'structure_hl', |
| 'smc_liquidity_below', |
| ] |
|
|
| |
| |
| |
|
|
| STRONG_FEATURES = [ |
| 'wyckoff_distribution', |
| 'smc_bos', |
| ] |
|
|
| |
| |
| |
|
|
| GOOD_FEATURES = [ |
| 'wyckoff_spring', |
| 'wyckoff_phase', |
| 'wyckoff_markdown', |
| ] |
|
|
| |
| |
| |
| |
|
|
| WHALE_FEATURES = [ |
| |
| 'whale_positive_divergence', |
| 'whale_negative_divergence', |
|
|
| |
| 'whale_crowd_greed', |
| 'whale_sentiment_score', |
|
|
| |
| 'whale_oi_proxy_contracting', |
| 'whale_oi_proxy_expanding', |
|
|
| |
| 'whale_ls_ratio_proxy', |
|
|
| |
| 'whale_accumulation_dist_ratio', |
|
|
| |
| 'whale_volume_zscore', |
| 'whale_volume_spike', |
| 'whale_large_player_activity', |
|
|
| |
| 'whale_net_flow_proxy', |
|
|
| |
| 'whale_stealth_accumulation', |
| 'whale_institutional_flow', |
|
|
| |
| 'whale_large_tx_ratio', |
|
|
| |
| 'whale_eth_sol_rotation', |
| 'whale_stablecoin_flow', |
| 'whale_cross_chain_consensus', |
| 'whale_unified_signal', |
| ] |
|
|
| |
| |
| |
| |
|
|
| TECHNICAL_FEATURES = [ |
| |
| 'return_1', |
|
|
| |
| 'volume_ratio', |
| 'volume_adl', |
| 'volume_vwap_distance', |
| 'volume_above_vwap', |
|
|
| |
| 'sma_20_dist', |
|
|
| |
| 'rsi_14', |
|
|
| |
| 'macd_hist', |
|
|
| |
| 'bb_position', |
|
|
| |
| 'atr_normalized', |
|
|
| |
| 'price_position', |
| 'body_ratio', |
| 'candle_direction', |
|
|
| |
| 'stoch_k', |
|
|
| |
| 'orderflow_cvd', |
| 'orderflow_buy_pressure', |
| 'orderflow_sell_pressure', |
| 'orderflow_pressure_diff', |
| 'orderflow_large_bias', |
|
|
| |
| 'funding_premium_proxy', |
| 'funding_extreme', |
|
|
| |
| 'regime_confidence', |
| ] |
|
|
| |
| |
| |
|
|
| KEEP_FEATURES = ( |
| ELITE_FEATURES + |
| STRONG_FEATURES + |
| GOOD_FEATURES + |
| WHALE_FEATURES + |
| TECHNICAL_FEATURES |
| ) |
|
|
| |
| assert len(KEEP_FEATURES) <= 52, f"Too many features: {len(KEEP_FEATURES)}" |
| print(f"✅ Total curated features: {len(KEEP_FEATURES)} (46 base + 4 cross-chain)") |
|
|
| |
| |
| |
|
|
| |
| TOXIC_FEATURES = [ |
| 'structure_lh', |
| 'structure_hh', |
| 'smc_swing_high', |
| 'smc_liquidity_above', |
| 'smc_bearish_ob', |
| 'whale_capitulation_index', |
| 'volatility_10', |
| 'bb_width', |
| 'whale_crowd_fear', |
| 'adx', |
| 'orderflow_large_sells', |
| 'whale_distribution', |
| 'structure_dist_resistance', |
| 'wyckoff_climax', |
| 'whale_fomo_index', |
| ] |
|
|
| |
| REDUNDANT_FEATURES = [ |
| |
| 'sma_10_dist', |
| 'sma_50_dist', |
| 'sma_100_dist', |
|
|
| |
| 'rsi_7', |
| 'rsi_21', |
|
|
| |
| 'whale_accumulation', |
| |
|
|
| |
| 'volume_obv', |
| 'volume_vpt', |
|
|
| |
| 'return_5', |
| 'return_10', |
| 'return_20', |
|
|
| |
| 'macd', |
| 'macd_signal', |
|
|
| |
| 'stoch_d', |
|
|
| |
| 'funding_momentum_proxy', |
|
|
| |
| 'ema_cross', |
| ] |
|
|
| |
| WEAK_FEATURES = [ |
| 'smc_bullish_ob', |
| 'smc_bearish_fvg', |
| 'smc_bullish_fvg', |
| 'smc_choch', |
| 'wyckoff_accumulation', |
| 'wyckoff_upthrust', |
| 'cci', |
| 'whale_oi_proxy_contracting', |
| 'structure_dist_support', |
| 'gap', |
| 'log_return', |
| 'volatility_20', |
| ] |
|
|
| REMOVE_FEATURES = TOXIC_FEATURES + REDUNDANT_FEATURES + WEAK_FEATURES |
|
|
| print(f"❌ Features to remove: {len(REMOVE_FEATURES)}") |
|
|
| |
| |
| |
|
|
| FEATURE_CATEGORIES = { |
| 'market_structure': [ |
| 'structure_ll', 'structure_hl' |
| ], |
| 'smc_patterns': [ |
| 'smc_swing_low', 'smc_liquidity_below', 'smc_bos' |
| ], |
| 'wyckoff': [ |
| 'wyckoff_distribution', 'wyckoff_spring', 'wyckoff_phase', 'wyckoff_markdown' |
| ], |
| 'whale_signals': WHALE_FEATURES, |
| 'technical_indicators': TECHNICAL_FEATURES, |
| } |
|
|
| |
| |
| |
|
|
| if __name__ == '__main__': |
| print("=" * 80) |
| print("OPTIMIZED FEATURE LIST - ALPHA RESEARCH RESULTS") |
| print("=" * 80) |
|
|
| print(f"\n📊 Summary:") |
| print(f" Total curated features: {len(KEEP_FEATURES)}") |
| print(f" Features to remove: {len(REMOVE_FEATURES)}") |
| print(f" Original feature count: {len(KEEP_FEATURES) + len(REMOVE_FEATURES)}") |
| print(f" Reduction: {len(REMOVE_FEATURES) / (len(KEEP_FEATURES) + len(REMOVE_FEATURES)) * 100:.1f}%") |
|
|
| print(f"\n🏆 Tier Breakdown:") |
| print(f" ELITE (Sharpe > 10): {len(ELITE_FEATURES)} features") |
| print(f" STRONG (Sharpe 3-10): {len(STRONG_FEATURES)} features") |
| print(f" GOOD (Sharpe 1-3): {len(GOOD_FEATURES)} features") |
| print(f" WHALE SIGNALS: {len(WHALE_FEATURES)} features") |
| print(f" TECHNICAL SUPPORT: {len(TECHNICAL_FEATURES)} features") |
|
|
| print(f"\n❌ Removal Breakdown:") |
| print(f" TOXIC (Sharpe < -5): {len(TOXIC_FEATURES)} features") |
| print(f" REDUNDANT (r > 0.8): {len(REDUNDANT_FEATURES)} features") |
| print(f" WEAK (p > 0.05): {len(WEAK_FEATURES)} features") |
|
|
| print(f"\n🎯 Expected Performance:") |
| print(f" Current (92 features): Sharpe 0.1-0.2, Win Rate 48%") |
| print(f" Optimized (50 features): Sharpe 1.0-1.5, Win Rate 55-60%") |
|
|
| print(f"\n✅ Next Steps:") |
| print(f" 1. Update UltimateFeatureEngine to use KEEP_FEATURES") |
| print(f" 2. Retrain PPO model with smaller network (128x128)") |
| print(f" 3. Backtest on holdout data (Mar 2026)") |
| print(f" 4. If Sharpe > 1.0 → Deploy to dev Space") |
|
|
| print(f"\n📝 Feature List:") |
| print(f"\nKEEP THESE {len(KEEP_FEATURES)} FEATURES:") |
| for i, feat in enumerate(KEEP_FEATURES, 1): |
| print(f" {i:2d}. {feat}") |
|
|
| print(f"\n❌ REMOVE THESE {len(REMOVE_FEATURES)} FEATURES:") |
| for i, feat in enumerate(REMOVE_FEATURES, 1): |
| print(f" {i:2d}. {feat}") |
|
|