首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Python技术】520实现5日线上穿20日线均线策略

【Python技术】520实现5日线上穿20日线均线策略

作者头像
子晓聊技术
发布2026-04-23 14:19:53
发布2026-04-23 14:19:53
1210
举报
文章被收录于专栏:子晓AI量化子晓AI量化

大家看到这篇文章的时候,已经是521早上了。 在520的晚上,坐在电脑旁思考的时候,我心里在想,今天520应该写篇什么类型的技术文章呢?

520,A股大盘大涨, 晚上大家应该比较忙,可能在产生强烈的 交叉信号, 那么这里就以 5日线上穿20日线均线为例,写一个金叉例子。

先来点股市技术小技巧 , 逗大家笑一笑。

首次约会信号(金叉验证)

当MA5线穿上MA20线,就像男生鼓起勇气表白:"今晚月色真美",此时需满足三大恋爱指标:

  • 20日均线仰角≥45°(证明对方是潜力股)
  • 成交量放大1.5倍(约会诚意度检测)
  • 收盘价站稳MA20(拒绝"海王式"假突破)
二次约会禁忌

若MA5线第三次回踩MA20,堪比"复合三次的前任"——成功率暴跌80%!请默念股民三字经:不!要!贪!

【防绿指南】三招识别"股市海王"

  1. 假金叉陷阱:MA20向下时示好,妥妥的PUA套路
  2. 缩量暧昧:成交量不足5日均量,说明只是随便撩撩
  3. 三振出局:第三次回踩必拉黑,记住:事不过三!

来首打油诗

"你是我生命中的MA5, 穿越20日均线的洪荒, 在520的坐标点, 完成最完美的金叉..."

上面的段子,纯属娱乐。 相信大家都过了一个难忘的520,当天买的股票是贝因美, 而不是红墙股份。 毕竟大家喜欢的都是涨停,而不是跌停。 是不是这个理。

最后附上源代码,需要的自取。 备注:如果发现格式有多余的特殊字符,用普通浏览器打开复制应该没问题。

代码语言:javascript
复制
import akshare as ak
import streamlit as st
import pandas as pd
import plotly.graph_objs as go
# 数据加载与计算
@st.cache_data
def load_data(stock_code):
    df = ak.stock_zh_a_hist(
        symbol=stock_code,
        period="daily",
        start_date="20241008",
        adjust="hfq"
    )
    # 计算双均线
    df['MA5'] = df['收盘'].rolling(5).mean()
    df['MA20'] = df['收盘'].rolling(20).mean()
    # 金叉检测
    df['金叉信号'] = (df['MA5'] > df['MA20']) & (df['MA5'].shift(1) <= df['MA20'].shift(1))
    return df
# 可视化函数
def plot_strategy(df):
    fig = go.Figure()
    # K线主图
    fig.add_trace(go.Candlestick(
        x=df['日期'], open=df['开盘'],
        high=df['最高'], low=df['最低'],
        close=df['收盘'], name='K线',
        increasing_line_color='red',
        decreasing_line_color='green',
    ))
    # 均线叠加
    fig.add_trace(go.Scatter(
        x=df['日期'], y=df['MA5'],
        line=dict(color='#FF1493', width=2),
        name='5日均线'
    ))
    fig.add_trace(go.Scatter(
        x=df['日期'], y=df['MA20'],
        line=dict(color='#4169E1', width=2),
        name='20日均线'
    ))
    # 金叉标记
    crosses = df[df['金叉信号']]
    fig.add_trace(go.Scatter(
        x=crosses['日期'], y=crosses['MA5'],
        mode='markers', marker=dict(color='gold', size=10),
        name='金叉信号'
    ))
    st.plotly_chart(fig, use_container_width=True)
def app():
    code = stock_list[stock_list['name'] == selected_stock]['code'].values[0]
    df = load_data(code)
    with st.container():
        col1, col2 = st.columns([1, 3])
        with col1:
            st.metric("最新MA5", f"{df['MA5'].iloc[-1]:.2f}")
            st.metric("最新MA20", f"{df['MA20'].iloc[-1]:.2f}")
            if df['金叉信号'].iloc[-1]:
                st.success("🌟 发现最新金叉信号!")
        with col2:
            plot_strategy(df)
    # 策略条件验证
    with st.expander("📊 高级策略验证"):
        col3, col4 = st.columns(2)
        with col3:
            st.write("**成交量验证**:")
            vol_ratio = df['成交量'].iloc[-1] / df['成交量'].iloc[-2]
            st.metric("成交量变化", f"{vol_ratio:.1f}倍",
                      delta="达标" if vol_ratio >= 1.5 else "不足")
        with col4:
            st.write("**均线斜率验证**:")
            ma5_slope = (df['MA5'].iloc[-1] - df['MA5'].iloc[-5]) / 5
            st.metric("5日线斜率", f"{ma5_slope:.2f}")
    st.dataframe(df[['日期', '收盘', 'MA5', 'MA20', '金叉信号']].tail(10), height=300)
if __name__ == "__main__":
    # 界面设置
    #st.set_page_config(page_title="金叉选股系统", page_icon="📈")
    st.title("📈 5日/20日均线金叉策略系统")
    # 获取股票列表
    stock_list = ak.stock_info_a_code_name()
    selected_stock = st.selectbox("选择股票", stock_list['name'])
    app()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首次约会信号(金叉验证)
  • 二次约会禁忌
  • 【防绿指南】三招识别"股市海王"
  • 最后附上源代码,需要的自取。 备注:如果发现格式有多余的特殊字符,用普通浏览器打开复制应该没问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档