读取数据

import time
date = time.strftime("%Y-%m-%d")
date = date.replace("'", "")
from WindPy import *
import pandas as pd
import numpy as np
from pymongo import MongoClient
w.start()
w.isconnected()
import time
from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor, as_completed
import json

连接数据库

host ='xxx.xxx.x.xx'
port='27017'
user='xxxx'
code='utf8utf8'
uri= "mongodb://"+user+":"+code+"@"+host+":"+port+"/"+"?authMechanism=SCRAM-SHA-1"
client=MongoClient(uri)
db = client['CN_Stock']
collection = db['Wind_Close_Price']

获取Wind中A股公司列表

A_list = w.wset("sectorconstituent","date=2019-07-30;sectorid=a001010100000000",usedf=True)
A_list = A_list[1]#取dataframe部分

多线程

df = pd.DataFrame(columns = ['wind_code','close','volume','amt','total_shares'] )
df['wind_code'] = A_list['wind_code']
df_list = A_list.copy()
#定义多线程函数
def applyParallel(dfGrouped, func):ppe = ThreadPoolExecutor(10)#设置线程池中最多能同时运行的线程数目futures = []results = []for name, group in dfGrouped:p = ppe.submit(func, group)#提交函数和变量,立即返回futures.append(p)for future in as_completed(futures):r = future.result()results.append(r)return pd.concat(results)#合并表
#定义获取股票价格函数
def get_price(df_list):stk = df_list['wind_code'].iloc[0]collection = db['Wind_Data_Raw_Price_Daily']Adjust_Price_Daily = pd.DataFrame()try:data2 = w.wsd(stk, "close,industry_csrc12_n", "2018-01-10", "2019-08-08","industryType=1;PriceAdj=F",usedf=True)data2 = data2[1]#前复权价格data2['wind_code']= stkAdjust_Price_Daily = pd.concat([Adjust_Price_Daily,data2])       time.sleep(0.5)print("done2_"+stk)except:print('error_no_record'+stk)df['state']= 'error_no_record'return Adjust_Price_Dailydf_list['rank'] = df_list.index
t1=time.time()
Adjust_Price_Daily_temp = applyParallel(df_list.groupby('rank'), get_price)
t2=time.time()
print(t2-t1)
Adjust_Price_Daily.index = range(len(Adjust_Price_Daily))
#某只股票的价格走势图
Adjust_Price_Daily[(Adjust_Price_Daily['wind_code'] == '000001.SZ')].plot(y=['CLOSE'])
collection.drop()
collection.insert_many(json.loads(Adjust_Price_Daily.T.to_json()).values())

清洗数据,标准化

Adjust_Price_Daily['date'] = Adjust_Price_Daily.index
Adjust_Price_Daily.dropna(axis=0, how='any', inplace=True)#去掉有空值的行
Adjust_Price = Adjust_Price_Daily.pivot( index='date',values='CLOSE', columns='wind_code')#将SQL格式转化为DataFrame格式
Adjust_Price.dropna(axis=1, how='any', inplace=True)
df_r = Adjust_Price.iloc[:,:]/Adjust_Price.iloc[:,:].shift(1)-1#获得每只股票每天的回报率
df_m = Adjust_Price.iloc/Adjust_Price.iloc.shift(30)#获得股票30天动量
df_m.dropna(axis=0, how='any', inplace=True)
df_r.dropna(axis=0, how='any', inplace=True)

将动量作为因子

data_all = pd.DataFrame()for i in range(len(df_m)):print (i)df_1= df_m.iloc[i:i+1,:]df_1 = df_1.Tdf_1.columns = ['m_fz']q0,q1,q2,q3,q4,q5 = df_1['m_fz'].quantile([0,0.2,0.4,0.6,0.8,1.0])#获取分位点bins = [q0-1,q1, q2, q3, q4, q5+1]           labels=['1', '2', '3', '4', '5']df_1 = pd.cut(df_1.m_fz, bins,right=True,labels=labels)      #将股票分为五组df_2= df_r.iloc[i+15:i+16,:]df_2 = df_2.Tdf = pd.concat([df_1,df_2],axis=1)#获得一个df,有组别和return值data = df.groupby('m_fz').mean()#加入5-1,4-2data_51 = data.iloc[4]-data.iloc[0]data_42 = data.iloc[3]-data.iloc[1]data = data.append(data_51,ignore_index=True)data = data.append(data_42,ignore_index=True)      data_all = pd.concat([data_all,data],axis = 1)data_all.index = ['1','2','3','4','5','5-1','4-2']
data_all = data_all.Tpic = (1+data_all).cumprod().plot()#画图

接下来以vol波动率为因子

df_vol = df_r.rolling(30).std()*(252**0.5)#年化利率
df_vol.dropna(axis=0, how='any', inplace=True)data_all = pd.DataFrame()
for i in range(len(df_vol)):print (i)df_1= df_vol.iloc[i+15:i+16,:]df_1 = df_1.Tdf_1.columns = ['v_fz']q0,q1,q2,q3,q4,q5 = df_1['v_fz'].quantile([0,0.2,0.4,0.6,0.8,1.0])bins = [q0-1,q1, q2, q3, q4, q5+1]           labels=['1', '2', '3', '4', '5']df_1 = pd.cut(df_1.v_fz, bins,right=True,labels=labels)      df_2= df_r.iloc[i:i+1,:]df_2 = df_2.Tdf = pd.concat([df_1,df_2],axis=1)data = df.groupby('v_fz').mean()data_51 = data.iloc[4]-data.iloc[0]data_42 = data.iloc[3]-data.iloc[1]data = data.append(data_51,ignore_index=True)data = data.append(data_42,ignore_index=True)      data_all = pd.concat([data_all,data],axis = 1)data_all = data_all.T
data_all.columns = ['1','2','3','4','5','5-1','4-2']
data_all.head()(1+data_all).cumprod().plot()#画图

加入行业对冲

df_Industry = pd.read_excel('首先有一个行业列表的excel.xlsx',encoding='utf-8')#读取行业,当然这个也是wind下的
df_Industry.columns=['wind_code','Industry']
df_Industry.dropna(axis=0, how='any', inplace=True)
#result = df_Industry.values.tolist()
Adjust_Price_Daily['date'] = Adjust_Price_Daily.index
Adjust_Price_Daily = pd.merge(Adjust_Price_Daily,df_Industry,on='wind_code')
Adjust_Price_Daily.dropna(axis=0, how='any', inplace=True)
#获取行业list
Industry = df_Industry['Industry'].unique()
Industry = Industry.tolist()
#根据行业分组,选取每个行业表现最好的一组
data_all = pd.DataFrame()
data_al = pd.DataFrame()
for ind in Industry:print(ind)df = Adjust_Price_Daily[Adjust_Price_Daily['Industry']==ind]df = df.pivot( index='date',values='CLOSE', columns='wind_code')df.dropna(axis=1, how='any', inplace=True)df_r = df.iloc[:,:]/df.iloc[:,:].shift(1)-1df_m = df/df.shift(30)df_m.dropna(axis=0, how='any', inplace=True)df_r.dropna(axis=0, how='any', inplace=True)for i in range(len(df_m)):print (i)df_1= df_m.iloc[i:i+1,:]df_1 = df_1.Tdf_1.columns = ['m_fz']if len(df_1)<5:data = df_r.maxelse:            q0,q1,q2,q3,q4,q5 = df_1['m_fz'].quantile([0,0.2,0.4,0.6,0.8,1.0])bins = [q0-1,q1, q2, q3, q4, q5+1]           labels=['1', '2', '3', '4', '5']df_1 = pd.cut(df_1['m_fz'], bins,right=True,labels=labels)      df_2= df_r.iloc[i+15:i+16,:]df_2 = df_2.Tdf_3 = pd.concat([df_1,df_2],axis=1)data = df_3.groupby('m_fz').mean()data = data.iloc[4]data_al = pd.concat([data_all,data],axis=1)data_all = pd.concat([data_all,data_al],axis=1)data_all.index = ['1','2','3','4','5','5-1','4-2']
data_all = data_all.T
(1+data_all).cumprod().plot()

单因子——数据Wind相关推荐

  1. 量化投资之多因子选股(一):数据准备与单因子检验

    文章目录 前言 系列文章 矢量化选股回测概述 要点1:数据格式 要点2:股票池 要点3:剔除ST股.停盘股.涨跌停 要点4: 仓位构建 要点5:回测 数据准备 单因子检测 样例 前言 本菜狗现在是哈工 ...

  2. 方差分析的MATLAB实现(单因子)

    单因子方差分析是比较俩组或多组数据的均值,它返回原假设--均值相等的概率,在matlab中我们可以用函数anova1进行单因子方差分析. 函数anova1 格式: p=anova1(X) %X的各列为 ...

  3. UA MATH571A QE练习 R语言 单因子试验的回归分析

    UA MATH571A QE练习 R语言 单因子试验的回归分析 2015年5月的第六题是单因子试验,因为历年只有这一道,所以单独做一下. 土壤中的硅主要以硅酸盐矿物的形式存在,受成土母质和成土过程的影 ...

  4. pb 如何导出csv_backtrader如何加载股票因子数据?以换手率、市盈率为例进行回测【附Python代码】

    1引言 关于backtrader,公众号已连续发布了三篇推文:<[手把手教你]入门量化回测最强神器backtrader(一)>.<[手把手教你]入门量化回测最强神器backtrade ...

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

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

  6. python行业中性_单因子测试(上)——因子中性化

    之前做了很多因子测试的工作,但一直没有总结,感觉很凌乱,决定花时间把这部分东西写一写,温故知新,也为后续学习打基础.首先写一下单因子测试部分,分三篇,数据预处理一篇, 回归法一篇,分层测试法一篇.本篇 ...

  7. 中信期货财务因题专题报告:财务因子之单因子测试

    中信期货财务因题专题报告:财务因子之单因子测试 报告时间:2022-02-09 R语言 Python 量化选股 因子选股 pandas numpy seasonal plotly 文章目录 中信期货财 ...

  8. 【ML】线性回归 [单因子](LinearRegression)实践(基于sklearn)

    [ML]线性回归 [单因子](LinearRegression)实践(基于sklearn) 数据准备 读取数据 绘制图表(观察数据规律) 数据处理 模型训练 预测 评估(MSE,R2) 图形展示结果 ...

  9. 量化交易 实战第七课 单因子 IC 分析

    量化交易 实战第七课 单因子 IC 分析 概述 代码实现 导包 1. 准备因子数据 2. 准备价格数据 3. 生成通用 Alphalens 结构 4. 计算因子 因子 IC 结果分析 时间序列图和移动 ...

最新文章

  1. 【swjtu】数据结构实验_二叉树的字符图形显示程序(半期)
  2. 深掘市场 开拓机遇 西部数据将亮相2014年北京安博会
  3. flask request (request.files)
  4. 电子管计算机的操作者是谁,大一计算机第一学期考试重点及相应习题 作者
  5. 职场中一路走来却拂不去一丝失落——一个女IT的告白
  6. 漫游Kafka设计篇之主从同步
  7. python显示数据长度_python – 获取CSV的长度以显示进度
  8. ranger管mysql_添加Kafka的Ranger访问权限策略
  9. mysql show 存储过程_mysql 存储过程 show errors
  10. matlab检查错误 函数,检查代码中的错误和警告
  11. CentOS6.x 下 LNMP环境搭建(二、安装 Nginx)
  12. 用c++实现一个插入,删除和随机访问都是O(1)的容器(剑指||30)
  13. easyui弹出加载遮罩层(转)
  14. 苹果Mac系统无法输入密码的解决办法
  15. 集成电路模拟版图入门-版图基础学习笔记(五)
  16. 如何把照片裁剪成证件照指定尺寸比例?
  17. timestamp显示毫秒_TimeStamp 毫秒和纳秒
  18. P3456 [POI2007]GRZ-Ridges and Valleys(bfs)
  19. 电子信息工程求职目标_应用电子专业求职信范文合集6篇
  20. 基于腾讯云实时音视频(TRTC)的web端 多人人脸识别小游戏

热门文章

  1. 摩尔斯电码转换python编码_摩尔斯电码到英文python3
  2. 目前国内公开的手机号段 | 正则资料库
  3. c++知识点总结--结构体
  4. Atitit 关于共享经济之共享男女朋友的创业计划
  5. 项目视频讲解_马震宇-博客
  6. 学会应对不同的面试官
  7. VCIP2020:面向机器视觉的HEVC码率控制
  8. 中医药文化代表东方的思维方式是智慧结晶
  9. 1个月,10多万点击,不得不信的事实
  10. 虚拟商品帐号交易平台源码_支持个人二维码收款