最低持有期合规约束下单段多头 round-trip 的最佳已实现 PnL
Best Single Round-Trip Realized PnL Under a Minimum-Holding-Period Compliance Rule
开始编码实现 solution(prices: list[float], min_hold: int) -> float。给定 N 个连续交易期、严格为正的价格序列 prices 与非负整数 min_hold,在持有约束 j - i >= min_hold(含等号)下返回单段多头 round-trip 能实现的最大 realized PnL。round-trip 在下标 i 开多、下标 j 平仓,损益为 prices[j] - prices[i]。交易员永不被迫交易,因此若不存在合法 (i, j) 配对、或所有合法配对均给出非正利润,则返回 0.0。
例:solution([10.0, 7.0, 5.0, 6.0, 9.0, 11.0, 8.0], 2) 返回 6.0。min_hold = 2 时合法配对要求 j - i >= 2。在下标 2(价 5.0)买入并在下标 5(价 11.0)卖出,得 11.0 - 5.0 = 6.0,优于该序列上其他所有合法配对。
测试集合显式区分的边界:min_hold = 0 允许同下标买卖(收益 0.0),将任务降阶为标准 one-shot 最佳交易上界;N <= min_hold 没有合法配对,返回 0.0;任意长度的单调下行序列均返回 0.0;位于尾部 min_hold 长度窗口内的低点不可能成为任何合法卖出下标的买入候选。参考实现以 O(N) 时间、O(1) 辅助状态完成,运行最小值的入选指针比卖出下标 j 滞后正好 min_hold;O(N^2) 的逐对扫描在最大隐藏用例上跑不动。
函数骨架见 stubs/stub.py。
实践背景
机构桌面常运行在最低持有期规则下——这条规则可能来自税务批次约束、wash-sale 风格的规避窗口、策略授权中的强制持有条款,或合规为限制过度换手而下发的指令——禁止开仓后不到 min_hold 个周期就平仓。在让桌面的算法实盘前,风控想知道在恰好这套约束下,于一段已记录的回测全集上,最佳情况下的 realized PnL 会是多少:一个完美预见的天花板,用以约束桌面对自身相对于无约束 one-shot 最优解的合理预期。该数字不是任何可实盘策略的 realized PnL——它假定完美时机——而是被用作 capture ratio 的分母去考评候选算法。桌面据此论证:「即便在我们的最低持有期合规规则下取完美预见,可达上界也只是 X——所以一个能复现 0.6 X 的模型,是相对于一个诚实的、规则感知的天花板在表现,而不是对着一个无约束的幻想较劲。」
约束条件
- 0 <= N <= 2e5,其中 N = len(prices) 是传入 solution(prices, min_hold) 的价格序列长度
- 0 <= min_hold <= 2e5;min_hold 为非负整数;持有约束 j - i >= min_hold 取等号合法 —— min_hold = 0 允许同下标买卖,min_hold = 1 要求卖出下标至少在买入下标之后一格
- 每个 prices[i] 是有限正浮点数,prices[i] <= 1e6
- 若 N <= min_hold 则不存在合法 (i, j);若所有合法配对收益均不为正,返回 0.0(交易员永不被迫交易)
- 输出为有限浮点 realized PnL;比较器为 float,rel_tol = 1e-9,abs_tol = 1e-12
样例
Case 1 · statement-example: min_hold=2 picks best valid pair
输入: [[10,7,5,6,9,11,8],2]
期望: 6
min_hold=2 要求 j-i>=2。最佳:i=2 价 5.0,j=5 价 11.0,profit = 6.0。
Case 2 · statement-example: min_hold=0 reduces to standard one-shot best trade
输入: [[3,1,4,1,5,9,2],0]
期望: 8
min_hold=0 时同日买卖合法但收益为 0;最大利润是 i=1 价 1.0 到 j=5 价 9.0,profit = 8.0。
Case 3 · statement-example: min_hold too large yields no valid pair
输入: [[1,2,3,4],4]
期望: 0
min_hold=4 但 N=4,没有满足 j-i>=4 的 (i,j),返回 0.0。
最近提交
还没有提交记录。
编码区
实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
Case 1 · statement-example: min_hold=2 picks best valid pair
输入: [[10,7,5,6,9,11,8],2]
期望: 6
min_hold=2 要求 j-i>=2。最佳:i=2 价 5.0,j=5 价 11.0,profit = 6.0。
Case 2 · statement-example: min_hold=0 reduces to standard one-shot best trade
输入: [[3,1,4,1,5,9,2],0]
期望: 8
min_hold=0 时同日买卖合法但收益为 0;最大利润是 i=1 价 1.0 到 j=5 价 9.0,profit = 8.0。
Case 3 · statement-example: min_hold too large yields no valid pair
输入: [[1,2,3,4],4]
期望: 0
min_hold=4 但 N=4,没有满足 j-i>=4 的 (i,j),返回 0.0。