社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【Python技术】利用TA-Lib库进行K线形态识别筛选股票

子晓聊技术 • 1 周前 • 24 次点击  

背景: 最近A股这个市场,短线有点难做,稍微不注意就容易大面。 自己的一些策略没之前那么好用。 怎么个说法呢?  好的要么抢不到, 好买到的不注意看就容易大面。 盘中自己就在想,我能不能把主观看到的一些形态差的过滤掉,一些形态好的做推荐提示。虽然人肉看K线没问题,既然是做技术了,那肯定要用一些技术办法了。 
这里提供一种思路,那继续用TA-Lib库来识别K线形态识别呗。
先介绍下TA-Lib.
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线图形态就能做一些初步的筛选了。  


相关文章推荐:

利用akshare、pandas、ta库实现常用技术分析方法识别市场趋势
【python技术】用TA-Lib、plotly构建股票技术指标分析系统
【开源项目】发现一开源项目,小白也能轻松玩转股票量化交易

最后提供一个简单例子, 仅供参考思路。 希望对大家有所启发

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("当前参数范围内未检测到锤子线信号")



量化横行的时代,短线生态有点恶劣。对散户来说,也许,中长线趋势价值投机才是正确的姿势。 也许

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/180216
 
24 次点击