生生不息

生生不息

AI使用TA-Lib全部模式识别函数识别K线形态

2025-06-24
AI使用TA-Lib全部模式识别函数识别K线形态

提示词

我希望获取TA-Lib中识别K线形态的所有函数,然后通过循环的方式用这些函数对一个包含OHLC数据的DataFrame进行模式识别,最后将识别的结果保存到一个新的DataFrame中,不需要可视化,请给出示例代码。

答案

import pandas as pd
import talib

# 假设df是包含OHLC数据的DataFrame,索引为日期
# 列名应为:'open', 'high', 'low', 'close' (小写)
# 示例数据:
# df = pd.DataFrame({
#     'open': [ ... ],
#     'high': [ ... ],
#     'low': [ ... ],
#     'close': [ ... ]
# }, index=pd.DatetimeIndex([ ... ]))

# 获取所有以"CDL"开头的形态识别函数名
pattern_functions = [func for func in dir(talib) if func.startswith('CDL')]

# 创建新的DataFrame存储结果
pattern_df = pd.DataFrame(index=df.index)

# 循环应用所有形态识别函数
for pattern_func in pattern_functions:
    try:
        # 获取函数对象
        func = getattr(talib, pattern_func)
      
        # 应用函数识别形态
        pattern_result = func(df['开盘价'], df['最高价'], df['最低价'], df['收盘价'])
      
        # 将结果保存到新DataFrame
        pattern_df[pattern_func] = pattern_result
      
    except Exception as e:
        print(f"Error processing {pattern_func}: {str(e)}")
        pattern_df[pattern_func] = None  # 出错时填充None

# 查看结果
print(f"识别了{len(pattern_functions)}种K线形态")
print(pattern_df.tail())

# 可选:保存结果到CSV文件
# pattern_df.to_csv('kline_pattern_results.csv')

# 可选:筛选出现特定形态的日期
# 例如筛选早晨之星(CDLMORNINGSTAR)
# morning_star_dates = pattern_df[pattern_df['CDLMORNINGSTAR'] > 0].index

我修改了表格列名的代码,其余都是ai写的。

结果:

进一步筛选

提示词

# Python代码
# 获取Pattern Recognition组中的所有函数
pattern_recognition_functions = talib.get_function_groups()['Pattern Recognition']

# 创建新的DataFrame来存储模式识别的结果
pattern_results = pd.DataFrame(index=df.index)

# 用循环识别并存储K线形态结果
for pattern_function in pattern_recognition_functions:
    result = getattr(talib, pattern_function)(df['开盘价'], 
                                              df['最高价'], 
                                              df['最低价'], 
                                              df['收盘价'])
    pattern_results[pattern_function] = result

# 显示新的DataFrame
pattern_results.tail()

上面这个保存结果的DataFrame中,需要将最后一条记录中,不等于0的列筛选出来,请给出示例代码。

答案

# 获取最后一行数据
last_row = pattern_results.iloc[-1]  # 提取最后一行作为Series

# 筛选非零值
non_zero_patterns = last_row[last_row != 0]

# 显示结果
print("最后一行识别的有效形态:")
print(non_zero_patterns)

输出

最后一行识别的有效形态:
CDLDOJI              100
CDLHIGHWAVE          100
CDLLONGLEGGEDDOJI    100
CDLRICKSHAWMAN       100
CDLSPINNINGTOP       100
Name: 2022-12-30 00:00:00, dtype: int32

还可以让ai进一步解释

提示词

什么是K线中的DOJI形态?