量化交易的单因子分析——聚宽平台

  • 序言
    • 检测方法
    • 代码

序言

对于公司基本面的单因子分析

检测方法

按照基本面的某一指标,按照大小排序,分成十个组别

代码

'''-------api调用聚宽-----'''
# 导入函数库
from jqdata import *
import datetime
import numpy as np
import pandas as pd#模型选择
from sklearn.model_selection import train_test_split,cross_val_score#数据处理
from sklearn.preprocessing import StandardScaler
# from sklearn.preprocessing import KBinsDiscretizer
#填充缺失值
# from sklearn.impute import SimpleImputer#特征选择
from sklearn.feature_selection import SelectKBest,chi2,f_regression,SelectPercentile,RFE,SelectFromModel
from scipy.stats import pearsonr# 模型
from sklearn.svm import SVR
from sklearn.linear_model import LinearRegression,Ridge,Lasso,RandomizedLasso,LogisticRegression
from sklearn.cluster import KMeans
from sklearn.ensemble import RandomForestRegressor,RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier#调参
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import learning_curve#模型评估
from sklearn.metrics import silhouette_score,silhouette_samples,r2_score,roc_auc_score# 初始化函数,设定基准等等
def initialize(context):# 设定沪深300作为基准g.security = list(get_all_securities(types=["stock"]).index)set_benchmark('000300.XSHG')# 开启动态复权模式(真实价格)set_option('use_real_price', True)# 输出内容到日志 log.info()# 过滤掉order系列API产生的比error级别低的log# log.set_level('order', 'error')### 股票相关设定 #### 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')#设置滑点set_slippage(PriceRelatedSlippage(0.002))# 开盘前运行run_daily(before_market_open, time='before_open', reference_security='000300.XSHG')# 开盘时运行run_daily(market_open, time='open', reference_security='000300.XSHG')# 收盘后运行run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')#检测因子g.factor=valuation.market_cap#分类数g.class_num=10g.day=0#时间窗口g.rate=22g.stock_class_list={}g.stock_class_close={}g.stock_class_return={}#收益率for i in range(g.class_num):g.stock_class_return["class%d"%(i)]=1#超额收益率g.stock_class_excess_return={}for i in range(g.class_num):g.stock_class_excess_return["class%d"%(i)]=1#窗口胜率g.stock_class_win_return={}for i in range(g.class_num):g.stock_class_win_return["class%d"%(i)]=0g.benchmark_start=Noneg.benchmark_open=None
## 开盘前运行函数
def before_market_open(context):# 输出运行时间# log.info('函数运行时间(before_market_open):'+str(context.current_dt.time()))log.info('##############################################################')## 开盘时运行函数
def market_open(context):if not g.benchmark_start:g.benchmark_start=get_price('000300.XSHG', start_date=context.current_dt, end_date=context.current_dt, frequency='daily', fields="close", skip_paused=False, fq='pre').ix[0,"close"]if g.day%g.rate==0:#step1:计算不同种类的当前时间窗口下的平均收益率if g.stock_class_list:benchmark_new=get_price('000300.XSHG', start_date=context.current_dt, end_date=context.current_dt, frequency='daily', fields="close", skip_paused=False, fq='pre').ix[0,"close"]for i in range(g.class_num):new_stock_class_close=get_price(g.stock_class_list["class%d"%(i)], start_date=context.current_dt, end_date=context.current_dt, frequency='daily', fields="close", skip_paused=False, fq='pre')["close"].T.ix[:,0].valuesdf=pd.DataFrame({"L":g.stock_class_close["class%d"%(i)],"N":new_stock_class_close})df["R"]=(df["N"]-df["L"])/df["L"]g.stock_class_return["class%d"%(i)]=g.stock_class_return["class%d"%(i)]*(1+df["R"].sum()/len(df["R"]))g.stock_class_excess_return["class%d"%(i)]=g.stock_class_return["class%d"%(i)]-((benchmark_new-g.benchmark_start)/g.benchmark_start)g.stock_class_win_return["class%d"%(i)]=df["R"].sum()/len(df["R"])-((benchmark_new-g.benchmark_open)/g.benchmark_open)#step2:画出每个组别的收益率曲线record(class0=g.stock_class_win_return["class0"])# record(class1=g.stock_class_win_return["class1"])# record(class2=g.stock_class_win_return["class2"])# record(class3=g.stock_class_win_return["class3"])# record(class4=g.stock_class_win_return["class4"])# record(class5=g.stock_class_win_return["class5"])# record(class6=g.stock_class_win_return["class6"])# record(class7=g.stock_class_win_return["class7"])# record(class8=g.stock_class_win_return["class8"])record(class9=g.stock_class_win_return["class9"])#step3:将股票分类并且保存每个类别下个时间窗口起始收盘价数据setclose(context,g.factor,g.class_num,sort="desc",moveNeg=True,moveNan=True)# Momentum_factor(context,g.class_num,countNum=66,ascending_bol=False)g.benchmark_open=get_price('000300.XSHG', start_date=context.current_dt, end_date=context.current_dt, frequency='daily', fields="close", skip_paused=False, fq='pre').ix[0,"close"]g.day+=1
## 收盘后运行函数
def after_market_close(context):# log.info(str('函数运行时间(after_market_close):'+str(context.current_dt.time())))# #得到当天所有成交记录# trades = get_trades()# for _trade in trades.values():#     log.info('成交记录:'+str(_trade))# log.info('一天结束')log.info('##############################################################')#通过加减获取交易日
def getsecurities(datatime,num):# 交易日列表trade_days=map(lambda x:x.strftime("%Y-%m-%d"),get_all_trade_days())index=trade_days.index(datatime)return trade_days[index+num]#特征排序
def feat_sort(l1,l2,reverse_bol=True):coef_zip=zip(l1,l2)return sorted(coef_zip, key=lambda x:abs(x[1]), reverse=reverse_bol)def setclose(context,factor,classNum,sort="desc",moveNeg=True,moveNan=True):q=0if sort=="desc":q = query(valuation.code,factor).filter(valuation.code.in_(g.security)).order_by(# 按市值降序排列factor.desc())else:q = query(valuation.code,factor).filter(valuation.code.in_(g.security)).order_by(# 按市值升序排列factor)df = get_fundamentals(q)if moveNeg:df=df[df.iloc[:,1]>0]if moveNan:df=df[~np.isnan(df.iloc[:,1])]list_index=map(lambda x: int(x),np.linspace(0,df.shape[0],classNum+1))for i in range(classNum):class_list=df.iloc[list_index[i]:list_index[i+1],:].code.values.tolist()g.stock_class_list["class%d"%(i)]=class_listg.stock_class_close["class%d"%(i)]=get_price(class_list, start_date=context.current_dt, end_date=context.current_dt, frequency='daily', fields="close", skip_paused=False, fq='pre')["close"].T.ix[:,0].values#动量
def Momentum_factor(context,classNum,countNum=22,ascending_bol=True):df=get_price(g.security, count=countNum, end_date=context.current_dt, frequency='daily', fields="close", skip_paused=False, fq='pre')["close"].Tdf["return"]=(df.iloc[:,-1]-df.iloc[:,0])/df.iloc[:,0]df=df.sort("return",ascending=ascending_bol)df=df[~np.isnan(df["return"])]list_index=map(lambda x: int(x),np.linspace(0,df.shape[0],classNum+1))for i in range(classNum):class_list=df.iloc[list_index[i]:list_index[i+1],:].index.values.tolist()g.stock_class_list["class%d"%(i)]=class_listg.stock_class_close["class%d"%(i)]=df.ix[class_list,-2].values

量化交易的单因子分析——聚宽平台相关推荐

  1. 量化回测平台|有现成的不用吗?如何利用聚宽平台回测交易策略

    导览 本文为掘金小册课程加推篇!小册还在持续加推中,敬请期待!!!目前已经加推了20节!!! 超值的43节课程!从目录就能看出来! 1-贯穿小册:Python金融数据分析实战型项目 2-前置基础:量化 ...

  2. 量化交易之单因子策略

    量化交易之单因子策略 单因子策略 小市值选股策略 移动平均线:如何躲过股灾和大跌 『布带林线:衡量市场的波动性/趋势』 单因子策略 你知道剩男剩女是如何剩下的吗? 许多年后,他们都一样,都会发现自己其 ...

  3. python聚宽量化_今天开始使用聚宽的系统学习python量化交易

    今天开始使用聚宽的系统学习python量化交易 满满的成就感,终于在两个月时间里稍微懂一点程序是怎么了,虽然学习的进度比较慢,但是还是学会了一些东西 # 统计a中元素出现的次数 a = [1,2,3, ...

  4. 在聚宽平台上编写鳄鱼交易法则

    # 导入函数库 import jqdata import numpy as np # 初始化函数,设定基准等等 def initialize(context): set_option('use_rea ...

  5. 双均线策略代码【利用聚宽平台】

    什么是双均线? 有两条线:短期均线和长期均线.当短线均线上穿长期均线(金叉)时买入,当短期均线下穿长期均线(死叉)时卖出. 代码: # 导入函数库 from jqdata import *# 初始化函 ...

  6. 量化交易交易学习从聚宽开始

    Mark: 开始学习量化交易,一切从 聚宽 开始. https://www.joinquant.com/

  7. QUANT[1]:从零开始量化交易

    本文是量化交易系列博文的第一篇,后续的如下所列 QUANT[1]:从零开始量化交易 - プロノCodeSteel - CSDN博客 QUANT[2]:量化交易策略基本框架搭建 - プロノCodeSte ...

  8. python量化交易:Joinquant_量化交易基础【一】:初识量化交易

    本文是量化交易零基础入门教程中的第一篇. 摘要 为什么需要量化交易? 量化交易是做什么? 量化交易的价值何在? 做量化交易需要什么? 聚宽是什么? 零基础如何快速入门量化交易? 自测与自学 量化交易比 ...

  9. 每日股市大盘自动复盘(基于聚宽量化投资平台)

    直接上代码,代码里需要用到聚宽平台的jqdata,可在聚宽研究环境中运行. import numpy as np import datetime import jqdata from jqdata i ...

最新文章

  1. pwm控制舵机转动角度程序_01 舵机旋转控制基础
  2. beego mysql session_关于go中beego/session的小总结
  3. ASP.NETcompilation debug=false targetFramework=4.0/错误
  4. 高级特性(2)- XML
  5. 在子线程中创建新的窗体,遇到的问题。
  6. chart.js雷达图不显示刻度标签_Matplotlib从入门再也不放弃
  7. 搜狗王小川:搜狗的语音识别比阿里和科大讯飞的好
  8. 参数编码 完全解决方案 (转)
  9. 超链接一般有两种表现形式_外链的三种常见表现形式
  10. mysql ODBC连接配置
  11. Windows服务器安全策略配置——简单实用
  12. python爬取去哪儿网机票_去哪儿网机票爬虫
  13. CorelDRAW VBA - 发布(导出)PDF文档
  14. 班级校园网页设计作业 静态HTML我的班级网页 DW班级网站模板 大学生简单班级网页作品代码 我的大学网页制作 学生班级网页设计作业
  15. 5G已开始商用 目前提供5G商用服务的国家有哪些
  16. Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配...
  17. macbook视频格式转换_告别格式工厂的视频格式转换方法(mac版 命令行)
  18. easyPOI和导入复杂excel的各种坑
  19. js保存数据到浏览器缓存
  20. XiaoHu.ai开发日志(自2018年2月6日至2019年4月11日)

热门文章

  1. 高通ar android,Android版高通AR Vuforia QCAR SDK学习笔记
  2. Unity 高通AR
  3. 命名实体识别学习-用lstm+crf处理conll03数据集
  4. 【OKR案例库合集】市场营销部门的OKR怎样写?看这一篇就够了。
  5. 中e管家小额资金理财技巧大全
  6. 将Frock类声明为抽象类,尺寸在Frock类中定义,在类中声明抽象方法calcArea方法,用来计算衣服的布料面积。
  7. ChatGPT对软件开发和软件产品的价值
  8. mac系统文本复制粘贴问题
  9. MATLAB--数字图像处理 图像锐化
  10. java 判断鼠标_JAVA 怎么判断鼠标单击处是否在某一图形上