| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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
|