简单的alpha策略,

  1. 选取某一时间点所有股票的相关信息ps、pb、pe等。
  2. 用三因子回归获取alpha,分别用每只股票计算。
  3. 选取排名靠前的n只股票
  4. 计算组合净值
  5. 计算结果和画图

注:代码运行需安装tushar pro 并获取TOKEN码, 这里获取token码

# coding=utf-8
import math
import tushare as ts
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import talib
import pandas as pd
from datetime import datetime, date
from sklearn import datasets
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegressionmatplotlib.rcParams['axes.unicode_minus']=False
plt.rcParams['font.sans-serif']=['SimHei']
ts.set_token('”输入token码“')
pro = ts.pro_api()############################读取数据类###################################
class readData:def read_index_daily(self,code,star,end):#指数数据dsb = pro.index_daily(ts_code=code, start_date=star, end_date=end,fields='ts_code,trade_date,close,change')#默认读取三个数据return dsbdef read_daily(self,code,star,end):dsc1 = pro.daily(ts_code=code, start_date=star, end_date=end,fields='ts_code,trade_date,close')return dsc1def read_CPI(self,star,end):#时间格式start_cpi='201609'dc=pro.cn_cpi(start_m=star, end_m=end,fields='month,nt_yoy')return dcdef read_GDP(self,star,end):#时间格式star='2016Q4'df1 = pro.cn_gdp(start_q=star, end_q=end,fields='quarter,gdp_yoy')return df1def read_bond(self,code,star,end):df=pro.cb_daily(ts_code=code,start_date=star,end_date=end)def read_base(self,code):df=pro.query('daily_basic', ts_code=code,fields='close,ts_code,pb,total_mv,trade_date')return df
#######################################################################################   start_time='20180226'#发布GDP需要时间,我们延迟1个月,即第一季度的GDP4月份才发布。
end_time="20180521"
dc=readData()
dsc1=readData()
dsb1=readData()
###################计算alpha的值###########################################################
def alpha_fun(code):dsb=dsb1.read_base(code) .fillna(0) dsc=dsc1.read_index_daily('000300.SH',start_time,end_time)dsc.set_index(['trade_date'],inplace=True)dsb.set_index(['trade_date'],inplace=True)df=pd.merge(dsc, dsb, on='trade_date').fillna(0)R=np.reshape(   np.array([df.close_y]) , (-1,1) )R_f=np.reshape(     np.array([  (df.change/(df.close_x.shift(-1))).fillna(0)  ])   , (-1,1)      )#用0 填充nanHMI=np.reshape(    np.array([ (1/df.pb).fillna(0)    ])                              , (-1,1) )SMB=np.reshape(    np.array([ df.total_mv]) , (-1,1) )X=np.concatenate((    R_f-4/252, HMI,SMB   ),axis=1) y1=np.reshape(R,(1,-1)).TX_train, X_test, y_train, y_test = train_test_split(X, y1, test_size=0.3, random_state=0)linear = LinearRegression()linear.fit(X_train, y_train)alpha=linear.intercept_-4/252return alpha,linear.intercept_ ,linear.coef_,linear.score(X_test, y_test),df
############################计算篮子里的每只股票净值###############################################
def jinzhi_fun(code,start_time,end_time):#计算净值df=pro.query('daily', ts_code=str(code), start_date=start_time, end_date=end_time,fields='') df.index=pd.to_datetime(df.trade_date,format="%Y-%m-%d")jinzhi=(df.close/df.close[-1])return jinzhi
######################选股条件####################################################
co=pro.query('daily_basic', ts_code="",trade_date="20180226",fields='ts_code')
code_list=[]
N=30#股票池
k=0
JZ=0#组合净值
cum=0
for i in co.ts_code.values[0:N]:try:if alpha_fun(i)[0]<0:k+=1JZ=jinzhi_fun( str(i) ,start_time,end_time)    +JZJZ=JZ.fillna( method='bfill')#用前后数据特征填充except ValueError:passcontinue
#########################计算权重收益净值#########################################
JZ=JZ.sort_index(axis=0,ascending=True)
JZ_avg=JZ/k#平均净值
cum=np.cumprod(JZ_avg)# 累计收益
####################计算收益率函数,如沪深300#####################################
def JZ_function(code,star,end):df12 = pro.index_daily( ts_code=code, start_date=star, end_date=end)df12=df12.sort_index( )df12.index=pd.to_datetime(df12.trade_date,format='%Y-%m-%d')#设置日期索引ret12=df12.close/df12.close[-1]return ret12.dropna()#############################策略的年化统计######################################
def Tongji(jz):NH=(jz.dropna()[-1]-1)*100*252/len(jz.index)BD=np.std(jz)*100*np.sqrt(252)SR=(NH-400/252)/BDreturn_list=jz.dropna()MHC=((np.maximum.accumulate(return_list) - return_list) / np.maximum.accumulate(return_list)).max()*100print("年化收益率:{:.2f}%:,年化夏普率:{:.2f},波动率为:{:.2f}%,最大回撤:{:.2f}%".format( NH,SR,BD,MHC))
############################################################################if __name__=="__main__":cum12=JZ_function('000300.SH',start_time,end_time)Tongji(JZ_avg)plt.plot(cum12,label="沪深300",color='b')plt.plot(JZ_avg,label="股票组合",color='r')plt.title("alpha股+指期对冲策略")plt.legend()

结果:

年化收益率:44.75%:,夏普率:0.84,波动率为:51.64%,最大回撤:7.77%

1.python量化——alpha股票-指数期货对冲策略
2.多因子选股策略
3.海龟交易策略
4.移动平均策略——单/双均线策略
5.改进的美林时钟(介绍)
6.改进的美林时钟策略(一)
7.改进的美林时钟策略(二)
8.改进的美林时钟策略(三)
这里获取token码

python量化策略——Fama-French三因子模型(回归获取alpha)阿尔法α策略。相关推荐

  1. Python量化交易06——Fama-French三因子模型(Rmt,SMB,HML)

    参考书目:深入浅出Python量化交易实战 本次带来的是著名的获得了诺贝尔奖的三因子模型. 因子模型介绍 Fama和French从可以解释股票收益率的众多因素中提取出了三个重要的影响因子,即市场风险溢 ...

  2. python写因子策略_python量化策略——Fama-French三因子模型(回归获取alpha)阿尔法α策略。...

    简单的alpha策略, 选取某一时间点所有股票的相关信息ps.pb.pe等. 用三因子回归获取alpha,分别用每只股票计算. 选取排名靠前的n只股票 计算组合净值 计算结果和画图 注:代码运行需安装 ...

  3. Python 量化投资实战教程(3) —A股回测MACD策略

    量化投资系列文章: Backtrader 教程 - Python 量化投资实战教程(1) Python 量化投资实战教程(2) -MACD策略(+26.9%) Python 量化投资实战教程(3) - ...

  4. 【量化】通过Fama-French三因子模型选股,收益能达到多少?

    作者:幻好 来源: 恒生LIGHT云社区 Fama-French三因子模型 基本概念 Fama和French 1993年指出可以建立一个三因子模型来解释股票 回报率 .模型认为,一个 投资组合 (包括 ...

  5. 深入浅出Python量化交易实战--第2章 回测与经典策略(下)

    2.3 经典策略之海龟策略 说起经典的交易策略,就不得不提到"海龟策略"--一个20世纪80 年代提出的,以海龟交易法则为核心的交易策略.其核心要点是:在股 价超过过去N个交易日的 ...

  6. python量化回测结果分析53课_#滑动平均策略——python回测结果 (中山大学岭南学院量化投资协会)...

    策略如下: 回测区间为2016年10月10日至2017年10月13日,选择沪深300进行回测. 记录所有当天5日滑动平均价格高于20日滑动平均价格的股票 将总资金额的一半n/2用于买入股票,每一支股票 ...

  7. Python量化数据获取:综合指数介绍及如何获取数据

    通常综合指数指的是一个市场全部股票按照一定的权重进行加权和,并且以某一个交易日为基准计算出来的数值.这个数值反映了整个市场的走向和趋势,能反映系统性的信息.A股市场比较常用的综合性指数就是有名的上证指 ...

  8. python量化:如何利用tushare构造FF三因子模型?

    Python量化:如何利用tushare构造FF三因子模型? FF三因子模型介绍 代码实现 从tushare调取数据 利用数据构建因子 总结 笔者是一枚大二菜狗,最近刚上完学院开的python金融量化 ...

  9. 一文教你看懂Fama-French三因子模型

    Fama-French三因子模型概述 Fama-French三因子模型(Fama-French 3-factor model,简称FF3) Fama和French 1992年对美国股票市场决定不同股票 ...

最新文章

  1. as3 中get和set的用法
  2. 使用git修复线上指定版本的问题
  3. int length c语言,第07天C语言(06):数组练习2
  4. String 对象内存分配策略
  5. 家庭中计算机应用包括,《管理信息系统中计算机应用》沟通考笔试B卷答案
  6. 应用深度学习使用 Tensorflow 对音频进行分类
  7. include包含头文件的语句中,双引号和尖括号的区别
  8. 与时间相关的java源码_Java 调整日期和时间
  9. sata接口 图解 定义_SATA协议简介
  10. 再见,付费录屏软件!我用70行Python代码打造免费版!
  11. libjpeg学习2:内存篇
  12. 老板催你交圣诞海报设计?PSD源文件素材,直接编辑
  13. JQuery文档信息
  14. 此程序被组策略阻止,有关详细信息请联系管理员
  15. opencv中step、step1、size、elemSize以及elemSize1区别
  16. 【SpringCloud】 - Feign 踩坑记录:404 ,调用不成功 , 接口定义规范 等问题记录
  17. 【简介】流程化项目管理咨询师刘俊平介绍
  18. (新SOTA)UNETR++:轻量级的、高效、准确的共享权重的3D医学图像分割
  19. 二叉搜索树BST的学习
  20. idea提示非法字符

热门文章

  1. 神经网络应用现状分析,神经网络应用现状调查
  2. RFID项目中常见问题分析
  3. 【Jquery选择器】
  4. mysql导数据到mongo,mysql数据导入到mongodb
  5. 加强防护,近期勒索病毒有点疯狂!
  6. ORACLE删除归档日志和ORA-00257问题
  7. 常见问题---空指针异常
  8. 【分布式微服务】消息中心初步搭建
  9. 换电脑后如何快速同步原先设备上vscode的插件
  10. ODX介绍(2)[ DiagLayerStructure]