refraction-ray / xalpha

基金投资管理回测引擎
MIT License
2.05k stars 438 forks source link

关于以回测一系列主动基虚拟交易为例的beta alpha sharpe max_drawdown函数 #29

Open wyjbird opened 4 years ago

wyjbird commented 4 years ago

1.以下是示例代码,其中beta alpha sharpe max_drawdown函数在上面的例子中,直接用sys对象调用的话,均会报错,为什么呢? sysfix.beta(), sysfix.alpha(), sysfix.sharpe() (0.508105417009912, 0.040867579213678853, 0.279802542882795) sysfix.total_annualized_returns(), sysfix.algorithm_volatility() (0.0684, 0.11160584774628288) sysfix.max_drawdown()

最大回撤8%发生在今年,竟然不是18年,是不是说明马后炮组合的优势再减弱?

(Timestamp('2020-02-25 00:00:00'), Timestamp('2020-03-23 00:00:00'), -0.08257630349535526)

wyjbird commented 4 years ago

另外如何理解“封闭现金流系统,做成有14000初始基金的封闭组合”?我的理解是14000下的组合最优解?

refraction-ray commented 4 years ago

是这样的,当讨论 beta,alpha 或者最大回撤这些概念时,我们需要一个每日净值数据,也就是至少整个系统得有净值的概念。那么这样一个系统就是封闭系统。封闭系统的意思是,初始资金固定 (totmoney),之后不再投入资金了,只在系统内不同仓位间轮换(比如货币基金和股票)。这个具体例子里 totmoney=14000,是因为我们选了14个基金,每个1000元,这样恰好相当于初始现金全买了基金了。当然可以选择更大的 totmoney,那么就会有一部分钱一直在货币基金里。这样系统的每日净值,实际上就是每日现有资产总值和初始资金的比例。这就是 mulfix。这种系统的净值同时反应了投资者的择时和择标的能力。

而 mul 对应的系统,是“开放的”,也就是可以随时进钱,随时出钱。比如对于工薪族每月定投这种,用开放系统就比较合适。因为并不是刚开始就有36个月的钱在货币基金里,然后每月向基金移仓的。这样的系统当然也可以定义净值,但这种净值会很奇怪,只能反应投资者的择标的能力,而反应不了其择时能力(但很多时候择时能力贡献了利润的大部分)。因此我没有给 mul 净值的属性,所以这种 “开放” 系统是进行不了那些基于净值曲线的指标分析的。但是依旧可以计算内部收益率 mul.xirrrate()。一个资金反复进出的开放系统,究竟投资效果如何,主要靠 xirrrate 定量刻画。

作为一个理解 mul 和 mulfix 本质区别的例子,考虑某个基金,年初净值1.0,你投入了1000元,年中涨到 2.0, 你又投入了1000元,年末跌回 1.0. 请问这样一个系统看成开放系统和封闭系统,其净值是怎么变化的,从中你会理解到我为什么说开放系统的净值记录是失真的和没有意义的。(答案:若考虑成封闭系统,年末净值为0.75,如考虑成开放系统,年末净值为 1.0)

flyisland commented 3 years ago

有点不大理解,市面上的开放式基金就是你说的”开放系统“(随时进钱,随时出钱),难道他们的最大回撤数据是没有意义的?

refraction-ray commented 3 years ago

有点不大理解,市面上的开放式基金就是你说的”开放系统“(随时进钱,随时出钱),难道他们的最大回撤数据是没有意义的?

开放式基金本身是封闭式系统(有净值),其净值衡量的是基金经理的投资水平,看成开放系统则是同时衡量了基金经理和投资者的水平