Files
playbook/skills/tsl-api-reference/data/framework_index.json
T

976 lines
31 KiB
JSON

{
"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"
]
}
]
}
]
}