原创不易,转载请标明出处及原作者。
文中示例仅用于技术讨论,不构成任何操作建议。
量化策略开发应以学习和技术交流为目的。
本号不荐股、不卖课、不承诺收益。
市场有风险,请合法合规投资。
本文约 3800 字 | 预计阅读 8-12 分钟,建议先收藏。
· · ·
几周前读到一篇文章,一群人用数学模型在预测市场(Polymarket)里,一年赚了 4000 万美元。整数规划、Bregman 投影、Frank-Wolfe 优化算法,一整套框架。这类文章看完通常我就翻过去了,但这次没有。
预测市场套利,一套完整的数学框架
让我停下来的不是预测市场本身,我不玩那些。是文章里一个思路:他们面对的市场可能有 2 的 63 次方个结果,不可能全算一遍。所以赢家的做法是逐个构建"已验证有效点"的小集合,用已有认知来决定下一个该看哪里。不遍历,而是让搜索变聪明。
这和我手上一个问题一模一样。
问题在哪
我维护一个策略实验室。回测、滚动窗口调参,样本外稳了就上线。参数优化我一直用的是网格搜索,穷举范围内所有组合,谁夏普最高就选谁。
能用,但一直有点慢。更关键的是,我从没认真想过它找到的到底是不是全局最优,还是仅仅在我检查过的组合里排第一。
挑了手头最简单的策略做实验:AAPL 双均线金叉死叉,快慢线两个参数。打算用网格搜索和预测市场那篇论文的 Frank-Wolfe 思路对打一轮。这个思路落到我的场景就是贝叶斯优化,,先搭一个"好区域大概在哪"的代理模型,只在值得看的地方花评估预算,不撒胡椒面。
基准线:丐版的网格搜索
在搞花活之前,我需要一个真实的对比基准。网格搜索快线周期从 5 天到 59 天,慢线周期从 20 天到 199 天,9,080 组参数全部跑完:
import pandas as pd import numpy as np import yfinance as yf import vectorbt as vbt import itertools import time symbol = "AAPL" df = yf.download(symbol, start="2015-01-01", end="2024-01-01", multi_level_index=False) #