本文主要是利用python的talib包和tushare获取数据进行因子构造,并基于Apriori算法对股票因子进行筛选。
数据来源:Tushare大数据社区Tushare为金融数据分析提供便捷、快速的接口,与投研和量化策略无缝对接https://tushare.pro/register?reg=403436不知道如何编写代码的也可以直接进入数据工具接口生成即可Tushare数据工具,非常方便。
以贵州茅台为例。
首先导入要使用的包:
import math
import tushare as ts
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import talib
利用tushare获取数据,学生可以免费领取一年的积分使用权限,调取数据非常方便。
使用两个接口获取我们需要的基本数据,开盘价,收盘价,市盈率等等
matplotlib.rcParams['axes.unicode_minus']=False
plt.rcParams['font.sans-serif']=['SimHei']
ts.set_token('af3...')
#这里是token码 获取地址 https://tushare.pro/register?reg=403436(需注册)
pro = ts.pro_api()
df1=pro.daily( ts_code='600519.SH', start_date='20200101', end_date='20210827',fields='trade_date,open,high,low,close,change,vol,amount')
df2=pro.daily_basic(ts_code='600519.SH', start_date='20200101', end_date='20210827',fields='turnover_rate,pe,pb,ps,dv_ratio')
df = df1.join(df2)
df=df.sort_index()
df.index=pd.to_datetime(df.trade_date,format='%Y-%m-%d')#设置日期索引
close = df['close']
接下来详细演示如何构造我们常用的一些因子
#MA 常用移动平均线
df['MA1'] =talib.MA(np.array(df.close), timeperiod=5)
df['MA2'] =talib.MA(np.array(df.close), timeperiod=10)
df['MA3'] =talib.MA(np.array(df.close), timeperiod=20)
#MACD 异同移动平均线
df['MACD'],df['MACDsignal'],df['MACDhist'] = talib.MACD(np.array(close),
fastperiod=6, slowperiod=12, signalperiod=9)
#OBV 能量潮指标
df['obv'] = talib.OBV(np.array(df.close), np.array(df.vol))
#BOLL 布林带
df['upper'], df['BOLL'], df['lower'] = talib.BBANDS(
df.close,
timeperiod=20,
# number of non-biased standard deviations from the mean
nbdevup=2,
nbdevdn=2,
# Moving average type: simple moving average here
matype=0)
#RSI 相对强弱指标
df["rsi1"] = talib.RSI(df.close, timeperiod=6)
df["rsi2"] = talib.RSI(df.close, timeperiod=12)
df["rsi3"] = talib.RSI(df.close, timeperiod=24)
#WR 威廉指标,感觉6日和10日用的较多
df['WR1'] = talib.WILLR(df.high, df.low, df.close, timeperiod=6)
df['WR2'] = talib.WILLR(df.high, df.low, df.close, timeperiod=10)
#KDJ KDJ指标
df['kdj-k'],df['kdj-d'] = talib.STOCH(df.high, df.low, df.close)
df['kdj-j'] = df['kdj-k'] * 3 - df['kdj-d'] * 2
#BIAS 乖离率
df['bias_6'] = (df['close'] - df['close'].rolling(6, min_periods=1).mean())/ df['close'].rolling(6, min_periods=1).mean()*100
df['bias_12'] = (df['close'] - df['close'].rolling(12, min_periods=1).mean())/ df['close'].rolling(12, min_periods=1).mean()*100
df['bias_24'] = (df['close'] - df['close'].rolling(24, min_periods=1).mean())/ df['close'].rolling(24, min_periods=1).mean()*100
df['bias_6'] = round(df['bias_6'], 2)
df['bias_12'] = round(df['bias_12'], 2)
df['bias_24'] = round(df['bias_24'], 2)
#ROC 变动率指标
df['ROC']=talib.ROC(df['close'], timeperiod=10)
将指标放在一起,可以得到如下图表
?将大于均值的设为1,小于均值的设为0,便于我们发现因子与收盘价之间的关系。
使用Apriori算法进行分析,这里使用的是Clementine软件进行分析。
导入Clementine软件,点击Apriori算法即可。
?自行确定规则即可,这里取支持度大于50%,置信度大于80%的指标,即可选出关联较强的因子。
|