至多 K 段不重叠多头 round-trip 下的最佳已实现 PnL 上界(含每段冲击成本)
Best Realized PnL Bound Under K Disjoint Round-Trips with Per-Roundtrip Impact Cost
开始编码实现 solution(prices: list[float], K: int, fee: float) -> float。给定 N 期合成价格序列 prices、最多 round-trip 次数上限 K 与每段平摊的冲击成本 fee,返回执行台在"AT MOST K 段不重叠多头 round-trip"约束下能记入的已实现 PnL 上界。每段 round-trip 在某期 i 开多、在更晚的某期 j > i 平仓,已实现金额 = prices[j] - prices[i] - fee;多段必须严格不重叠——新一段 round-trip 只能在前一段 round-trip 关闭后的下一期开仓(同一时刻最多持有一段开仓)。由于不强制交易,结果至少为 0.0。
例:solution([1.0, 5.0, 3.0, 8.0, 2.0, 7.0], 2, 1.0) 返回 10.0。第 0 期 1.0 开仓、第 3 期 8.0 平仓(实现 7-1=6);第 4 期 2.0 开仓、第 5 期 7.0 平仓(实现 5-1=4);合计 10.0。把前半段拆成两笔更小的 round-trip 会被多扣一次 fee,所以本例两段 round-trip 已经是合理上界。
测试用例显式区分两类边界:K = 0 时无论价格序列多漂亮都必须精确返回 0.0;以及 fee 大到没有任何"开仓-平仓"对能覆盖该 fee 时也必须返回 0.0。参考实现 O(N*K) 时间、O(K) 空间;逐对 (i, j) 扫描为 O(N^2),无法通过最大隐藏样例。
实现细节由 stubs/stub.py 提供。
实践背景
当执行台用一段录像中的中间价序列回顾性评估一笔交易想法时,常问"在 round-trip 次数硬上限 K 与每段平摊冲击成本 fee 下,我们能记入的已实现 PnL 最佳是多少"。其中 K 直接对应到具体的合规额度——很多执行台出于资本风险事件的自我管控,会限定每节交易至多 K 次"持仓清零再开仓"型的再平衡;fee 则是该执行台愿意为每段完整 round-trip(一段、不是分两侧两次)吸收的固定每段滑点预算。该数字并不是任何可交易策略的已实现 PnL,而是"在该成本制度下、完美择时下"的上界,被用作 capture ratio(策略捕获率)的分母,给模拟器与执行算法打分。执行台据此论证"即便预先知晓所有信息、且服从我们当前的成本制度与 K 段再平衡上限,可达上限也只是 X,故捕获到 0.45X 的候选模型是相对一个诚实的上界做得不错,而不是相对一个无界幻想做得不错"。
约束条件
- 0 <= N <= 2000,其中 N 为 solution(prices, K, fee) 的 prices 输入长度
- 0 <= K <= 200;K 为整数;K = 0 必须返回精确的 0.0
- 0.0 <= fee <= 1e6;fee 为有限非负浮点数,每完成一段 round-trip 收取一次
- 每个 prices[i] 为有限非负浮点数,prices[i] <= 1e6;交易者不被强制交易,因此答案下界为 0.0
- 输出为有限浮点数(已实现 PnL);比较器为 float,rel_tol = 1e-9,abs_tol = 1e-12
样例
Case 1 · statement-example: K=2 fee=1 captures two distinct round-trips
输入: [[1,5,3,8,2,7],2,1]
期望: 10
两段不重叠的多头:第 0 天 1.0 买 -> 第 3 天 8.0 卖 = 7-1 = 6;第 4 天 2.0 买 -> 第 5 天 7.0 卖 = 5-1 = 4;合计 10.0。
Case 2 · statement-example: K=0 forces zero PnL
输入: [[1,5,3,8,2,7],0,1]
期望: 0
K=0 直接返回 0.0:禁止任何交易,无论价格序列如何。
Case 3 · statement-example: fee dominates every round-trip, abstain
输入: [[1,5,3,8,2,7],5,100]
期望: 0
任何单次 round-trip 的毛利不超过 7 < fee=100,故全部不交易,realized PnL = 0.0。
最近提交
还没有提交记录。
编码区
实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
Case 1 · statement-example: K=2 fee=1 captures two distinct round-trips
输入: [[1,5,3,8,2,7],2,1]
期望: 10
两段不重叠的多头:第 0 天 1.0 买 -> 第 3 天 8.0 卖 = 7-1 = 6;第 4 天 2.0 买 -> 第 5 天 7.0 卖 = 5-1 = 4;合计 10.0。
Case 2 · statement-example: K=0 forces zero PnL
输入: [[1,5,3,8,2,7],0,1]
期望: 0
K=0 直接返回 0.0:禁止任何交易,无论价格序列如何。
Case 3 · statement-example: fee dominates every round-trip, abstain
输入: [[1,5,3,8,2,7],5,100]
期望: 0
任何单次 round-trip 的毛利不超过 7 < fee=100,故全部不交易,realized PnL = 0.0。