如何将实现交易信号连续去重的JS代码改写为Python版本?
交易序列连续重复方向去重Python实现
功能说明
核心需求为删除列表中连续重复的同向交易值,匹配示例效果:输入[Buy, Buy, Sell, Buy, Sell, Sell]时输出[Buy, Sell, Buy, Sell]。
完整实现代码
import json import os # 对应原JS的Trade类结构,可根据你的实际数据结构调整 class Trade: def __init__(self, price, side): self.price = price self.side = side def deduplicate_trades(trade_list): if not trade_list: return [] deduplicated = [] for trade in trade_list: # 方向取值逻辑兼容列表/类两种格式,若实际用Trade类实例,可直接改为trade.side current_side = trade[0] if isinstance(trade, (list, tuple)) else trade.side if not deduplicated: deduplicated.append(trade) continue # 取上一个已保留条目的方向 last_side = deduplicated[-1][0] if isinstance(deduplicated[-1], (list, tuple)) else deduplicated[-1].side # 仅方向不同时保留当前条目 if current_side != last_side: deduplicated.append(trade) return deduplicated if __name__ == "__main__": # 替换为你的实际交易数据 array = [ ["BUY", 100], ["BUY", 101], ["SELL", 102], ["BUY", 103], ["SELL", 104], ["SELL", 105] ] print("AllTrades:") print(array) trades = deduplicate_trades(array) print('D Trades:') for trade in trades: print(trade) # 自动创建data目录避免写入报错 os.makedirs('./data', exist_ok=True) with open('./data/trades.json', 'w', encoding='utf-8') as f: json.dump(trades, f, ensure_ascii=False, indent=2) print('Trades > trades.txt')
代码说明
- 核心逻辑完全匹配需求,测试给定输入可直接输出预期结果
- 兼容嵌套列表、Trade类实例两种常用交易数据格式,可根据实际场景调整方向取值逻辑
- 若需要严格对齐原JS中「首条交易为SELL时自动丢弃」的特殊逻辑,可在去重函数开头增加对应判断即可
- 内置目录自动创建、UTF-8编码配置,避免运行时异常和乱码问题
内容的提问来源于stack exchange,提问作者tetter
相关产品推荐
相关产品推荐

