📦 deps(tsl): sync tsl-playbook from ecedf69b

Source-Commit: ecedf69b9c
This commit is contained in:
ci[bot]
2026-08-24 09:29:51 +08:00
parent 2f0d80da65
commit 2b74e1466d
664 changed files with 28934 additions and 37020 deletions
@@ -0,0 +1,975 @@
{
"schema_version": 1,
"frameworks": [
{
"qualified_name": "tsBackTesting",
"scope": "module",
"module": "ts-backtesting",
"kind": "framework",
"summary": "Strategy backtesting lifecycle with configurable callbacks and portfolio state queries.",
"evidence": [
"module/ts-backtesting.md#tsbacktesting"
],
"lifecycle": [
{
"phase": "construct",
"members": [
"tsBackTesting"
],
"evidence": [
"module/ts-backtesting.md#tsbacktesting"
]
},
{
"phase": "configure",
"members": [
"tsBackTesting.FBegT",
"tsBackTesting.FEndT",
"tsBackTesting.FCycle",
"tsBackTesting.FGroupType"
],
"evidence": [
"module/ts-backtesting.md#tsbacktesting"
]
},
{
"phase": "schedule",
"required": false,
"members": [
"tsBackTesting.GetTimeSeries"
],
"evidence": [
"module/ts-backtesting.md#gettimeseries"
]
},
{
"phase": "callback",
"members": [
"tsBackTesting.GetTradeOrder"
],
"evidence": [
"module/ts-backtesting.md#gettradeorderv_end_t"
]
},
{
"phase": "execute",
"members": [
"tsBackTesting.BackTest"
],
"evidence": [
"module/ts-backtesting.md#backtest"
]
},
{
"phase": "inspect",
"members": [
"tsBackTesting.GetTradeData",
"tsBackTesting.GetPortfolioReturn",
"tsBackTesting.GetGainandLoss"
],
"evidence": [
"module/ts-backtesting.md#gettradedatav_beg_tv_end_t",
"module/ts-backtesting.md#getportfolioreturn",
"module/ts-backtesting.md#getgainandlossv_beg_tv_end_t"
]
}
],
"configuration": [
{
"api": "tsBackTesting.FBegT",
"role": "backtest_start",
"evidence": [
"module/ts-backtesting.md#fbegt"
]
},
{
"api": "tsBackTesting.FEndT",
"role": "backtest_end",
"evidence": [
"module/ts-backtesting.md#fendt"
]
},
{
"api": "tsBackTesting.FCycle",
"role": "rebalance_cycle",
"evidence": [
"module/ts-backtesting.md#fcycle"
]
},
{
"api": "tsBackTesting.FGroupType",
"role": "candidate_mode_discriminator",
"contract_evidence_required": true,
"evidence": [
"module/ts-backtesting.md#fgrouptype"
]
}
],
"hooks": [
{
"api": "tsBackTesting.GetTimeSeries",
"required": false,
"override": true,
"role": "schedule_provider",
"evidence": [
"module/ts-backtesting.md#gettimeseries"
]
},
{
"api": "tsBackTesting.GetTradeOrder",
"required": true,
"override": true,
"role": "trade_or_target_callback",
"evidence": [
"module/ts-backtesting.md#gettradeorderv_end_t"
]
}
],
"state_apis": [
{
"api": "tsBackTesting.GetHoldData",
"concept": "current_or_historical_holdings",
"observation_point": "framework_defined; exact callback timing requires contract evidence",
"replacement_allowed": false,
"evidence": [
"module/ts-backtesting.md#getholddata"
]
},
{
"api": "tsBackTesting.GetSurplusFund",
"concept": "available_funds_before_trade",
"observation_point": "before_current_trade",
"replacement_allowed": false,
"evidence": [
"module/ts-backtesting.md#getsurplusfund"
]
},
{
"api": "tsBackTesting.GetNetAssetValue",
"concept": "net_asset_value_before_trade",
"observation_point": "before_current_trade",
"replacement_allowed": false,
"evidence": [
"module/ts-backtesting.md#getnetassetvalue"
]
},
{
"api": "tsBackTesting.GetSellpool",
"concept": "sellable_security_quantity",
"observation_point": "framework_defined; exact callback timing requires contract evidence",
"replacement_allowed": false,
"evidence": [
"module/ts-backtesting.md#getsellpool"
]
}
],
"execution": [
{
"api": "tsBackTesting.BackTest",
"role": "backtest_entrypoint",
"evidence": [
"module/ts-backtesting.md#backtest"
]
}
],
"result_apis": [
{
"api": "tsBackTesting.GetTradeData",
"role": "trade_results",
"evidence": [
"module/ts-backtesting.md#gettradedatav_beg_tv_end_t"
]
},
{
"api": "tsBackTesting.GetPortfolioReturn",
"role": "portfolio_return",
"evidence": [
"module/ts-backtesting.md#getportfolioreturn"
]
},
{
"api": "tsBackTesting.GetGainandLoss",
"role": "profit_and_loss",
"evidence": [
"module/ts-backtesting.md#getgainandlossv_beg_tv_end_t"
]
}
],
"contracts": [
{
"id": "ts-backtesting-trade-order",
"status": "incomplete",
"callback": "tsBackTesting.GetTradeOrder",
"reason": "The reference states target holdings or trade details but does not yet define the mode-specific record fields.",
"required_next_step": "Resolve the configuration-to-return-schema mapping before generating callback fields.",
"evidence": [
"module/ts-backtesting.md#gettradeorderv_end_t"
]
}
]
},
{
"qualified_name": "tsbf_ReturnAttribution",
"scope": "module",
"module": "tsbf-return-attribution",
"kind": "framework",
"summary": "Return-attribution framework with required portfolio and factor return providers.",
"evidence": [
"module/tsbf-return-attribution.md#tsbf_returnattribution"
],
"lifecycle": [
{
"phase": "construct",
"members": [
"tsbf_ReturnAttribution"
],
"evidence": [
"module/tsbf-return-attribution.md#tsbf_returnattribution"
]
},
{
"phase": "configure",
"members": [
"tsbf_ReturnAttribution.FEndT",
"tsbf_ReturnAttribution.FCycle",
"tsbf_ReturnAttribution.FRegMode",
"tsbf_ReturnAttribution.FRegCycle",
"tsbf_ReturnAttribution.FRegN"
],
"evidence": [
"module/tsbf-return-attribution.md#tsbf_returnattribution"
]
},
{
"phase": "schedule",
"members": [
"tsbf_ReturnAttribution.GetTimeSeries"
],
"evidence": [
"module/tsbf-return-attribution.md#gettimeseries"
]
},
{
"phase": "callback",
"members": [
"tsbf_ReturnAttribution.GetPortfolioReturn",
"tsbf_ReturnAttribution.GetFactorReturn",
"tsbf_ReturnAttribution.GetFactorConfig"
],
"evidence": [
"module/tsbf-return-attribution.md#getportfolioreturnv_beg_tv_end_tcy",
"module/tsbf-return-attribution.md#getfactorreturnv_beg_tv_end_tcy",
"module/tsbf-return-attribution.md#getfactorconfig"
]
},
{
"phase": "inspect",
"members": [
"tsbf_ReturnAttribution.RaRegressCoeff",
"tsbf_ReturnAttribution.RaRegressTTest",
"tsbf_ReturnAttribution.RaRegressRSquare",
"tsbf_ReturnAttribution.RaRegressVIF"
],
"evidence": [
"module/tsbf-return-attribution.md#raregresscoeff",
"module/tsbf-return-attribution.md#raregressttestr_type",
"module/tsbf-return-attribution.md#raregressrsquare",
"module/tsbf-return-attribution.md#raregressvif"
]
}
],
"configuration": [
{
"api": "tsbf_ReturnAttribution.FEndT",
"role": "attribution_end",
"evidence": [
"module/tsbf-return-attribution.md#fendt"
]
},
{
"api": "tsbf_ReturnAttribution.FCycle",
"role": "attribution_cycle",
"evidence": [
"module/tsbf-return-attribution.md#fcycle"
]
},
{
"api": "tsbf_ReturnAttribution.FRegMode",
"role": "regression_mode",
"evidence": [
"module/tsbf-return-attribution.md#fregmode"
]
},
{
"api": "tsbf_ReturnAttribution.FRegCycle",
"role": "regression_cycle",
"evidence": [
"module/tsbf-return-attribution.md#fregcycle"
]
},
{
"api": "tsbf_ReturnAttribution.FRegN",
"role": "regression_periods",
"evidence": [
"module/tsbf-return-attribution.md#fregn"
]
}
],
"hooks": [
{
"api": "tsbf_ReturnAttribution.GetPortfolioReturn",
"required": true,
"override": true,
"role": "portfolio_return_provider",
"evidence": [
"module/tsbf-return-attribution.md#getportfolioreturnv_beg_tv_end_tcy"
]
},
{
"api": "tsbf_ReturnAttribution.GetFactorReturn",
"required": true,
"override": true,
"role": "factor_return_provider",
"evidence": [
"module/tsbf-return-attribution.md#getfactorreturnv_beg_tv_end_tcy"
]
},
{
"api": "tsbf_ReturnAttribution.GetFactorConfig",
"required": false,
"override": true,
"role": "conditional_factor_config_provider",
"evidence": [
"module/tsbf-return-attribution.md#getfactorconfig"
]
}
],
"state_apis": [],
"execution": [],
"result_apis": [
{
"api": "tsbf_ReturnAttribution.RaRegressCoeff",
"role": "regression_coefficients",
"evidence": [
"module/tsbf-return-attribution.md#raregresscoeff"
]
},
{
"api": "tsbf_ReturnAttribution.RaRegressTTest",
"role": "regression_t_test",
"evidence": [
"module/tsbf-return-attribution.md#raregressttestr_type"
]
},
{
"api": "tsbf_ReturnAttribution.RaRegressRSquare",
"role": "regression_r_square",
"evidence": [
"module/tsbf-return-attribution.md#raregressrsquare"
]
},
{
"api": "tsbf_ReturnAttribution.RaRegressVIF",
"role": "regression_vif",
"evidence": [
"module/tsbf-return-attribution.md#raregressvif"
]
}
],
"contracts": [
{
"id": "tsbf-return-attribution-portfolio-return",
"status": "incomplete",
"callback": "tsbf_ReturnAttribution.GetPortfolioReturn",
"reason": "The reference names required fields but does not yet provide a complete typed record schema.",
"required_next_step": "Record the exact array shape and field types before generating callback records.",
"evidence": [
"module/tsbf-return-attribution.md#getportfolioreturnv_beg_tv_end_tcy"
]
},
{
"id": "tsbf-return-attribution-factor-return",
"status": "incomplete",
"callback": "tsbf_ReturnAttribution.GetFactorReturn",
"reason": "The reference names dynamic factor fields but does not yet provide a complete typed record schema.",
"required_next_step": "Record the exact array shape and dynamic factor-field contract before generating callback records.",
"evidence": [
"module/tsbf-return-attribution.md#getfactorreturnv_beg_tv_end_tcy"
]
}
]
},
{
"qualified_name": "ts_EvaluationOfRotationSkill",
"scope": "module",
"module": "ts-evaluation-of-rotation-skill",
"kind": "framework",
"summary": "Rotation-skill evaluation workflow with one documented entrypoint and result queries.",
"evidence": [
"module/ts-evaluation-of-rotation-skill.md#ts_evaluationofrotationskill"
],
"lifecycle": [
{
"phase": "construct",
"members": [
"ts_EvaluationOfRotationSkill"
],
"evidence": [
"module/ts-evaluation-of-rotation-skill.md#ts_evaluationofrotationskill"
]
},
{
"phase": "execute",
"members": [
"ts_EvaluationOfRotationSkill.Measure"
],
"evidence": [
"module/ts-evaluation-of-rotation-skill.md#measure"
]
},
{
"phase": "inspect",
"members": [
"ts_EvaluationOfRotationSkill.Get_Ret_CfgDescriptionQK",
"ts_EvaluationOfRotationSkill.Get_Ret_RotationConductQK",
"ts_EvaluationOfRotationSkill.Get_Ret_RotationDescriptionQK",
"ts_EvaluationOfRotationSkill.Get_Ret_RotationSkillQK",
"ts_EvaluationOfRotationSkill.Get_Ret_CfgSkillQK"
],
"evidence": [
"module/ts-evaluation-of-rotation-skill.md#get_ret_cfgdescriptionqkvbegtvendt",
"module/ts-evaluation-of-rotation-skill.md#get_ret_rotationconductqkvbegtvendt",
"module/ts-evaluation-of-rotation-skill.md#get_ret_rotationdescriptionqkvbegtvendt",
"module/ts-evaluation-of-rotation-skill.md#get_ret_rotationskillqkvbegtvendt",
"module/ts-evaluation-of-rotation-skill.md#get_ret_cfgskillqkvbegtvendt"
]
}
],
"configuration": [],
"hooks": [],
"state_apis": [],
"execution": [
{
"api": "ts_EvaluationOfRotationSkill.Measure",
"role": "workflow_entrypoint",
"evidence": [
"module/ts-evaluation-of-rotation-skill.md#measure"
]
}
],
"result_apis": [
{
"api": "ts_EvaluationOfRotationSkill.Get_Ret_CfgDescriptionQK",
"role": "configuration_description_results",
"evidence": [
"module/ts-evaluation-of-rotation-skill.md#get_ret_cfgdescriptionqkvbegtvendt"
]
},
{
"api": "ts_EvaluationOfRotationSkill.Get_Ret_RotationConductQK",
"role": "rotation_conduct_results",
"evidence": [
"module/ts-evaluation-of-rotation-skill.md#get_ret_rotationconductqkvbegtvendt"
]
},
{
"api": "ts_EvaluationOfRotationSkill.Get_Ret_RotationDescriptionQK",
"role": "rotation_description_results",
"evidence": [
"module/ts-evaluation-of-rotation-skill.md#get_ret_rotationdescriptionqkvbegtvendt"
]
},
{
"api": "ts_EvaluationOfRotationSkill.Get_Ret_RotationSkillQK",
"role": "rotation_skill_results",
"evidence": [
"module/ts-evaluation-of-rotation-skill.md#get_ret_rotationskillqkvbegtvendt"
]
},
{
"api": "ts_EvaluationOfRotationSkill.Get_Ret_CfgSkillQK",
"role": "configuration_skill_results",
"evidence": [
"module/ts-evaluation-of-rotation-skill.md#get_ret_cfgskillqkvbegtvendt"
]
}
],
"contracts": []
},
{
"qualified_name": "ts_IndustryAllocationOfFund",
"scope": "module",
"module": "ts-industry-allocation-of-fund",
"kind": "framework",
"summary": "Fund-industry allocation workflow with configuration fields and one documented entrypoint.",
"evidence": [
"module/ts-industry-allocation-of-fund.md#ts_industryallocationoffund"
],
"lifecycle": [
{
"phase": "construct",
"members": [
"ts_IndustryAllocationOfFund"
],
"evidence": [
"module/ts-industry-allocation-of-fund.md#ts_industryallocationoffund"
]
},
{
"phase": "configure",
"members": [
"ts_IndustryAllocationOfFund.FFundsArr",
"ts_IndustryAllocationOfFund.FrDate",
"ts_IndustryAllocationOfFund.FhyType"
],
"evidence": [
"module/ts-industry-allocation-of-fund.md#ts_industryallocationoffund"
]
},
{
"phase": "execute",
"members": [
"ts_IndustryAllocationOfFund.Allocation"
],
"evidence": [
"module/ts-industry-allocation-of-fund.md#allocation"
]
}
],
"configuration": [
{
"api": "ts_IndustryAllocationOfFund.FFundsArr",
"role": "fund_universe",
"evidence": [
"module/ts-industry-allocation-of-fund.md#ffundsarr"
]
},
{
"api": "ts_IndustryAllocationOfFund.FrDate",
"role": "report_date",
"evidence": [
"module/ts-industry-allocation-of-fund.md#frdate"
]
},
{
"api": "ts_IndustryAllocationOfFund.FhyType",
"role": "industry_classification",
"evidence": [
"module/ts-industry-allocation-of-fund.md#fhytype"
]
}
],
"hooks": [],
"state_apis": [],
"execution": [
{
"api": "ts_IndustryAllocationOfFund.Allocation",
"role": "workflow_entrypoint",
"evidence": [
"module/ts-industry-allocation-of-fund.md#allocation"
]
}
],
"result_apis": [],
"contracts": []
},
{
"qualified_name": "ts_SameTypeFundEquityPercent",
"scope": "module",
"module": "fund-research",
"kind": "framework",
"summary": "Historical same-type fund position measurement with overridable schedules, fund selection, solver customization, caching, and result analysis.",
"evidence": [
"module/fund-research/position-estimation.md#ts_sametypefundequitypercent"
],
"lifecycle": [
{
"phase": "construct",
"members": [
"ts_SameTypeFundEquityPercent"
],
"evidence": [
"module/fund-research/position-estimation.md#ts_sametypefundequitypercent"
]
},
{
"phase": "configure",
"members": [
"ts_SameTypeFundEquityPercent.FBegT",
"ts_SameTypeFundEquityPercent.FEndT",
"ts_SameTypeFundEquityPercent.FCycle",
"ts_SameTypeFundEquityPercent.FPMOBJ",
"ts_SameTypeFundEquityPercent.FVersionId"
],
"evidence": [
"module/fund-research/position-estimation.md#ts_sametypefundequitypercent"
]
},
{
"phase": "schedule",
"required": false,
"members": [
"ts_SameTypeFundEquityPercent.GetTimeSeries"
],
"evidence": [
"module/fund-research/position-estimation.md#gettimeseries"
]
},
{
"phase": "callback",
"required": false,
"members": [
"ts_SameTypeFundEquityPercent.GetFundArr",
"ts_SameTypeFundEquityPercent.GetStatfundData",
"ts_SameTypeFundEquityPercent.GetPMOBJ"
],
"evidence": [
"module/fund-research/position-estimation.md#getfundarrvendt",
"module/fund-research/position-estimation.md#getstatfunddataregmxarrdayday",
"module/fund-research/position-estimation.md#getpmobjvendtfund"
]
},
{
"phase": "execute",
"members": [
"ts_SameTypeFundEquityPercent.BackMeasure"
],
"evidence": [
"module/fund-research/position-estimation.md#backmeasure"
]
},
{
"phase": "inspect",
"members": [
"ts_SameTypeFundEquityPercent.GetPMdetail",
"ts_SameTypeFundEquityPercent.GetPMdistribution",
"ts_SameTypeFundEquityPercent.GetOverAllPM",
"ts_SameTypeFundEquityPercent.GetErrorDistribution",
"ts_SameTypeFundEquityPercent.GetOverAllErrorAnalysis"
],
"evidence": [
"module/fund-research/position-estimation.md#getpmdetailvbegtvendt",
"module/fund-research/position-estimation.md#getpmdistributionvbegtvendt",
"module/fund-research/position-estimation.md#getoverallpmvbegtvendttype_",
"module/fund-research/position-estimation.md#geterrordistributionvbegtvendt",
"module/fund-research/position-estimation.md#getoverallerroranalysisvbegtvendt"
]
}
],
"configuration": [
{
"api": "ts_SameTypeFundEquityPercent.FBegT",
"role": "measurement_start",
"evidence": [
"module/fund-research/position-estimation.md#fbegt"
]
},
{
"api": "ts_SameTypeFundEquityPercent.FEndT",
"role": "measurement_end",
"evidence": [
"module/fund-research/position-estimation.md#fendt-1"
]
},
{
"api": "ts_SameTypeFundEquityPercent.FCycle",
"role": "measurement_cycle",
"evidence": [
"module/fund-research/position-estimation.md#fcycle-1"
]
},
{
"api": "ts_SameTypeFundEquityPercent.FPMOBJ",
"role": "position_solver",
"evidence": [
"module/fund-research/position-estimation.md#fpmobj"
]
},
{
"api": "ts_SameTypeFundEquityPercent.FVersionId",
"role": "cache_mode",
"evidence": [
"module/fund-research/position-estimation.md#fversionid"
]
}
],
"hooks": [
{
"api": "ts_SameTypeFundEquityPercent.GetTimeSeries",
"required": false,
"override": true,
"role": "measurement_schedule_provider",
"evidence": [
"module/fund-research/position-estimation.md#gettimeseries"
]
},
{
"api": "ts_SameTypeFundEquityPercent.GetFundArr",
"required": false,
"override": true,
"role": "fund_universe_provider",
"evidence": [
"module/fund-research/position-estimation.md#getfundarrvendt"
]
},
{
"api": "ts_SameTypeFundEquityPercent.GetStatfundData",
"required": false,
"override": true,
"role": "statistical_sample_filter",
"evidence": [
"module/fund-research/position-estimation.md#getstatfunddataregmxarrdayday"
]
},
{
"api": "ts_SameTypeFundEquityPercent.GetPMOBJ",
"required": false,
"override": true,
"role": "per_fund_solver_provider",
"evidence": [
"module/fund-research/position-estimation.md#getpmobjvendtfund"
]
}
],
"state_apis": [],
"execution": [
{
"api": "ts_SameTypeFundEquityPercent.BackMeasure",
"role": "measurement_entrypoint",
"evidence": [
"module/fund-research/position-estimation.md#backmeasure"
]
}
],
"result_apis": [
{
"api": "ts_SameTypeFundEquityPercent.GetPMdetail",
"role": "position_measurement_details",
"evidence": [
"module/fund-research/position-estimation.md#getpmdetailvbegtvendt"
]
},
{
"api": "ts_SameTypeFundEquityPercent.GetPMdistribution",
"role": "position_distribution",
"evidence": [
"module/fund-research/position-estimation.md#getpmdistributionvbegtvendt"
]
},
{
"api": "ts_SameTypeFundEquityPercent.GetOverAllPM",
"role": "aggregate_position_measurement",
"evidence": [
"module/fund-research/position-estimation.md#getoverallpmvbegtvendttype_"
]
},
{
"api": "ts_SameTypeFundEquityPercent.GetErrorDistribution",
"role": "measurement_error_distribution",
"evidence": [
"module/fund-research/position-estimation.md#geterrordistributionvbegtvendt"
]
},
{
"api": "ts_SameTypeFundEquityPercent.GetOverAllErrorAnalysis",
"role": "aggregate_error_analysis",
"evidence": [
"module/fund-research/position-estimation.md#getoverallerroranalysisvbegtvendt"
]
}
],
"contracts": [
{
"id": "same-type-fund-universe",
"status": "incomplete",
"callback": "ts_SameTypeFundEquityPercent.GetFundArr",
"reason": "The callback may return either a one-dimensional code array or a two-dimensional table, but the full table schema is not documented.",
"required_next_step": "Record the exact two-dimensional fund-universe record schema before generating callback rows.",
"evidence": [
"module/fund-research/position-estimation.md#getfundarrvendt"
]
}
]
},
{
"qualified_name": "ts_AIPBackTesting",
"scope": "module",
"module": "fund-research",
"kind": "framework",
"summary": "Fund periodic-investment backtesting lifecycle with strategy configuration, overridable purchase and redemption callbacks, execution, and return analysis.",
"evidence": [
"module/fund-research/fixed-amount-investment.md#ts_aipbacktesting"
],
"lifecycle": [
{
"phase": "construct",
"members": [
"ts_AIPBackTesting"
],
"evidence": [
"module/fund-research/fixed-amount-investment.md#ts_aipbacktesting"
]
},
{
"phase": "configure",
"members": [
"ts_AIPBackTesting.FAIPFund",
"ts_AIPBackTesting.FAIPType",
"ts_AIPBackTesting.FOriginalAmount",
"ts_AIPBackTesting.FPurchaseRatio",
"ts_AIPBackTesting.FDeductDay"
],
"evidence": [
"module/fund-research/fixed-amount-investment.md#ts_aipbacktesting"
]
},
{
"phase": "schedule",
"required": false,
"members": [
"ts_AIPBackTesting.GetTimeSeries"
],
"evidence": [
"module/fund-research/fixed-amount-investment.md#gettimeseries"
]
},
{
"phase": "callback",
"members": [
"ts_AIPBackTesting.GetTradeOrder",
"ts_AIPBackTesting.GetTA"
],
"evidence": [
"module/fund-research/fixed-amount-investment.md#gettradeorderv_end_t",
"module/fund-research/fixed-amount-investment.md#gettav_end_t"
]
},
{
"phase": "execute",
"members": [
"ts_AIPBackTesting.BackTest"
],
"evidence": [
"module/fund-research/fixed-amount-investment.md#backtest"
]
},
{
"phase": "inspect",
"members": [
"ts_AIPBackTesting.CumReturn",
"ts_AIPBackTesting.IntervalReturn"
],
"evidence": [
"module/fund-research/fixed-amount-investment.md#cumreturnbeg_tend_trtypeannual",
"module/fund-research/fixed-amount-investment.md#intervalreturnbegtendt"
]
}
],
"configuration": [
{
"api": "ts_AIPBackTesting.FAIPFund",
"role": "investment_fund",
"evidence": [
"module/fund-research/fixed-amount-investment.md#faipfund"
]
},
{
"api": "ts_AIPBackTesting.FAIPType",
"role": "investment_strategy",
"contract_evidence_required": true,
"evidence": [
"module/fund-research/fixed-amount-investment.md#faiptype"
]
},
{
"api": "ts_AIPBackTesting.FOriginalAmount",
"role": "periodic_investment_amount",
"evidence": [
"module/fund-research/fixed-amount-investment.md#foriginalamount"
]
},
{
"api": "ts_AIPBackTesting.FPurchaseRatio",
"role": "purchase_fee_ratio",
"evidence": [
"module/fund-research/fixed-amount-investment.md#fpurchaseratio"
]
},
{
"api": "ts_AIPBackTesting.FDeductDay",
"role": "deduction_day",
"evidence": [
"module/fund-research/fixed-amount-investment.md#fdeductday"
]
}
],
"hooks": [
{
"api": "ts_AIPBackTesting.GetTimeSeries",
"required": false,
"override": true,
"role": "investment_schedule_provider",
"evidence": [
"module/fund-research/fixed-amount-investment.md#gettimeseries"
]
},
{
"api": "ts_AIPBackTesting.GetTradeOrder",
"required": true,
"override": true,
"role": "purchase_and_redemption_order_provider",
"evidence": [
"module/fund-research/fixed-amount-investment.md#gettradeorderv_end_t"
]
},
{
"api": "ts_AIPBackTesting.GetTA",
"required": false,
"override": true,
"role": "subscription_and_redemption_cashflow_provider",
"evidence": [
"module/fund-research/fixed-amount-investment.md#gettav_end_t"
]
}
],
"state_apis": [],
"execution": [
{
"api": "ts_AIPBackTesting.BackTest",
"role": "backtest_entrypoint",
"evidence": [
"module/fund-research/fixed-amount-investment.md#backtest"
]
}
],
"result_apis": [
{
"api": "ts_AIPBackTesting.CumReturn",
"role": "interval_return",
"evidence": [
"module/fund-research/fixed-amount-investment.md#cumreturnbeg_tend_trtypeannual"
]
},
{
"api": "ts_AIPBackTesting.IntervalReturn",
"role": "periodic_investment_return_series",
"evidence": [
"module/fund-research/fixed-amount-investment.md#intervalreturnbegtendt"
]
}
],
"contracts": [
{
"id": "aip-trade-order",
"status": "incomplete",
"callback": "ts_AIPBackTesting.GetTradeOrder",
"reason": "The reference requires purchase and redemption details but does not define the complete typed order-record schema.",
"required_next_step": "Record the exact purchase and redemption order fields before generating callback rows.",
"evidence": [
"module/fund-research/fixed-amount-investment.md#gettradeorderv_end_t"
]
}
]
}
]
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,461 @@
{
"version": 1,
"domains": [
{
"id": "market_board",
"label": "市场和板块名称",
"mode": "runtime_catalog",
"complete": false,
"bindings": [
{
"scope": "dotnet",
"module": "datawarehouse",
"api": "getBk",
"parameter": "marketlist",
"role": "current_components"
}
],
"resolvers": [
{
"scope": "dotnet",
"module": "datawarehouse",
"api": "getBkList2",
"parameter": "bktype",
"catalog": "system",
"source": "net_function:28964"
},
{
"scope": "dotnet",
"module": "datawarehouse",
"api": "getUserBkList2",
"parameter": "bktype",
"catalog": "user",
"source": "net_function:28963"
}
],
"values": [],
"related_tables": [],
"sources": ["net_function:28960", "faq:37996"],
"as_of": "2026-08-20"
},
{
"id": "classification_code",
"label": "分类属性代码",
"mode": "versioned_catalog",
"complete": false,
"bindings": [
{
"scope": "dotnet",
"module": "financial",
"api": "getBkByDate",
"parameter": "index_id",
"role": "historical_components"
}
],
"resolvers": [],
"related_tables": [
{
"id": "138",
"name": "股票.股票行业分类信息",
"scope": "stock",
"page": "references/data_dictionary/股票__股票行业分类信息.md"
},
{
"id": "355",
"name": "基金.基金分类信息",
"scope": "fund",
"page": "references/data_dictionary/基金__基金分类信息.md"
}
],
"values": [
{
"value": "SWHY",
"label": "申万行业",
"aliases": ["申万行业分类"],
"level": 0,
"related_table": "138",
"sources": ["faq:31492", "faq:31494"],
"relations": [
{
"kind": "runtime_parameter",
"domain": "classification_catalog_selector",
"value": "申万行业",
"verification": {
"status": "documented",
"scope": "dotnet",
"module": "datawarehouse",
"resolver": "getBkList2",
"parameter": "bktype",
"argument": "申万行业"
},
"sources": [
"faq:31494",
"net_function:28962",
"net_function:28964"
]
}
]
},
{
"value": "SWHY740000",
"label": "申万煤炭",
"aliases": ["申万煤炭一级行业"],
"parent": "SWHY",
"parent_label": "申万行业",
"level": 1,
"valid_from": "20211213",
"related_table": "138",
"as_of": "2023-10-13",
"sources": ["faq:31494", "faq:35791"],
"relations": [
{
"kind": "runtime_parameter",
"domain": "market_board",
"value": "申万煤炭",
"verification": {
"status": "runtime_required",
"scope": "dotnet",
"module": "datawarehouse",
"resolver": "getBkList2",
"parameter": "bktype",
"argument": "申万行业"
},
"sources": ["faq:31494", "net_function:28964"]
}
]
},
{
"value": "CAPCHY",
"label": "中上协行业",
"aliases": ["中国上市公司协会行业"],
"level": 0,
"related_table": "138",
"sources": ["faq:31492"]
},
{
"value": "CSRCHY",
"label": "证监会行业",
"aliases": [],
"level": 0,
"note": "2024-02-19 起不再维护",
"related_table": "138",
"sources": ["faq:31492"]
},
{
"value": "YHFL",
"label": "银河基金分类",
"aliases": [],
"level": 0,
"related_table": "355",
"sources": ["faq:31492"]
},
{
"value": "TSJJ02",
"label": "投资风格",
"aliases": ["基金投资风格"],
"level": 0,
"related_table": "355",
"sources": ["faq:31492"]
},
{
"value": "TSJJ03",
"label": "净值增长率计算方法",
"aliases": [],
"level": 0,
"related_table": "355",
"sources": ["faq:31492"]
}
],
"sources": ["faq:31492"],
"as_of": "2026-08-20"
},
{
"id": "classification_catalog_selector",
"label": "分类属性目录选择器",
"mode": "catalog",
"complete": false,
"bindings": [
{
"scope": "dotnet",
"module": "datawarehouse",
"api": "getBk",
"parameter": "marketlist",
"role": "catalog_selector"
}
],
"resolvers": [
{
"scope": "dotnet",
"module": "datawarehouse",
"api": "getBkList2",
"parameter": "bktype",
"catalog": "system",
"source": "net_function:28964"
}
],
"related_tables": [
{
"id": "138",
"name": "股票.股票行业分类信息",
"scope": "stock",
"page": "references/data_dictionary/股票__股票行业分类信息.md"
},
{
"id": "355",
"name": "基金.基金分类信息",
"scope": "fund",
"page": "references/data_dictionary/基金__基金分类信息.md"
}
],
"values": [
{
"value": "属性代码",
"label": "全部股票与基金分类属性代码",
"aliases": ["分类属性代码目录"],
"sources": ["faq:31492"]
}
],
"sources": ["faq:31492"],
"as_of": "2026-08-20"
},
{
"id": "classification_child_code",
"label": "下级分类属性代码模式",
"mode": "pattern",
"complete": true,
"bindings": [
{
"scope": "dotnet",
"module": "financial",
"api": "getBkByDate",
"parameter": "index_id",
"role": "child_codes"
}
],
"resolvers": [],
"related_tables": [
{
"id": "138",
"name": "股票.股票行业分类信息",
"scope": "stock",
"page": "references/data_dictionary/股票__股票行业分类信息.md"
},
{
"id": "355",
"name": "基金.基金分类信息",
"scope": "fund",
"page": "references/data_dictionary/基金__基金分类信息.md"
}
],
"values": [
{
"value": "<分类属性代码>.N",
"label": "指定分类节点的下级分类属性代码",
"aliases": [".N", "下级分类代码"],
"sources": ["faq:31492"]
}
],
"sources": ["faq:31492"],
"as_of": "2026-08-20"
},
{
"id": "market_board_type",
"label": "板块类别",
"mode": "enum",
"complete": true,
"bindings": [
{
"scope": "dotnet",
"module": "financial",
"api": "getbktypelist",
"parameter": "bktype",
"role": "category"
},
{
"scope": "dotnet",
"module": "financial",
"api": "stocksbklist",
"parameter": "bktype",
"role": "category"
}
],
"resolvers": [],
"related_tables": [],
"values": [
{
"value": "-1",
"label": "自定义板块序列",
"sources": ["net_function:22421", "net_function:22416"]
},
{
"value": "0",
"label": "概念板块",
"sources": ["net_function:22421", "net_function:22416"]
},
{
"value": "1",
"label": "中证行业",
"sources": ["net_function:22421", "net_function:22416"]
},
{
"value": "2",
"label": "中证证监会行业",
"sources": ["net_function:22421", "net_function:22416"]
},
{
"value": "3",
"label": "股票地域",
"sources": ["net_function:22421", "net_function:22416"]
},
{
"value": "4",
"label": "指数成份",
"sources": ["net_function:22421", "net_function:22416"]
},
{
"value": "5",
"label": "申万行业(一级)",
"aliases": ["申万一级行业"],
"sources": ["net_function:22421", "net_function:22416"]
},
{
"value": "6",
"label": "申万二级行业",
"sources": ["net_function:22421", "net_function:22416"]
},
{
"value": "7",
"label": "申万三级行业",
"sources": ["net_function:22421", "net_function:22416"]
}
],
"sources": ["net_function:22421", "net_function:22416"],
"as_of": "2026-08-21"
},
{
"id": "historical_market_board_code",
"label": "常用股票市场板块历史代码",
"mode": "enum",
"complete": true,
"bindings": [
{
"scope": "dotnet",
"module": "financial",
"api": "getBkByDate",
"parameter": "index_id",
"role": "historical_market_components"
}
],
"resolvers": [],
"related_tables": [],
"values": [
{
"value": "TSI000001",
"label": "A股板块",
"aliases": ["A股历史成份股"],
"sources": ["faq:34194", "faq:35788"]
},
{
"value": "TSI000002",
"label": "上证A股板块",
"sources": ["faq:34194", "faq:35788"]
},
{
"value": "TSI000003",
"label": "科创板板块",
"sources": ["faq:34194", "faq:35788"]
},
{
"value": "TSI000004",
"label": "深证A股板块",
"sources": ["faq:34194", "faq:35788"]
},
{
"value": "TSI000005",
"label": "创业板板块",
"sources": ["faq:34194", "faq:35788"]
},
{
"value": "TSI000006",
"label": "北证A股板块",
"sources": ["faq:34194", "faq:35788"]
},
{
"value": "TSI000007",
"label": "B股板块",
"sources": ["faq:34194", "faq:35788"]
},
{
"value": "TSI000008",
"label": "上证B股板块",
"sources": ["faq:34194", "faq:35788"]
},
{
"value": "TSI000009",
"label": "深证B股板块",
"sources": ["faq:34194", "faq:35788"]
}
],
"sources": ["faq:34194", "faq:35788"],
"as_of": "2023-10-19"
},
{
"id": "historical_a_share_board_name",
"label": "按名称查询的历史 A 股板块",
"mode": "enum",
"complete": true,
"bindings": [
{
"scope": "dotnet",
"module": "financial",
"api": "getAbkbyDate",
"parameter": "bk_name",
"role": "historical_named_components"
}
],
"resolvers": [],
"related_tables": [],
"values": [
{
"value": "A股",
"label": "全部 A 股",
"note": "包括上证A股、科创板、深证A股、创业板和北证A股,不含新三板",
"sources": ["net_function:24767", "faq:35788"]
},
{
"value": "上证A股",
"label": "上证 A 股",
"sources": ["net_function:24767", "faq:35788"]
},
{
"value": "深证A股",
"label": "深证 A 股",
"sources": ["net_function:24767", "faq:35788"]
},
{
"value": "北证A股",
"label": "北证 A 股",
"sources": ["net_function:24767", "faq:35788"]
},
{
"value": "创业板",
"label": "创业板",
"sources": ["net_function:24767", "faq:35788"]
},
{
"value": "科创板",
"label": "科创板",
"sources": ["net_function:24767", "faq:35788"]
},
{
"value": "中小企业板",
"label": "中小企业板(历史兼容)",
"note": "仅用于历史兼容;该板块已于 2021-04-06 并入主板",
"sources": ["net_function:24767", "faq:35788"]
}
],
"sources": ["net_function:24767", "faq:35788"],
"as_of": "2025-08-13"
}
]
}