如何用DeepSeek写一个跨市场ETF动量轮动策略

用户头像mx_****zqklr
2026-07-26 发布

全球资产配置是降低单一市场风险、获取 Beta 收益的经典手段。本篇我们将使用 DeepSeek 配合 QuantDash 的跨市场数据提取能力,快速构建一个“A股沪深300 ETF + 美股标普500 ETF”的双通道动量轮动策略。

1. 策略逻辑设计

  • 备选标的:沪深300 ETF(510300.SH)与标普500(SPY)。

  • 调仓周期:每周五收盘前,计算过去 20 个交易日的动量(区间涨幅)。

  • 交易规则

    • 比较两者的动量,选择动量更高且为正值的资产满仓买入;
    • 若两者动量皆为负,则选择空仓避险(或买入国债 ETF)。

2. 数据准备与多市场拉取

跨市场策略最头疼的是数据对齐和时区处理。QuantDash 在底层完成了标准化清洗,让我们可以直接批量拉取跨市场历史 K 线。

import pandas as pd
from quantdash import QuantDash

# 1. 初始化(若未设置环境变量,请在此传入您的 API Key)
# 您也可以在终端 export QUANTDASH_API_KEY="your_key" 之后直接 qd = QuantDash()
qd = QuantDash(api_key="your_api_key_here")

# 2. 备选标的(美股标的请严格添加 .US 后缀)
symbols = ["510300.SH", "SPY.US"]

# 存储结果的字典,用来模拟 batch 接口返回的结构
dfs = {}

# 3. 使用通用的 klines.get() 接口循环获取数据,完全避开 batch 权限限制
for symbol in symbols:
    print(f"正在拉取 {symbol} 历史日K数据...")
    try:
        # 使用通用的单只股票获取接口,所有账户均可免费调用
        df = qd.klines.get(
            symbol=symbol, 
            period="1d", 
            count=60, 
            adjust="forward", 
            to_dataframe=True
        )
        if df is not None and not df.empty:
            dfs[symbol] = df
        else:
            print(f"[-] 警告:未能获取到 {symbol} 的数据")
    except Exception as e:
        print(f"[-] 获取 {symbol} 数据时发生异常: {e}")

# 4. 计算 20 日动量
for symbol in symbols:
    df = dfs.get(symbol)
  
    if df is None or df.empty:
        print(f"[-] 标的: {symbol} 无可用数据,跳过计算。")
        continue
    
    # 确保数据按交易日期升序排序
    df = df.sort_values("trade_date")
  
    # 获取当前收盘价与 20 个交易日前的收盘价
    close_now = df['close'].iloc[-1]
    close_20d_ago = df['close'].iloc[-20]
  
    # 计算动量
    momentum = (close_now - close_20d_ago) / close_20d_ago
    print(f"标的: {symbol} | 当前价: {close_now:.2f} | 20日动量: {momentum:.2%}")

数据输出:

正在拉取 510300.SH 历史日K数据...
正在拉取 SPY.US 历史日K数据...
标的: 510300.SH | 当前价: 4.70 | 20日动量: -5.20%
标的: SPY.US | 当前价: 738.93 | 20日动量: 1.36%

3. 经验总结

跨市场轮动策略的关键在于数据格式的无缝兼容**。通过** qd.klines.batch 批量返回以 symbol 为 key 的字典,不仅避免了多次网络请求的开销,还能通过标准的 Pandas trade_date 轻松实现异构市场的对齐。这让原本复杂的跨国配置策略,简化到了不足 30 行代码。

4. 常见问题解答 (FAQ)

  • Q: A股和美股交易时间不同,如何做回测对齐?

    • A: 通常在日频轮动策略中,我们以“交易日”为轴。QuantDash 规整后的 DataFrame 会保留各自市场的 trade_date,您可以使用 Pandas 的 merge concat 按日期进行外连接或内连接,轻松实现多市场时序对齐。
  • Q: 想要尝试这个跨市场策略,如何获取数据权限?

评论