刺猬教你量化投资(十二):量化投资入门

什么是量化投资

  • 量化投资的本质是利用大数据寻找规律,进而构建出有效的交易策略。

  • 规律有很多,但我们需要寻找到的规律应具有一些特点,譬如可靠和稳定、长期存在、有理论支撑、符合人性、简单直接等。

  • 在不成熟的市场更有效。A股现在是量化投资的好时代,未来的难度会加大。

量化投资的分类

  • 择时策略,例如基于技术指标来确定买卖点。

  • 基本面选股策略

  • 仓位管理策略

  • 套利策略、算法交易策略等

处理的数据

  • 交易数据,例如开盘价、收盘价、成交量、涨跌幅、最高价、最低价等。

  • 宏观经济数据,例如GDP、失业率、利率、CPI等。

  • 基本面数据、例如财务数据、企业新闻稿、股东变化等。

  • 高频数据(分为主笔数据和分笔数据,前者是每一笔成交的信息,后者是3~5秒的汇总交易数据)。

  • 舆情数据、事件数据等。

一言以蔽之,有什么数据,做什么策略。

一个例子:行业轮动策略

刺猬教你量化投资(十二):量化投资入门_第1张图片
把握行业轮动的节奏
策略思路

寻找行业间的股价波动关系,用一阶滞后的数据来寻找相关关系。

策略应用

这个月某行业的股票涨幅好,下个月某某行业的涨幅也会好,那么就可以提前介入某某行业。

策略代码
#导入模块
import numpy as np
import pandas as pd
import itertools
from datetime import datetime
#from deteutil.parser import parse
from scipy import stats as ss
import matplotlib.pyplot as plt
import seaborn as sn
sn.set_style('white')
#自定义获取行业行情的函数
def get_sw_ind_quotation():
    index_symbol = DataAPI.IndustryGet(industryVersion=u"SW",industryVersionCD=u"",industryLevel=u"1",isNew=u"1",field=u"",pandas="1")['indexSymbol'].tolist()
    index_symbol = [str(item)+'.ZICN' for item in index_symbol]
    symbol_history_list = []
    for symbol in index_symbol:
        df_daily_ind_symbol = DataAPI.MktIdxdGet(indexID=u"",ticker=symbol[:6],beginDate=u"20150807",endDate=u"20180807",field=u"ticker,tradeDate,closeIndex",pandas="1")
        symbol_history_list.append(df_daily_ind_symbol)
    df_daily_ind_symbol = pd.concat(symbol_history_list,axis=0)
    df_daily_ind_unstack = df_daily_ind_symbol.set_index(['tradeDate','ticker']).unstack()['closeIndex']
    return df_daily_ind_unstack
df_daily_ind_unstack = get_sw_ind_quotation()
df_daily_ind_unstack = df_daily_ind_unstack.iloc[1:]
df_daily_ind_unstack['tradeDate'] = df_daily_ind_unstack.index
#自定义行业月度行情的函数
def getMonthlyIndex(df_index):
    df_index['tradeDate'] = df_index['tradeDate'].map(lambda x: datetime.strptime(x, "%Y-%m-%d") )
    df_index['year_month'] = df_index['tradeDate'].map(lambda x: (x.year,x.month))
    return df_index.groupby(['year_month']).head(1)
df_monthly_ind_unstack = getMonthlyIndex(df_daily_ind_unstack[:])
df_monthly_ind_unstack.sort_values(['tradeDate'])
del df_monthly_ind_unstack['tradeDate']
del df_monthly_ind_unstack['year_month']
df_monthly_ind_return = df_monthly_ind_unstack.pct_change(axis=0)
df_monthly_ind_return = df_monthly_ind_return.dropna(how='all')
df_monthly_ind_return_rank = df_monthly_ind_return.rank(axis=1)
index_symbol = DataAPI.IndustryGet(industryVersion=u"SW",industryVersionCD=u"",industryLevel=u"1",isNew=u"1",field=u"",pandas="1")['indexSymbol'].tolist()
#自定义计算相关系数的函数
def get_corr(ind1,ind2,df_ind):
    x = df_ind[ind1].iloc[0:-1].values
    y = df_ind[ind2].iloc[1:].values
    return np.corrcoef(x,y)[0][1]
#计算下相关系数
predict_corr = {}
for item in itertools.product(index_symbol,repeat=2):
    predict_corr[item] = get_corr(item[0],item[1],df_monthly_ind_return_rank)
predict_corr = pd.Series(predict_corr)
filter_corr = predict_corr[(predict_corr>0.45) |(predict_corr<-0.45)  ]
result = filter_corr.sort_values(ascending=0)
result = pd.DataFrame(result)
result.columns =['相关系数']
result=result.reset_index()
result.columns =['领先行业','滞后行业','相关系数']
result
#行业代码替换成行业名称
index_symbol  = DataAPI.IndustryGet(industryVersion=u"SW",industryVersionCD=u"",industryLevel=u"1",isNew=u"1",field=u"",pandas="1")
a=0
result['领先行业']  = result['领先行业'].map(lambda x: index_symbol[index_symbol.indexSymbol == x]['industryName'].values)
result['滞后行业']  = result['滞后行业'].map(lambda x: index_symbol[index_symbol.indexSymbol == x]['industryName'].values)  
result
运行结果
刺猬教你量化投资(十二):量化投资入门_第2张图片
行业轮动策略运行结果

刺猬偷腥
2018年8月26日
P.S 在github建了个博客,欢迎来访:价值为锚

你可能感兴趣的:(刺猬教你量化投资(十二):量化投资入门)