AI使用TA-Lib识别“锤头”形态
编辑
0
2025-06-24

提示词
有一个日期为index的DataFrame,包含期货的开盘价、最高价、最低价和收盘价,需要使用TA-Lib识别其是否包含锤头形态,并且将识别出的K线用Ploty进行可视化。请给出示例代码。
答案
import pandas as pd
import talib
import plotly.graph_objects as go
import numpy as np
from datetime import datetime, timedelta
# 1. 数据准备(假设df是包含日期索引和OHLC数据的DataFrame)
# 如果已有数据,请替换以下示例数据
# def generate_sample_data(days=100):
# dates = pd.date_range(end=datetime.today(), periods=days)
# open_prices = np.random.uniform(3500, 4000, days)
# high_prices = open_prices + np.random.uniform(10, 50, days)
# low_prices = open_prices - np.random.uniform(10, 80, days) # 模拟长下影线
# close_prices = np.random.uniform(np.minimum(open_prices, low_prices),
# np.maximum(open_prices, high_prices))
# return pd.DataFrame({
# 'Open': open_prices,
# 'High': high_prices,
# 'Low': low_prices,
# 'Close': close_prices
# }, index=dates)
# # 生成示例数据(实际使用时替换为你的DataFrame)
# df = generate_sample_data()
# 2. 使用TA-Lib识别锤头形态[1,2,4](@ref)
signals1 = talib.CDLHAMMER(df['开盘价'], df['最高价'], df['最低价'], df['收盘价'])
# 2. 创建包含信号的DataFrame
df = pd.DataFrame({
'Open': df['开盘价'],
'High': df['最高价'],
'Low': df['最低价'],
'Close': df['收盘价'],
'hammer_signals': signals1
})
# 3. 创建信号标记数据
signals = df['hammer_signals'] > 0 # >0表示识别到锤头形态
print(f"识别到{len(signals)}个锤头形态")
# 4. 创建Plotly K线图
fig = go.Figure()
# 添加K线主图
fig.add_trace(go.Candlestick(
x=df.index,
open=df['Open'],
high=df['High'],
low=df['Low'],
close=df['Close'],
increasing_line_color='red', # 根据中国习惯设置涨跌颜色
decreasing_line_color='green',
name='K线'
))
# 5. 标注锤头形态
if not signals.empty:
fig.add_trace(go.Scatter(
x=df.index[signals],
y=df['Low'][signals] * 0.995, # 在最低价下方显示标记
mode='markers',
marker=dict(
symbol='triangle-up',
size=15,
color='gold',
line=dict(width=2, color='black')
),
name='锤头形态',
hoverinfo='text',
hovertext=[f"日期:{date.strftime('%Y-%m-%d')}<br>最低价:{low:.2f}"
for date, low in zip(df.index[signals], df['Low'][signals])]
))
# 6. 添加技术指标增强分析(可选)
df['MA20'] = talib.MA(df['Close'], timeperiod=20) # 20日均线
fig.add_trace(go.Scatter(
x=df.index,
y=df['MA20'],
line=dict(color='blue', width=1.5),
name='20日均线'
))
# 7. 专业级图表布局配置[7](@ref)
fig.update_layout(
title='期货K线图 - 锤头形态识别',
xaxis_title='日期',
yaxis_title='价格',
xaxis_rangeslider_visible=False, # 隐藏底部滑动条
template='plotly_dark',
height=700,
hovermode='x unified',
legend=dict(orientation='h', yanchor='bottom', y=1.02, xanchor='right', x=1),
annotations=[dict(
x=0.5, y=-0.12,
xref='paper', yref='paper',
showarrow=False,
text='数据来源:期货行情数据 | 技术指标:TA-Lib CDLHAMMER'
)]
)
# 添加专业网格和样式
fig.update_xaxes(
gridcolor='rgba(100, 100, 100, 0.2)',
rangeslider_thickness=0.03
)
fig.update_yaxes(
gridcolor='rgba(100, 100, 100, 0.2)'
)
# 8. 显示图表
fig.show()
# 9. 输出信号明细(可选)
if not signals.empty:
print("\n锤头形态出现日期:")
print(df.index[signals].strftime("%Y-%m-%d").values)
我增加了自己的数据和修改了表格列名的代码,其余都是ai写的。
图像:
后记
锤头线“上影线短、下影线长”是明确的底部买入信号,适用于捕捉超跌反弹;
倒锤头线需分情况:高位为卖出信号,低位为试探性买入信号。
投资者需结合市场环境、成交量及趋势综合决策,避免单一形态依赖。
- 0
- 0
-
赞助
支付宝
微信
-
分享