
市场上的投资者是有偏好的, 有时候会偏好价值股, 有时候偏好成长股, 有时候偏好大盘股, 有时候偏好小盘股。由于投资者的这种不同的交易行为,形成了市场风格, 因此在投资中,利用市场风格的变化,进行轮动投资会比一直持有的效果好很多。
小编是个很粗犷的人,所以经常被老板骂不精细,这次也是选了个很粗犷的策略:
1 )当上证指数 20 日均线在 30 日均线上方时,买入流通盘绝对数值最小的股票前五名
2 )反之,则买入国家持股绝对数值比较大的前五名 我说的绝对数值,是相对于比值计算来说的啊,因为这里用比值也不太好,各种因素太多,做人,有时候简单点更犀利。
代码如下,加空白行不到 30 行,里面我定的是每月 10 号调仓,你懂得, 10 号前老板给我发工资。
def init(context): context.bench_mark="sha-600498" schedule_function(change_stocks,DateRule.month(10),TimeRule.once_per_day() ) ma20=SMAFactor(20,"close") reg_factor("ma20",ma20) ma30=SMAFactor(30,"close") reg_factor("ma30",ma30) def change_stocks(context,data): for pos in context.portfolio.positions.keys(): order_target(pos,0) out20=factor_output("ma20","shz-000001")["ma20"] out30=factor_output("ma30","shz-000001")["ma30"] if out20>out30: chase_little(context,data) else: for pos in context.portfolio.positions.keys(): order_target(pos,0) follow_country(context,data) def chase_little(context,data): df = get_fundamentals("share_limit_sale").sort(['share_limit_sale'],ascending=False).head(5) for stock in df.get("share_limit_sale").keys(): order_percent(stock,18) def follow_country(context,data): df = get_fundamentals("share_limit_sale_country").sort(['share_limit_sale_country'],ascending=False).head(5) for stock in df.get("share_limit_sale_country").keys(): order_percent(stock,18) 我们看看回测结果,还是蛮犀利的,胜过大盘很多很多。
我相信看到这里你也会有更多想法:
1 )更多轮动思路,不一定纠结与国家持股
2 )更多精细的控制,包括加入止损止盈等等
3 )更复杂的仓位控制
如果你真的是程序员,进入镭矿 raquant量化平台亲自试试吧。