基于聚宽社区的简单选股策略(jqdatasdk)
之前一直想使用聚宽社区的模拟回测功能,可是基础太差,经常看不懂,现在记录一下使用聚宽社区提供的jqdatasdk,好像还有试用期,具体的我也不是很懂。
·
之前一直想使用聚宽社区的模拟回测功能,可是基础太差,经常看不懂,现在记录一下使用聚宽社区提供的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)
更多推荐
已为社区贡献1条内容
所有评论(0)