首页 / 知识库

经验知识库

不写教程,只记录结论:一个问题一条,直接给判断和理由。遇到问题先来这里搜一下。

共 16 条

量化投资

4 条

数据口径决定回测结论,先把这几个概念钉死。

前复权与后复权该怎么选?

两者都修正了除权除息造成的价格跳空,区别在于基准点不同。

  • 前复权:以最新价为基准向前调整,历史价格被改写。适合看盘、看形态,价格与当前真实价格一致。
  • 后复权:以上市首日为基准向后调整。历史价格固定不变,适合回测与长期收益计算。
结论:回测用后复权,看图用前复权。同一份序列里绝不能混用两种复权方式。
为什么时间轴必须用交易日历而不是自然日?

自然日里有周末与节假日,市场并不交易。用自然日对齐会出现大量空行,指标窗口(如 MA20)会被无效数据占位,算出来的值全部偏移。

  • 所有窗口类指标按"交易日计数",第 20 个交易日才是 MA20
  • 跨市场或跨品种对齐时,以各市场日历的交集为准
  • 停牌日不应计入窗口,否则长期停牌股会污染因子
常用技术指标的默认参数与口径
  • MA:简单移动平均,常用 5/10/20/60。注意是"收盘价序列"的均值。
  • BOLL:20 日、2 倍标准差;中轨是 MA20,上下轨为中轨 ± 2σ。
  • MACD:EMA12 与 EMA26 之差为 DIF,DIF 的 EMA9 为 DEA,柱体为 2×(DIF−DEA)。
  • KDJ:RSV 取 9 日高低收盘,K/D 为 3 日平滑,J = 3K − 2D。
注意:EMA 的初值处理各平台不同,短序列上差异明显,跨平台比对要先统一初值。
最大回撤与区间收益的正确算法

两者都必须基于逐日净值序列,不能用首尾价格直接算。

  • 区间收益 = 期末净值 / 期初净值 − 1
  • 最大回撤 = max(1 − 当前净值 / 历史最高净值),即每个点相对此前峰值的跌幅最大值
  • 换仓造成的现金流需按时间加权(TWR),否则收益被资金进出污染

后端工程

4 条

个人项目也能有工程化,关键在几处容易翻车的地方。

FastAPI 同时托管静态站点与 API 的挂载顺序

挂载点按注册顺序匹配,一旦命中就不再往下找。

  • API 路由先注册,再注册静态挂载
  • 子路径(如 /quant)的挂载要早于根路径 /
  • 根路径挂载会吞掉所有未匹配的 URL,放在最后才不会误伤
排查:接口莫名返回 HTML 或 404,先检查是不是被根挂载截走了。
SQLite 用在个人项目里要注意什么?
  • 开启 WAL 模式(journal_mode=WAL),读写并发明显改善
  • 写入用单连接、串行化,避免 database is locked
  • 按业务主键建唯一索引,用 INSERT OR IGNORE 实现幂等写入
  • 定期 VACUUM,长期删改后文件不会自动收缩
外部 API 限速与重试的通用套路
  • 客户端令牌桶把速率压到配额的 50%–70%,留出重试余量
  • 只重试超时、连接错误、5xx;业务错误(权限、参数)立即失败
  • 指数退避叠加随机抖动,防止多任务同时重试形成尖峰
  • 失败计数入库,达到阈值直接熔断并降级到缓存数据
个人应用选 JWT 还是 Session?

区别在于"状态存在哪"和"怎么失效"。

  • JWT 无状态、跨服务方便,但签发后无法立即吊销,只能靠短过期时间
  • Session 存在服务端,能随时踢人下线,但需要存储与共享
  • 单机个人项目:Session 更简单可靠;多端登录、无状态扩展:JWT
实践:短期 access token + 服务端 refresh token,兼顾无状态与可吊销。

前端工程

4 条

静态资源与缓存的博弈,是这个站最花心思的部分。

静态资源缓存指纹该怎么设计?
  • 给每个资源 URL 加版本参数(style.css?v=25),内容变更就升版本
  • 带指纹的资源设长缓存(一年 + immutable),不带指纹的设 no-cache
  • HTML 本身永远 no-cache,它是"版本开关",缓存住就再也换不了
顺序:先保证 HTML 不被缓存,指纹机制才有意义。
Service Worker 的三种缓存策略怎么选?
  • 缓存优先:最快,但内容更新要等新 SW 激活。适合图标、字体等不变资源。
  • 网络优先:始终取最新,断网回退缓存。适合应用外壳与页面。
  • Stale-While-Revalidate:先给缓存、后台更新。适合可容忍短暂过期的数据。
坑:skipWaiting() 配合客户端状态会导致新旧代码混跑,最好让用户主动刷新。
ECharts 多图联动的实现要点
  • 单个实例内多 grid:用 axisPointer.link 同步十字光标
  • 多个实例之间:通过 group + connect 联动
  • 容器尺寸变化后必须调用 resize(),CSS 变化不会自动生效
  • 面板增删时重算各 grid 的 top/height,比隐藏显示更稳
PWA manifest 的关键字段
  • start_url 与 scope 必须匹配,子路径部署要带前缀
  • display: standalone 才会去掉浏览器地址栏
  • 图标至少 192 与 512 两档,提供 maskable 可避免被系统裁切
  • 需要 HTTPS 或 localhost,否则"添加到主屏幕"不会出现

运维部署

4 条

把服务放到公网上,真正麻烦的从来不是代码。

systemd 常驻服务的最小配置

比 nohup 可靠的地方在于:崩溃自动重启、开机自启、日志统一进 journald。

  • ExecStart 用绝对路径的虚拟环境解释器
  • Restart=always + RestartSec=3
  • WorkingDirectory 必须设置,否则相对路径全部失效
  • 用独立系统用户运行,不要用 root
调试:journalctl -u 服务名 -n 50 --no-pager 看最近日志。
Caddy 反向代理与自动 HTTPS
  • 站点地址写域名,Caddy 自动申请并续期 Let's Encrypt 证书
  • reverse_proxy 127.0.0.1:8000 一行即可,WebSocket 默认透明支持
  • 80 端口自动跳转 443,无需手写重定向
  • 证书申请要求域名已解析到本机且 80/443 可被外部访问
云服务器防火墙有两层
  • 第一层:云厂商控制台的防火墙/安全组规则
  • 第二层:服务器系统内的 ufw / firewalld
  • 端口不通时两层都要查,只开一层等于没开
  • 临时排查可用 ss -lntp 确认服务确实在监听
域名 ICP 备案的流程与常见退回原因
  • 流程:填资料 → 云厂商初审(会电话核实)→ 工信部短信核验 → 管局审核
  • 网站名称不得含金融、投资、证券、交易所等经营性词汇
  • 个人备案服务内容与网站实际内容要一致,审核会看页面
  • 未备案期间域名访问可能被网关重置,用 IP 直连兜底
经验:"服务器本机 200、外部被重置"基本可判定为未备案被阻断。