今天同事跟我说,假如回到两年前,他一定会买西城的那套学区房,当时还不到 800 万,现在直接要价 2000 万—— 2000 万什么概念?将近一个亿啊。作为一个自封的资深股民,我怼了一句,要是回到两年前,我买几支股票绝对不这收益高!我同事回怼:就算给你开这个挂,你现在知道两年前该买哪几支吗?
尴尬的一幕啊,我哪知道回到两年前买哪几支。
于是假装在 QA 镭矿平台,实则偷偷写了个选股的小策略。这个策略实现起来非常简单,当然前提是你在镭矿写这个策略。
策略的思路是这样,计算所有股票从过去 500 个交易日到现在的涨幅,按涨幅大小排序并取前 10 支股票。这样其实是假设选择了一些股票并长期持有。
public class Housing extends BackTestTradingStrategy {
// 计算指定周期内收益;现指定周期为 500
PERIODFLUCTUATEFactor periodfluctuateFactor = new PERIODFLUCTUATEFactor(500);
@Override
public void init(BackTestContext context) throws Exception {
// 添加除指数外的所有股票代码
context.universe.addAll().removeIndexes();
}
@Override
public void handleData(BackTestContext context, BarData data) throws Exception {
for (String stock:context.universe) {
SelectedStock selectedStock = new SelectedStock(stock, periodfluctuateFactor.get(stock));
selector.add(selectedStock);
}
// 选出周期内收益最高的前 10 支股票
List<SelectedStock> topList = selector.captureTop(10);
log.info(topList);
}
}
这个策略是不是非常简单?而且通过简单的调整参数更可以订制属于你自己的选股 /排行策略!
选看一下上面策略的到底选中了哪些股票:
暴发户果然深市多啊,沪市前 10 才挤进 1 支。 800%的收益, 800 万进去 6400 万出来,难道还不抵一套学区房吗?(你买或不买学区房就在那里;但高收益的股票,你可能猜不到是哪支)
看到上面的名单,多少老股民被勾起了一段光(不)辉(堪)的回忆?
又朋多少新手跃跃欲试,找算找准一支上面的股票,然后接下来什么也不用干,坐等两年翻 N 倍?
难道我是单纯的来忽悠大家去炒股或写策略的吗?非也。接下来我将向大家展示一下在股市上几千支股票近两年来的收益分布,大家可自行判断自己在这么一个市场,有没有搏一把的必要。
上面的图是我从镭矿策略上 log 下来各股票的收益 stock_profits ,然后导入到 matlab 中绘制的。上图中,横坐标是各支股票的收益;纵坐标是相应收益的股票的出现概率。可以看出,横坐标为 0 的 Bar 最高,说明有相当一部分股票近两年内股票变动不大;总体来看 0Bar 右侧的概率较大,也就是说大部分股票是在升值的——部分股票甚至达到了 800%以上。
那么,问题又来了,假设我所有股票都买,且持仓金额保持均衡,是会赚还是赔?很简单, avg=mean(stock_profits);
结果是 36.9635%,年化收益为 pow(1.369635, 1/2)-1= 17%
是不是很诱人?准备马上这么干?
百分之十七,而且不需要选择股票——我为什么要天天看行情,我为什么要天天想策略!
数据不会骗人,但如果你不懂得数据背后的现实,你就被骗了。可以明确的讲,你实际这样操作的话,是达不到 17%的收益的。因为,这个数据背后的现实是:这中间统计到的很多新股,是一入市就涨停,你根本买不进去的;当然,还有一些其它原因,大家可以试着找一下。
那么,如果考虑到股票的可交易性,实际结果会是如何呢?可以到镭矿写策略验证啊!并不是人人都能写出收益可观的策略,但是人人都可以通过偿试写策略来搞清现实和规律。
现在我知道了假如时光倒流,我可以买下哪几支股票就可啥也不用干坐等收益了。我对我同事说,“假如时光倒流——”,在在关键的时刻,老板路过来了一句:“即使时光可以倒流,也不意味着历史可以重演。”