This guide documents the public execution surfaces and how they relate.
BKEngine is the single source of truth for end-to-end runs.
BKEngine.runV3(_:)→ returnsResult<BKSimulationInstrumentReport, BKEngineFailure>BKEngine.runV2(_:)→ returnsResult<(BKV2.SimulateConfigOutput, PositionStatus), BKEngineFailure>BKEngine.runDemo(...)→ offline bundled CSV quick run for validation
It forwards to BKEngineOneLiner and keeps driver factories injectable.
BKEngine.makeV3DriverBKEngine.makeV2Driver
Use these to plug custom driver implementations for tests or alternative orchestration.
BKEngine reuses request models from BKEngineOneLiner:
BKEngine.V3Request(BKEngineOneLiner.BKV3Request)BKEngine.V2Request(BKEngineOneLiner.BKV2Request)
instrument: BKV3_InstrumentInfop1,p2: strategy parameters forwarded to the configured flowdateFormat: parser date fallback formatexecutionOptions: BKSimulationExecutionOptionsdataStore: BKV3DataStorecsvProvider: BKRawCsvProviderlog: optional structured logging callback
instrumentIDconfig: BKV2.SimulationPolicyConfigp1,p2dateFormatcsvColumnMapping: BKCSVColumnMapping?csvProvider: BKRawCsvProviderlog: optional structured logging callback
Key operations:
simulateInstrumentDetailed(...)simulateInstrumentsWithReport(...)simulateInstrumentsWithDetailedReport(...)- async progress stream support through
BKSimulationBatchRunHandle
Batch options:
BKSimulationBatchOptions.maxConcurrencycontinueOnFailureuseStreamingCsvParserstrictCsvParsingcsvColumnMapping
Execution options:
BKSimulationExecutionOptions.parserMode(legacy,streamingLenient,streamingStrict)maxBarsPerInstrumentcsvColumnMapping
Key operation:
simulateInstrument(...)
Responsibilities:
- fetch raw CSV via
BKRawCsvProvider - parse bars via
BKBarParsing - execute
v2simulateConfig(...)
Primary APIs:
runBundledSMACrossoverDemo(...)runAAPL10Y1DSMACrossover(...)
Data source behavior:
- defaults to bundled CSV under
BacktestingKit/Resources - can override with caller-provided CSV
Outputs:
BKQuickDemoSummarywith date range, bar count, andBacktestResult
import BacktestingKit
let result = await BKEngine.runV3(
.init(
instrument: instrument,
p1: 5,
p2: 20,
dataStore: dataStore,
csvProvider: provider
)
)import BacktestingKit
let demo = BKEngine.runDemo(dataset: .aapl) { line in
print(line)
}
switch demo {
case .success(let summary):
print(summary.symbol)
case .failure(let error):
print(error.localizedDescription)
}- Use
BKEnginefor app integration. - Use
BKSimulationDriver/BKV2SimulationDriverwhen you need low-level orchestration. - Use
BKQuickDemofor smoke tests, CI sanity checks, and playground validation. - Use
PACKAGE_USAGE_GUIDE.mdwhen you want the package organized by workflow rather than by implementation layer.