Household rebalance across three accounts with asset-location scoring
Rebalance a three-account household to a single household target while honouring asset-location preferences, per-account cash rules and no cross-account transfers.
instruction.md
What the agent sees (CONVENTIONS.md is appended automatically)
Household rebalance with asset location
Accounts: taxable, traditional IRA, Roth IRA. Household sleeve targets and bands are in ips.yaml with location preferences: bonds and REITs preferred in the traditional IRA, the highest-expected-growth sleeve preferred in the Roth, the rest in taxable. A location score (points per dollar located per preference) is defined in ips.yaml.
Constraints: household sleeve weights within bands; each account's cash >= its own buffer; no transfers between accounts; whole shares. Taxable sells are penalised at 0.5% of notional in the objective. Maximise location score minus penalties.
Write per-account trades in /app/output/trades.csv, /app/output/post_trade.json (household and per-account weights) and /app/output/objective.json.
Verification
reward.json metrics · weights sum to 1.00
| Metric | Weight | Check |
|---|---|---|
| feasibilitygate | 0.35 | Cash buffers, no transfers, whole shares, no shorts. GATE at 0.2. |
| household_bands | 0.15 | Every sleeve within band. |
| objective_gap | 0.5 | Objective >= oracle - 1% of |oracle|; linear to 0 at -10%. |
Gates: feasibility. A gate failure caps or zeroes the trial reward regardless of other metrics.
Harbor scaffold
Generated from this record — task.toml, Dockerfile, verifier, oracle stub
schema_version = "1.4" [task] name = "portfolio-agent-evals/pf-rb-multi-account-asset-location" version = "1.0.0" description = "Rebalance a three-account household to a single household target while honouring asset-location preferences, per-account cash rules and no cross-account transfers." keywords = ["etf", "portfolio", "rebalance", "trade-generation", "multi-account", "asset-location", "optimization"] [metadata] author_name = "portfolio-agent-evals" difficulty = "hard" category = "quant-finance" tags = ["trade-generation", "tier-3", "rebalance", "multi-metric"] theme = "Rebalancing & Trade Generation" tier = 3 reward_type = "multi-metric" [agent] timeout_sec = 2400.0 [verifier] timeout_sec = 300.0 [environment] # Offline by design: all data is synthetic and generated at build time. network_mode = "none" cpus = 2 memory_mb = 4096 storage_mb = 10240 build_timeout_sec = 900.0
Traps
Each must carry signal: a trap-blind solution must lose credit
- The IRA is too small to hold all bonds: location is a preference, not a constraint.
- Naive per-account replication of the household target scores poorly.
- Taxable sells are penalised, so the cheapest path uses IRA and Roth trades where possible.
Inputs
Fixtures mounted in the environment
- /app/portfolio/
- /app/data/prices/
- /app/policy/ips.yaml
Outputs
What the verifier reads from /app/output
- /app/output/trades.csvCSVPer-account trades.
- /app/output/post_trade.jsonJSONWeights.
- /app/output/objective.jsonJSONScore, penalties, total.
Anti-gaming
Account sizes are seeded so the IRA capacity binds in every instance.
Oracle notes
solution/solve.sh must score 1.0 on five seeds
MILP with account x ticker integer variables and linear location score.
Reviews (0)
Design review before a task is marked ready