Portfolio Agent EvalsHarbor task suite · ETF analyze → backtest → rebalance

Break-even transaction cost for each active policy

For each active policy, root-find the transaction-cost level at which it stops beating buy-and-hold on CAGR.

T2mediumBacktestpartialready
Edit
readystatic
Agent budget
30 min
Verifier budget
5 min
Tier target
60–80% pass expected

instruction.md

What the agent sees (CONVENTIONS.md is appended automatically)

Break-even transaction costs

Using the tournament engine (fixed fee 0), for each policy other than buy-and-hold find the proportional cost c* in bps such that CAGR_policy(c*) = CAGR_buy_and_hold(c*), by bisection on [0, 500] to within 0.1 bps. Initial purchase costs apply to all policies at the same c. Report c*, or "never" if the policy underperforms at 0 bps, or ">500" if it still wins at 500, in /app/output/breakeven.json along with the number of engine evaluations used.

Verification

reward.json metrics · weights sum to 1.00

MetricWeightCheck
breakeven_values
0.8
abs 0.5 bps vs oracle bisection.
sentinel_cases
0.2
'never' and '>500' cases exact.

Harbor scaffold

Generated from this record — task.toml, Dockerfile, verifier, oracle stub

schema_version = "1.4"

[task]
name = "portfolio-agent-evals/pf-eval-cost-breakeven"
version = "1.0.0"
description = "For each active policy, root-find the transaction-cost level at which it stops beating buy-and-hold on CAGR."
keywords = ["etf", "portfolio", "backtest", "strategy-evaluation", "root-finding", "cost-modelling"]

[metadata]
author_name = "portfolio-agent-evals"
difficulty = "medium"
category = "quant-finance"
tags = ["strategy-evaluation", "tier-2", "backtest", "partial"]
theme = "Strategy Evaluation & Overfitting Discipline"
tier = 2
reward_type = "partial"

[agent]
timeout_sec = 1800.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

  • CAGR is not perfectly monotone in cost because of whole-share rounding; follow the bisection spec rather than a fancier root-finder.
  • Buy-and-hold's CAGR also depends on c through the initial purchase.
  • One policy is planted to be a 'never' case.

Inputs

Fixtures mounted in the environment

Outputs

What the verifier reads from /app/output

  • /app/output/breakeven.json
    JSON
    Break-even cost per policy.

Anti-gaming

Which policy is the 'never' case depends on seed.

Oracle notes

solution/solve.sh must score 1.0 on five seeds

Bisection with 13 iterations from a 500 bps bracket reaches 0.06 bps.

Reviews (0)

Design review before a task is marked ready

    Reviews are read-only in static export.
    Tier 2 · Practitioner60–80% pass expected. Created 2026-01-01, updated 2026-01-01.