请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3364736 新帖:0

给初次接触量化的人写的教程:统计沪深300涨跌幅得到的右侧择时策略

TRADE12发表于:5 月 10 日 07:29回复(1)

为了忽悠更多的人加入量化的队伍,我写了这篇初初初级教程,以下是回测和实现思路:

量化初接触:统计沪深300涨跌幅得到的右侧择时策略¶

经济寒冬,互联网、金融这些曾经高薪的行业大裁员,而有部分量化交易高手却在权证领域收获颇丰,想必大家有所耳闻。相信未来这个战场会更加繁荣,然而初入门者还是需要一步步来。

一:思路¶

本文针对的是量化初学者,大神可绕道。曾看到过一些量化高手说,实现策略不是难点,思路才是关键。对于量化小白来说,涉足过手动交易,有些自己的想法,但是无法深入下去,更不用说最终转换成策略了。在此我分享一个比较基本总价价量因子的思路,就是先用统计来检验价量因子出现的几率,成功率高再继续进行买卖策略的编制和回测,有点像以前老股民使用的通达信或同花顺的选股公式,当然pyhon更灵活,还可以进行图表的绘制,是用公式单纯计算一个成功率的方法不可比拟的。

选择沪深300,是因为指数成分股是指数公司认真挑选的优质企业,是当期最优质的企业,其权重也往往和市值挂钩。

二:统计¶

直观的观察指数曲线,大起大落的时候少,那么我们直接统计出每天涨跌幅的分布情况,时间是15年1月1日到17年1月1日,覆盖了上一次疯牛从启动到消退的时间。

from jqdata import *
from datetime import *
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.ticker as ticker
sns.set_style('darkgrid')

hs300=get_price('399300.XSHE'
            ,start_date='2015-01-01'
            ,end_date='2017-01-01'
            ,frequency='daily'
            ,fields=['close']
            ,skip_paused=True
            ,fq='pre')
cs=hs300['close']
changes=[round(cs[i]/cs[i-1]-1,3) for i in range(1,len(cs))]

plt.figure(figsize=(16,8))
ax = plt.hist(changes,500)

可以看出,正负百分之一点五以内的情况占了大多数。根据这个统计,我们继续统计两天、三天甚至五天的涨跌幅情况,过程就不在这里贴出来,大家只要改动参数就可以了。有了大致的统计,我们可以进一步在走势上绘制出一些有参考意义的涨跌幅的分布,比如连涨几天后的表现,比如大跌后几天的表现等,这里就不展开,这次分享的事我个人找到的规律:3日上涨日均上涨超0.5%且每日涨幅差异较小多数时候证明了上升趋势的延续,2日连续下跌超过2%在下跌趋势中更为常见。看图一目了然:

#先绘制走势
sns.set_style('white')
pic= cs.plot(figsize=(16,8))

#用绿色标出连续两天下跌2%的时间段
timespans=[]
i=0
days=2
while i < len(hs300)-1-days:
    if cs[i+days]/cs[i]<=0.98:
        timespans.append(hs300.index[i])
        i+=days
    else:
        i+=1
for span in timespans:
    pic.axvspan(span, span+timedelta(days=days), facecolor='green', edgecolor='none', alpha=.5)

#用红色标出3日上涨涨超1.5%但单天涨幅不超过1%的时间段
timespans=[]
i=0
days=3
while i < len(hs300)-1-days:
    if cs[i+days]/cs[i]>=1.015 and max([cs[i:i+days+1][j+1]/cs[i:i+days+1][j] for j in range(0,days-1)])<=1.01:
        timespans.append(hs300.index[i])
    i+=1
for span in timespans:
    pic.axvspan(span, span+timedelta(days=days), facecolor='pink', edgecolor='none', alpha=.75)

三:策略和回测¶

接下来就可以编制策略了,初步以比较粗暴的方式编写是:检测沪深300指数5日上涨超0.5%且最大单日涨幅小于1%,全仓买入沪深300指数成分股中沪市深市市值前五,检测到2日下跌超2%,全仓卖出。十年回测的结果还不错,注意笔者用于统计的区间只有15到17两年,对15年以前的行情没有什么效果,但对17和18却十分有效,说明A股的波动是越来越大,有兴趣的朋友也可以统计更多年份的涨跌幅,这里就不赘述了。希望本文能抛砖引玉,启发更多量化小白的思维。

全部回复

0/140

量化课程

    移动端课程