ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

【量化投资从入门到精通 #03】一个策略好不好,看哪几个数?收益回撤夏普在说什么

【量化投资从入门到精通 #03】一个策略好不好,看哪几个数?收益回撤夏普在说什么 本系列进度#01 ✅量化是什么 · 把感觉变规则 · #02 ⏳第一个量化策略双均线 · #03 ✅本篇 · 给策略做体检 · #04 ⏳别被回测骗了 · #14 工具箱附录系列定位站在讲解量化投资的角度把具体实操方法讲清楚代码与数据只作为演示这个方法的工具。一、这个方法解决什么投资问题上一篇你把活跃股写成了一条规则、并用真实行情跑了出来。下一步自然要问这条规则或者说任何策略到底行不行这里最容易踩的坑是只看一个数字——“赚了多少”。但赚 20%可能是靠满仓押一只、途中回撤 40% 熬回来的也可能是稳稳涨上来的。只看收益等于只看体检报告里的体重。判断一个策略好不好得给它做一套体检赚了多少、最疼的一次亏多少、波动大不大、每冒一份险换回几份收益、赢的频率高不高。这五个角度合起来才看得清一个策略的真面目。本篇就用麦蕊的真实历史 K 线把这套体检亲手算一遍。二、核心思想五个指标回答五个不同的问题指标它在回答什么投资问题直觉累计收益率这段时间里到底净赚了多少体重最大回撤最惨的一次从山顶摔到谷底亏了多少最痛的一刀年化波动率上下乱跳的幅度有多大抖不抖夏普比率每多冒一份险多赚了几份钱值不值性价比胜率涨的日子占多少频率关键认知这五个指标是互补的不是互相替代。收益高但回撤也狠不代表好夏普高但胜率低也可能是偶尔大赚、经常小亏。看策略要像看人一样——多维度不能一票否决也不能一美遮百丑。三、实操演示用麦蕊历史 K 线做体检我们取平安银行(000001) 近 120 个自然日的日 K 线不复权手写这五个指标。注意这里不调任何神器库全部手算——因为只有手算过你才真正懂每个数字怎么来的。importsys,datetime,math sys.path.insert(0,Demo/_common)frommairui_helperimportload_licencefrommairuiimportClientdefget_close_series(mc,code,days120):enddatetime.date.today().strftime(%Y%m%d)start(datetime.date.today()-datetime.timedelta(daysdays)).strftime(%Y%m%d)rowsmc.stock_history(code,d,n,ststart,etend)# dividendn 不复权clean[rforrinrowsifr.get(c)isnotNoneandr.get(t)]clean.sort(keylambdar:r[t])returncleandefmax_drawdown(close):peak,mddclose[0],0.0forpinclose:ifppeak:peakp dd(p-peak)/peakifddmdd:mddddreturnmdddefdaily_returns(close):return[(close[i]-close[i-1])/close[i-1]foriinrange(1,len(close))]defstats(close):retsdaily_returns(close);nlen(rets)cum(close[-1]-close[0])/close[0]mddmax_drawdown(close)meansum(rets)/n stdmath.sqrt(sum((r-mean)**2forrinrets)/n)ann_volstd*math.sqrt(252)sharpe(mean*252)/(std*math.sqrt(252))ifstd0else0.0winsum(1forrinretsifr0)/nreturncum,mdd,ann_vol,sharpe,win mcClient(load_licence())rowsget_close_series(mc,000001,days120)cum,mdd,ann_vol,sharpe,winstats([r[c]forrinrows])print(f累计收益率{cum*100:.2f}% 最大回撤{mdd*100:.2f}%)print(f年化波动率{ann_vol*100:.2f}% 夏普{sharpe:.2f}胜率{win*100:.2f}%)证书红线真实麦蕊证书经环境变量MAIRUI_LICENCE注入脚本只调用load_licence()读取、绝不打印原文。四、结果解读每个数字在说什么实跑2026-08-06结果平安银行近 82 个交易日累计收益率 : 0.27 % 年化波动率 : 18.04 % 最大回撤 : -12.76 % 夏普(简化) : 0.14 胜率 : 46.91 % (38/81 个交易日上涨)这组数字在讲一个什么故事累计 0.27%四个月几乎没涨。单看这一个数字你会觉得这票废了。但胜率只有 46.91%涨的日子比跌的少累计却没亏——说明涨的日子平均涨得比跌的日子狠。这就是胜率低 ≠ 亏钱的反直觉例子频率低但幅度占优。最大回撤 -12.76%这四个月里最惨的一段从高点摔到谷底亏了 12.76%。如果你满仓这是你要硬扛的心理底线。年化波动 18.04%日常上下跳得不算凶中等偏稳。夏普 0.14简化版无风险利率取 0偏低——意味着冒这点险换来的额外收益很有限。真实夏普要减掉国债收益会更低。合起来看这是一个不赚不亏、但过程颠簸、性价比一般的标的/策略画像。如果这是你写的某个策略的历史成绩体检报告已经告诉你别被’没亏’骗了它的风险调整后收益其实很薄。一句记忆最大回撤量最痛夏普量值不值胜率量频率累计收益量结果——四个维度拼起来才看懂一个策略。五、常见陷阱复权参数填错stock_history的dividend用n不复权或q前复权填1会直接返回{error:数据不存在}。算收益前先想清楚用哪种口径前后要一致。空行历史接口偶尔返回c为None的行计算前务必过滤否则除零崩溃。夏普别神化简化版没减无风险利率且对用哪段窗口算极度敏感——换个时间段数字能差很远。看到夏普 2.3的宣传先问这段 K 线从哪天到哪天指标互相打架时不硬评收益高 回撤狠是赚得猛还是赌得大要结合夏普一起看别单拎一个漂亮数字下结论。六、小结 下篇预告本篇你带走了给策略做体检的一套基本功五个指标各自回答一个投资问题合起来才客观。下一篇#04 别被回测曲线骗了我们聊一个更扎心的事——为什么你算出来的漂亮成绩可能从头就是假的前视偏差用了未来才知道的信息、幸存者偏差只看了活下来的票、过拟合规则是为了拟合历史而写的。这三条是新手入门量化最先要立的防骗护栏。七、合规收尾本文所有代码与数据仅用于量化方法演示文中涉及的股票代码为示例、不构成任何投资建议亦不构成收益承诺。历史指标不代表未来表现投资有风险决策需谨慎。数据来源麦蕊行情 APIstock_history日 K 线。证书以环境变量MAIRUI_LICENCE安全注入绝不硬编码或外泄。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表