Py学习  »  Python

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

子晓聊技术 • 3 月前 • 174 次点击  

大家看到这篇文章的时候,已经是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,当天买的股票是贝因美, 而不是红墙股份。  毕竟大家喜欢的都是涨停,而不是跌停。 是不是这个理。

相关文章推荐:
【Python技术】编织爱的代码——520遇上小满,用Python送出一束玫瑰

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


import akshare as akimport streamlit as stimport pandas as pdimport plotly.graph_objs as go# 数据加载与计算@st.cache_datadef 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([13])        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()



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