惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
D
DataBreaches.Net
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
小众软件
小众软件
美团技术团队
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
D
Docker
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
H
Hackread – Cybersecurity News, Data Breaches, AI and More
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
S
SegmentFault 最新的问题
云风的 BLOG
云风的 BLOG
B
Blog
雷峰网
雷峰网
The Cloudflare Blog

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
[续] 把整条量化研究流程又重做了一遍
matters · 2026-04-30 · via V2EX

前阵子发了个小频率动量策略,当时回测看着还行,但实盘一跑就开始露问题。

最近刚好在看《打开量化投资的黑箱》第九章,且根据 v 友建议,顺手把自己那一套研究流程从头捋了一遍,相当于是给之前那个策略“补课”。

1. 策略起点

之前做动量,基于一个很直觉的想法:

👉 涨得多的继续涨

当时没太多犹豫,直接写代码+回测。

现在回头看,更像是一个“没被明确表达的假设”。

现在会刻意把这一步写清楚一点:

  • 是基于经济逻辑?
  • 还是纯数据挖出来的?

简单给自己加了一条约束:

if 没有清晰逻辑:
    回测再好也不直接用

2. 数据

之前策略有个问题其实一直没认真处理数据。

现在回头看,这一块基本决定了上限。

( 1 )幸存者偏差

用当前成分股回测历史,这个坑就不展开了。

( 2 )时间对齐

之前直接拼不同频率数据,本质就是未来函数。

现在我给自己加了个很简单的检查:

👉 每一份数据都问一句:当时能不能拿到

顺手也把数据源换成了直接拉 API ,至少链路是“接近实盘”的:

import requests
import pandas as pd

API_KEY = "YOUR_ALLTICK_API_KEY"

def get_price_data(symbol="AAPL"):
    url = "https://api.alltick.co/marketdata/stock/history"
    params = {
        "symbol": symbol,
        "start_date": "2020-01-01",
        "end_date": "2023-01-01",
        "interval": "1d",
        "apikey": API_KEY
    }
    res = requests.get(url, params=params)
    data = res.json()["data"]
    df = pd.DataFrame(data)
    df["date"] = pd.to_datetime(df["date"])
    return df

df = get_price_data()

# 基础清洗
df = df.sort_values("date")
df["close"] = df["close"].fillna(method="ffill")
df = df[df["volume"] > 0]

这块其实没什么技术含量,但好处是:

👉 回测用的数据结构,跟以后实盘用的是同一套来源

3. 回测:开始老老实实加“现实约束”

之前那版动量策略的问题是:

👉 默认理想成交

现在基本都会强制加:

  • 成本
  • 简单滑点
  • 信号延迟

举个最简单的均线例子:

df['ma20'] = df['close'].rolling(20).mean()

df['signal'] = (df['close'] > df['ma20']).astype(int)

df['returns'] = df['close'].pct_change()
df['strategy'] = df['signal'].shift(1) * df['returns']

cost = 0.0005
df['strategy_net'] = df['strategy'] - cost * df['signal'].diff().abs()

一旦把成本加进去,很多策略当场变脸。

现在对回测的理解更偏向:

👉 这是一个“历史条件下的生存测试”

4. 参数优化:开始刻意“反着来”

之前是找最优参数,现在是故意破坏它:

for p in [17, 20, 23]:
    跑一下

不稳的策略,一动就崩。

再加一个基本操作:

train = df[df['date'] < '2021-01-01']
test = df[df['date'] >= '2021-01-01']

test 基本只看一次。

慢慢变成一个很简单的判断:

  • 能扛参数扰动的 → 再看
  • 需要精调的 → 基本放弃

这一轮下来,有个挺明显的变化:

👉 不太会被“完美回测”骗了

以前是:

  • 曲线好看 = 可以上

现在更像是:

if 解释不了 + 不抗扰动:
    默认不可用

有点反直觉的是:

能用的策略变少了, 但心里反而更踏实一点。