添加klu分型的强度计算
This commit is contained in:
+100
-2
@@ -353,6 +353,22 @@ def analyze_chan(df):
|
||||
for bi in bi_list:
|
||||
bi.cal_macd_div()
|
||||
#print(bi.start_time, bi.macd_hist, bi.macd_div)
|
||||
|
||||
# 获取原始K线数据用于KLU分型分析
|
||||
klu_list = []
|
||||
try:
|
||||
# 尝试获取KLU数据
|
||||
if hasattr(chan, 'get_klu_list'):
|
||||
klu_list = chan.get_klu_list(df)
|
||||
elif hasattr(chan, 'klu_list'):
|
||||
klu_list = chan.klu_list
|
||||
else:
|
||||
# 如果没有专门的KLU方法,尝试从KLC获取原始K线数据
|
||||
print("未找到KLU数据获取方法,尝试其他方式")
|
||||
except Exception as e:
|
||||
print(f"获取KLU数据时出错: {e}")
|
||||
klu_list = []
|
||||
|
||||
# 提取K线分型信息
|
||||
klc_fx_info = []
|
||||
for klc in klc_list:
|
||||
@@ -403,13 +419,74 @@ def analyze_chan(df):
|
||||
'is_strong_fx': False
|
||||
})
|
||||
|
||||
# 提取KLU分型信息
|
||||
klu_fx_info = []
|
||||
for klu in klu_list:
|
||||
if hasattr(klu, 'fx_type') and klu.fx_type != Chan_FX_TYPE.UNKNOWN:
|
||||
try:
|
||||
# 计算分型强度
|
||||
fx_strength = 0
|
||||
fx_strength_level = ""
|
||||
is_strong_fx = False
|
||||
|
||||
# 尝试调用分型强度计算方法
|
||||
if hasattr(klu, 'calculate_realtime_fx_strength'):
|
||||
fx_strength = klu.calculate_realtime_fx_strength()
|
||||
elif hasattr(klu, 'fx_strength'):
|
||||
fx_strength = klu.fx_strength
|
||||
|
||||
# 尝试获取分型强度等级 - 基于强度值生成等级
|
||||
if fx_strength >= 2:
|
||||
fx_strength_level = "强"
|
||||
is_strong_fx = True
|
||||
elif fx_strength >= 1:
|
||||
fx_strength_level = "中"
|
||||
is_strong_fx = False
|
||||
elif fx_strength >= 0:
|
||||
fx_strength_level = "弱"
|
||||
is_strong_fx = False
|
||||
else:
|
||||
fx_strength_level = "极弱"
|
||||
is_strong_fx = False
|
||||
|
||||
# 确保分型确认状态
|
||||
is_confirmed = getattr(klu, 'fx_confirmed', True)
|
||||
|
||||
klu_fx_info.append({
|
||||
'time': klu.time,
|
||||
'price': klu.low if klu.fx_type == Chan_FX_TYPE.BOTTOM else klu.high,
|
||||
'fx_type': str(klu.fx_type).replace("Chan_FX_TYPE.", ""),
|
||||
'is_bottom': klu.fx_type == Chan_FX_TYPE.BOTTOM,
|
||||
'fx_strength': fx_strength, # 分型强度分数
|
||||
'fx_strength_level': fx_strength_level, # 分型强度等级
|
||||
'is_strong_fx': is_strong_fx, # 是否为强分型
|
||||
'fx_confirmed': is_confirmed # 分型是否确认
|
||||
})
|
||||
except Exception as e:
|
||||
print(f"处理KLU分型信息时出错: {e}")
|
||||
# 如果出错,仍然添加基本信息,但分型强度为0
|
||||
klu_fx_info.append({
|
||||
'time': klu.time,
|
||||
'price': klu.low if klu.fx_type == Chan_FX_TYPE.BOTTOM else klu.high,
|
||||
'fx_type': str(klu.fx_type).replace("Chan_FX_TYPE.", ""),
|
||||
'is_bottom': klu.fx_type == Chan_FX_TYPE.BOTTOM,
|
||||
'fx_strength': 0,
|
||||
'fx_strength_level': "",
|
||||
'is_strong_fx': False,
|
||||
'fx_confirmed': False
|
||||
})
|
||||
|
||||
print(f"提取到 {len(klc_fx_info)} 个KLC分型和 {len(klu_fx_info)} 个KLU分型")
|
||||
|
||||
return {
|
||||
'klc_list': klc_list,
|
||||
'klu_list': klu_list, # 添加KLU列表
|
||||
'bi_list': bi_list,
|
||||
'seg_list': seg_list,
|
||||
'zs_list': zs_list,
|
||||
'trade_points': buy_sell_points,
|
||||
'klc_fx_info': klc_fx_info # 添加分型信息
|
||||
'klc_fx_info': klc_fx_info, # KLC分型信息
|
||||
'klu_fx_info': klu_fx_info # 添加KLU分型信息
|
||||
}
|
||||
|
||||
def identify_trade_points(bi_list, seg_list, zs_list):
|
||||
@@ -687,7 +764,17 @@ def analyze():
|
||||
'fx_strength': float(point['fx_strength']), # 分型强度分数
|
||||
'fx_strength_level': str(point['fx_strength_level']), # 分型强度等级
|
||||
'is_strong_fx': bool(point['is_strong_fx']) # 是否为强分型
|
||||
} for point in analysis_result['klc_fx_info']]
|
||||
} for point in analysis_result['klc_fx_info']],
|
||||
'klu_fx_info': [{
|
||||
'time': format_time_safely(point['time'], client_tz),
|
||||
'price': float(point['price']),
|
||||
'fx_type': point['fx_type'],
|
||||
'is_bottom': bool(point['is_bottom']),
|
||||
'fx_strength': float(point['fx_strength']), # 分型强度分数
|
||||
'fx_strength_level': str(point['fx_strength_level']), # 分型强度等级
|
||||
'is_strong_fx': bool(point['is_strong_fx']), # 是否为强分型
|
||||
'fx_confirmed': bool(point['fx_confirmed']) # 分型是否确认
|
||||
} for point in analysis_result['klu_fx_info']]
|
||||
})
|
||||
else:
|
||||
print(f"只请求元素数据,跳过主周期数据处理 (elements_only={elements_only})")
|
||||
@@ -780,6 +867,17 @@ def analyze():
|
||||
'is_strong_fx': bool(point['is_strong_fx']) # 是否为强分型
|
||||
} for point in element_analysis['klc_fx_info']]
|
||||
|
||||
result['element_klu_fx_info'] = [{
|
||||
'time': format_time_safely(point['time'], client_tz),
|
||||
'price': float(point['price']),
|
||||
'fx_type': point['fx_type'],
|
||||
'is_bottom': bool(point['is_bottom']),
|
||||
'fx_strength': float(point['fx_strength']), # 分型强度分数
|
||||
'fx_strength_level': str(point['fx_strength_level']), # 分型强度等级
|
||||
'is_strong_fx': bool(point['is_strong_fx']), # 是否为强分型
|
||||
'fx_confirmed': bool(point['fx_confirmed']) # 分型是否确认
|
||||
} for point in element_analysis['klu_fx_info']]
|
||||
|
||||
print(f"小周期分析完成: {element_timeframe}, 笔数量: {len(result['element_bi_list'])}, {'仅元素数据' if elements_only else '包含主周期数据'}")
|
||||
else:
|
||||
print(f"无法获取小周期数据: {element_timeframe}")
|
||||
|
||||
Reference in New Issue
Block a user