如何简化量化交易策略中判断多空仓条件的复杂if逻辑表达式?
交易判断逻辑表达式简化方案
原逻辑的多空两个分支判断规则完全对称,仅比较方向相反,存在大量冗余代码,可通过公共条件提取、对称逻辑合并的方式简化,保证和原代码100%逻辑等价的前提下,提升可读性和可维护性。
核心优化思路
- 提取最外层公共判断
trade_dur == 0,减少不必要的逻辑嵌套 - 提前将K线开盘价、收盘价提取为独立变量,避免重复编写数组索引取值逻辑
- 引入方向标记位,将多空两个分支的反向比较逻辑合并为统一判断,消除重复的
or分支,后续调整规则时只需修改一处,避免多分支修改不一致的问题 - 修正原代码中注释多空标注写反的问题,避免后续维护产生误解
简化后代码
if trade_dur == 0: open_price = row[OPEN_IDX] close_price = row[CLOSE_IDX] # 方向标记:做空分支比较方向为正,做多分支比较方向取反 dir_flag = 1 if is_short else -1 # 以下三个判断和原逻辑完全对应 candle_condition = (close_price - open_price) * dir_flag > 0 open_rate_condition = (trade.open_rate - open_price) * dir_flag > 0 close_rate_condition = (close_price - close_rate) * dir_flag > 0 if candle_condition and open_rate_condition and close_rate_condition: # 此处编写原if块内的业务逻辑 pass
等价性验证
可以直接代入布尔值核对逻辑一致性:
- 当
is_short = True时,dir_flag=1,三个判断分别对应收盘价>开盘价、开仓价>K线开盘价、收盘价>平仓价,和原代码做空分支规则完全一致 - 当
is_short = False时,dir_flag=-1,不等式乘负数后比较方向反转,三个判断分别对应收盘价<开盘价、开仓价<K线开盘价、收盘价<平仓价,和原代码做多分支规则完全一致
内容的提问来源于stack exchange,提问作者Alex Leontaridis
相关产品推荐
相关产品推荐

