之前一直想使用聚宽社区的模拟回测功能,可是基础太差,经常看不懂,现在记录一下使用聚宽社区提供的jqdatasdk,好像还有试用期,具体的我也不是很懂。

准备工作

提前注册好帐号,记住账号名和密码。
下载好要用到的jqdatasdk库

获取数据

#导入要用到的库,
import pandas as pd
import datetime
from jqdatasdk import *
import jqdatasdk as jk

接下来传入自己的帐号和密码进行登录

auth("帐号","密码")

运行之后,系统弹出auth success ,说明登录成功。

#获取所有股票列表
st_list = jk.get_all_securities(types=["stock"],date = None)
st_list.reset_index(inplace = True)
st_list.rename(columns={"index":"stk_code","display_name":"stk_name"},inplace = True)
st_list_n = list(st_list["stk_code"])

影响股票的因子有很多,这里选取市值、利润、财务三方面,如果想要更多的因子,可以取聚宽官网查看。

q1 =jk.query(valuation,income,indicator)    #市值,利润,财务
df1 = jk.get_fundamentals(q1)
#查看所包含的变量
#df1.head(0)
#保留自己想要的变量
df1 = df1[["day",
          "turnover_ratio",
          "code",
          "capitalization",
          "circulating_cap",
          "market_cap",
          "circulating_market_cap",
          "turnover_ratio",
          "pe_ratio",
          "pe_ratio_lyr",
          "pb_ratio",
          "ps_ratio",
          "pcf_ratio",
          "statDate",
          "basic_eps",
          "statDate.1",
          "net_profit_margin",
          "gross_profit_margin",
          "roe",
          "inc_total_revenue_year_on_year",
          "inc_net_profit_year_on_year",
          ]]

设定自己需要的时间范围

#设定开始时间和结束时间
star_day =datetime.date(2023,5,10).strftime("%Y-%m-%d")
end_day =datetime.date(2023,5,24).strftime("%Y-%m-%d %H:%M:%S")

传入股票列表和设定好的时间

#获取价格
df2 = jk.get_price(st_list_n,start_date = star_day,end_date = end_day)
#将获得的价格与之前截取的部分市值、财务、利润表进行合并
data = pd.merge(df1,df2,left_on = ["code"],right_on=["code"],how="inner")
#表格合并
data = pd.merge(data,st_list,left_on=["code"],right_on=["stk_code"],how="inner")

为了方便阅读进行重命名

data.rename(columns={"time":"日期",
                     "turnover_ratio":"换手率",
          "code":"股票编码",
          "stk_name":"股票名称",
          "capitalization":"总股本(万股)",
          "circulating_cap":"流通股本(万股)",
          "market_cap":"总市值(亿元)",
          "circulating_market_cap":"流通市值(亿元)",
          "turnover_ratio":"换手率",
          "pe_ratio":"市盈率(PE,TTM)",
          "pe_ratio_lyr":"市盈率(PE)",
          "pb_ratio":"市净率(PB)",
          "ps_ratio":"市销率(PS,TTM)",
          "pcf_ratio":"市现率(PCF,现金净流量TTM)",
          "statDate":"财报报告期1",
          "basic_eps":"基本每股收益(元)",
          "statDate.1":"财报报告期2",
          "net_profit_margin":"销售净利率",
          "gross_profit_margin":"销售毛利率",
          "roe":"净资产收益率ROE",
          "inc_total_revenue_year_on_year":"营业收入同比增长",
          "inc_net_profit_year_on_year":"净利润同比增长",
          "open":"开盘价",
          "close":"收盘价",
          "volume":"成交量",
          "money":"成交额"
          },inplace = True)
data = data[["日期",
             "换手率",
          "股票编码",
          "股票名称",
          "总股本(万股)",
          "流通股本(万股)",
          "总市值(亿元)",
          "流通市值(亿元)",
          "换手率",
          "市盈率(PE,TTM)",
          "市盈率(PE)",
          "市净率(PB)",
          "市销率(PS,TTM)",
          "市现率(PCF,现金净流量TTM)",
          "财报报告期1",
          "基本每股收益(元)",
          "财报报告期2",
          "销售净利率",
          "销售毛利率",
          "净资产收益率ROE",
          "营业收入同比增长",
          "净利润同比增长",
          "开盘价",
          "收盘价",
          "成交量",
          "成交额"]]

设定筛选条件

股票获取后,按照具体的需要进行筛选,这里只做简单的演示

pe0 = data["市盈率(PE)"]>0
pe1 = data["市盈率(PE)"]<50
pb0 = data["市净率(PB)"]>0
pb1 = data["市净率(PB)"]<10
out = data["流通股本(万股)"]>=1000
mktcap = data["总市值(亿元)"]>=1000
tun = data["换手率"]>5
ROE = data["净资产收益率ROE"]>=10
selector = pe0 & pe1 & pb0 & pb1 & out & mktcap & ROE
df = data[selector]

输出\查看

筛选完成,可以选择输出为表格保存或者直接查看。

df.to_excel("df.xlsx")
df.head(5)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐