add changes

This commit is contained in:
jackyu66git
2025-04-24 17:49:36 +08:00
parent 48d5647ebf
commit b849ce8ec8
14 changed files with 242 additions and 408 deletions
+19 -54
View File
@@ -128,14 +128,25 @@ def get_kl_data(symbol, timeframe, limit=1000, start_time=None, end_time=None):
# 按时间排序
df = df.sort_values('timestamp')
chan = ChanLun()
klc_list = chan.get_klc_list(df)
klc_index = 0
df_copy = df.copy()
ret_df = pd.DataFrame(columns=['timestamp', 'open', 'high', 'low', 'close', 'volume', 'date'])
for index in range(0, len(df)):
if klc_index >= len(klc_list):
klc_index = len(klc_list) - 1
klc = klc_list[klc_index]
if index == klc.start_klu.index:
ret_df.loc[klc_index] = df_copy.loc[index]
klc_index += 1
# 如果过滤后没有数据,返回None
if len(df) == 0:
if len(ret_df) == 0:
print("过滤后无数据")
return None
print(f"获取到总共 {len(df)} 条数据")
return df
print(f"获取到总共 {len(ret_df)} 条数据")
return ret_df
except Exception as e:
print(f"获取数据错误: {e}")
@@ -166,9 +177,6 @@ def analyze_chan(df):
seg_list = chan.get_seg_list(bi_list)
zs_list = chan.calculate_zs(bi_list, seg_list)
# 获取笔中枢列表
bi_zs_list = chan.get_bi_zs_list(bi_list)
# 添加买卖点识别
buy_sell_points = identify_trade_points(bi_list, seg_list, zs_list)
@@ -177,7 +185,6 @@ def analyze_chan(df):
'bi_list': bi_list,
'seg_list': seg_list,
'zs_list': zs_list,
'bi_zs_list': bi_zs_list, # 添加笔中枢数据
'trade_points': buy_sell_points
}
@@ -403,36 +410,16 @@ def analyze():
'end_time': (zs.end_klc.end_time if isinstance(zs.end_klc.end_time, str) else zs.end_klc.end_time.astimezone(client_tz).isoformat()) if zs.end_klc else None,
'zg': zs.zg,
'zd': zs.zd,
'is_sure': zs.is_sure, # 添加中枢是否完成的标志
'type': getattr(zs, 'type', 'SEG_ZS') # 中枢类型,默认为线段中枢
'is_sure': zs.is_sure # 添加中枢是否完成的标志
} for zs in analysis_result['zs_list'] if zs.end_klc],
# 添加笔中枢列表
'bi_zs_list': [{
'start_time': zs.start_klc.start_time if isinstance(zs.start_klc.start_time, str) else zs.start_klc.start_time.astimezone(client_tz).isoformat(),
'end_time': (zs.end_klc.end_time if isinstance(zs.end_klc.end_time, str) else zs.end_klc.end_time.astimezone(client_tz).isoformat()) if zs.end_klc else None,
'zg': zs.zg,
'zd': zs.zd,
'is_sure': zs.is_sure, # 添加中枢是否完成的标志
'type': 'BI_ZS' # 标记为笔中枢
} for zs in analysis_result['bi_zs_list'] if zs.end_klc],
# 添加未完成中枢列表
'uncompleted_zs_list': [{
'start_time': zs.start_klc.start_time if isinstance(zs.start_klc.start_time, str) else zs.start_klc.start_time.astimezone(client_tz).isoformat(),
'end_time': None, # 未完成中枢没有结束时间
'zg': zs.zg,
'zd': zs.zd,
'is_sure': zs.is_sure, # 未完成中枢的is_sure为False
'type': getattr(zs, 'type', 'SEG_ZS') # 中枢类型,默认为线段中枢
'is_sure': zs.is_sure # 未完成中枢的is_sure为False
} for zs in analysis_result['zs_list'] if not zs.is_sure],
# 添加未完成笔中枢列表
'uncompleted_bi_zs_list': [{
'start_time': zs.start_klc.start_time if isinstance(zs.start_klc.start_time, str) else zs.start_klc.start_time.astimezone(client_tz).isoformat(),
'end_time': None, # 未完成中枢没有结束时间
'zg': zs.zg,
'zd': zs.zd,
'is_sure': zs.is_sure, # 未完成中枢的is_sure为False
'type': 'BI_ZS' # 标记为笔中枢
} for zs in analysis_result['bi_zs_list'] if not zs.is_sure],
'trade_points': [{
'type': point['type'],
'time': format_time_safely(point['time'], client_tz),
@@ -477,40 +464,18 @@ def analyze():
'end_time': (zs.end_klc.end_time if isinstance(zs.end_klc.end_time, str) else zs.end_klc.end_time.astimezone(client_tz).isoformat()) if zs.end_klc else None,
'zg': zs.zg,
'zd': zs.zd,
'is_sure': zs.is_sure, # 添加中枢是否完成的标志
'type': getattr(zs, 'type', 'SEG_ZS') # 中枢类型,默认为线段中枢
'is_sure': zs.is_sure # 添加中枢是否完成的标志
} for zs in element_analysis['zs_list'] if zs.end_klc]
# 添加小周期笔中枢
result['element_bi_zs_list'] = [{
'start_time': zs.start_klc.start_time if isinstance(zs.start_klc.start_time, str) else zs.start_klc.start_time.astimezone(client_tz).isoformat(),
'end_time': (zs.end_klc.end_time if isinstance(zs.end_klc.end_time, str) else zs.end_klc.end_time.astimezone(client_tz).isoformat()) if zs.end_klc else None,
'zg': zs.zg,
'zd': zs.zd,
'is_sure': zs.is_sure, # 添加中枢是否完成的标志
'type': 'BI_ZS' # 标记为笔中枢
} for zs in element_analysis['bi_zs_list'] if zs.end_klc]
# 添加小周期未完成中枢列表
result['element_uncompleted_zs_list'] = [{
'start_time': zs.start_klc.start_time if isinstance(zs.start_klc.start_time, str) else zs.start_klc.start_time.astimezone(client_tz).isoformat(),
'end_time': None, # 未完成中枢没有结束时间
'zg': zs.zg,
'zd': zs.zd,
'is_sure': zs.is_sure, # 未完成中枢的is_sure为False
'type': getattr(zs, 'type', 'SEG_ZS') # 中枢类型,默认为线段中枢
'is_sure': zs.is_sure # 未完成中枢的is_sure为False
} for zs in element_analysis['zs_list'] if not zs.is_sure]
# 添加小周期未完成笔中枢列表
result['element_uncompleted_bi_zs_list'] = [{
'start_time': zs.start_klc.start_time if isinstance(zs.start_klc.start_time, str) else zs.start_klc.start_time.astimezone(client_tz).isoformat(),
'end_time': None, # 未完成中枢没有结束时间
'zg': zs.zg,
'zd': zs.zd,
'is_sure': zs.is_sure, # 未完成中枢的is_sure为False
'type': 'BI_ZS' # 标记为笔中枢
} for zs in element_analysis['bi_zs_list'] if not zs.is_sure]
result['element_trade_points'] = [{
'type': point['type'],
'time': format_time_safely(point['time'], client_tz),