如何通过条件判断简化多输入量的ARB计算函数?
统一套利计算函数实现方案
核心思路
通过可变参数接收所有输入,先校验参数合法性,再根据输入的参数对数量n自动匹配对应计算逻辑,将重复的多结果计算逻辑统一处理,避免编写12个重复函数。
代码实现
def calculate_arb(*args): # 校验参数是否为成对输入(x1,y1, x2,y2...) if len(args) % 2 != 0: raise ValueError("参数必须成对输入,格式为x1,y1,x2,y2,...xn,yn") result_count = len(args) // 2 odds = args[::2] # 提取所有赔率值 # 若需要使用y参数(如投注上限等),可通过y_values = args[1::2]提取 # 根据结果数量匹配计算逻辑 if result_count == 2: # 双结果场景(原arb_2odds逻辑) x1, x2 = odds arb_sum = 1/x1 + 1/x2 if arb_sum < 1: profit_rate = (1 - arb_sum)/arb_sum * 100 stake_ratios = [(1/x1)/arb_sum, (1/x2)/arb_sum] return {"套利空间": f"{profit_rate:.2f}%", "投注比例": stake_ratios} return {"套利空间": "无"} elif result_count == 3: # 三结果场景(原arb_3odds逻辑) x1, x2, x3 = odds arb_sum = 1/x1 + 1/x2 + 1/x3 if arb_sum < 1: profit_rate = (1 - arb_sum)/arb_sum * 100 stake_ratios = [(1/x1)/arb_sum, (1/x2)/arb_sum, (1/x3)/arb_sum] return {"套利空间": f"{profit_rate:.2f}%", "投注比例": stake_ratios} return {"套利空间": "无"} elif 4 <= result_count <= 14: # 4到14结果通用逻辑,无需重复编写 arb_sum = sum(1/odd for odd in odds) if arb_sum < 1: profit_rate = (1 - arb_sum)/arb_sum * 100 stake_ratios = [(1/odd)/arb_sum for odd in odds] return {"套利空间": f"{profit_rate:.2f}%", "投注比例": stake_ratios} return {"套利空间": "无"} else: raise ValueError(f"仅支持2-14个结果的套利计算,当前输入对应{result_count}个结果")
关键说明
- 参数接收:用
*args接收任意数量的参数,自动适配2到14对输入的场景。 - 逻辑复用:4到14结果的计算逻辑本质一致,直接统一处理,避免重复代码。
- 兼容性:保留原双结果、三结果的独立逻辑分支,若原函数有特殊处理(如额外校验、定制化计算),可直接在对应分支中修改,无需改动通用逻辑。
- 错误处理:添加参数合法性校验,避免非法输入导致的计算错误。
使用示例
# 双结果场景调用 print(calculate_arb(1.95, 2.05)) # 三结果场景调用 print(calculate_arb(3.1, 3.1, 3.1)) # 10结果场景调用(示例) print(calculate_arb(11.0, 0, 11.0, 0, 11.0, 0, 11.0, 0, 11.0, 0, 11.0, 0, 11.0, 0, 11.0, 0, 11.0, 0, 11.0, 0))
内容的提问来源于stack exchange,提问作者AcoffeePls
相关产品推荐
相关产品推荐

