炒股或者做量化,最痛苦的事情之一莫过于每天收盘后,要在交易软件里一张张翻看 K 线图去寻找形态好、有爆发潜力的标的。

今天我们用 Python 配合专业的量化接口 QuantDash,写一个**“多头排列 + 均线金叉”**的自动选股脚本。每天收盘后只需一键运行,它就会自动扫描我们关心的多市场股票池,筛选出均线形态良好的潜力股,并生成一个干净的表格。

我们要筛选的股票,需要同时满足以下两个形态特征:

  1. 均线多头排列:MA5 > MA10 > MA20 > MA60。这代表短中长期资金趋势一致向上,是最经典的安全持仓形态。

  2. MA5/MA10 金叉临界:5日均线上穿或贴近10日均线,代表短期内有再次放量启动的迹象。

我们需要安装 pandas、numpy,以及轻量、无限制的多市场行情接口 quantdash-python-sdk[1]。

pip install pandas numpy quantdash

话不多说,直接上可以跑通的完整代码。在运行前,请先确保获取了 QuantDash 的 API Key(可以去 quantdash.net 免费获取)[2]。

import pandas as pd
import numpy as np
from quantdash import QuantDash
from tqdm import tqdm

# 1. 初始化 QuantDash 客户端
# 自动读取环境变量 QUANTDASH_API_KEY,也可以直接传参
qd = QuantDash(api_key="你的_QUANTDASH_API_KEY")

# 2. 定义我们要监控的自选股池(支持跨 A股、港股、美股,统一命名后缀)
STOCK_POOL = [
    "600519.SH", "002594.SZ", "000858.SZ", "601318.SH", # A股
    "00700.HK", "03690.HK", "09988.HK",                  # 港股
    "AAPL.US", "TSLA.US", "NVDA.US", "MSFT.US"            # 美股
]

def scan_bullish_stocks():
    selected_list = []
    
    print(f"正在扫描股票池,共计 {len(STOCK_POOL)} 只标的...")
    
    for symbol in tqdm(STOCK_POOL):
        try:
            # 3. 使用 QuantDash 一键获取历史前复权 K 线 (前复权避免除权导致的指标失真)
            df = qd.stock.get_kline(
                symbol=symbol,
                start_date="2025-12-01",  # 取半年左右的数据
                end_date="2026-07-15",
                adjust="forward"           # forward 代表前复权
            )
            
            if df is empty or len(df) < 60:
                continue
                
            # 按照日期升序排序
            df = df.sort_values(by="trade_date").reset_index(drop=True)
            
            # 4. 计算均线指标
            df["MA5"] = df["close"].rolling(5).mean()
            df["MA10"] = df["close"].rolling(10).mean()
            df["MA20"] = df["close"].rolling(20).mean()
            df["MA60"] = df["close"].rolling(60).mean()
            
            # 取最新一天的价格与均线值
            last_row = df.iloc[-1]
            prev_row = df.iloc[-2]
            
            # 5. 形态逻辑判断
            # 均线多头排列
            is_bullish = last_row["MA5"] > last_row["MA10"] > last_row["MA20"] > last_row["MA60"]
            
            # MA5 向上穿过 MA10,或者今天 MA5 与 MA10 差值非常贴近 (金叉共振)
            is_golden_cross = (prev_row["MA5"] <= prev_row["MA10"]) and (last_row["MA5"] > last_row["MA10"])
            near_cross = abs(last_row["MA5"] - last_row["MA10"]) / last_row["close"] < 0.005 # 差值在0.5%以内
            
            if is_bullish and (is_golden_cross or near_cross):
                selected_list.append({
                    "标的代码": symbol,
                    "最新收盘价": round(last_row["close"], 2),
                    "MA5": round(last_row["MA5"], 2),
                    "MA10": round(last_row["MA10"], 2),
                    "形态备注": "MA5/MA10金叉" if is_golden_cross else "均线多头贴合"
                })
                
        except Exception as e:
            print(f"获取 {symbol} 数据失败: {e}")
            
    # 6. 整理输出
    if selected_list:
        result_df = pd.DataFrame(selected_list)
        print("\n🎉 今日扫描完成,筛选出符合形态的潜力股如下:")
        print(result_df.to_string(index=False))
    else:
        print("\n😴 今日扫描完成,股票池中暂无符合形态的标的。")

if __name__ == "__main__":
    scan_bullish_stocks()

做多市场资产配置的小白最头疼的两点是:

  1. 标的代码规范不统一:在别的地方,贵州茅台叫 600519.SH,腾讯控股叫 00700,特斯拉叫 TSLA。拼表或者循环时极易错乱。QuantDash 统一了国际通用的 {代码}.{交易所后缀} 标准(如 00700.HK、TSLA.US),一个循环全搞定[3]。

  2. 前复权必不可少:如果不做复权,分红除权时 K 线会断崖式下跌,均线指标全部失真[3]。在 QuantDash 里,你只需要传一个 adjust="forward",服务端就会自动返回校准好的前复权数据[3]。

有了这个脚本,你可以把全市场的绩优股都丢进 STOCK_POOL,每天收盘后跑一次,省下的人肉看盘时间,可以多看几本经典的量化交易书!

相关链接 :

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐