import pandas as pd class IncrementalUpdater: def __init__(self, processor): """ 初始化增量更新模块 :param processor: KlineProcessor 实例 """ self.processor = processor def update_with_new_kline(self, new_kline): """ 增量处理新增的 K 线 """ new_kline = pd.DataFrame([new_kline]) self.processor.df = pd.concat([self.processor.df, new_kline], ignore_index=True) i = len(self.processor.df) - 1 while i > 0: # 检查包含关系 if (self.processor.df.loc[i, 'High'] <= self.processor.df.loc[i-1, 'High'] and self.processor.df.loc[i, 'Low'] >= self.processor.df.loc[i-1, 'Low']) or \ (self.processor.df.loc[i, 'High'] >= self.processor.df.loc[i-1, 'High'] and self.processor.df.loc[i, 'Low'] <= self.processor.df.loc[i-1, 'Low']): # 找到更早的无包含关系的 K 线 j = i - 1 while j > 0 and \ ((self.processor.df.loc[j, 'High'] <= self.processor.df.loc[j-1, 'High'] and self.processor.df.loc[j, 'Low'] >= self.processor.df.loc[j-1, 'Low']) or \ (self.processor.df.loc[j, 'High'] >= self.processor.df.loc[j-1, 'High'] and self.processor.df.loc[j, 'Low'] <= self.processor.df.loc[j-1, 'Low'])): j -= 1 # 确定处理方向 if self.processor.df.loc[j, 'High'] < self.processor.df.loc[i-1, 'High']: # 当前包含关系为向上处理 self.processor.df.loc[j, 'High'] = max(self.processor.df.loc[i, 'High'], self.processor.df.loc[j, 'High']) self.processor.df.loc[j, 'Low'] = max(self.processor.df.loc[i, 'Low'], self.processor.df.loc[j, 'Low']) else: # 当前包含关系为向下处理 self.processor.df.loc[j, 'High'] = min(self.processor.df.loc[i, 'High'], self.processor.df.loc[j, 'High']) self.processor.df.loc[j, 'Low'] = min(self.processor.df.loc[i, 'Low'], self.processor.df.loc[j, 'Low']) # 删除当前 K 线 self.processor.df = self.processor.df.drop(index=i).reset_index(drop=True) else: break i -= 1