使用 Bedrock AgentCore 与 Strands Agents 构建代理式 Amazon 回测运营模型 [Part 1]
描述: 机构级 AMZN 投资组合研究需要择时治理、回撤归因、基准背景、因子纪律、执行账本和云端可审计性。使用 Amazon Bedrock AgentCore、Strands Agents、AWS 数据控制、自定义 Cerebro 风格模拟、Sharpe 分析、交易历史和 FSI 风险语言,构建只做多回测工厂,用于负责任的头寸管理复核与监督。
文章现已发布于 AWS 官方 Builder Center。你可以前往官方文章,或关闭此弹窗并留在当前页面继续阅读。
描述: 机构级 AMZN 投资组合研究需要择时治理、回撤归因、基准背景、因子纪律、执行账本和云端可审计性。使用 Amazon Bedrock AgentCore、Strands Agents、AWS 数据控制、自定义 Cerebro 风格模拟、Sharpe 分析、交易历史和 FSI 风险语言,构建只做多回测工厂,用于负责任的头寸管理复核与监督。
描述: 机构级 AMZN 投资组合研究需要择时治理、回撤归因、基准背景、因子纪律、执行账本和云端可审计性。使用 Amazon Bedrock AgentCore、Strands Agents、AWS 数据控制、自定义 Cerebro 风格模拟、Sharpe 分析、交易历史和 FSI 风险语言,构建只做多回测工厂,用于负责任的头寸管理复核与监督。
教育目的:
本文内容仅聚焦于合法的金融规划教育,旨在提升对概念、方法论和分析路径的理解,并不推广任何特定证券、策略或市场参与决策。
不提供个性化建议:
本文不提供任何个性化推荐、招揽或保证;在任何情况下,本教育材料均不明示、暗示或以其他方式表示对未来表现、结果或收益的任何保证。
数据限制:
由于沙盒环境中无法使用实时数据,上传结果依赖确定性的离线数据,因此输出应被理解为示例性说明,而非实时分析。
只做多范围:
所有研究表述均限定为只做多,避免期权、看跌期权、卖空或看空策略,确保讨论整体聚焦于传统资产持有和正向方向性敞口概念。
500% 的未实现收益可能让研究材料显得很有说服力,但机构首先需要知道是谁请求了运行、哪个工具执行了运行、数据来自哪里、哪些规则获得批准,以及保留了哪些证据。这篇自定义引擎系列的首篇文章会先建立该运营模型,然后再讨论策略排名。
本文系列并不建议买入、卖出或持有 Amazon。它展示的是,受治理的研究工作流如何将头寸管理问题转化为受控证据。
本部分的交易员视角是一位运营模型发起人:足够有经验、尊重市场,但主要关注流程设计。文章提出的问题是:AgentCore、Strands Agents、自定义 Cerebro 风格引擎和 AWS 工件控制,如何帮助团队复核 AMZN 择时,同时不把判断权交给自动化。
第 1 部分的客户问题是运营归属碎片化。投资组合经理、风险复核人员、工程师和合规相关方,往往查看的是同一个研究叙事的不同版本。运营模型为他们提供一条统一路径,从请求到政策检查、模拟、账本、图表、摘要,再到委员会复核。
该工作流支持更清晰的归属边界、可复用的代理角色、一致的工件生成,以及从技术结果走向治理讨论的更稳健路径。它的价值不在于排名第一的策略成为答案,而在于每个入榜策略都可以通过同一套证据包接受检查。
相关摘要: 建立机构级交易员视角、AMZN 头寸背景和沟通纪律。它将文章界定为教育与规划支持,而非投资建议、推荐、招揽或对未来收益的承诺。
开篇不应在解释控制问题之前庆祝某个头寸。AMZN 的强劲收益可能带来信心,但信心不能替代入场纪律、退出纪律、仓位规模逻辑、回撤容忍度和相对基准复核。
有用的实践说明在这里被吸收为表达纪律:使用证据语言,说明数据模式,列明假设,并避免承诺确定性。文章应读起来像机构研究,而不是宣传推介。
相关摘要: 定义为什么盈利的多头头寸仍然需要基于证据的入场、退出、仓位规模、回撤和基准控制。它将投资组合管理、风险监督、技术治理和审计要求连接为一个可复核的工作流。
业务问题是证据碎片化。投资组合团队需要速度,风险团队需要可追溯性,技术团队需要安全编排,合规团队需要恰当表述。该工作流通过创建可重复的研究路径来协调这些需求。
头寸纪律意味着每个策略都应回答同样的问题:为什么入场、为什么退出、多少敞口、什么成本假设、怎样的回撤路径,以及什么基准背景。这些问题现在是正文的一部分,而不是末尾说明。
相关摘要: 通过区分编排器、数据代理、策略代理、回测工具、风险复核代理和治理检查器,解释代理式架构。每个组件都具备受限权限、受控工具和日志化输出,便于金融服务复核。
架构从角色清晰开始。Quant Orchestrator 负责请求拆解,Market Data Agent 负责数据状态,Strategy Agent 负责信号定义,Backtest Engine Tool 负责模拟机制,Risk Review Agent 负责指标解读,Governance Agent 负责政策和披露检查。
代理治理意味着受限权限。代理可以准备证据,但不能决定适当性、保证收益或替代投资委员会。日志和工件让工作流可以被质询。
相关摘要: 解释本文特定的引擎路径、代码解读、策略逻辑和复核控制。本节将实现细节转化为交易员语言,使风险、技术和治理相关方能够提出质询。
代码路径应被解释为一张控制图。输入进入指标,指标生成入场和退出信号,引擎模拟订单,应用成本,写入账本,指标汇总路径。这个顺序用业务可读逻辑替代逐行复述。
信号逻辑和执行逻辑应保持分离。信号可以表明条件有利,但引擎仍必须检查现金、头寸状态、佣金、风险退出和账本更新。这种分离提高了复核质量。
本文聚焦于运营模型、代理角色、数据控制和排名靠前的趋势策略。读者应评估该代码路径是否让这些控制足够可见,使委员会、风险复核人员或技术负责人能够提出质询。
相关摘要: 通过收益、波动率、Sharpe、回撤、交易次数、胜率、账本质量和运营可行性复核策略记录及经验。本节将演示结果视为工作流证据,而非真实市场建议。
策略记录不应被解读为推荐。它们是比较规则行为、交易频率、回撤特征和可解释性的证据。当数据模式是确定性离线演示数据时,这些数字尤其受限。
经验应当具体。高收益策略可能伴随令人不适的回撤。低换手策略可能更容易治理。高交易次数策略可能带来决策疲劳、滑点敞口和运营负担。
相关摘要: 将代码、图表和账本转化为委员会语言:测试了什么、改善了什么、失败了什么、仍有哪些不确定性,以及为什么在任何生产或配置决策前,人工判断仍是最终控制。
收尾部分应将研究转化为治理语言。委员会需要知道测试了什么、生成了哪些证据、哪些假设重要、哪里失败,以及哪些仍然是人工决策。
负责任的收尾应避免胜利式语言。它应说明代理可以帮助记录假设、运行可重复测试、比较行为并准备更好的复核,但人工判断仍是最终控制。
相关摘要: 汇总主文整合细节和治理视角,使读者可以一起复核政策、工件、演示数据限制和问责。
运营模型从区分研究支持与投资组合权限开始。代理可以验证范围、调用回测工具并准备证据,但不应决定 AMZN 是否适合读者的投资组合。
每次运行都应留下可被质询的工件:请求载荷、政策结果、参数记录、数据模式、交易账本、图表输出、指标摘要和异常说明。
只有当人工复核保持可见时,该工作流才有价值。委员会应收到证据包,并决定该研究是否足以进入进一步分析、修订或驳回。
AWS 层应区分原始数据、整理后的表、执行输出、图表工件和批准记录,使技术团队能够支持留存、权限和重跑。
研究叙事应首先识别数据模式、规则逻辑、假设、成本、回撤和账本可用性。观点应在证据之后,而不是之前。
当结果来自离线确定性演示数据时,文章应在正文中说明。演示记录适用于工作流教育和复核设计,而不是用于真实配置决策。
交易账本是交易台的记忆系统。它显示头寸何时打开、何时关闭、使用了多大规模、触发了哪个信号,以及流程是否遵守风险规则。
专业读者应在结论之前看到失败模式。趋势规则可能遭遇反复拉锯,恢复规则可能错过持续疲弱,活跃信号可能造成在笔记本中看起来比在交易台上更干净的换手。
代理式工具可以收集、运行、总结和组织,但投资组合负责人仍需对授权契合度、适当性、风险容忍度和最终判断负责。
相关摘要: 将运营模型、Strands 入口点和自定义引擎代码拆分到一个聚焦的实现章节。
本文是四篇中的第 1 篇,聚焦运营模型、代理角色、数据控制和排名靠前的趋势策略。它使用 Bedrock AgentCore 和 Strands Agents 作为代理式运营模型,使用上传的自定义 Cerebro 风格引擎作为代码基础,并将策略摘要记录作为绩效复核证据。讨论仅用于教育,不构成推荐。
生产设计拆分出五项职责。Quant Orchestrator 接收研究请求,并将其拆解为数据、策略、执行、风险和治理任务。Market Data Agent 检索或验证 AMZN 与基准数据。Strategy Agent 生成入场和退出信号。Backtest Engine Tool 运行自定义 Cerebro 风格模拟。Risk Review Agent 读取交易账本、绩效指标和图表。Governance Agent 检查披露、只做多政策、数据来源和适当性表述。
AgentCore Runtime 是代理和工具的安全托管层,而 Strands Agents 提供用于工具调用、编排和代理行为的编程模型。在受监管的 FSI 环境中,代理不应直接批准交易。它应创建证据、突出不确定性,并将输出路由给人工复核。
这篇基础文章中的实用 AWS 数据层,会区分原始输入、整理后的 OHLCV 表、策略代码、结果摘要、图表文件夹和批准记录。重点是生命周期控制:后续每篇文章都可以复用同一存储模式,同时聚焦不同的策略复核问题。
Strands 层不应是黑箱。代理接收研究请求、验证政策、调用回测工具,并返回结构化结果。工具应写入不可变工件:参数文件、数据快照标识符、交易账本、图表路径和摘要指标。治理检查发生在执行前后。
from bedrock_agentcore.runtime import BedrockAgentCoreApp
from strands import Agent, tool
app = BedrockAgentCoreApp()
@tool
def validate_research_policy(symbol: str, side: str, derivatives: bool) -> dict:
if symbol != "AMZN":
return {"ok": False, "reason": "This workflow is scoped to AMZN research."}
if side != "long_only":
return {"ok": False, "reason": "Only long-only research is approved."}
if derivatives:
return {"ok": False, "reason": "Derivative instruments are outside policy."}
return {"ok": True, "reason": "Policy accepted."}
@tool
def run_custom_cerebro_strategy(strategy_name: str) -> dict:
return {
"strategy": strategy_name,
"status": "submitted",
"artifact_prefix": f"s3://amzn-research/backtests/{strategy_name}/"
}
quant_agent = Agent(tools=[validate_research_policy, run_custom_cerebro_strategy])
@app.entrypoint
def invoke(payload):
request = payload.get("request", "Run AMZN long-only timing research")
return quant_agent(request)
这段代码刻意保持保守。验证工具会在回测工具运行前阻止不受支持的范围。回测工具返回工件位置,而不是情绪化语言。代理可以总结,但人工委员会仍需对决策负责。
自定义引擎有意保持小巧。构造函数存储价格序列、初始资本、配置比例、佣金、止损比例和止盈比例。这些参数成为 Risk Agent 和 Governance Agent 在策略运行前可以检查的控制面。
run 方法接收两个布尔时间序列:entry 和 exit。Strategy Agent 根据指标构建这些序列。引擎负责执行纪律。它将信号与价格索引对齐,将缺失信号值填充为 False,然后在不前视的情况下沿时间向前推进。
class CustomCerebroEngine:
def __init__(self, price, initial_cash=100000, allocation=0.95,
commission=0.0005, stop_loss=0.12, take_profit=0.35):
self.price = price.astype(float)
self.initial_cash = initial_cash
self.allocation = allocation
self.commission = commission
self.stop_loss = stop_loss
self.take_profit = take_profit
def run(self, entry, exit):
entry = entry.reindex(self.price.index).fillna(False)
exit = exit.reindex(self.price.index).fillna(False)
cash, shares, entry_price = self.initial_cash, 0, None
trades, equity, position = [], [], []
for dt, px in self.price.items():
if shares > 0:
stop_hit = px <= entry_price * (1 - self.stop_loss)
target_hit = px >= entry_price * (1 + self.take_profit)
if bool(exit.loc[dt]) or stop_hit or target_hit:
gross = shares * px
cash += gross - gross * self.commission
trades[-1].update({"exit_date": dt, "exit_price": px,
"gross_pnl": (px - entry_price) * shares})
shares, entry_price = 0, None
if shares == 0 and bool(entry.loc[dt]):
invest = cash * self.allocation
shares = int(invest / px)
if shares > 0:
cash -= shares * px + shares * px * self.commission
entry_price = px
trades.append({"entry_date": dt, "entry_price": px,
"shares": shares, "entry_reason": "signal"})
equity.append(cash + shares * px)
position.append(shares)
return pd.Series(equity, index=self.price.index), pd.DataFrame(trades), pd.Series(position, index=self.price.index)
当引擎已经持有股票时,它会检查三个退出条件:策略退出信号、触及止损或触发止盈。如果其中一个条件为真,引擎会卖出多头头寸、扣除佣金、更新现金,并在交易账本中记录已实现总利润或损失。
相关摘要: 将头部策略记录集中到一个绩效复核章节,并为每条规则提供代码解读和经验。
代码解读。 IchimokuLongStrategy 使用转换线、基准线和云层边界;趋势结构先于噪声。对于 IchimokuLongStrategy,应将信号定义与执行机制分开复核,使委员会能够区分市场逻辑与订单模拟、成本处理和账本生成。
交易员绩效复核。 总收益为 1430.60%,年化收益为 14.08%,波动率为 12.33%,Sharpe 为 1.14,最大回撤为 -22.43%,交易次数为 53,胜率为 47.17%。这些数字是上传的自定义引擎离线演示记录,并非真实市场结果。
交易记录与经验。 IchimokuLongStrategy 的经验是将记录用作复核提示:检查可解释性、换手、回撤容忍度、成本敏感性,以及该规则是否在标题收益之外增加头寸管理洞察。
代码解读。 DonchianTrendStrategy 使用八十日突破,并以 Nasdaq 确认,退出使用三十五日通道。对于 DonchianTrendStrategy,应将信号定义与执行机制分开复核,使委员会能够区分市场逻辑与订单模拟、成本处理和账本生成。
交易员绩效复核。 总收益为 921.18%,年化收益为 11.87%,波动率为 11.43%,Sharpe 为 1.04,最大回撤为 -24.64%,交易次数为 20,胜率为 70.00%。这些数字是上传的自定义引擎离线演示记录,并非真实市场结果。
交易记录与经验。 DonchianTrendStrategy 的经验是将记录用作复核提示:检查可解释性、换手、回撤容忍度、成本敏感性,以及该规则是否在标题收益之外增加头寸管理洞察。
代码解读。 ADXTrendStrategy 要求 ADX 强度、正向方向性运动,以及价格高于中期均线。对于 ADXTrendStrategy,应将信号定义与执行机制分开复核,使委员会能够区分市场逻辑与订单模拟、成本处理和账本生成。
交易员绩效复核。 总收益为 723.63%,年化收益为 10.72%,波动率为 9.13%,Sharpe 为 1.17,最大回撤为 -16.88%,交易次数为 116,胜率为 51.72%。这些数字是上传的自定义引擎离线演示记录,并非真实市场结果。
交易记录与经验。 ADXTrendStrategy 的经验是将记录用作复核提示:检查可解释性、换手、回撤容忍度、成本敏感性,以及该规则是否在标题收益之外增加头寸管理洞察。
代码解读。 MultiFactorEnsembleStrategy 将价格趋势、RSI、MACD 和 S&P 状态组合成评分卡。对于 MultiFactorEnsembleStrategy,应将信号定义与执行机制分开复核,使委员会能够区分市场逻辑与订单模拟、成本处理和账本生成。
交易员绩效复核。 总收益为 604.05%,年化收益为 9.88%,波动率为 11.23%,Sharpe 为 0.88,最大回撤为 -24.44%,交易次数为 143,胜率为 33.57%。这些数字是上传的自定义引擎离线演示记录,并非真实市场结果。
交易记录与经验。 MultiFactorEnsembleStrategy 的经验是将记录用作复核提示:检查可解释性、换手、回撤容忍度、成本敏感性,以及该规则是否在标题收益之外增加头寸管理洞察。
代码解读。 RelativeStrengthNDXStrategy 将 AMZN 与 Nasdaq 100 进行比较,并在相对强度改善时入场。对于 RelativeStrengthNDXStrategy,应将信号定义与执行机制分开复核,使委员会能够区分市场逻辑与订单模拟、成本处理和账本生成。
交易员绩效复核。 总收益为 587.02%,年化收益为 9.75%,波动率为 11.17%,Sharpe 为 0.87,最大回撤为 -23.23%,交易次数为 135,胜率为 45.19%。这些数字是上传的自定义引擎离线演示记录,并非真实市场结果。
交易记录与经验。 RelativeStrengthNDXStrategy 的经验是将记录用作复核提示:检查可解释性、换手、回撤容忍度、成本敏感性,以及该规则是否在标题收益之外增加头寸管理洞察。
相关摘要: 以交易经验、来源说明、委员会叙事和最终治理检查清单收尾。
交易记录不只是凭证。它是交易台的记忆系统。每个入场日期都在追问交易员拥有的是可重复信号,还是只有一个故事。每个退出日期都在追问流程是否尊重风险,还是等待情绪来协商。每次回撤都在追问仓位规模规则是否诚实面对波动率。
运营模型文章的第一条经验是,流程证据必须先于绩效解读。只有当复核人员知道数据模式、规则逻辑、执行假设、成本处理和工件位置时,排名表才有用。
第二条经验是,代理角色应足够狭窄,以便被质询。编排器可以协调,引擎可以模拟,复核者可以总结,但这些组件都不应悄然成为投资组合决策者。
第三条经验是,在任何人讨论偏好之前,运营模型应先暴露策略特征。低换手规则、高 Sharpe 规则和高活跃度规则会产生不同的复核义务,因此工件包应让这些差异可见。
本文使用上传的自定义引擎工件作为绩效讨论来源。清单说明引擎是 CustomCerebroEngine,数据模式是确定性离线演示数据,策略数量为二十,图像数量为二十二,规则为只做多,无期权、无看跌期权、无空头。策略摘要文件按总收益、年化收益、波动率、Sharpe、最大回撤、交易次数和胜率对全部二十个策略排名。上传的代码文件提供引擎结构、指标定义、信号映射、指标函数和 Bloomberg 暗色模式图表生成方法。
外部架构参考:Amazon Bedrock AgentCore 文档将 AgentCore 描述为一种用于安全、大规模部署和运营代理的托管服务,并将 AgentCore Runtime 描述为支持 Strands、LangGraph 和 CrewAI 等框架的安全无服务器环境。Strands 文档描述了如何将 Strands Agents 部署到 AgentCore Runtime,以及如何为代理入口点使用 Python 集成模式。Backtrader 文档在概念上用于参考 Cerebro 模式,即汇集数据源、策略、分析器、观察器和绘图设施。
以下是在展示研究前需要演练的收尾信息:
我们不是来庆祝收益的。我们是来检查收益背后的流程的。Amazon 头寸表现强劲,但强劲并不会消除风险纪律的必要性。我们构建了自定义引擎,组织了二十个择时策略,复核了记录,并将研究证据与推荐性语言分开。
正确结论不是让代理替我们交易。正确结论是,代理可以帮助我们记录假设、运行可重复测试、比较策略行为、暴露薄弱逻辑,并与风险、技术和治理团队准备更好的对话。人工判断仍是最终控制。