You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
5.0 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.local/schemas/backtest_config.schema.json",
"title": "BacktestConfig",
"type": "object",
"additionalProperties": false,
"required": [
"strategy_name",
"dataset_snapshot_id",
"universe",
"signal",
"risk",
"execution",
"reporting"
],
"properties": {
"strategy_name": {
"type": "string",
"minLength": 1
},
"dataset_snapshot_id": {
"type": "string",
"minLength": 1
},
"universe": {
"type": "object",
"additionalProperties": false,
"required": [
"min_price",
"min_avg_dollar_volume",
"exclude_asset_types"
],
"properties": {
"min_price": {
"type": "number",
"minimum": 0
},
"min_avg_dollar_volume": {
"type": "number",
"minimum": 0
},
"exclude_asset_types": {
"type": "array",
"items": {
"type": "string"
}
},
"allowed_exchanges": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"signal": {
"type": "object",
"additionalProperties": false,
"required": [
"score_threshold",
"max_candidates_per_day",
"execution_timing"
],
"properties": {
"score_threshold": {
"type": "number"
},
"max_candidates_per_day": {
"type": "integer",
"minimum": 1
},
"execution_timing": {
"type": "string",
"enum": [
"next_open",
"next_close"
]
},
"decision_timing": {
"type": "string",
"enum": [
"reaction_close"
]
},
"ranking_fields": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"risk": {
"type": "object",
"additionalProperties": false,
"required": [
"per_trade_risk_pct",
"max_daily_new_risk_pct",
"max_positions",
"max_positions_per_sector"
],
"properties": {
"per_trade_risk_pct": {
"type": "number",
"exclusiveMinimum": 0
},
"max_daily_new_risk_pct": {
"type": "number",
"exclusiveMinimum": 0
},
"max_positions": {
"type": "integer",
"minimum": 1
},
"max_positions_per_sector": {
"type": "integer",
"minimum": 1
},
"max_position_value_pct": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"max_adv_fraction": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"cooldown_after_loss_streak": {
"type": "integer",
"minimum": 0
},
"cooldown_days": {
"type": "integer",
"minimum": 0
}
}
},
"execution": {
"type": "object",
"additionalProperties": false,
"required": [
"entry_fill_model",
"exit_fill_model",
"slippage_bps_base",
"same_bar_priority"
],
"properties": {
"entry_fill_model": {
"type": "string",
"enum": [
"next_open"
]
},
"exit_fill_model": {
"type": "string",
"enum": [
"daily_bar_approximation"
]
},
"slippage_bps_base": {
"type": "number",
"minimum": 0
},
"commission_per_share": {
"type": "number",
"minimum": 0
},
"same_bar_priority": {
"type": "string",
"enum": [
"stop_first_conservative",
"target_first_aggressive"
]
},
"stop_model": {
"type": "string"
},
"target_1_r": {
"type": "number",
"minimum": 0
},
"target_1_fraction": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"trailing_model": {
"type": "string"
},
"max_holding_days": {
"type": "integer",
"minimum": 1
}
}
},
"reporting": {
"type": "object",
"additionalProperties": false,
"required": [
"write_trade_blotter",
"write_equity_curve",
"write_metrics_summary"
],
"properties": {
"write_trade_blotter": {
"type": "boolean"
},
"write_equity_curve": {
"type": "boolean"
},
"write_metrics_summary": {
"type": "boolean"
},
"generate_plots": {
"type": "boolean"
},
"attribution_buckets": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}