This repository now follows the same contract split used by the US equity stack:
CryptoStrategiesowns pure strategy logic, manifests, metadata, and runtime adapters- downstream platforms own exchange connectivity, market-data collection, artifact freshness checks, order placement, and notifications
- strategy code must only read
StrategyContext - platform-specific wiring must stay in the platform repo
New crypto profiles must declare required_inputs from this canonical set only:
market_pricesderived_indicatorsbenchmark_snapshotportfolio_snapshotuniverse_snapshot
Current meaning for the live profile:
market_prices: latest tradable prices keyed by symbolderived_indicators: strategy-ready trend metrics keyed by symbolbenchmark_snapshot: benchmark regime snapshot, currently BTCportfolio_snapshot: exchange-agnostic portfolio and cash snapshotuniverse_snapshot: ordered official live-pool symbols from the validatedCryptoLivePoolPipelinesartifact for this cycle
Crypto profiles must declare exactly one target_mode.
Current default is:
crypto_live_pool_rotation->weight
Downstream platforms should translate only at the runtime boundary. Strategy code must not emit exchange-specific order fields.
Every compatible platform must expose a runtime adapter for each profile.
A crypto runtime adapter must declare at least:
available_inputsavailable_capabilitiesportfolio_input_namewhen the strategy needsctx.portfolioartifact_contractwhen the strategy consumes upstream artifacts
crypto_live_pool_rotation currently declares an explicit artifact contract:
requires_snapshot_artifacts = truerequires_snapshot_manifest_path = truesnapshot_contract_version = crypto_live_pool_rotation.live_pool.v1config_source_policy = none
The strategy package owns this declaration. Downstream platforms may decide how to fetch the artifact, but they should not infer artifact requirements from profile-name branches.
For crypto_live_pool_rotation, CryptoLivePoolPipelines is the authority for monthly live-pool membership, ranking, and order. The execution platform validates and preserves the ordered live_pool.json["symbols"] list, then passes it into StrategyContext.market_data["universe_snapshot"].
Strategy code may apply runtime gates, sell rules, top-N selection, inverse-volatility sizing, BTC core allocation, and buy-budget allocation inside that upstream pool. It must not rebuild the monthly live pool from local indicators, replace the upstream order with a local ranking, or treat research CSVs as a substitute for the validated artifact contract.
Allowed inside strategy code:
- reading canonical inputs from
ctx.market_data - reading
ctx.portfolio - reading pure runtime knobs from
ctx.runtime_config - returning
StrategyDecision
Forbidden inside strategy code:
- exchange branches such as Binance or future broker names
- direct environment reads
- exchange-specific order payloads
- artifact-path lookup and freshness validation
- local monthly live-pool rebuilds for snapshot-backed profiles
Today only one profile is live:
crypto_live_pool_rotation
Today only one platform adapter exists:
binance
The contract is still written in multi-strategy and multi-platform form so future crypto profiles can follow the same path without binding to Binance-only input names.