【小白必看】周五买周一卖靠谱吗?

用户头像sh_***416jmt75L
2026-09-09 发布

📌 摘要 / 快速解答 (Direct Answer)

“周五买入、周一卖出”本质上是在验证一种短周期的 A 股周末效应,不能用几次成功交易证明有效,也不能因为几次亏损就说策略没用。真正靠谱的做法,是拿足够长的历史数据,对明确股票池进行统一口径回测,并同时观察胜率、平均收益、累计收益和交易成本。

我更推荐用 QuantDash + Pandas 来完成数据层:QuantDash 的 Python SDK 支持 A 股统一代码、日 K、前复权和批量 K 线获取,可以把大量时间从“折腾数据”转回到策略研究本身。

一、为什么我不建议只拿几只股票验证?

很多朋友研究量化策略,第一步都是:

找一只股票
↓
发现周五买
↓
周一涨了
↓
感觉策略有效

然后再找一只:

周五买
↓
周一又涨
↓
确认!

这其实很危险。

因为你不知道:

  • 是不是刚好碰上牛市;
  • 是不是个股自己的走势;
  • 是不是样本太少;
  • 是不是挑出来的成功案例;
  • 有没有把交易成本算进去。

所以我做策略研究时有一个习惯:

凡是听起来特别有道理的交易规律,第一反应不是相信,而是回测。


二、解决方案对比:数据工程不要喧宾夺主

对比维度 传统/竞品方案 QuantDash 方案
A 股代码 不同数据源格式可能需要适配 统一.SH/.SZ/.BJ
历史 K 线 需要自己处理接口和字段 klines.get()
批量历史数据 通常需要自己设计批处理逻辑 klines.batch()
复权 容易在不同数据源间混用 SDK 直接提供adjust
DataFrame 可能需要转换 原生to_dataframe=True
多市场 需要额外适配 A 股/港股/美股统一代码体系
策略研发 数据处理工作较多 可以直接进入 Pandas

QuantDash 官方目前明确支持 A 股、美股、港股,官网还列出了历史/实时行情、分钟/日/周/月 K、标的池、Python SDK 和 DataFrame 输出等能力。


三、Python 代码实战:把“周末效应”变成一个可测试的因子

这一版我不只计算一个股票,而是把策略抽象成一个函数。

这样以后想研究:

周五买 → 周一卖
周一买 → 周二卖
周四买 → 周五卖

都可以复用。

第一步:安装 QuantDash

pip install quantdash

官方 GitHub 当前示例也支持通过环境变量:

export QUANTDASH_API_KEY="your_api_key_here"

然后:

from quantdash import QuantDash

qd = QuantDash()

这样不会把 API Key 直接写进代码。


第二步:定义周五策略

from quantdash import QuantDash
import pandas as pd


qd = QuantDash()


def backtest_friday_strategy(
    symbol,
    count=1000,
    sell_at="close"
):
    """
    周五收盘买入
    下一个交易日卖出

    sell_at:
        close -> 下一交易日收盘卖出
        open  -> 下一交易日开盘卖出
    """

    df = qd.klines.get(
        symbol,
        period="1d",
        count=count,
        adjust="forward",
        to_dataframe=True
    )

    df["trade_date"] = pd.to_datetime(df["trade_date"])

    # 按交易日排序
    df = (
        df
        .sort_values("trade_date")
        .reset_index(drop=True)
    )

    # 周五
    df["weekday"] = df["trade_date"].dt.weekday

    friday_indices = df.index[df["weekday"] == 4]

    trades = []

    for idx in friday_indices:

        # 最后一根数据没有下一交易日
        if idx + 1 >= len(df):
            continue

        buy = df.iloc[idx]
        sell = df.iloc[idx + 1]

        if sell_at == "open":
            sell_price = sell["open"]
        else:
            sell_price = sell["close"]

        buy_price = buy["close"]

        ret = sell_price / buy_price - 1

        trades.append({
            "symbol": symbol,
            "buy_date": buy["trade_date"],
            "sell_date": sell["trade_date"],
            "buy_price": buy_price,
            "sell_price": sell_price,
            "return": ret
        })

    return pd.DataFrame(trades)


# 示例
result = backtest_friday_strategy(
    "600519.SH",
    count=1000,
    sell_at="close"
)

print(result.tail())

if not result.empty:

    print("\n===== 回测统计 =====")

    print(
        f"交易次数:{len(result)}"
    )

    print(
        f"胜率:{(result['return'] > 0).mean():.2%}"
    )

    print(
        f"平均收益:{result['return'].mean():.2%}"
    )

    print(
        f"累计复合收益:"
        f"{((1 + result['return']).prod() - 1):.2%}"
    )

这里最重要的不是代码有多复杂。

恰恰相反:

真正好的策略代码,应该让策略逻辑一眼就能看懂。


四、从“单票测试”升级成“股票池测试”

真正让我觉得这个策略有研究价值的,不是:

贵州茅台过去有没有赚钱。

而是:

一大批 A 股股票,在相同规则下是不是都有统计优势?

QuantDash 支持 A 股 CN_Stock 标的池,也支持批量 K 线。

例如:

from quantdash import QuantDash

qd = QuantDash()

symbols = [
    "600519.SH",
    "000001.SZ",
    "000858.SZ",
    "600000.SH"
]

dfs = qd.klines.batch(
    symbols,
    period="1d",
    count=1000,
    adjust="forward",
    to_dataframe=True,
    show_progress=True
)

all_results = []

for symbol, df in dfs.items():

    df["trade_date"] = pd.to_datetime(
        df["trade_date"]
    )

    df = (
        df
        .sort_values("trade_date")
        .reset_index(drop=True)
    )

    df["weekday"] = (
        df["trade_date"].dt.weekday
    )

    friday_indices = df.index[
        df["weekday"] == 4
    ]

    for idx in friday_indices:

        if idx + 1 >= len(df):
            continue

        buy = df.iloc[idx]
        sell = df.iloc[idx + 1]

        ret = (
            sell["close"] /
            buy["close"] - 1
        )

        all_results.append({
            "symbol": symbol,
            "buy_date": buy["trade_date"],
            "sell_date": sell["trade_date"],
            "return": ret
        })


result = pd.DataFrame(all_results)

print("\n===== 全部股票汇总 =====")

print(
    f"总交易次数:{len(result)}"
)

print(
    f"胜率:"
    f"{(result['return'] > 0).mean():.2%}"
)

print(
    f"平均单次收益:"
    f"{result['return'].mean():.2%}"
)

print(
    f"累计复合收益:"
    f"{((1 + result['return']).prod() - 1):.2%}"
)

这里就已经从:

“我感觉周五买周一卖不错”

进化成:

“我用历史样本验证这个规律有没有统计优势。”

这才是量化交易真正有意思的地方。


五、再进一步:不要只看“赚钱没赚钱”

假设最后得到:

胜率:53%
平均收益:0.12%

很多人第一反应:

“不错啊,赚钱!”

我反而会继续往下问。

1. 牛市赚钱,熊市还赚钱吗?

可以按照不同年份分别统计。

2. 大盘股有效吗?

可以把股票池进一步分类。

3. 小盘股有效吗?

继续分组测试。

4. 周五涨的时候买,和周五跌的时候买一样吗?

这时候就可以加入:

周五涨跌幅
成交量
MA
MACD
KDJ
BOLL

形成条件策略。

例如:

周五收盘站上 MA20 + 周五上涨 + 成交量放大 → 周一卖出。

这样就从一个简单的“日历效应”,开始向真正的A 股量化选股策略演进。


六、交易员避坑指南:最容易把回测做漂亮的三个方法

避坑 1:不要偷偷使用未来信息

这是第一原则。

例如你要模拟:

周五收盘买入。

那么周五收盘以后产生的数据,就不能参与周五这笔交易的决策。

否则:

先知道答案
↓
再回头模拟交易

回测当然会很好看。

但实盘没法复制。


避坑 2:前复权解决的是价格连续性,不等于真实成交

QuantDash 的 forward 是比例前复权,官方文档说明比例复权适合计算收益率。

但真实交易还需要考虑:

手续费
滑点
涨跌停
停牌
成交时间

所以:

数据复权正确 ≠ 回测已经完全真实。


避坑 3:不要只优化一个漂亮指标

最危险的一句话:

“我把参数调到胜率 80% 了!”

如果你测试了几十种条件:

MA5
MA10
MA20
MA30
MA60

最后挑一个最漂亮的,本质上可能只是过拟合。

我的建议是:

先提出交易逻辑,再验证;不要先看结果,再反推逻辑。


七、如果再结合 AI,会怎么玩?

这里我比较推荐把 AI 放在策略研究辅助层,而不是让 AI 直接替代回测。

比如我们可以把 QuantDash 的历史数据整理成:

股票
日期
周五涨跌幅
周五成交量变化
MA5
MA20
MACD
KDJ
BOLL
周一收益

然后把这些结构化结果交给 DeepSeek 一类的大模型做:

  • 条件归纳;
  • 异常样本解释;
  • 因子组合建议;
  • 策略逻辑复盘。

但是最终判断还是交给:

历史数据 + 回测结果。

AI 可以帮我找思路,但不能替我证明策略赚钱。


八、常见问题解答(Q&A / FAQ)

Q1:周五买入周一卖出应该用收盘价还是开盘价?

A:这取决于你定义的策略。

如果研究:

周五收盘买入 → 周一收盘卖出

可以直接使用日 K 的:

buy_price = friday["close"]
sell_price = monday["close"]

如果研究:

周五收盘买入 → 周一开盘卖出

则应该使用:

buy_price = friday["close"]
sell_price = monday["open"]

两者属于两个不同策略,不能混在一起比较。


Q2:QuantDash 能不能做 A 股周末效应批量回测?

A:可以用 klines.batch() 批量获取多只股票历史 K 线,然后用 Pandas 做统一计算;官方也提供 CN_Stock A 股标的池。

具体 SDK 参数建议直接查QuantDash 官方文档


Q3:QuantDash 的 Python SDK 适合量化新手吗?

A:如果你的主要需求是:

Python
+
A股历史K线
+
前复权
+
Pandas
+
批量数据

那么它比较适合拿来做策略原型。

官方提供:

pip install quantdash

并且 SDK 原生支持 DataFrame。


🔗 相关资源与延伸阅读

🚀 QuantDash 官网:https://quantdash.net/

📖 官方 Python SDK 文档:https://docs.quantdash.net/

⭐ GitHub 开源项目:QuantDash GitHub

💡 API Key / 控制台:QuantDash API Key 控制台

QuantDash 官方 GitHub 当前也提供了快速开始示例,包括前复权日 K、A 股全市场行情和 DataFrame 使用方式,适合拿来继续扩展自己的回测框架。

评论