提示词

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

答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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写的。

结果:

进一步筛选

提示词

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 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的列筛选出来,请给出示例代码。

答案

1
2
3
4
5
6
7
8
9
# 获取最后一行数据
last_row = pattern_results.iloc[-1] # 提取最后一行作为Series

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

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

输出

1
2
3
4
5
6
7
最后一行识别的有效形态:
CDLDOJI 100
CDLHIGHWAVE 100
CDLLONGLEGGEDDOJI 100
CDLRICKSHAWMAN 100
CDLSPINNINGTOP 100
Name: 2022-12-30 00:00:00, dtype: int32

还可以让ai进一步解释

提示词

1
什么是K线中的DOJI形态?