背景: 最近A股这个市场,短线有点难做,稍微不注意就容易大面。 自己的一些策略没之前那么好用。 怎么个说法呢? 好的要么抢不到, 好买到的不注意看就容易大面。 盘中自己就在想,我能不能把主观看到的一些形态差的过滤掉,一些形态好的做推荐提示。虽然人肉看K线没问题,既然是做技术了,那肯定要用一些技术办法了。 这里提供一种思路,那继续用TA-Lib库来识别K线形态识别呗。TA-Lib(Technical Analysis Library)是一个广泛应用于金融市场分析的开源工具库,支持多种技术指标计算和K线形态识别。TA-Lib 提供超过 150 种技术指标(如MACD、RSI)和 60+种K线形态识别函数。 关于技术指标(如MACD、RSI) 我之前的文章讲过一些,这里就不细讲了,感兴趣看之前文章。 这篇文章主要讲K线形态识别。常用K线形态函数
CDLHAMMER
CDLSHOOTINGSTAR
CDLENGULFING
CDLMORNINGSTAR
CDLDOJI
函数返回值为 整数数组,如 100
表示看涨信号,-100
表示看跌信号,0
表示无信号。
那是不是意味着熟悉了这些常用的函数, 对股票用K线图形态就能做一些初步的筛选了。
相关文章推荐:
最后提供一个简单例子, 仅供参考思路。 希望对大家有所启发
import akshare as ak
import streamlit as st
import plotly.graph_objects as go
import talib
import pandas as pd
from datetime import datetime
st.set_page_config(page_title="A股K线形态识别", layout="wide")
st.title("A股K线形态识别")
# 侧边栏参数设置
with st.sidebar:
st.header("⚙️ 参数设置")
symbol = st.text_input("股票代码", "600519")
start_date = st.date_input("开始日期", datetime(2024, 10, 8))
end_date = st.date_input("结束日期", datetime.now())
# 获取A股历史数据(使用stock_zh_a_history接口)
def get_stock_data(symbol, start, end):
"""获取A股前复权数据"""
try:
code = f"{symbol}"
df = ak.stock_zh_a_hist(
symbol=code, period="daily",
start_date=start.strftime("%Y%m%d"),
end_date=end.strftime("%Y%m%d"),
adjust="qfq"
)
df = df.rename(columns={
'日期': 'date', '开盘': 'open', '收盘': 'close',
'最高': 'high', '最低': 'low', '成交量': 'volume'
})
df['date'] = pd.to_datetime(df['date'])
return df.set_index('date').sort_index()
except Exception as e:
st.error(f"数据获取失败:{str(e)}")
return None
data = get_stock_data(symbol,start_date, end_date)
if data is not None:
# 识别锤子线形态
hammer_signals = talib.CDLHAMMER(data['open'], data['high'], data['low'], data['close'])
signals = data[hammer_signals == 100]
# 创建Plotly图表
fig = go.Figure()
# 绘制K线
fig.add_trace(go.Candlestick(
x=data.index,
open=data['open'],
high=data['high'],
low=data['low'],
close=data['close'],
name='K线',
increasing_line_color='red',
decreasing_line_color='green'
))
# 标记锤子线信号
if not signals.empty:
fig.add_trace(go.Scatter(
x=signals.index,
y=signals['low'] * 0.98,
mode='markers',
marker=dict(
color='rgba(0, 150, 0, 0.8)',
size=12,
symbol='triangle-up',
line=dict(width=1, color='DarkSlateGrey')
),
name='锤子线信号'
))
# 图表布局优化
fig.update_layout(
title=f"{symbol}周期K线图 - 锤子线信号",
xaxis=dict(
type='date',
rangeslider=dict(visible=False),
title_text="日期"
),
yaxis=dict(title_text="价格(前复权)"),
hovermode="x unified",
template="plotly_dark",
height=600,
margin=dict(l=50, r=50, b=50, t=100)
)
# 显示图表
st.plotly_chart(fig, use_container_width=True)
# 显示信号明细
st.subheader("📋 信号明细")
if not signals.empty:
st.dataframe(
signals.style.applymap(
lambda x: "background-color: #2c5f2d",
subset=['close']
),
column_order=['open', 'high', 'low', 'close'],
use_container_width=True
)
else:
st.warning("当前参数范围内未检测到锤子线信号")
量化横行的时代,短线生态有点恶劣。对散户来说,也许,中长线趋势价值投机才是正确的姿势。 也许