Files
Chan/fx_strength_example.py
T
2025-05-23 21:19:50 +08:00

162 lines
5.0 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
分型强度检测使用示例
该文件展示如何使用ChanKLC类中新增的分型强度检测功能
"""
from ChanKLC import ChanKLC
from ChanEnum import Chan_FX_TYPE
import ChanKLU
def demo_fx_strength_detection():
"""
演示分型强度检测功能
"""
print("=== 分型强度检测功能演示 ===\n")
# 假设我们有一个已经确定为分型的KLC对象
# 这里仅为演示,实际使用中KLC对象应该通过正常流程创建
print("1. 分型强度计算方法:")
print(" - calculate_fx_strength(): 返回0-100的强度分数")
print(" - get_fx_strength_level(): 返回强度等级描述")
print(" - is_strong_fx(threshold): 判断是否为强分型")
print()
print("2. 强度评分维度 (总分100分):")
print(" - 价格差异强度: 40分 (与相邻K线的价格差异)")
print(" - 突破历史点位: 20分 (是否突破重要高低点)")
print(" - 成交量确认: 15分 (分型形成时的成交量)")
print(" - RSI背离确认: 15分 (价格与RSI的背离)")
print(" - MACD背离确认: 10分 (价格与MACD的背离)")
print()
print("3. 强度等级分类:")
print(" - 极强: 80-100分")
print(" - 强: 60-79分")
print(" - 中等: 40-59分")
print(" - 弱: 20-39分")
print(" - 极弱: 0-19分")
print()
print("4. 在特征数据中的应用:")
print(" 分型强度会自动集成到get_feature_data()方法返回的特征中:")
print(" - klc_fx_strength: 强度分数")
print(" - klc_fx_strength_level: 强度等级")
print(" - klc_is_strong_fx: 是否为强分型(布尔值)")
print(" - klc_fx_strength_extreme: 是否为极强分型")
print(" - klc_fx_strength_strong: 是否为强分型")
print(" - klc_fx_strength_medium: 是否为中等分型")
print(" - klc_fx_strength_weak: 是否为弱分型")
print(" - klc_fx_strength_very_weak: 是否为极弱分型")
print()
def analyze_fx_strength(klc):
"""
分析单个KLC的分型强度
Args:
klc: ChanKLC对象
"""
if klc.fx == Chan_FX_TYPE.UNKNOWN:
print(f"时间: {klc.start_time} - 无分型")
return
fx_type = "顶分型" if klc.fx == Chan_FX_TYPE.TOP else "底分型"
strength = klc.calculate_fx_strength()
strength_level = klc.get_fx_strength_level()
is_strong = klc.is_strong_fx()
print(f"时间: {klc.start_time}")
print(f"分型类型: {fx_type}")
print(f"强度分数: {strength}")
print(f"强度等级: {strength_level}")
print(f"是否强分型: {'是' if is_strong else '否'}")
print("-" * 30)
def filter_strong_fractals(klc_list, min_strength=60):
"""
筛选强分型
Args:
klc_list: KLC对象列表
min_strength: 最小强度阈值
Returns:
强分型列表
"""
strong_fractals = []
for klc in klc_list:
if klc.fx != Chan_FX_TYPE.UNKNOWN and klc.is_strong_fx(min_strength):
strong_fractals.append(klc)
return strong_fractals
def get_fractal_statistics(klc_list):
"""
获取分型强度统计信息
Args:
klc_list: KLC对象列表
Returns:
统计信息字典
"""
stats = {
'total_fractals': 0,
'top_fractals': 0,
'bottom_fractals': 0,
'extreme_strength': 0, # 极强
'strong_strength': 0, # 强
'medium_strength': 0, # 中等
'weak_strength': 0, # 弱
'very_weak_strength': 0,# 极弱
'avg_strength': 0
}
strengths = []
for klc in klc_list:
if klc.fx != Chan_FX_TYPE.UNKNOWN:
stats['total_fractals'] += 1
if klc.fx == Chan_FX_TYPE.TOP:
stats['top_fractals'] += 1
else:
stats['bottom_fractals'] += 1
strength = klc.calculate_fx_strength()
strengths.append(strength)
if strength >= 80:
stats['extreme_strength'] += 1
elif strength >= 60:
stats['strong_strength'] += 1
elif strength >= 40:
stats['medium_strength'] += 1
elif strength >= 20:
stats['weak_strength'] += 1
else:
stats['very_weak_strength'] += 1
if strengths:
stats['avg_strength'] = sum(strengths) / len(strengths)
return stats
if __name__ == "__main__":
demo_fx_strength_detection()
print("=== 使用建议 ===")
print("1. 在交易策略中,可以只关注强度>=60的分型")
print("2. 极强分型(>=80分)通常是重要的转折点")
print("3. 结合成交量和技术指标背离的分型更可靠")
print("4. 可以用分型强度来设置止损和止盈位置")
print("5. 分型强度可以作为机器学习模型的重要特征")