A股日线看不出方向?用 Python 多周期 K 线做共振选股,趋势一目了然

发布时间:2026/7/18 21:49:50
A股日线看不出方向?用 Python 多周期 K 线做共振选股,趋势一目了然
A股日线看不出方向用 Python 多周期 K 线做共振选股趋势一目了然只看日线选股有一个致命问题你不知道自己在做什么级别的交易。日线金叉了你买进去结果周线还在往下走——日线级别的反弹被周线级别的下跌吞掉了。反过来也有日线死叉了你吓得卖了结果月线趋势完好跌下去两天就拉回来。专业做趋势的人会同时看多个周期。当日线、周线、月线同时指向同一个方向——这叫多周期共振——趋势的可靠性会大幅提高。AlphaFeed 的 K 线接口支持period1d/1w/1M三种周期可以用同一个接口拉日线、周线、月线数据。这篇文章用这三个周期做一套完整的共振选股系统。1. 什么是多周期共振简单说大周期定方向小周期找时机。周期看什么对应交易级别月线长期趋势方向中长线持仓数月周线中期趋势强度波段持仓数周日线短期买卖时机短线持仓数天最理想的买入时机月线多头 周线多头 日线刚刚翻多。2. 单只票的三周期分析先拿一只票演示看看三个周期怎么配合fromalphafeedimportAlphaFeedimportpandasaspd afAlphaFeed()symbol600519.SH# 用同一个接口拉三个周期的数据df_dailyaf.klines.get(symbol,period1d,count250,adjustforward,to_dataframeTrue)df_weeklyaf.klines.get(symbol,period1w,count100,adjustforward,to_dataframeTrue)df_monthlyaf.klines.get(symbol,period1M,count36,adjustforward,to_dataframeTrue)defanalyze_trend(df:pd.DataFrame,label:str)-dict:分析单个周期的趋势状态dfdf.sort_values(trade_date).reset_index(dropTrue)pricedf[close].iloc[-1]ma5df[close].rolling(5).mean().iloc[-1]ma10df[close].rolling(10).mean().iloc[-1]ma20df[close].rolling(min(20,len(df))).mean().iloc[-1]# 趋势打分score0details[]ifpricema5:score1details.append(f站上 MA5({ma5:.2f}))ifpricema10:score1details.append(f站上 MA10({ma10:.2f}))ifpricema20:score1details.append(f站上 MA20({ma20:.2f}))ifma5ma10ma20:score2details.append(均线多头排列)elifma5ma10ma20:score-2details.append(均线空头排列)return{周期:label,现价:price,得分:score,状态:多头ifscore3else空头ifscore-1else震荡,细节: | .join(details),}daily_trendanalyze_trend(df_daily,日线)weekly_trendanalyze_trend(df_weekly,周线)monthly_trendanalyze_trend(df_monthly,月线)print(f{symbol}多周期分析 \n)fortin[monthly_trend,weekly_trend,daily_trend]:print(f{t[周期]}:{t[状态]}得分{t[得分]})print(f{t[细节]})print()# 共振判断states[monthly_trend[状态],weekly_trend[状态],daily_trend[状态]]ifall(s多头forsinstates):print( 三周期共振多头 —— 趋势非常强)elifall(s空头forsinstates):print( 三周期共振空头 —— 趋势非常弱)elifmonthly_trend[状态]多头andweekly_trend[状态]多头:print( 大周期偏多日线待确认 —— 可以观察)else:print(⚪ 各周期方向不一致 —— 暂时观望)3. 批量多周期共振选股对一批股票同时做三周期分析筛选出三线共振的标的fromalphafeedimportAlphaFeedimportpandasaspd afAlphaFeed()# 股票池可以扩展到几百只stock_pool[600519.SH,000001.SZ,300750.SZ,002594.SZ,601318.SH,000858.SZ,600036.SH,000333.SZ,601012.SH,600276.SH,600900.SH,601398.SH,600030.SH,000651.SZ,002415.SZ,600887.SH,601166.SH,000568.SZ,600809.SH,002304.SZ,601888.SH,600809.SH,300059.SZ,002475.SZ,000725.SZ,601899.SH,600031.SH,002714.SZ,600585.SH,000002.SZ,]# 批量拉三个周期的 K 线print(拉取日线...)daily_dataaf.klines.batch(stock_pool,period1d,count60,adjustforward,to_dataframeTrue,show_progressTrue,)print(拉取周线...)weekly_dataaf.klines.batch(stock_pool,period1w,count30,adjustforward,to_dataframeTrue,show_progressTrue,)print(拉取月线...)monthly_dataaf.klines.batch(stock_pool,period1M,count12,adjustforward,to_dataframeTrue,show_progressTrue,)print(f\n数据拉取完成:{len(stock_pool)}只票 × 3 个周期\n)三个 batch 调用自动并发30 只票 × 3 个周期 90 次请求但实际只需要几秒。4. 定义趋势判断函数defget_trend_score(df:pd.DataFrame)-int: 趋势打分: -5 到 5 正数 多头负数 空头0 附近 震荡 ifdfisNoneorlen(df)10:return0dfdf.sort_values(trade_date).reset_index(dropTrue)pricedf[close].iloc[-1]ma5df[close].rolling(5).mean().iloc[-1]ma10df[close].rolling(10).mean().iloc[-1]ma20df[close].rolling(min(20,len(df))).mean().iloc[-1]score0ifpricema5:score1else:score-1ifpricema10:score1else:score-1ifpricema20:score1else:score-1ifma5ma10:score1else:score-1ifma10ma20:score1else:score-1returnscoredefclassify_trend(score:int)-str:ifscore3:return多头elifscore-3:return空头else:return震荡5. 筛选共振标的results[]forsyminstock_pool:d_scoreget_trend_score(daily_data.get(sym))w_scoreget_trend_score(weekly_data.get(sym))m_scoreget_trend_score(monthly_data.get(sym))d_trendclassify_trend(d_score)w_trendclassify_trend(w_score)m_trendclassify_trend(m_score)# 综合得分 月线权重最大total_scorem_score*3w_score*2d_score*1results.append({代码:sym,月线:m_trend,周线:w_trend,日线:d_trend,月得分:m_score,周得分:w_score,日得分:d_score,综合分:total_score,})rdfpd.DataFrame(results).sort_values(综合分,ascendingFalse)# 三周期共振多头resonance_bullrdf[(rdf[月线]多头)(rdf[周线]多头)(rdf[日线]多头)]# 月线周线多头日线待确认潜在买入时机potential_buyrdf[(rdf[月线]多头)(rdf[周线]多头)(rdf[日线]!多头)]# 三周期共振空头resonance_bearrdf[(rdf[月线]空头)(rdf[周线]空头)(rdf[日线]空头)]print(f 多周期共振选股结果 \n)print(f 三周期共振多头:{len(resonance_bull)}只)iflen(resonance_bull)0:print(resonance_bull[[代码,月线,周线,日线,综合分]].to_string(indexFalse))print(f\n 大周期多头 日线待确认:{len(potential_buy)}只)iflen(potential_buy)0:print(potential_buy[[代码,月线,周线,日线,综合分]].to_string(indexFalse))print(f\n 三周期共振空头:{len(resonance_bear)}只)iflen(resonance_bear)0:print(resonance_bear[[代码,月线,周线,日线,综合分]].to_string(indexFalse))print(f\n完整排名:)print(rdf[[代码,月线,周线,日线,综合分]].to_string(indexFalse))6. 加入动量确认光看均线位置还不够加入动量指标让筛选更精确defget_momentum(df:pd.DataFrame,period:int20)-float:计算近 N 根 K 线的动量涨幅ifdfisNoneorlen(df)period:return0dfdf.sort_values(trade_date).reset_index(dropTrue)returndf[close].iloc[-1]/df[close].iloc[-period]-1# 给共振多头的票加上动量排序iflen(resonance_bull)0:momentum_data[]for_,rowinresonance_bull.iterrows():symrow[代码]mom_dget_momentum(daily_data.get(sym),20)# 日线 20 日动量mom_wget_momentum(weekly_data.get(sym),8)# 周线 8 周动量momentum_data.append({代码:sym,20日动量:f{mom_d:.1%},8周动量:f{mom_w:.1%},综合分:row[综合分],})mom_dfpd.DataFrame(momentum_data)print(f\n 共振多头标的动量排序:)print(mom_df.to_string(indexFalse))7. 一个更实际的选股流程把多周期共振嵌入日常选股工作流# resonance_scan.py多周期共振选股扫描fromalphafeedimportAlphaFeedimportpandasaspd afAlphaFeed()defresonance_scan(symbols:list)-pd.DataFrame:对一组标的做多周期共振扫描dailyaf.klines.batch(symbols,period1d,count60,adjustforward,to_dataframeTrue,)weeklyaf.klines.batch(symbols,period1w,count30,adjustforward,to_dataframeTrue,)monthlyaf.klines.batch(symbols,period1M,count12,adjustforward,to_dataframeTrue,)results[]forsyminsymbols:dsget_trend_score(daily.get(sym))wsget_trend_score(weekly.get(sym))msget_trend_score(monthly.get(sym))dtclassify_trend(ds)wtclassify_trend(ws)mtclassify_trend(ms)resonance共振多头ifdtwtmt多头else\共振空头ifdtwtmt空头else\大周期多头ifmt多头andwt多头else\方向不一致results.append({代码:sym,月线:mt,周线:wt,日线:dt,共振:resonance,综合分:ms*3ws*2ds,})returnpd.DataFrame(results).sort_values(综合分,ascendingFalse)# 使用my_stocks[600519.SH,000001.SZ,300750.SZ,002594.SZ,601318.SH,000858.SZ,600036.SH,000333.SZ]resultresonance_scan(my_stocks)print(result.to_string(indexFalse))8. 为什么这个方法有效多周期共振不是万能的但它解决了一个很实际的问题降低逆势交易的概率。场景只看日线三周期共振日线金叉买入周线还在跌会买 ❌不买 ✅日线死叉卖出月线趋势完好会卖 ❌不卖 ✅三个周期都翻多可能买也可能没注意明确信号 ✅月线空头反弹可能当反转 ❌大周期空头不参与 ✅本质上它帮你过滤掉了大量日线看着不错但大周期不配合的假信号。9. AlphaFeed 在这件事里的价值多周期分析需要同时拉日线、周线、月线三套数据。用 AlphaFeed 做这件事很顺畅# 同一个接口只改 period 参数df_daf.klines.get(sym,period1d,count60,adjustforward,to_dataframeTrue)df_waf.klines.get(sym,period1w,count30,adjustforward,to_dataframeTrue)df_maf.klines.get(sym,period1M,count12,adjustforward,to_dataframeTrue)不需要自己从日线合成周线月线很多数据源只提供日线周线月线要自己算——日期对齐、跨周处理、节假日坑很多。AlphaFeed 直接给你计算好的周线和月线 K 线开高低收都是准的。再加上 batch 批量接口30 只票 × 3 个周期 90 次请求SDK 内部并发处理几秒钟全部拉完。AlphaFeed 官网https://alphafeed.org/Python SDK 快速开始https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart