专业制作外贸网站,宝安有效的网站制作,做网站填素材,一站式媒体发布平台本人在私募#xff0c;负责数据收集以及清洗#xff0c;就是包括收集数据#xff0c;按照领导要求#xff0c;选出满足条件的数据#xff0c;用于校验策略是否正确。
现在就在这进行代码上传#xff0c;即用于自己总结整理#xff0c;也用于供大家学习了解#xff0c;实…本人在私募负责数据收集以及清洗就是包括收集数据按照领导要求选出满足条件的数据用于校验策略是否正确。
现在就在这进行代码上传即用于自己总结整理也用于供大家学习了解实习生到底干什么事。
数据收集#期权数据收集
import akshare as ak
import pandas as pd
import numpy as np
import datetime
import time
#用于将千分位数字改为常规数字
from locale import atof
# 显示所有列
pd.set_option(display.max_columns, None)
# 显示所有行
pd.set_option(display.max_rows, None)
#收集数据铁矿石期权的全部数据
start 2019-02-09
#获得全部的交易日数据
dates ak.tool_trade_date_hist_sina()
today time.strftime(%Y-%m-%d)
#筛选符合条件的日期
dates dates.loc[(dates[trade_date]start)(dates[trade_date]today)]
#创建储存数据的DF
last pd.DataFrame()
last_2 pd.DataFrame()
#循环获取数据
for i in range(len(dates)):date dates.iloc[i, 0]#print(date)# 获取当天所有合约part_1, part_2 ak.get_dce_option_daily(trade_date i, symbol铁矿石期权)#print(part_1.head())#print(part_2.head())#增加日期cp,年份月份行权价part_1[date] datepart_1[cp] part_1[合约名称].apply(lambda x: x[6:7])part_1[year] part_1[合约名称].apply(lambda x: x[1:3])part_1[o_month] part_1[合约名称].apply(lambda x: x[3:5])part_1[xqj] part_1[合约名称].apply(lambda x: x[8:]) part_1[合约系列] part_1[合约名称].apply(lambda x: x[0:5])#以日期作为indexpart_1.set_index(date,inplaceTrue)last last.append(part_1)part_2.columns [[合约系列,IV]]#增加日期年份月份part_2[date] datepart_2.set_index(date)part_2[year] part_2[合约系列].apply(lambda x: x[1:3])part_2[month] part_2[合约系列].apply(lambda x: x[3:])last_2 last_2.append(part_2)
#保存数据为方便读者复现使用csv。真实情况直接存入sql数据库各种报错各种坑数据缺失格式不正确............
last.to_csv(i.csv)
last_2.to_csv(i2.csv)数据处理
df pd.read_csv(i.csv)
#默认期权持仓量为1,999这种千分位数字格式。
setlocale(LC_NUMERIC, English_US)
df[持仓量] df[持仓量].apply(lambda x:atof(x))#根据每天的主力合约数据信息筛选最虚值合约分为C,P两块,且持仓量最大。
#举例:今天c端最虚c5800,持仓量1w为c端最大持仓量则符合条件保留。
def select_xu(df):df_c df.loc[df[cp] C]#根据行权价排序获得最虚值C端取最大值。dfc df_c.sort_values(byxqj,ascendingTrue).tail(1)
# print(df_c)
# print(dfc)
# print(-*20)df_p df.loc[df[cp]P]#根据行权价排序获得最虚值p端取最小值。dfp df_p.sort_values(byxqj,ascendingTrue).head(1)
# print(df_p)
# print(dfp)if max(dfc[持仓量]) max(df_c[持仓量]) :dfc dfcelse:dfc Noneif max(dfp[持仓量]) max(df_p[持仓量]) :dfp dfpelse:dfp Nonereturn dfc ,dfp
#目标里面为日期和年份月份
dfd pd.read_excel(I.xlsx)
last pd.DataFrame()
last1 pd.DataFrame()
last2 pd.DataFrame()
if __name__ __main__:for i in range(len(dfd)):year dfd.iloc[i,-2]month dfd.iloc[i,-1]date dfd.iloc[i,0]#筛选数据d df.loc[(df[year]int(year))(df[o_month]int(month))(df[date]datetime.datetime.strftime(date,%Y-%m-%d))]#如果数据不为空if len(d)0:dfc,dfp select_xu(d)if dfc is not None and dfp is not None:s pd.merge(dfc,dfp)last last.append(s)elif dfc is None and dfp is not None :s dfplast1 last1.append(s)elif dfc is not None and dfp is None :s dfclast2 last2.append(s)else:s Noneelse:passlast.to_csv(i0.csv)last1.to_csv(i1.csv)last2.to_csv(i2.csv)I.xlsx数据内容如下 此时便可获得满足条件的期权数据。用于后续的校验。