Spaces:
Sleeping
Sleeping
| name: IndicatorsEnv | |
| version: 4.0.0 | |
| description: > | |
| Multi-stock Relative Alpha MDP for NSE (Indian) equity analysis. | |
| At each step the agent observes 3 stocks from the same NSE sector and must | |
| identify which stock has the strongest relative momentum signal. | |
| It picks one stock (or passes with NONE) and declares a direction. | |
| Reward = (chosen stock period return - sector average) x direction x conviction x 50. | |
| Market-neutral design: random policy earns ~0 expected reward; a skilled policy | |
| earns consistently positive alpha by correctly identifying within-sector outperformers. | |
| Step spacing = GT window so there is zero ground-truth overlap between steps. | |
| author: bawsi99 | |
| license: MIT | |
| tags: | |
| - finance | |
| - stock-market | |
| - technical-analysis | |
| - reinforcement-learning | |
| - openenv | |
| - multi-stock | |
| - relative-alpha | |
| - market-neutral | |
| tasks: | |
| - id: short_term_direction | |
| name: "Short-term Relative Alpha (Easy)" | |
| description: > | |
| 5 steps, 1 trading day apart (= 1 week of daily observations). | |
| Observe 3 same-sector NSE stocks per step. Pick one or pass with NONE. | |
| Reward = (chosen 1-day return - sector 1-day avg) x direction x conviction x 50. | |
| GT threshold: +/-0.3% (1-day return window). | |
| difficulty: easy | |
| term: short | |
| episode_steps: 5 | |
| step_spacing_days: 1 | |
| - id: medium_term_direction | |
| name: "Medium-term Relative Alpha (Medium)" | |
| description: > | |
| 10 steps, 5 trading days apart (= 10 weekly observations over 2.5 months). | |
| Signal history (RSI trends, price momentum) accumulates across steps | |
| to enable sequential multi-step inference. | |
| Reward = (chosen 5-day return - sector 5-day avg) x direction x conviction x 50. | |
| GT threshold: +/-1.5% (5-day return window). | |
| difficulty: medium | |
| term: medium | |
| episode_steps: 10 | |
| step_spacing_days: 5 | |
| - id: long_term_conviction | |
| name: "Long-term Risk-Constrained Alpha (Hard)" | |
| description: > | |
| 15 steps, 20 trading days apart (= 15 monthly observations over 15 months). | |
| Spans multiple market regimes. Macro context (NIFTY50 trend, market regime) | |
| added to each observation. Episode terminates early if virtual capital | |
| drawdown exceeds 10%. Conviction calibration scored. | |
| GT threshold: +/-2.5% (20-day return window). | |
| difficulty: hard | |
| term: long | |
| episode_steps: 15 | |
| step_spacing_days: 20 | |
| endpoints: | |
| reset: "POST /reset" | |
| step: "POST /step" | |
| state: "GET /state" | |
| tasks: "GET /tasks" | |
| grader: "POST /grader" | |
| baseline: "GET /baseline" | |
| health: "GET /health" | |
| websocket: "WS /ws" | |
| action_space: | |
| type: object | |
| required: | |
| - stock | |
| - direction | |
| - conviction | |
| properties: | |
| stock: | |
| type: string | |
| description: > | |
| NSE symbol to trade (must be one of the 3 available_stocks in the observation), | |
| or "NONE" to skip this step. | |
| example: "HDFCBANK" | |
| direction: | |
| type: string | |
| enum: [Bullish, Bearish, NONE] | |
| description: > | |
| Bullish = bet chosen stock outperforms sector average (long alpha). | |
| Bearish = bet chosen stock underperforms sector average (short alpha). | |
| NONE = pass this step (reward = 0, excluded from grader scoring). | |
| conviction: | |
| type: number | |
| minimum: 0.0 | |
| maximum: 1.0 | |
| description: > | |
| Kelly fraction: proportion of virtual wealth wagered on this prediction. | |
| Higher conviction amplifies both gains and losses proportionally. | |
| Set to 0.0 when passing (direction = NONE). | |
| observation_space: | |
| type: object | |
| properties: | |
| step: | |
| type: integer | |
| description: Current step number (1-indexed) | |
| max_steps: | |
| type: integer | |
| description: Total steps in this episode (5 / 10 / 15 by task) | |
| term: | |
| type: string | |
| enum: [SHORT, MEDIUM, LONG] | |
| sector: | |
| type: string | |
| description: "NSE sector shared by all 3 stocks (banking / it / pharma / fmcg / auto)" | |
| available_stocks: | |
| type: array | |
| items: | |
| type: string | |
| description: Exactly 3 NSE symbols to choose from this step | |
| stocks: | |
| type: object | |
| description: > | |
| Dict keyed by symbol. Each entry: current_price, rsi_14, rsi_trend, | |
| price_momentum_pct (cumulative return vs episode start), and a full | |
| indicators dict (moving_averages, macd, bollinger_bands, adx, | |
| stochastic, volatility, enhanced_volume, pivot_points). | |
| signal_history: | |
| type: array | |
| description: > | |
| Chronological log of past picks. Each entry: step, picked_stock, | |
| direction, ground_truth, correct, alpha_pct, reward, rsi_snapshot. | |
| Empty on step 1; grows by one entry each step. | |
| macro: | |
| type: object | |
| nullable: true | |
| description: > | |
| Task 3 only. Fields: nifty_trend (Bullish/Bearish/Neutral), | |
| nifty_return_20d (float %), market_regime (trending/ranging). | |
| reward: | |
| formula: "(chosen_return - sector_avg_return) x direction_sign x conviction x 50" | |
| min: -1.5 | |
| max: 1.5 | |
| notes: > | |
| Market-neutral: sector average cancels broad market beta so a random agent | |
| earns ~0 expected reward. NONE action yields reward = 0 and is excluded | |
| from grader scoring. direction_sign is +1 for Bullish, -1 for Bearish. | |
| Conviction scales reward linearly (Kelly criterion semantics). | |