docs: record intraday native factor and five-year next-open replays
This commit is contained in:
@@ -0,0 +1,467 @@
|
||||
{
|
||||
"schemaVersion": "fidc-backtest-benchmark/v5",
|
||||
"label": "native-pit-intraday",
|
||||
"generatedAtUnixSeconds": 1788790043,
|
||||
"requestSha256": "9dd420ae606878b90ff660fcd4efe520e04a237ec758ed974b87b6d9a72cab73",
|
||||
"requestOrigin": {
|
||||
"kind": "request_file"
|
||||
},
|
||||
"baseline": null,
|
||||
"baselineComparable": true,
|
||||
"baselineComparison": null,
|
||||
"bundleRefresh": null,
|
||||
"baseUrl": "http://127.0.0.1:8081",
|
||||
"runs": [
|
||||
{
|
||||
"slot": 0,
|
||||
"cacheClass": "restart_or_cold",
|
||||
"runId": "btr_1788790021780_1150210_0",
|
||||
"status": "succeeded",
|
||||
"queueWaitSeconds": 0.0,
|
||||
"executionSeconds": 8.994,
|
||||
"totalSeconds": 8.994,
|
||||
"runnerSeconds": 7.904,
|
||||
"bundleValidationSeconds": 0.166,
|
||||
"sourceEpochSeconds": 0.0,
|
||||
"strategyContractSeconds": 0.001,
|
||||
"terminalCalendarSeconds": 0.0,
|
||||
"riskFreeRateSeconds": 0.031,
|
||||
"riskFreeRateCacheHit": false,
|
||||
"engineSeconds": 0.012,
|
||||
"dataSeconds": 7.662,
|
||||
"resultSeconds": 0.03,
|
||||
"unattributedSeconds": 0.0,
|
||||
"canonicalSeconds": 0.001,
|
||||
"resultFinalization": {
|
||||
"canonicalSeconds": 0.001,
|
||||
"processEventStoreSeconds": 0.001,
|
||||
"storePublishSeconds": 0.027,
|
||||
"summarySeconds": 0.0
|
||||
},
|
||||
"dataPreparationTimings": {
|
||||
"adjustmentValidationSeconds": 0.0,
|
||||
"availableStockStDates": 0,
|
||||
"benchmarkFetchSeconds": 0.344,
|
||||
"candidatePlanBasePanelSeconds": 0.006,
|
||||
"candidatePlanSelectionSeconds": 0.004,
|
||||
"corporateActionSeconds": 0.605,
|
||||
"datasetConstructSeconds": 0.0,
|
||||
"externalFetchSeconds": 0.344,
|
||||
"historyDateSeconds": 0.0,
|
||||
"instrumentIndexBuildSeconds": 0.0,
|
||||
"instrumentMetadataSeconds": 0.016,
|
||||
"loopSeconds": 0.0,
|
||||
"marketIndexBuildSeconds": 0.001,
|
||||
"quotePlanSeconds": 0.935,
|
||||
"riskSnapshotSeconds": 0.0,
|
||||
"sourceQuerySeconds": 5.752,
|
||||
"stockStLookupSeconds": 0.0,
|
||||
"supplementalExecutionFetchSeconds": 0.0,
|
||||
"totalSeconds": 7.659
|
||||
},
|
||||
"finalizationSeconds": 1.089,
|
||||
"finalizationTimings": {
|
||||
"artifactVerificationSeconds": 0.0,
|
||||
"cacheRegistrationSeconds": 0.0,
|
||||
"postgresClientAcquireSeconds": 0.216,
|
||||
"postgresPersistSeconds": 0.872,
|
||||
"preTerminalUpdateSeconds": 1.089,
|
||||
"schemaCheckSeconds": 0.0,
|
||||
"timingSource": "fidc-backtest-service-monotonic"
|
||||
},
|
||||
"totalReturn": 0.011211658838299776,
|
||||
"tradeCount": 104,
|
||||
"riskDecisionCount": 11,
|
||||
"resultStoreDigest": "5ed069a1f5999542e6da78b10797aa21aabe71e13dd79649cd11157cbc57d3b4",
|
||||
"canonicalResultDigest": "5c8a110cc6f285b9d569e818a0472a8b5c76f14df853a1c2c42d1b5222c39b3a",
|
||||
"terminalAudit": {
|
||||
"cashReceivableCount": 0,
|
||||
"cashReceivableTotalAmount": 0.0,
|
||||
"earliestDeferredCashDate": null,
|
||||
"futuresOpenOrderCount": 0,
|
||||
"lastExecutionDate": "2025-09-12",
|
||||
"omittedOpenOrderCount": 0,
|
||||
"openOrderSamples": [],
|
||||
"pendingCashFlowCount": 0,
|
||||
"pendingCashFlowNetAmount": 0.0,
|
||||
"status": "clean",
|
||||
"stockOpenOrderCount": 0
|
||||
},
|
||||
"terminalAuditVerified": true,
|
||||
"terminalAuditSha256": "5836794e260aa2cfd1a06d4568ae6577a37c9cbe09ec0f00995121ea5b2522d9",
|
||||
"implementation": {
|
||||
"buildManifestSha256": "fb4f7ac191c8ab8d8d39fc48014f84ce01d4c0731ffe986e7d5cb0107a3e5539",
|
||||
"builtAt": "2026-09-07T22:06:18+08:00",
|
||||
"engineCommit": "1b78186c4e37273c64c1f9e208c2e47021ee4fff",
|
||||
"identitySha256": "14e7ff10848d64ffcec232dea8cff23a032702301b81ae036bb0b26b4b0b5e33",
|
||||
"runnerBinarySha256": "7cddebf9ab5cbbd5d6f9bd5c7bf006c3895ee26967d23d80dc86b47c50fb761d",
|
||||
"schemaVersion": "fidc-backtest-implementation/v1",
|
||||
"serviceBinarySha256": "f09d121d73c34ad3cd5e2e0c24b0bdaf1974309c9ec3b93229cfb824b1e9f11a",
|
||||
"serviceCommit": "c80a38b91a398fd713f1f1faaa19a581ea85efad",
|
||||
"status": "verified"
|
||||
},
|
||||
"implementationVerified": true,
|
||||
"implementationIdentitySha256": "14e7ff10848d64ffcec232dea8cff23a032702301b81ae036bb0b26b4b0b5e33",
|
||||
"artifactManifest": {
|
||||
"canonicalResult": {
|
||||
"algorithm": "sha256",
|
||||
"ordering": "engine_fact_order_v2",
|
||||
"schemaVersion": "fidc-canonical-backtest-result/v2",
|
||||
"sections": {
|
||||
"accountEvents": {
|
||||
"rowCount": 104,
|
||||
"sha256": "ea6bbbd55df3da0692dfd712f88ef6f8af510ada318641ede71884f5c5d14e7e"
|
||||
},
|
||||
"equityFacts": {
|
||||
"rowCount": 5,
|
||||
"sha256": "96004e235e4603c0a7d1a5629a2f0d2b364258d562e1d397cdd6925718a7d060"
|
||||
},
|
||||
"fillEvents": {
|
||||
"rowCount": 104,
|
||||
"sha256": "2c37f626b7de014f5638dc8edf33f3ca8d23126ab2e62f26f01fbcb33e8c4e48"
|
||||
},
|
||||
"holdingSnapshots": {
|
||||
"rowCount": 112,
|
||||
"sha256": "50abab8a304d2e2a7de344538aff604c8bf96ef00283330d107916cc2e234f67"
|
||||
},
|
||||
"orderEvents": {
|
||||
"rowCount": 108,
|
||||
"sha256": "f327f21151a5d7dbe53d2dcde9202be699f9672f758373eeb9c67985ca3826f5"
|
||||
},
|
||||
"riskAudits": {
|
||||
"rowCount": 11,
|
||||
"sha256": "428a8d7395b54ec5a9523eb745d5007c64b9d9867615e870d95ea9ea176f536e"
|
||||
}
|
||||
},
|
||||
"sha256": "5c8a110cc6f285b9d569e818a0472a8b5c76f14df853a1c2c42d1b5222c39b3a",
|
||||
"totalRows": 444
|
||||
},
|
||||
"processEventStore": {
|
||||
"bytes": 44302,
|
||||
"identitySha256": "1444075abea626e8d7d1b8c9c9cda984a2a687ff2b9465db5648e0f4525130e7",
|
||||
"manifestBytes": 461,
|
||||
"manifestSha256": "b43a818096d09648b809a46d12ad9eae39638d57ea52f7696906359036a80c52",
|
||||
"schemaVersion": "fidc-backtest-process-event-manifest/v1",
|
||||
"sections": {
|
||||
"processEvents": {
|
||||
"blockCount": 1,
|
||||
"bytes": 43841,
|
||||
"rowCount": 370,
|
||||
"sha256": "8edb6dad95777e3eef5946acbbdfc4b9125df34a79ac716d8c3ff7835b552bf6"
|
||||
}
|
||||
},
|
||||
"sha256": "661d84b7b430ac25fb5c959df8e7fb309133784d85a7524375cd803e29e52094",
|
||||
"totalEvents": 370
|
||||
},
|
||||
"resultStore": {
|
||||
"bytes": 148006,
|
||||
"identitySha256": "484b7a4a8d5cc77c6222ce01f2fe452c890995a476579f209d1d4ac43885d60a",
|
||||
"manifestBytes": 2999,
|
||||
"manifestSha256": "a0a7072f176db79d781846cc124d2e4794c5084c48c525876863751f709c4e7f",
|
||||
"schemaVersion": "fidc-backtest-fact-manifest/v1",
|
||||
"sections": {
|
||||
"accountEvents": {
|
||||
"blockCount": 1,
|
||||
"bytes": 13313,
|
||||
"rowCount": 104,
|
||||
"sha256": "ab2f936c9072f80d58487b62a6f64553d279582ddfe6af0299afe20447e83424"
|
||||
},
|
||||
"equityFacts": {
|
||||
"blockCount": 1,
|
||||
"bytes": 11009,
|
||||
"rowCount": 5,
|
||||
"sha256": "c40650f5b27cfff873194572ffe28a5412fe77730fe75492c7b5a575f8f5caae"
|
||||
},
|
||||
"fillEvents": {
|
||||
"blockCount": 1,
|
||||
"bytes": 40541,
|
||||
"rowCount": 104,
|
||||
"sha256": "80a3f1d3a9c23db7dec2dc70f029280c0844370be6d87703cd396a234068f708"
|
||||
},
|
||||
"holdingSnapshots": {
|
||||
"blockCount": 1,
|
||||
"bytes": 51338,
|
||||
"rowCount": 112,
|
||||
"sha256": "7684244dc8e7788f777309169be61b14fcb532abdd89fe93f0a7f2980a615ba9"
|
||||
},
|
||||
"orderEvents": {
|
||||
"blockCount": 1,
|
||||
"bytes": 25768,
|
||||
"rowCount": 108,
|
||||
"sha256": "31ff15d2cf79b1eb9c333d19d8fb400c9c5a52c36b0f662330ec39aa9d0f805c"
|
||||
},
|
||||
"riskAudits": {
|
||||
"blockCount": 1,
|
||||
"bytes": 3038,
|
||||
"rowCount": 11,
|
||||
"sha256": "5a7269219a21cf14c23d788a6a96ddf1d1ddf0ef1e3b57a8db4ae4b1da789aff"
|
||||
}
|
||||
},
|
||||
"sha256": "5ed069a1f5999542e6da78b10797aa21aabe71e13dd79649cd11157cbc57d3b4",
|
||||
"totalEvents": 444
|
||||
},
|
||||
"schemaVersion": "fidc-backtest-artifacts/v4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"slot": 1,
|
||||
"cacheClass": "process_hot",
|
||||
"runId": "btr_1788790036494_1150210_1",
|
||||
"status": "succeeded",
|
||||
"queueWaitSeconds": 0.0,
|
||||
"executionSeconds": 0.596,
|
||||
"totalSeconds": 0.596,
|
||||
"runnerSeconds": 0.026,
|
||||
"bundleValidationSeconds": 0.0,
|
||||
"sourceEpochSeconds": 0.0,
|
||||
"strategyContractSeconds": 0.003,
|
||||
"terminalCalendarSeconds": 0.0,
|
||||
"riskFreeRateSeconds": 0.0,
|
||||
"riskFreeRateCacheHit": true,
|
||||
"engineSeconds": 0.012,
|
||||
"dataSeconds": 0.007,
|
||||
"resultSeconds": 0.002,
|
||||
"unattributedSeconds": 0.0,
|
||||
"canonicalSeconds": 0.001,
|
||||
"resultFinalization": {
|
||||
"canonicalSeconds": 0.001,
|
||||
"processEventStoreSeconds": 0.001,
|
||||
"storePublishSeconds": 0.0,
|
||||
"summarySeconds": 0.0
|
||||
},
|
||||
"dataPreparationTimings": {
|
||||
"adjustmentValidationSeconds": 0.0,
|
||||
"availableStockStDates": 0,
|
||||
"benchmarkFetchSeconds": 0.0,
|
||||
"candidatePlanBasePanelSeconds": 0.0,
|
||||
"candidatePlanSelectionSeconds": 0.0,
|
||||
"corporateActionSeconds": 0.0,
|
||||
"datasetConstructSeconds": 0.0,
|
||||
"externalFetchSeconds": 0.0,
|
||||
"historyDateSeconds": 0.0,
|
||||
"instrumentIndexBuildSeconds": 0.0,
|
||||
"instrumentMetadataSeconds": 0.0,
|
||||
"loopSeconds": 0.0,
|
||||
"marketIndexBuildSeconds": 0.0,
|
||||
"quotePlanSeconds": 0.0,
|
||||
"riskSnapshotSeconds": 0.0,
|
||||
"sourceQuerySeconds": 0.0,
|
||||
"stockStLookupSeconds": 0.0,
|
||||
"supplementalExecutionFetchSeconds": 0.0,
|
||||
"totalSeconds": 0.006
|
||||
},
|
||||
"finalizationSeconds": 0.569,
|
||||
"finalizationTimings": {
|
||||
"artifactVerificationSeconds": 0.001,
|
||||
"cacheRegistrationSeconds": 0.0,
|
||||
"postgresClientAcquireSeconds": 0.27,
|
||||
"postgresPersistSeconds": 0.298,
|
||||
"preTerminalUpdateSeconds": 0.569,
|
||||
"schemaCheckSeconds": 0.0,
|
||||
"timingSource": "fidc-backtest-service-monotonic"
|
||||
},
|
||||
"totalReturn": 0.011211658838299776,
|
||||
"tradeCount": 104,
|
||||
"riskDecisionCount": 11,
|
||||
"resultStoreDigest": "5ed069a1f5999542e6da78b10797aa21aabe71e13dd79649cd11157cbc57d3b4",
|
||||
"canonicalResultDigest": "5c8a110cc6f285b9d569e818a0472a8b5c76f14df853a1c2c42d1b5222c39b3a",
|
||||
"terminalAudit": {
|
||||
"cashReceivableCount": 0,
|
||||
"cashReceivableTotalAmount": 0.0,
|
||||
"earliestDeferredCashDate": null,
|
||||
"futuresOpenOrderCount": 0,
|
||||
"lastExecutionDate": "2025-09-12",
|
||||
"omittedOpenOrderCount": 0,
|
||||
"openOrderSamples": [],
|
||||
"pendingCashFlowCount": 0,
|
||||
"pendingCashFlowNetAmount": 0.0,
|
||||
"status": "clean",
|
||||
"stockOpenOrderCount": 0
|
||||
},
|
||||
"terminalAuditVerified": true,
|
||||
"terminalAuditSha256": "5836794e260aa2cfd1a06d4568ae6577a37c9cbe09ec0f00995121ea5b2522d9",
|
||||
"implementation": {
|
||||
"buildManifestSha256": "fb4f7ac191c8ab8d8d39fc48014f84ce01d4c0731ffe986e7d5cb0107a3e5539",
|
||||
"builtAt": "2026-09-07T22:06:18+08:00",
|
||||
"engineCommit": "1b78186c4e37273c64c1f9e208c2e47021ee4fff",
|
||||
"identitySha256": "14e7ff10848d64ffcec232dea8cff23a032702301b81ae036bb0b26b4b0b5e33",
|
||||
"runnerBinarySha256": "7cddebf9ab5cbbd5d6f9bd5c7bf006c3895ee26967d23d80dc86b47c50fb761d",
|
||||
"schemaVersion": "fidc-backtest-implementation/v1",
|
||||
"serviceBinarySha256": "f09d121d73c34ad3cd5e2e0c24b0bdaf1974309c9ec3b93229cfb824b1e9f11a",
|
||||
"serviceCommit": "c80a38b91a398fd713f1f1faaa19a581ea85efad",
|
||||
"status": "verified"
|
||||
},
|
||||
"implementationVerified": true,
|
||||
"implementationIdentitySha256": "14e7ff10848d64ffcec232dea8cff23a032702301b81ae036bb0b26b4b0b5e33",
|
||||
"artifactManifest": {
|
||||
"canonicalResult": {
|
||||
"algorithm": "sha256",
|
||||
"ordering": "engine_fact_order_v2",
|
||||
"schemaVersion": "fidc-canonical-backtest-result/v2",
|
||||
"sections": {
|
||||
"accountEvents": {
|
||||
"rowCount": 104,
|
||||
"sha256": "ea6bbbd55df3da0692dfd712f88ef6f8af510ada318641ede71884f5c5d14e7e"
|
||||
},
|
||||
"equityFacts": {
|
||||
"rowCount": 5,
|
||||
"sha256": "96004e235e4603c0a7d1a5629a2f0d2b364258d562e1d397cdd6925718a7d060"
|
||||
},
|
||||
"fillEvents": {
|
||||
"rowCount": 104,
|
||||
"sha256": "2c37f626b7de014f5638dc8edf33f3ca8d23126ab2e62f26f01fbcb33e8c4e48"
|
||||
},
|
||||
"holdingSnapshots": {
|
||||
"rowCount": 112,
|
||||
"sha256": "50abab8a304d2e2a7de344538aff604c8bf96ef00283330d107916cc2e234f67"
|
||||
},
|
||||
"orderEvents": {
|
||||
"rowCount": 108,
|
||||
"sha256": "f327f21151a5d7dbe53d2dcde9202be699f9672f758373eeb9c67985ca3826f5"
|
||||
},
|
||||
"riskAudits": {
|
||||
"rowCount": 11,
|
||||
"sha256": "428a8d7395b54ec5a9523eb745d5007c64b9d9867615e870d95ea9ea176f536e"
|
||||
}
|
||||
},
|
||||
"sha256": "5c8a110cc6f285b9d569e818a0472a8b5c76f14df853a1c2c42d1b5222c39b3a",
|
||||
"totalRows": 444
|
||||
},
|
||||
"processEventStore": {
|
||||
"bytes": 44302,
|
||||
"identitySha256": "1444075abea626e8d7d1b8c9c9cda984a2a687ff2b9465db5648e0f4525130e7",
|
||||
"manifestBytes": 461,
|
||||
"manifestSha256": "b43a818096d09648b809a46d12ad9eae39638d57ea52f7696906359036a80c52",
|
||||
"schemaVersion": "fidc-backtest-process-event-manifest/v1",
|
||||
"sections": {
|
||||
"processEvents": {
|
||||
"blockCount": 1,
|
||||
"bytes": 43841,
|
||||
"rowCount": 370,
|
||||
"sha256": "8edb6dad95777e3eef5946acbbdfc4b9125df34a79ac716d8c3ff7835b552bf6"
|
||||
}
|
||||
},
|
||||
"sha256": "661d84b7b430ac25fb5c959df8e7fb309133784d85a7524375cd803e29e52094",
|
||||
"totalEvents": 370
|
||||
},
|
||||
"resultStore": {
|
||||
"bytes": 148006,
|
||||
"identitySha256": "484b7a4a8d5cc77c6222ce01f2fe452c890995a476579f209d1d4ac43885d60a",
|
||||
"manifestBytes": 2999,
|
||||
"manifestSha256": "a0a7072f176db79d781846cc124d2e4794c5084c48c525876863751f709c4e7f",
|
||||
"schemaVersion": "fidc-backtest-fact-manifest/v1",
|
||||
"sections": {
|
||||
"accountEvents": {
|
||||
"blockCount": 1,
|
||||
"bytes": 13313,
|
||||
"rowCount": 104,
|
||||
"sha256": "ab2f936c9072f80d58487b62a6f64553d279582ddfe6af0299afe20447e83424"
|
||||
},
|
||||
"equityFacts": {
|
||||
"blockCount": 1,
|
||||
"bytes": 11009,
|
||||
"rowCount": 5,
|
||||
"sha256": "c40650f5b27cfff873194572ffe28a5412fe77730fe75492c7b5a575f8f5caae"
|
||||
},
|
||||
"fillEvents": {
|
||||
"blockCount": 1,
|
||||
"bytes": 40541,
|
||||
"rowCount": 104,
|
||||
"sha256": "80a3f1d3a9c23db7dec2dc70f029280c0844370be6d87703cd396a234068f708"
|
||||
},
|
||||
"holdingSnapshots": {
|
||||
"blockCount": 1,
|
||||
"bytes": 51338,
|
||||
"rowCount": 112,
|
||||
"sha256": "7684244dc8e7788f777309169be61b14fcb532abdd89fe93f0a7f2980a615ba9"
|
||||
},
|
||||
"orderEvents": {
|
||||
"blockCount": 1,
|
||||
"bytes": 25768,
|
||||
"rowCount": 108,
|
||||
"sha256": "31ff15d2cf79b1eb9c333d19d8fb400c9c5a52c36b0f662330ec39aa9d0f805c"
|
||||
},
|
||||
"riskAudits": {
|
||||
"blockCount": 1,
|
||||
"bytes": 3038,
|
||||
"rowCount": 11,
|
||||
"sha256": "5a7269219a21cf14c23d788a6a96ddf1d1ddf0ef1e3b57a8db4ae4b1da789aff"
|
||||
}
|
||||
},
|
||||
"sha256": "5ed069a1f5999542e6da78b10797aa21aabe71e13dd79649cd11157cbc57d3b4",
|
||||
"totalEvents": 444
|
||||
},
|
||||
"schemaVersion": "fidc-backtest-artifacts/v4"
|
||||
}
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"resultConsistent": true,
|
||||
"resultStoreDigest": "5ed069a1f5999542e6da78b10797aa21aabe71e13dd79649cd11157cbc57d3b4",
|
||||
"canonicalResultDigest": "5c8a110cc6f285b9d569e818a0472a8b5c76f14df853a1c2c42d1b5222c39b3a",
|
||||
"totalReturn": 0.011211658838299776,
|
||||
"tradeCount": 104,
|
||||
"terminalAudit": {
|
||||
"cashReceivableCount": 0,
|
||||
"cashReceivableTotalAmount": 0.0,
|
||||
"earliestDeferredCashDate": null,
|
||||
"futuresOpenOrderCount": 0,
|
||||
"lastExecutionDate": "2025-09-12",
|
||||
"omittedOpenOrderCount": 0,
|
||||
"openOrderSamples": [],
|
||||
"pendingCashFlowCount": 0,
|
||||
"pendingCashFlowNetAmount": 0.0,
|
||||
"status": "clean",
|
||||
"stockOpenOrderCount": 0
|
||||
},
|
||||
"terminalAuditSha256": "5836794e260aa2cfd1a06d4568ae6577a37c9cbe09ec0f00995121ea5b2522d9",
|
||||
"implementation": {
|
||||
"buildManifestSha256": "fb4f7ac191c8ab8d8d39fc48014f84ce01d4c0731ffe986e7d5cb0107a3e5539",
|
||||
"builtAt": "2026-09-07T22:06:18+08:00",
|
||||
"engineCommit": "1b78186c4e37273c64c1f9e208c2e47021ee4fff",
|
||||
"identitySha256": "14e7ff10848d64ffcec232dea8cff23a032702301b81ae036bb0b26b4b0b5e33",
|
||||
"runnerBinarySha256": "7cddebf9ab5cbbd5d6f9bd5c7bf006c3895ee26967d23d80dc86b47c50fb761d",
|
||||
"schemaVersion": "fidc-backtest-implementation/v1",
|
||||
"serviceBinarySha256": "f09d121d73c34ad3cd5e2e0c24b0bdaf1974309c9ec3b93229cfb824b1e9f11a",
|
||||
"serviceCommit": "c80a38b91a398fd713f1f1faaa19a581ea85efad",
|
||||
"status": "verified"
|
||||
},
|
||||
"implementationIdentitySha256": "14e7ff10848d64ffcec232dea8cff23a032702301b81ae036bb0b26b4b0b5e33",
|
||||
"restartOrCold": {
|
||||
"queueWaitSeconds": 0.0,
|
||||
"executionSeconds": 8.994,
|
||||
"totalSeconds": 8.994,
|
||||
"runnerSeconds": 7.904,
|
||||
"bundleValidationSeconds": 0.166,
|
||||
"sourceEpochSeconds": 0.0,
|
||||
"strategyContractSeconds": 0.001,
|
||||
"terminalCalendarSeconds": 0.0,
|
||||
"riskFreeRateSeconds": 0.031,
|
||||
"riskFreeRateCacheHit": false,
|
||||
"engineSeconds": 0.012,
|
||||
"dataSeconds": 7.662,
|
||||
"resultSeconds": 0.03,
|
||||
"unattributedSeconds": 0.0,
|
||||
"canonicalSeconds": 0.001,
|
||||
"finalizationSeconds": 1.089
|
||||
},
|
||||
"processHotMedian": {
|
||||
"queueWaitSeconds": 0.0,
|
||||
"executionSeconds": 0.596,
|
||||
"totalSeconds": 0.596,
|
||||
"runnerSeconds": 0.026,
|
||||
"bundleValidationSeconds": 0.0,
|
||||
"sourceEpochSeconds": 0.0,
|
||||
"strategyContractSeconds": 0.003,
|
||||
"terminalCalendarSeconds": 0.0,
|
||||
"riskFreeRateSeconds": 0.0,
|
||||
"riskFreeRateCacheHit": true,
|
||||
"engineSeconds": 0.012,
|
||||
"dataSeconds": 0.007,
|
||||
"resultSeconds": 0.002,
|
||||
"unattributedSeconds": 0.0,
|
||||
"canonicalSeconds": 0.001,
|
||||
"finalizationSeconds": 0.569
|
||||
}
|
||||
}
|
||||
}
|
||||
+531
File diff suppressed because one or more lines are too long
@@ -0,0 +1,276 @@
|
||||
{
|
||||
"schemaVersion": "fidc-backtest-benchmark/v5",
|
||||
"label": "native-pit-nextopen",
|
||||
"generatedAtUnixSeconds": 1788790370,
|
||||
"requestSha256": "7948497bfa966eb118e56438e7c261869a26ab70a62186b92f761719f85e91c7",
|
||||
"requestOrigin": {
|
||||
"kind": "request_file"
|
||||
},
|
||||
"baseline": null,
|
||||
"baselineComparable": true,
|
||||
"baselineComparison": null,
|
||||
"bundleRefresh": null,
|
||||
"baseUrl": "http://127.0.0.1:8081",
|
||||
"runs": [
|
||||
{
|
||||
"slot": 0,
|
||||
"cacheClass": "restart_or_cold",
|
||||
"runId": "btr_1788790344805_1150210_2",
|
||||
"status": "succeeded",
|
||||
"queueWaitSeconds": 0.0,
|
||||
"executionSeconds": 21.61,
|
||||
"totalSeconds": 21.61,
|
||||
"runnerSeconds": 21.294,
|
||||
"bundleValidationSeconds": 0.004,
|
||||
"sourceEpochSeconds": 0.0,
|
||||
"strategyContractSeconds": 0.003,
|
||||
"terminalCalendarSeconds": 0.0,
|
||||
"riskFreeRateSeconds": 0.017,
|
||||
"riskFreeRateCacheHit": false,
|
||||
"engineSeconds": 5.566,
|
||||
"dataSeconds": 15.305,
|
||||
"resultSeconds": 0.395,
|
||||
"unattributedSeconds": 0.0,
|
||||
"canonicalSeconds": 0.206,
|
||||
"resultFinalization": {
|
||||
"canonicalSeconds": 0.206,
|
||||
"processEventStoreSeconds": 0.168,
|
||||
"storePublishSeconds": 0.005,
|
||||
"summarySeconds": 0.003
|
||||
},
|
||||
"dataPreparationTimings": {
|
||||
"adjustmentValidationSeconds": 0.0,
|
||||
"availableStockStDates": 0,
|
||||
"benchmarkFetchSeconds": 0.023,
|
||||
"candidatePlanBasePanelSeconds": 0.0,
|
||||
"candidatePlanSelectionSeconds": 0.0,
|
||||
"corporateActionSeconds": 0.017,
|
||||
"datasetConstructSeconds": 2.943,
|
||||
"externalFetchSeconds": 0.025,
|
||||
"historyDateSeconds": 0.0,
|
||||
"instrumentIndexBuildSeconds": 0.269,
|
||||
"instrumentMetadataSeconds": 0.006,
|
||||
"loopSeconds": 0.925,
|
||||
"marketIndexBuildSeconds": 1.846,
|
||||
"quotePlanSeconds": 0.0,
|
||||
"riskSnapshotSeconds": 0.0,
|
||||
"sourceQuerySeconds": 9.0,
|
||||
"stockStLookupSeconds": 0.0,
|
||||
"supplementalExecutionFetchSeconds": 0.0,
|
||||
"totalSeconds": 15.3
|
||||
},
|
||||
"finalizationSeconds": 0.307,
|
||||
"finalizationTimings": {
|
||||
"artifactVerificationSeconds": 0.008,
|
||||
"cacheRegistrationSeconds": 0.0,
|
||||
"postgresClientAcquireSeconds": 0.0,
|
||||
"postgresPersistSeconds": 0.299,
|
||||
"preTerminalUpdateSeconds": 0.307,
|
||||
"schemaCheckSeconds": 0.0,
|
||||
"timingSource": "fidc-backtest-service-monotonic"
|
||||
},
|
||||
"totalReturn": 0.9857987122635,
|
||||
"tradeCount": 25408,
|
||||
"riskDecisionCount": 113,
|
||||
"resultStoreDigest": "1eab5a5ffe59efeaba6b2048a33760aab31d42efa0fc10e35a4a7048db853235",
|
||||
"canonicalResultDigest": "b29b085d43bcc0f8f1712767421781c70570a24112933623d4bbbef46508d710",
|
||||
"terminalAudit": {
|
||||
"cashReceivableCount": 0,
|
||||
"cashReceivableTotalAmount": 0.0,
|
||||
"earliestDeferredCashDate": null,
|
||||
"futuresOpenOrderCount": 0,
|
||||
"lastExecutionDate": "2026-08-28",
|
||||
"omittedOpenOrderCount": 0,
|
||||
"openOrderSamples": [],
|
||||
"pendingCashFlowCount": 0,
|
||||
"pendingCashFlowNetAmount": 0.0,
|
||||
"status": "clean",
|
||||
"stockOpenOrderCount": 0
|
||||
},
|
||||
"terminalAuditVerified": true,
|
||||
"terminalAuditSha256": "0e8503c2bfe9ecfd93bab3a95f79461830886eb693cfe6f477279908c0d95bd5",
|
||||
"implementation": {
|
||||
"buildManifestSha256": "fb4f7ac191c8ab8d8d39fc48014f84ce01d4c0731ffe986e7d5cb0107a3e5539",
|
||||
"builtAt": "2026-09-07T22:06:18+08:00",
|
||||
"engineCommit": "1b78186c4e37273c64c1f9e208c2e47021ee4fff",
|
||||
"identitySha256": "14e7ff10848d64ffcec232dea8cff23a032702301b81ae036bb0b26b4b0b5e33",
|
||||
"runnerBinarySha256": "7cddebf9ab5cbbd5d6f9bd5c7bf006c3895ee26967d23d80dc86b47c50fb761d",
|
||||
"schemaVersion": "fidc-backtest-implementation/v1",
|
||||
"serviceBinarySha256": "f09d121d73c34ad3cd5e2e0c24b0bdaf1974309c9ec3b93229cfb824b1e9f11a",
|
||||
"serviceCommit": "c80a38b91a398fd713f1f1faaa19a581ea85efad",
|
||||
"status": "verified"
|
||||
},
|
||||
"implementationVerified": true,
|
||||
"implementationIdentitySha256": "14e7ff10848d64ffcec232dea8cff23a032702301b81ae036bb0b26b4b0b5e33",
|
||||
"artifactManifest": {
|
||||
"canonicalResult": {
|
||||
"algorithm": "sha256",
|
||||
"ordering": "engine_fact_order_v2",
|
||||
"schemaVersion": "fidc-canonical-backtest-result/v2",
|
||||
"sections": {
|
||||
"accountEvents": {
|
||||
"rowCount": 25572,
|
||||
"sha256": "da7576c1cbade9b48f1a154d07e870f1472924f4e0054cba0ef06739585ce380"
|
||||
},
|
||||
"equityFacts": {
|
||||
"rowCount": 1216,
|
||||
"sha256": "13db0a6d484cdf871e4f1dc1a4bc8db1e809d2808b21cf4fcab3961e6ad9e6fe"
|
||||
},
|
||||
"fillEvents": {
|
||||
"rowCount": 25408,
|
||||
"sha256": "92e0d103bbb487af45d27b720cdc92ef398d16e11655a6d0bcff8046013335db"
|
||||
},
|
||||
"holdingSnapshots": {
|
||||
"rowCount": 33164,
|
||||
"sha256": "97e3d60230a167a960bd2f615adfa33a9171527b62f1a181e2d5af694090e492"
|
||||
},
|
||||
"orderEvents": {
|
||||
"rowCount": 25541,
|
||||
"sha256": "635fe79eab9b1db0c116da2860ded66c350c051f44751d36306d158777039744"
|
||||
},
|
||||
"riskAudits": {
|
||||
"rowCount": 113,
|
||||
"sha256": "17bc940bcac18b050235ae3f17195f12586d1e29cd7bc64b6189edf2e07d1406"
|
||||
}
|
||||
},
|
||||
"sha256": "b29b085d43bcc0f8f1712767421781c70570a24112933623d4bbbef46508d710",
|
||||
"totalRows": 111014
|
||||
},
|
||||
"processEventStore": {
|
||||
"bytes": 10115947,
|
||||
"identitySha256": "e89d00ea1c2525c2ab1b57a29f2447047f2523083a953869ea2e25a488986565",
|
||||
"manifestBytes": 9757,
|
||||
"manifestSha256": "9bff5b97488c8804275ee65a717f01dca9ac68443b9766d4aab8d36189b1d8a1",
|
||||
"schemaVersion": "fidc-backtest-process-event-manifest/v1",
|
||||
"sections": {
|
||||
"processEvents": {
|
||||
"blockCount": 61,
|
||||
"bytes": 10106190,
|
||||
"rowCount": 83859,
|
||||
"sha256": "f436a32403aaa74b3068a0d8c74bfb7c429523d3f78617234eec82a009ab3da2"
|
||||
}
|
||||
},
|
||||
"sha256": "aa7488614a85f1527713332039b0fa212d1807f11b03e0e701480bf5d8ede1a4",
|
||||
"totalEvents": 83859
|
||||
},
|
||||
"resultStore": {
|
||||
"bytes": 35831197,
|
||||
"identitySha256": "a238986d82354e802d2c73526d035021b38e1eed0a2b0b0f1eb6ce41ed4f321b",
|
||||
"manifestBytes": 54237,
|
||||
"manifestSha256": "0991f096db161fd16da00a7529ece54a8cf68643d88aeec8f4d3fedc6c740d03",
|
||||
"schemaVersion": "fidc-backtest-fact-manifest/v1",
|
||||
"sections": {
|
||||
"accountEvents": {
|
||||
"blockCount": 61,
|
||||
"bytes": 3303444,
|
||||
"rowCount": 25572,
|
||||
"sha256": "276fd3edd7e60afbb05fa32c111db3e1df2025637887509b6353b24c7f127a48"
|
||||
},
|
||||
"equityFacts": {
|
||||
"blockCount": 61,
|
||||
"bytes": 3761920,
|
||||
"rowCount": 1216,
|
||||
"sha256": "42c22c70bad16b01d8f70fa80977028b2789381772e4eff7bb231701e18293a1"
|
||||
},
|
||||
"fillEvents": {
|
||||
"blockCount": 61,
|
||||
"bytes": 7731746,
|
||||
"rowCount": 25408,
|
||||
"sha256": "c59a4a1e70195bd8a2421941e11b7fbb138d658796ef4d42466c44505b8353d8"
|
||||
},
|
||||
"holdingSnapshots": {
|
||||
"blockCount": 61,
|
||||
"bytes": 15176388,
|
||||
"rowCount": 33164,
|
||||
"sha256": "6e40d3f1d43005dc4f0c492662c4fdf600ca96e9abe874db4b56b9bd51e89cd4"
|
||||
},
|
||||
"orderEvents": {
|
||||
"blockCount": 61,
|
||||
"bytes": 5775840,
|
||||
"rowCount": 25541,
|
||||
"sha256": "14fa27db9328c4c6337157af4fc1efc1c4bc9f239a4605bf92439b0f3f426200"
|
||||
},
|
||||
"riskAudits": {
|
||||
"blockCount": 36,
|
||||
"bytes": 27622,
|
||||
"rowCount": 113,
|
||||
"sha256": "2f6d9a01ec568ed13943b9590e21d73bf614ce2c777302764533d2da0168b2d5"
|
||||
}
|
||||
},
|
||||
"sha256": "1eab5a5ffe59efeaba6b2048a33760aab31d42efa0fc10e35a4a7048db853235",
|
||||
"totalEvents": 111014
|
||||
},
|
||||
"schemaVersion": "fidc-backtest-artifacts/v4"
|
||||
}
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"resultConsistent": true,
|
||||
"resultStoreDigest": "1eab5a5ffe59efeaba6b2048a33760aab31d42efa0fc10e35a4a7048db853235",
|
||||
"canonicalResultDigest": "b29b085d43bcc0f8f1712767421781c70570a24112933623d4bbbef46508d710",
|
||||
"totalReturn": 0.9857987122635,
|
||||
"tradeCount": 25408,
|
||||
"terminalAudit": {
|
||||
"cashReceivableCount": 0,
|
||||
"cashReceivableTotalAmount": 0.0,
|
||||
"earliestDeferredCashDate": null,
|
||||
"futuresOpenOrderCount": 0,
|
||||
"lastExecutionDate": "2026-08-28",
|
||||
"omittedOpenOrderCount": 0,
|
||||
"openOrderSamples": [],
|
||||
"pendingCashFlowCount": 0,
|
||||
"pendingCashFlowNetAmount": 0.0,
|
||||
"status": "clean",
|
||||
"stockOpenOrderCount": 0
|
||||
},
|
||||
"terminalAuditSha256": "0e8503c2bfe9ecfd93bab3a95f79461830886eb693cfe6f477279908c0d95bd5",
|
||||
"implementation": {
|
||||
"buildManifestSha256": "fb4f7ac191c8ab8d8d39fc48014f84ce01d4c0731ffe986e7d5cb0107a3e5539",
|
||||
"builtAt": "2026-09-07T22:06:18+08:00",
|
||||
"engineCommit": "1b78186c4e37273c64c1f9e208c2e47021ee4fff",
|
||||
"identitySha256": "14e7ff10848d64ffcec232dea8cff23a032702301b81ae036bb0b26b4b0b5e33",
|
||||
"runnerBinarySha256": "7cddebf9ab5cbbd5d6f9bd5c7bf006c3895ee26967d23d80dc86b47c50fb761d",
|
||||
"schemaVersion": "fidc-backtest-implementation/v1",
|
||||
"serviceBinarySha256": "f09d121d73c34ad3cd5e2e0c24b0bdaf1974309c9ec3b93229cfb824b1e9f11a",
|
||||
"serviceCommit": "c80a38b91a398fd713f1f1faaa19a581ea85efad",
|
||||
"status": "verified"
|
||||
},
|
||||
"implementationIdentitySha256": "14e7ff10848d64ffcec232dea8cff23a032702301b81ae036bb0b26b4b0b5e33",
|
||||
"restartOrCold": {
|
||||
"queueWaitSeconds": 0.0,
|
||||
"executionSeconds": 21.61,
|
||||
"totalSeconds": 21.61,
|
||||
"runnerSeconds": 21.294,
|
||||
"bundleValidationSeconds": 0.004,
|
||||
"sourceEpochSeconds": 0.0,
|
||||
"strategyContractSeconds": 0.003,
|
||||
"terminalCalendarSeconds": 0.0,
|
||||
"riskFreeRateSeconds": 0.017,
|
||||
"riskFreeRateCacheHit": false,
|
||||
"engineSeconds": 5.566,
|
||||
"dataSeconds": 15.305,
|
||||
"resultSeconds": 0.395,
|
||||
"unattributedSeconds": 0.0,
|
||||
"canonicalSeconds": 0.206,
|
||||
"finalizationSeconds": 0.307
|
||||
},
|
||||
"processHotMedian": {
|
||||
"queueWaitSeconds": 0.0,
|
||||
"executionSeconds": 21.61,
|
||||
"totalSeconds": 21.61,
|
||||
"runnerSeconds": 21.294,
|
||||
"bundleValidationSeconds": 0.004,
|
||||
"sourceEpochSeconds": 0.0,
|
||||
"strategyContractSeconds": 0.003,
|
||||
"terminalCalendarSeconds": 0.0,
|
||||
"riskFreeRateSeconds": 0.017,
|
||||
"riskFreeRateCacheHit": false,
|
||||
"engineSeconds": 5.566,
|
||||
"dataSeconds": 15.305,
|
||||
"resultSeconds": 0.395,
|
||||
"unattributedSeconds": 0.0,
|
||||
"canonicalSeconds": 0.206,
|
||||
"finalizationSeconds": 0.307
|
||||
}
|
||||
}
|
||||
}
|
||||
+424
@@ -0,0 +1,424 @@
|
||||
{
|
||||
"strategy_id": "benchmark-native-factor-overlay",
|
||||
"strategy_version_id": "goal-five-year-semantics-v1",
|
||||
"user_id": "boris",
|
||||
"runtime": {
|
||||
"start_date": "2021-08-23",
|
||||
"end_date": "2026-08-28",
|
||||
"frequency": "1d",
|
||||
"source_table": "strategy_factory_source_lake.daily_source_rows_v1",
|
||||
"signal_symbol": "000852.SH",
|
||||
"benchmark_symbol": "000852.SH",
|
||||
"initial_cash": 10000000.0,
|
||||
"backtestDataBundleId": "bt_bundle_b44e03990c76064f54a9",
|
||||
"backtestDataBundleHash": "d7c1461131edaecb5981e207852782d92e636dbfee9fd7c44063605d96eb2b4f"
|
||||
},
|
||||
"execution": {
|
||||
"matchingType": "next_bar_open",
|
||||
"rebalanceCashMode": "same_point_net",
|
||||
"slippageModel": "price_ratio",
|
||||
"slippageValue": 0.0001,
|
||||
"commissionRate": 0.0001,
|
||||
"minimumCommission": 5.0,
|
||||
"stampTaxRateBeforeChange": 0.001,
|
||||
"stampTaxRateAfterChange": 0.0005,
|
||||
"stampTaxChangeDate": "2023-08-28",
|
||||
"volumeLimit": true,
|
||||
"liquidityLimit": false,
|
||||
"volumePercent": 0.25,
|
||||
"riskPolicy": {
|
||||
"allowMarketOrders": true,
|
||||
"blacklistEnabled": false,
|
||||
"blacklistedSymbols": [],
|
||||
"commissionRate": 0.0001,
|
||||
"forbidSameDayRebuyAfterSell": true,
|
||||
"liquidityLimitEnabled": false,
|
||||
"liveTradingEnabled": false,
|
||||
"minimumCommission": 5.0,
|
||||
"rejectBjseBuy": false,
|
||||
"rejectBjseSelection": false,
|
||||
"rejectInactiveBuy": true,
|
||||
"rejectInactiveSelection": false,
|
||||
"rejectInactiveSell": true,
|
||||
"rejectKcbBuy": true,
|
||||
"rejectKcbSelection": false,
|
||||
"rejectLowerLimitSelection": false,
|
||||
"rejectLowerLimitSell": true,
|
||||
"rejectNewListingBuy": true,
|
||||
"rejectNewListingSelection": false,
|
||||
"rejectOneYuanBuy": true,
|
||||
"rejectOneYuanSelection": false,
|
||||
"rejectPausedBuy": true,
|
||||
"rejectPausedSelection": false,
|
||||
"rejectPausedSell": true,
|
||||
"rejectStBuy": true,
|
||||
"rejectStSelection": false,
|
||||
"rejectStarStBuy": true,
|
||||
"rejectStarStSelection": false,
|
||||
"rejectUpperLimitBuy": true,
|
||||
"rejectUpperLimitSelection": false,
|
||||
"respectAllowBuySell": true,
|
||||
"stampTaxChangeDate": "2023-08-28",
|
||||
"stampTaxRateAfterChange": 0.0005,
|
||||
"stampTaxRateBeforeChange": 0.001,
|
||||
"volumeLimitEnabled": true,
|
||||
"volumePercent": 0.25
|
||||
}
|
||||
},
|
||||
"strategy_source": {
|
||||
"source_type": "platform-strategy",
|
||||
"language": "engine-script",
|
||||
"parser": "omniquant-engine-script-v2",
|
||||
"source_code": "strategy(\"xiaoshizhi_1_06_dynamic_small_cap_csi2000_signal_day_exposure\") {\n market(\"CN_A\");\n benchmark(\"000300.SH\");\n signal(\"932000.CSI\");\n\n let stocknum = 30;\n let candidate_pool_size = 50;\n let position_denominator_extra = 1;\n let signal_close_t = rolling_mean_current(\"signal_close\", 1);\n let signal_ma10_t = rolling_mean_current(\"signal_close\", 10);\n let signal_ma30_t = rolling_mean_current(\"signal_close\", 30);\n let signal_vol20_t = rolling_return_stddev_current(\"signal_close\", 20);\n let signal_high60_t = rolling_max_current(\"signal_close\", 60);\n let signal_drawdown60_t = 1.0 - safe_div(signal_close_t, signal_high60_t);\n let signal_range_t = safe_div(clamp(signal_close_t, 2000.0, 3000.0) - 2000.0, 1000.0);\n let market_cap_lower_t = 12.0 + signal_range_t * 5.0;\n let market_cap_upper_t = 40.0 + signal_range_t * 5.0;\n let base_exposure_t = signal_ma10_t > signal_ma30_t ? 1.0 : 0.3;\n let volatility_exposure_t = signal_vol20_t >= 0.025 ? 0.3 : 1.0;\n let drawdown_exposure_t = signal_drawdown60_t >= 0.08 ? 0.2 : 1.0;\n let final_exposure_t =\n signal_close_t > 0.0 &&\n signal_ma10_t > 0.0 &&\n signal_ma30_t > 0.0 &&\n signal_high60_t > 0.0\n ? min(min(base_exposure_t, volatility_exposure_t), drawdown_exposure_t)\n : 0.0;\n\n rebalance.every_days(1).at([\"15:00\"]);\n\n selection.market_cap_band(\n field=\"market_cap\",\n lower=market_cap_lower_t,\n upper=market_cap_upper_t\n );\n\n filter.stock_expr(((!is_star_st && !is_kcb && !is_bjse && rolling_mean_current(\"close\", 5) > rolling_mean_current(\"close\", 10) && rolling_mean_current(\"close\", 10) > rolling_mean_current(\"close\", 30) && rolling_mean_current(\"volume\", 5) < rolling_mean_current(\"volume\", 100)) && (!is_st))) && (ths_up_days_stock >= 1);\n\n ordering.rank_by(\"market_cap\", \"asc\");\n selection.candidate_limit(50);\n selection.limit(stocknum);\n\n allocation.buy_scale(30.0 / 31.0);\n execution.strict_value_budget(true)\n\n trading.hold_until_exit(true);\n trading.max_holding_days(90);\n trading.daily_top_up(true);\n trading.daily_position_target_adjust(true);\n trading.target_portfolio_daily(true);\n trading.rebalance_existing_positions(true);\n trading.retry_empty_rebalance(true);\n trading.release_slot_on_exit_signal(true);\n\n risk.stop_loss(0.08);\n risk.take_profit(0.16);\n risk.reference_price_mode(\"signal_day_post_adjusted_close\");\n risk.index_exposure(final_exposure_t);\n\n risk.policy(reject_st_selection=false, reject_st_buy=true, reject_star_st_selection=false, reject_star_st_buy=true, reject_paused_selection=false, reject_paused_buy=true, reject_paused_sell=true, reject_inactive_selection=false, reject_inactive_buy=true, reject_inactive_sell=true, reject_new_listing_selection=false, reject_new_listing_buy=true, reject_kcb_selection=false, reject_kcb_buy=true, reject_bjse_selection=false, reject_bjse_buy=false, reject_one_yuan_selection=false, reject_one_yuan_buy=true, respect_allow_buy_sell=true, reject_upper_limit_selection=false, reject_lower_limit_selection=false, reject_upper_limit_buy=true, reject_lower_limit_sell=true, forbid_same_day_rebuy_after_sell=true, blacklist_enabled=false, blacklisted_symbols=[], allow_market_orders=true, live_trading_enabled=false, volume_limit_enabled=true, liquidity_limit_enabled=false, volume_percent=0.25, commission_rate=0.0001, minimum_commission=5.0, stamp_tax_rate_before_change=0.001, stamp_tax_rate_after_change=0.0005, stamp_tax_change_date=\"2023-08-28\");\n\n execution.matching_type(\"next_bar_open\");\n execution.slippage(\"price_ratio\", 0.0001);\n execution.rebalance_cash_mode(\"same_point_net\");\n}"
|
||||
},
|
||||
"strategy_spec": {
|
||||
"benchmark": {
|
||||
"fallbackInstrumentId": "000852.SH",
|
||||
"instrumentId": "000852.SH"
|
||||
},
|
||||
"engineConfig": {
|
||||
"benchmarkSymbol": "000852.SH",
|
||||
"commissionRate": 0.0001,
|
||||
"dividendReinvestment": false,
|
||||
"dynamicRange": {
|
||||
"baseCapFloor": 7,
|
||||
"baseIndexLevel": 2000,
|
||||
"capSpan": 10,
|
||||
"xs": 0.008
|
||||
},
|
||||
"frequency": "1d",
|
||||
"indexThrottle": {
|
||||
"defensiveExposure": 0.5,
|
||||
"fullExposure": 1,
|
||||
"longDays": 130,
|
||||
"rsiRate": 1.0001,
|
||||
"shortDays": 1
|
||||
},
|
||||
"liquidityLimit": false,
|
||||
"matchingType": "next_bar_open",
|
||||
"minimumCommission": 5.0,
|
||||
"rankLimit": 30,
|
||||
"rebalanceCashMode": "same_point_net",
|
||||
"rebalanceSchedule": {
|
||||
"frequency": "daily",
|
||||
"time": "15:00"
|
||||
},
|
||||
"refreshRate": 1,
|
||||
"riskPolicy": {
|
||||
"allowMarketOrders": true,
|
||||
"blacklistEnabled": false,
|
||||
"blacklistedSymbols": [],
|
||||
"commissionRate": 0.0001,
|
||||
"forbidSameDayRebuyAfterSell": true,
|
||||
"liquidityLimitEnabled": false,
|
||||
"liveTradingEnabled": false,
|
||||
"minimumCommission": 5.0,
|
||||
"rejectBjseBuy": false,
|
||||
"rejectBjseSelection": false,
|
||||
"rejectInactiveBuy": true,
|
||||
"rejectInactiveSelection": false,
|
||||
"rejectInactiveSell": true,
|
||||
"rejectKcbBuy": true,
|
||||
"rejectKcbSelection": false,
|
||||
"rejectLowerLimitSelection": false,
|
||||
"rejectLowerLimitSell": true,
|
||||
"rejectNewListingBuy": true,
|
||||
"rejectNewListingSelection": false,
|
||||
"rejectOneYuanBuy": true,
|
||||
"rejectOneYuanSelection": false,
|
||||
"rejectPausedBuy": true,
|
||||
"rejectPausedSelection": false,
|
||||
"rejectPausedSell": true,
|
||||
"rejectStBuy": true,
|
||||
"rejectStSelection": false,
|
||||
"rejectStarStBuy": true,
|
||||
"rejectStarStSelection": false,
|
||||
"rejectUpperLimitBuy": true,
|
||||
"rejectUpperLimitSelection": false,
|
||||
"respectAllowBuySell": true,
|
||||
"stampTaxChangeDate": "2023-08-28",
|
||||
"stampTaxRateAfterChange": 0.0005,
|
||||
"stampTaxRateBeforeChange": 0.001,
|
||||
"volumeLimitEnabled": true,
|
||||
"volumePercent": 0.25
|
||||
},
|
||||
"rsiRate": 1.0001,
|
||||
"signalSymbol": "000852.SH",
|
||||
"skipWindows": [],
|
||||
"slippageModel": "price_ratio",
|
||||
"slippageValue": 0.0001,
|
||||
"stampTaxChangeDate": "2023-08-28",
|
||||
"stampTaxRateAfterChange": 0.0005,
|
||||
"stampTaxRateBeforeChange": 0.001,
|
||||
"stockMaFilter": {
|
||||
"longDays": 30,
|
||||
"midDays": 10,
|
||||
"rsiRate": 1.0001,
|
||||
"shortDays": 5,
|
||||
"volumeLongDays": 100,
|
||||
"volumeShortDays": 5
|
||||
},
|
||||
"stopLossMultiplier": 0.08,
|
||||
"strictValueBudget": true,
|
||||
"takeProfitMultiplier": 0.16,
|
||||
"templateId": "xiaoshizhi_1_06_dynamic_small_cap_csi2000_signal_day_exposure",
|
||||
"volumeLimit": true,
|
||||
"volumePercent": 0.25
|
||||
},
|
||||
"execution": {
|
||||
"commissionRate": 0.0001,
|
||||
"executionGranularity": "daily_or_minute_bar",
|
||||
"extractor": "omniquant-engine-script-v2",
|
||||
"frequency": "1d",
|
||||
"liquidityLimit": false,
|
||||
"matchingType": "next_bar_open",
|
||||
"minimumCommission": 5.0,
|
||||
"priceSource": "current_bar_close_or_next_bar_open_or_minute_bar",
|
||||
"rebalanceCashMode": "same_point_net",
|
||||
"riskPolicy": {
|
||||
"allowMarketOrders": true,
|
||||
"blacklistEnabled": false,
|
||||
"blacklistedSymbols": [],
|
||||
"commissionRate": 0.0001,
|
||||
"forbidSameDayRebuyAfterSell": true,
|
||||
"liquidityLimitEnabled": false,
|
||||
"liveTradingEnabled": false,
|
||||
"minimumCommission": 5.0,
|
||||
"rejectBjseBuy": false,
|
||||
"rejectBjseSelection": false,
|
||||
"rejectInactiveBuy": true,
|
||||
"rejectInactiveSelection": false,
|
||||
"rejectInactiveSell": true,
|
||||
"rejectKcbBuy": true,
|
||||
"rejectKcbSelection": false,
|
||||
"rejectLowerLimitSelection": false,
|
||||
"rejectLowerLimitSell": true,
|
||||
"rejectNewListingBuy": true,
|
||||
"rejectNewListingSelection": false,
|
||||
"rejectOneYuanBuy": true,
|
||||
"rejectOneYuanSelection": false,
|
||||
"rejectPausedBuy": true,
|
||||
"rejectPausedSelection": false,
|
||||
"rejectPausedSell": true,
|
||||
"rejectStBuy": true,
|
||||
"rejectStSelection": false,
|
||||
"rejectStarStBuy": true,
|
||||
"rejectStarStSelection": false,
|
||||
"rejectUpperLimitBuy": true,
|
||||
"rejectUpperLimitSelection": false,
|
||||
"respectAllowBuySell": true,
|
||||
"stampTaxChangeDate": "2023-08-28",
|
||||
"stampTaxRateAfterChange": 0.0005,
|
||||
"stampTaxRateBeforeChange": 0.001,
|
||||
"volumeLimitEnabled": true,
|
||||
"volumePercent": 0.25
|
||||
},
|
||||
"selectionGranularity": "strategy_factory_source_lake.daily_source_rows_v1",
|
||||
"slippageModel": "price_ratio",
|
||||
"slippageValue": 0.0001,
|
||||
"sourceKind": "platform-strategy",
|
||||
"sourceLanguage": "engine-script",
|
||||
"stampTaxChangeDate": "2023-08-28",
|
||||
"stampTaxRateAfterChange": 0.0005,
|
||||
"stampTaxRateBeforeChange": 0.001,
|
||||
"strictValueBudget": true,
|
||||
"volumeLimit": true,
|
||||
"volumePercent": 0.25
|
||||
},
|
||||
"factorRefs": [
|
||||
"market_cap",
|
||||
"ths_up_days_stock"
|
||||
],
|
||||
"market": "CN_A",
|
||||
"metadata": {
|
||||
"backtestDataBundle": {
|
||||
"sourceTable": "strategy_factory_source_lake.daily_source_rows_v1",
|
||||
"backtestDataBundleId": "bt_bundle_b44e03990c76064f54a9",
|
||||
"backtestDataBundleHash": "d7c1461131edaecb5981e207852782d92e636dbfee9fd7c44063605d96eb2b4f"
|
||||
},
|
||||
"backtestDataBundleHash": "d7c1461131edaecb5981e207852782d92e636dbfee9fd7c44063605d96eb2b4f",
|
||||
"backtestDataBundleId": "bt_bundle_b44e03990c76064f54a9",
|
||||
"sourceTable": "strategy_factory_source_lake.daily_source_rows_v1"
|
||||
},
|
||||
"rebalance": {
|
||||
"dailyApproximation": "日线回测按 matching_type 撮合;分钟线回测按交易时刻分钟价格撮合",
|
||||
"frequencyDays": 1,
|
||||
"schedule": {
|
||||
"frequency": "daily",
|
||||
"time": "15:00"
|
||||
},
|
||||
"tradeTimes": [
|
||||
"15:00"
|
||||
]
|
||||
},
|
||||
"risk": {
|
||||
"indexThrottleExpr": "final_exposure_t",
|
||||
"stopLossExpr": "0.08",
|
||||
"stopTakeReferencePriceMode": "signal_day_post_adjusted_close",
|
||||
"takeProfitExpr": "0.16"
|
||||
},
|
||||
"runtimeExpressions": {
|
||||
"allocation": {
|
||||
"buyScaleExpr": "30.0 / 31.0"
|
||||
},
|
||||
"ordering": {
|
||||
"rankBy": "market_cap",
|
||||
"rankExpr": "",
|
||||
"rankOrder": "asc"
|
||||
},
|
||||
"prelude": "let stocknum = 30;\nlet candidate_pool_size = 50;\nlet position_denominator_extra = 1;\nlet signal_close_t = rolling_mean_current(\"signal_close\", 1);\nlet signal_ma10_t = rolling_mean_current(\"signal_close\", 10);\nlet signal_ma30_t = rolling_mean_current(\"signal_close\", 30);\nlet signal_vol20_t = rolling_return_stddev_current(\"signal_close\", 20);\nlet signal_high60_t = rolling_max_current(\"signal_close\", 60);\nlet signal_drawdown60_t = 1.0 - safe_div(signal_close_t, signal_high60_t);\nlet signal_range_t = safe_div(clamp(signal_close_t, 2000.0, 3000.0) - 2000.0, 1000.0);\nlet market_cap_lower_t = 12.0 + signal_range_t * 5.0;\nlet market_cap_upper_t = 40.0 + signal_range_t * 5.0;\nlet base_exposure_t = signal_ma10_t > signal_ma30_t ? 1.0 : 0.3;\nlet volatility_exposure_t = signal_vol20_t >= 0.025 ? 0.3 : 1.0;\nlet drawdown_exposure_t = signal_drawdown60_t >= 0.08 ? 0.2 : 1.0;\nlet final_exposure_t = signal_close_t > 0.0 && signal_ma10_t > 0.0 && signal_ma30_t > 0.0 && signal_high60_t > 0.0 ? min(min(base_exposure_t, volatility_exposure_t), drawdown_exposure_t) : 0.0;\nlet warmup_probe = rolling_sum(\"amount\", 125);",
|
||||
"risk": {
|
||||
"exposureExpr": "final_exposure_t",
|
||||
"stopLossExpr": "0.08",
|
||||
"stopTakeReferencePriceMode": "signal_day_post_adjusted_close",
|
||||
"takeProfitExpr": "0.16"
|
||||
},
|
||||
"schedule": {
|
||||
"frequency": "daily",
|
||||
"time": "15:00"
|
||||
},
|
||||
"selection": {
|
||||
"candidateLimitExpr": "50",
|
||||
"limitExpr": "stocknum",
|
||||
"marketCapField": "market_cap",
|
||||
"marketCapLowerExpr": "market_cap_lower_t",
|
||||
"marketCapUpperExpr": "market_cap_upper_t",
|
||||
"stockFilterExpr": "(((!is_star_st && !is_kcb && !is_bjse && rolling_mean_current(\"close\", 5) > rolling_mean_current(\"close\", 10) && rolling_mean_current(\"close\", 10) > rolling_mean_current(\"close\", 30) && rolling_mean_current(\"volume\", 5) < rolling_mean_current(\"volume\", 100)) && (!is_st))) && (ths_up_days_stock >= 1)"
|
||||
},
|
||||
"trading": {
|
||||
"actions": [],
|
||||
"dailyPositionTargetAdjust": true,
|
||||
"dailyTopUp": true,
|
||||
"holdUntilExit": true,
|
||||
"maxHoldingDays": 90,
|
||||
"rebalanceExistingPositions": true,
|
||||
"releaseSlotOnExitSignal": true,
|
||||
"retryEmptyRebalance": true,
|
||||
"rotationEnabled": true,
|
||||
"stage": "on_day",
|
||||
"subscriptionGuardRequired": false,
|
||||
"targetPortfolioDaily": true
|
||||
}
|
||||
},
|
||||
"seasonality": {
|
||||
"skipWindows": []
|
||||
},
|
||||
"selectors": [
|
||||
{
|
||||
"field": "market_cap",
|
||||
"lowerExpr": "market_cap_lower_t",
|
||||
"mapping": "market_cap -> strategy_factory_source_lake.runtime_fields.market_cap",
|
||||
"type": "dynamicRange",
|
||||
"upperExpr": "market_cap_upper_t"
|
||||
},
|
||||
{
|
||||
"expr": "(((!is_star_st && !is_kcb && !is_bjse && rolling_mean_current(\"close\", 5) > rolling_mean_current(\"close\", 10) && rolling_mean_current(\"close\", 10) > rolling_mean_current(\"close\", 30) && rolling_mean_current(\"volume\", 5) < rolling_mean_current(\"volume\", 100)) && (!is_st))) && (ths_up_days_stock >= 1)",
|
||||
"type": "filter"
|
||||
},
|
||||
{
|
||||
"limitExpr": "stocknum",
|
||||
"orderBy": [
|
||||
"market_cap asc"
|
||||
],
|
||||
"type": "rank"
|
||||
}
|
||||
],
|
||||
"signalSymbol": "000852.SH",
|
||||
"sourceCode": "strategy(\"xiaoshizhi_1_06_dynamic_small_cap_csi2000_signal_day_exposure\") {\n market(\"CN_A\");\n benchmark(\"000300.SH\");\n signal(\"932000.CSI\");\n\n let stocknum = 30;\n let candidate_pool_size = 50;\n let position_denominator_extra = 1;\n let signal_close_t = rolling_mean_current(\"signal_close\", 1);\n let signal_ma10_t = rolling_mean_current(\"signal_close\", 10);\n let signal_ma30_t = rolling_mean_current(\"signal_close\", 30);\n let signal_vol20_t = rolling_return_stddev_current(\"signal_close\", 20);\n let signal_high60_t = rolling_max_current(\"signal_close\", 60);\n let signal_drawdown60_t = 1.0 - safe_div(signal_close_t, signal_high60_t);\n let signal_range_t = safe_div(clamp(signal_close_t, 2000.0, 3000.0) - 2000.0, 1000.0);\n let market_cap_lower_t = 12.0 + signal_range_t * 5.0;\n let market_cap_upper_t = 40.0 + signal_range_t * 5.0;\n let base_exposure_t = signal_ma10_t > signal_ma30_t ? 1.0 : 0.3;\n let volatility_exposure_t = signal_vol20_t >= 0.025 ? 0.3 : 1.0;\n let drawdown_exposure_t = signal_drawdown60_t >= 0.08 ? 0.2 : 1.0;\n let final_exposure_t =\n signal_close_t > 0.0 &&\n signal_ma10_t > 0.0 &&\n signal_ma30_t > 0.0 &&\n signal_high60_t > 0.0\n ? min(min(base_exposure_t, volatility_exposure_t), drawdown_exposure_t)\n : 0.0;\n\n rebalance.every_days(1).at([\"15:00\"]);\n\n selection.market_cap_band(\n field=\"market_cap\",\n lower=market_cap_lower_t,\n upper=market_cap_upper_t\n );\n\n filter.stock_expr(((!is_star_st && !is_kcb && !is_bjse && rolling_mean_current(\"close\", 5) > rolling_mean_current(\"close\", 10) && rolling_mean_current(\"close\", 10) > rolling_mean_current(\"close\", 30) && rolling_mean_current(\"volume\", 5) < rolling_mean_current(\"volume\", 100)) && (!is_st))) && (ths_up_days_stock >= 1);\n\n ordering.rank_by(\"market_cap\", \"asc\");\n selection.candidate_limit(50);\n selection.limit(stocknum);\n\n allocation.buy_scale(30.0 / 31.0);\n execution.strict_value_budget(true)\n\n trading.hold_until_exit(true);\n trading.max_holding_days(90);\n trading.daily_top_up(true);\n trading.daily_position_target_adjust(true);\n trading.target_portfolio_daily(true);\n trading.rebalance_existing_positions(true);\n trading.retry_empty_rebalance(true);\n trading.release_slot_on_exit_signal(true);\n\n risk.stop_loss(0.08);\n risk.take_profit(0.16);\n risk.reference_price_mode(\"signal_day_post_adjusted_close\");\n risk.index_exposure(final_exposure_t);\n\n risk.policy(reject_st_selection=false, reject_st_buy=true, reject_star_st_selection=false, reject_star_st_buy=true, reject_paused_selection=false, reject_paused_buy=true, reject_paused_sell=true, reject_inactive_selection=false, reject_inactive_buy=true, reject_inactive_sell=true, reject_new_listing_selection=false, reject_new_listing_buy=true, reject_kcb_selection=false, reject_kcb_buy=true, reject_bjse_selection=false, reject_bjse_buy=false, reject_one_yuan_selection=false, reject_one_yuan_buy=true, respect_allow_buy_sell=true, reject_upper_limit_selection=false, reject_lower_limit_selection=false, reject_upper_limit_buy=true, reject_lower_limit_sell=true, forbid_same_day_rebuy_after_sell=true, blacklist_enabled=false, blacklisted_symbols=[], allow_market_orders=true, live_trading_enabled=false, volume_limit_enabled=true, liquidity_limit_enabled=false, volume_percent=0.25, commission_rate=0.0001, minimum_commission=5.0, stamp_tax_rate_before_change=0.001, stamp_tax_rate_after_change=0.0005, stamp_tax_change_date=\"2023-08-28\");\n\n execution.matching_type(\"next_bar_open\");\n execution.slippage(\"price_ratio\", 0.0001);\n execution.rebalance_cash_mode(\"same_point_net\");\n}",
|
||||
"strategyId": "warmup-expression-contract-acceptance",
|
||||
"universe": {
|
||||
"exclude": [],
|
||||
"implementationNotes": [
|
||||
"ST、停牌、退市、新股、科创、一元、涨跌停、同日卖出禁买、成交量和费用由 riskPolicy / RiskLimits 统一执行",
|
||||
"上市日期与退市日期取自 instrument 结构化字段,不再使用股票名称做 ST/退市判断",
|
||||
"盘中 current_price / last_price 由策略交易时刻批量 tick 查询驱动"
|
||||
]
|
||||
},
|
||||
"version": "1.0.0",
|
||||
"stockPoolFactorContract": {
|
||||
"schemaVersion": 1,
|
||||
"entryLogic": "all",
|
||||
"exitLogic": "any",
|
||||
"conditions": [
|
||||
{
|
||||
"factorRef": "up_days_stock",
|
||||
"label": "连涨天数",
|
||||
"role": "selection",
|
||||
"registryRole": "selection_feature",
|
||||
"roleRegistrySha256": "1d0b307c168feda08d5fbe20f0e88964230553f8ceb2017b66aec48dbd5a5b57",
|
||||
"roleEvidence": {
|
||||
"role": "selection_feature",
|
||||
"polarity": "trend_persistence_positive",
|
||||
"signalShape": "state",
|
||||
"holdingStates": [
|
||||
"flat"
|
||||
],
|
||||
"requiredConfirmations": [],
|
||||
"cooldownTradingDays": 0,
|
||||
"windowTradingDays": 1,
|
||||
"recommendedParameters": {
|
||||
"inputUnit": "days",
|
||||
"minimum": 0
|
||||
}
|
||||
},
|
||||
"operator": ">=",
|
||||
"threshold": 1,
|
||||
"semantic": {
|
||||
"ref": "up_days_stock",
|
||||
"label": "连涨天数",
|
||||
"status": "available",
|
||||
"queryable": true,
|
||||
"source": "strategy-factory-source-lake:indicator",
|
||||
"schema": "strategy-factory.value-semantics/v1",
|
||||
"valueType": "integer",
|
||||
"semanticType": "count",
|
||||
"comparisonGroup": "count",
|
||||
"storageUnit": "days",
|
||||
"inputUnit": "days",
|
||||
"inputScale": 1.0,
|
||||
"allowedOperators": [
|
||||
">",
|
||||
">=",
|
||||
"<",
|
||||
"<=",
|
||||
"==",
|
||||
"!=",
|
||||
"between",
|
||||
"in"
|
||||
],
|
||||
"nullable": true,
|
||||
"declared": true,
|
||||
"metadataStatus": "declared",
|
||||
"semanticProvenance": "explicit_manifest",
|
||||
"businessSemanticDeclared": true,
|
||||
"minimum": 0,
|
||||
"backtestBinding": {
|
||||
"field": "ths_up_days_stock",
|
||||
"sourceDataset": "indicators_up_days_stock"
|
||||
},
|
||||
"tradingRoles": [
|
||||
{
|
||||
"role": "selection_feature",
|
||||
"polarity": "trend_persistence_positive",
|
||||
"signalShape": "state",
|
||||
"holdingStates": [
|
||||
"flat"
|
||||
],
|
||||
"requiredConfirmations": [],
|
||||
"cooldownTradingDays": 0,
|
||||
"windowTradingDays": 1,
|
||||
"recommendedParameters": {
|
||||
"inputUnit": "days",
|
||||
"minimum": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"tradingRoleTradable": true,
|
||||
"tradingRoleEvidenceStatus": "source_lake_registered_indicator",
|
||||
"tradingRoleRegistrySha256": "1d0b307c168feda08d5fbe20f0e88964230553f8ceb2017b66aec48dbd5a5b57"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,11 +16,42 @@
|
||||
"stock state with prior value 2 and current value 999 reads 2 intraday and 999 at close",
|
||||
"unbound factor value remains unchanged"
|
||||
],
|
||||
"productionDeployed": false,
|
||||
"backtestServiceDeployed": true,
|
||||
"paperLiveRuntimeDeployed": false,
|
||||
"realBacktestAcceptanceComplete": false,
|
||||
"scopedBacktestEvidence": {
|
||||
"intraday": {
|
||||
"range": "2025-09-08..2025-09-12",
|
||||
"time": "09:30",
|
||||
"runIds": ["btr_1788790021780_1150210_0", "btr_1788790036494_1150210_1"],
|
||||
"seconds": [8.994, 0.596],
|
||||
"tradeCount": 104,
|
||||
"riskDecisionCount": 11,
|
||||
"canonical": "5c8a110cc6f285b9d569e818a0472a8b5c76f14df853a1c2c42d1b5222c39b3a",
|
||||
"identical": true,
|
||||
"persistedFactorBindingVerified": true,
|
||||
"rawParquetAudit": {
|
||||
"buyFills": 60,
|
||||
"priorPassCurrentFailExamples": 21,
|
||||
"existingPositionTopUpsBelowCurrentSelectionThreshold": 23,
|
||||
"retainedTargetReentryBelowCurrentSelectionThreshold": {"symbol": "600276.SH", "date": "2025-09-12", "priorExit": "2025-09-11 stop_loss_exit", "configuration": "reenterExitedTargets=true", "reason": "model_target_portfolio_daily"},
|
||||
"note": "Selection-only conditions are not an execution-time buy veto. Position adjustment and explicit retained-target reentry must be audited separately from fresh candidate selection."
|
||||
}
|
||||
},
|
||||
"nextOpen": {
|
||||
"range": "2021-08-23..2026-08-28",
|
||||
"runId": "btr_1788790344805_1150210_2",
|
||||
"seconds": 21.610,
|
||||
"tradeCount": 25408,
|
||||
"canonical": "b29b085d43bcc0f8f1712767421781c70570a24112933623d4bbbef46508d710",
|
||||
"matchesPreFixBaseline": true
|
||||
},
|
||||
"terminalAudits": "clean",
|
||||
"rawEvidenceDirectory": "native-daily-factor-replays-20260907"
|
||||
},
|
||||
"limitations": [
|
||||
"This is not a generic per-field publication-timestamp model for all factor datasets.",
|
||||
"Raw dynamic fields used without a stock-pool native binding need separate availability-contract review.",
|
||||
"Saved-version browser handoff and real same-sample intraday/next-open replay are still required."
|
||||
"Saved-version browser handoff, all runtime deployment and broader factor/PIT acceptance remain required; these replays use isolated API research fixtures."
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user