具体活动规则请戳:恒生LIGHT云社区光源计划
目前数据部门正在规划行情类接口整体优化方案,待发布新的接口,我们会发布相关公告。
如果现在您这边着急使用期货盘后分钟数据,可结合“1.1.2 交易日历”接口,使用3.1.2接口中交易日字段与分时字段,关联计算出自然日字段。
后续我们也可安排技术人员撰写相关日期的转换教程,推出后,会在社区发布源码
您好,恒有数 3.1.2 期货盘后分钟切片 ,返回参数中的 “日期交易日” 对应数据为 “前一日夜盘+当天日盘”的数据,此接口后面还会做优化,目前我们已经提了需求给数据部门,后续会增加自然日日期字段。
每周获奖名单公布
第二期:12月13 ~ 12月19
- 姓名 注册手机号 评奖结果 奖品:京东卡(元)
- 陈 ** 158 **** 5539 一等奖 500
- 刘 ** 158 **** 2609 一等奖 500
- 至 ** 151 **** 3106 一等奖 500
- 王 * 150 **** 8694 二等奖 200
- 阿 * 136 **** 1493 二等奖 200
- 孔 * 136 **** 1489 二等奖 200
- 常 * 139 **** 7366 二等奖 200
- 孙 ** 155 **** 2624 二等奖 200
- 李 * 181 **** 5052 二等奖 200
- 程 ** 186 **** 6364 三等奖 100
- 王 ** 183 **** 0966 三等奖 100
- 吴 * 182 **** 8866 三等奖 100
- 杨 ** 181 **** 5364 三等奖 100
- 曹 * 173 **** 4709 三等奖 100
- 曹 ** 150 **** 0198 三等奖 100
- 贾 * 137 **** 7693 三等奖 100
- 冯 ** 130 **** 3820 三等奖 100
- 周 ** 180 **** 5522 三等奖 100
- 韩 ** 157 **** 9838 三等奖 100
余 * 酱等38位用户,获5000光子,可兑换20元腾讯/优酷视频会员券等;
兑换方式,详见https://developer.hs.net/thread/1720 ;
每周获奖名单公布
第一期:有奖问卷活动,12/06 ~ 12/12获奖名单
- 姓名 注册手机号 评奖结果 奖品:京东卡(元)
- 张 ** 135 **** 9542 一等奖 500
- 王 * 豪 156 **** 8019 一等奖 500
- 黄 ** 199 **** 7609 一等奖 500
- 孙 * 乐 151 **** 4023 二等奖 200
- 胡 * 159 **** 9919 二等奖 200
- 无 ** 155 **** 4565 二等奖 200
- 欢 * 159 **** 0883 二等奖 200
- 宋 ** 150 **** 9069 二等奖 200
- 马 ** 157 **** 4353 二等奖 200
- 黄 ** 131 **** 7995 三等奖 100
- 张 ** 191 **** 9443 三等奖 100
- 王 * 锋 136 **** 9543 三等奖 100
- 果 * 临 187 **** 7660 三等奖 100
- 于 * 海 189 **** 7586 三等奖 100
- 吴 * 153 **** 6523 三等奖 100
- 童 * 哲 191 **** 1191 三等奖 100
- 槐 * 158 **** 8533 三等奖 100
- 崔 * 131 **** 7478 三等奖 100
- 卢 * 鹏 186 **** 9264 三等奖 100
厉*亮等33位用户,获5000光子,可兑换20元腾讯/优酷视频会员券等;
兑换方式,详见https://developer.hs.net/thread/1720 ;
活动时间
即日起—2021年12月31号
参与方式
1、下单1次恒有数产品套餐,下单地址为:https://udata.hs.net/subscribe (包含免费体验套餐;2021/09/10以来,已下单的用户,无需重新下单);
2、提交公测版调查问卷,问卷地址为:https://www.wenjuan.com/s/vIVbqqA/;
说明:上面两步都需要完成哦 ~
活动奖励
1、每位完成本活动的用户,均可获得20元视频会员代金券;
2、每周评选1次优质问卷,评奖数量与奖品如下:
一等奖:3位,500元京东卡 1张
二等奖:6位,200元京东卡 1张
三等奖:10位,100元京东卡 1张
说明:每个账号,最多仅可获得1次视频会员奖励;
奖品发放与兑换使用
1、每周一,在本帖中公布上周获奖名单,并发放奖品;
2、京东卡发放,以短信的方式将卡券码发放至注册手机号;
3、视频会员奖品兑换与使用指南,详见:https://developer.hs.net/thread/1720
4、加入恒生-恒有数群(已加群小伙伴不需要重复加群) ,群内会同步获奖名单和领奖方式 ~
一年一度恒生电子超大技术盛会,独家发布金融科技行业技术趋势!
全新云参会玩法,丰富活动更有豪礼等你赢!
更有量化用户感兴趣的【高性能】分论坛,不要错过哦。
一站直达大会官网:传送门
恒有数(https://udata.hs.net/home?channel_source=vnpy )
1、全部142个接口,新用户下单免费的体验套餐,可免费使用30天;
2、目前社区推出新人礼包活动,限时领取1折券;
金融数据142个接口,超值套餐包年仅需199.9元,单日最低0.15元;
3、正值双十一活动季,社区推出三重奖励,下单即可兑现奖品,奖品包括腾讯视频月卡、天猫、京东代金券等等
恒生Light云官网注册用户,登录即可参加
即日起——2021年11月12日23时59分59秒
(一)参与活动
1、活动期间,凡是订阅恒有数的用户,均自动参加恒有数双十一活动,无需报名;
(二)活动奖励
1、活动期间,根据单笔下单金额,奖励对应光子,用户可用光子兑换对应的奖品;
2、活动奖励分为3档,详情如下:
(1)下单实付金额满1元,奖励500光子;
(2)单笔订单实付金额满50元,奖励5000光子;(可兑换腾讯视频VIP月卡、天猫超市代金券、滴滴出行代金券等)
(3)单笔订单实付金额满150元,奖励12500光子;(可兑换星巴克代金券、京东E卡代金券等)
3、每个用户每次单笔下单,取符合条件的最高档奖励,每档奖励每个用户最多只奖励一次;
(三)奖品兑换
1、用户满足奖励条件后,光子会自动发放。用户可在页面点击“查询奖励”进入光子中心页面,查看光子明细确认奖励发放;
2、用户可在光子中心页面下方的“U选商城”中,兑换奖品;
注:更多信息详见恒有数订阅页面:https://udata.hs.net/subscribe
本系列教程为量化开发者,提供本地量化金融数据仓库的搭建教程与全套源代码。我们以恒有数(UDATA)金融数据社区为数据源,将金融基础数据落到本地数据库。教程提供全套源代码,包括历史数据下载与增量数据更新,数据更新任务部署与日常监控等操作。
在上一节讲述中,我们封装了Python操作MySQL数据库的自定义类,存为MySQLOperation.py文件;本节内容操作数据库部分,将会调用MySQLOperation中的方法,以及pandas.to_sql和pandas.read_sql的操作。
A、在恒有数官网(https://udata.hs.net )注册并登录,在订阅页面,下单免费的体验套餐;
B、在右上角,头像下拉菜单中,进入总览页面,复制Token;
C、在数据页面,查看数据接口文档,获取接口名称、请求参数、返回参数和Python代码示例;
pip install hs_udata
使用示例如下:
import hs_udata as hs
# 设置Token
hs.set_token(token = 'xxxxxxxxxxxxxxx') # 总览页面获取个人Token
# 以分钟线行情为例,获取000001.SZ在2021-05-01至2021-06-01期间的分钟线数据
# 接口文档见:https://udata.hs.net/datas/342/
df = hs.stock_quote_minutes(en_prod_code="000001.SZ",begin_date="20210501",end_date="20210601")
# 增加股票代码列
df['hs_code']='000001.SZ'
df.head()
其余接口使用过程与之类似;
以股票列表(stock_list)为例,讲解建表、落库、查询等操作;全套代码见本文第三章;
(1)在MySQL数据库中,创建数据库udata,创建过程见第一讲《Python量化数据仓库搭建系列1:数据库安装与操作》;
(2)在MySQL数据库中,创建数据更新记录表udata.tb_update_records,表结构如下:
建表SQL如下:
CREATE TABLE udata.tb_update_records (
table_name CHAR(40),
data_date CHAR(20),
update_type CHAR(20),
data_number INT(20),
elapsed_time INT(20),
updatetime CHAR(20)
)
(3)将Token与数据库参数写入配置文件DB_MySQL.config,文件内容如下:
[udata]
token='你的Token'
host='127.0.0.1'
port=3306
user='root'
passwd='密码'
db='udata'
(4)读取配置文件中的参数
import configparser
# 读取配置文件中,恒有数和数据库参数
configFilePath = 'DB_MySQL.config'
section = 'udata'
config = configparser.ConfigParser()
config.read(configFilePath)
# 读取 恒有数(UData) 的 token
token = eval(config.get(section=section, option='token'))
# MySQL连接参数读取
host = eval(config.get(section=section, option='host'))
port = int(config.get(section=section, option='port'))
db = eval(config.get(section=section, option='db'))
user = eval(config.get(section=section, option='user'))
passwd = eval(config.get(section=section, option='passwd'))
在社区数据页面,查看数据表返回参数字段,以股票列表(stock_list,https://udata.hs.net/datas/202/ )为例:
将建表、删除表格、清空数据的SQL,写入配置文件DB_Table.config,文件内容如下:
[tb_stock_list]
DROP_TABLE='DROP TABLE IF EXISTS tb_stock_list'
CREATE_TABLE='''CREATE TABLE tb_stock_list (
secu_code CHAR(20),
hs_code CHAR(20),
secu_abbr CHAR(20),
chi_name CHAR(40),
secu_market CHAR(20),
listed_state CHAR(20),
listed_sector CHAR(20),
updatetime CHAR(20)
)'''
DELETE_DATA = 'truncate table tb_stock_list'
建表代码如下:
# MySQL操作实例化,pymysql连接设置,可打开、关闭、执行sql、执行sql读取数据
MySQL = MySQLOperation(host, port, db, user, passwd)
# 读取配置文件中,恒有数和数据库参数
configFilePath = 'DB_Table.config'
section = 'tb_stock_list'
config = configparser.ConfigParser()
config.read(configFilePath)
DROP_TABLE = eval(config.get(section=section, option='DROP_TABLE'))
CREATE_TABLE = eval(config.get(section=section, option='CREATE_TABLE'))
DELETE_DATA = eval(config.get(section=section, option='DELETE_DATA'))
# 删除表结构
MySQL.Execute_Code(DROP_TABLE)
# 创建表结构
MySQL.Execute_Code(CREATE_TABLE)
import hs_udata as hs
from sqlalchemy import create_engine
from datetime import datetime
# 设置token
hs.set_token(token)
# 获取 股票列表 数据
df = hs.stock_list()
# 在最后一列增加系统时间戳
dt = datetime.now()
df['updatetime'] = dt.strftime('%Y-%m-%d %H:%M:%S')
# 由于股票列表数据为全量更新,数据插入之前,先清空表中数据
MySQL.Execute_Code(DELETE_DATA)
# sqlalchemy 连接设置,可用于pandas.read_sql、pandas.to_sql
engine = create_engine('mysql://{0}:{1}@{2}:{3}/{4}?charset=utf8'.format(user,passwd,host,port,db))
# 将数据写入到MySQL中的数据表
df.to_sql(name='tb_stock_list', con=engine, index=False, if_exists='append')
在数据库中查看结果如下:
import pandas as pd
result = pd.read_sql('''SELECT * FROM tb_stock_list ''', con=engine)
print(result.head())
将上述几步操作,封装到一起,定义并调用python中class类的属性和方法。代码中涉及主要技术点如下:
(1)使用pymysql、pandas.to_sql和pandas.read_sql操作MySQL数据库;
(2)使用class类的方法,集成建表、插入数据和查询数据的操作;
(3)使用配置文件的方式,从本地文件中,读取数据库参数与表操作的SQL代码;
(4)使用try容错机制,结合日志函数,将执行日志打印到本地的DB_MySQL_LOG.txt文件;
import pandas as pd
import hs_udata as hs
from MySQLOperation import *
from sqlalchemy import create_engine
from datetime import datetime
import time
import configparser
import logging
import traceback
import warnings
warnings.filterwarnings("ignore")
class TB_Stock_List:
def __init__(self,MySQL_Config,BD_Name,Table_Config,Table_Name):
# 创建日志
self.logging = logging
self.logging.basicConfig(filename='DB_MySQL_LOG.txt', level=self.logging.DEBUG
, format='%(asctime)s - %(levelname)s - %(message)s')
# 读取配置文件中,恒有数和数据库参数
configFilePath = MySQL_Config
self.section1 = BD_Name
config = configparser.ConfigParser()
config.read(configFilePath)
# 读取 恒有数(UData) 的 token
self.token = eval(config.get(section=self.section1, option='token'))
# MySQL连接参数读取
self.host = eval(config.get(section=self.section1, option='host'))
self.port = int(config.get(section=self.section1, option='port'))
self.db = eval(config.get(section=self.section1, option='db'))
self.user = eval(config.get(section=self.section1, option='user'))
self.passwd = eval(config.get(section=self.section1, option='passwd'))
# pymysql连接设置,可打开、关闭、执行sql、执行sql读取数据
self.MySQL = MySQLOperation(self.host, self.port, self.db, self.user, self.passwd)
# sqlalchemy 连接设置,可用于pandas.read_sql、pandas.to_sql
self.engine = create_engine('mysql://{0}:{1}@{2}:{3}/{4}?charset=utf8'.format(self.user
, self.passwd
, self.host
, self.port
, self.db))
# 读取配置文件中,恒有数和数据库参数
configFilePath = Table_Config
self.section2 = Table_Name
config = configparser.ConfigParser()
config.read(configFilePath)
self.DROP_TABLE_SQL = eval(config.get(section=self.section2, option='DROP_TABLE'))
self.CREATE_TABLE_SQL = eval(config.get(section=self.section2, option='CREATE_TABLE'))
self.DELETE_DATA_SQL = eval(config.get(section=self.section2, option='DELETE_DATA'))
self.logging.info('*********************{0}.{1}*********************'.format(self.section1, self.section2))
def CREATE_TABLE(self):
try:
# 删除表结构
self.MySQL.Execute_Code('SET FOREIGN_KEY_CHECKS = 0')
self.MySQL.Execute_Code(self.DROP_TABLE_SQL)
# 创建表结构
self.MySQL.Execute_Code(self.CREATE_TABLE_SQL)
self.logging.info('表{0}.{1},表格创建成功'.format(self.section1,self.section2))
except:
self.logging.info('表{0}.{1},表格创建失败'.format(self.section1,self.section2))
self.logging.debug(traceback.format_exc())
def UPDATE_DATA(self):
try:
# 设置token
hs.set_token(self.token)
time_start = time.time() # 计时
# 获取 股票列表 数据
df = hs.stock_list()
# 在最后一列增加系统时间戳
dt = datetime.now()
df['updatetime'] = dt.strftime('%Y-%m-%d %H:%M:%S')
# 由于股票列表数据为全量更新,数据插入之前,先清空表中数据
self.MySQL.Execute_Code(self.DELETE_DATA_SQL)
# 将数据写入到MySQL中的数据表
df.to_sql(name='tb_stock_list', con=self.engine, index=False, if_exists='append')
time_end = time.time() # 计时
elapsed_time = round(time_end-time_start,2)
# 向mysql库中记录一条数据更新记录:表名,数据日期,更新方式,更新条数,更新耗时,系统时间
self.RECORDS_SQL = '''INSERT INTO udata.tb_update_records
VALUES ('{0}','{1}','全量',{2},{3}, SYSDATE())'''.format(self.section2
,dt.strftime('%Y-%m-%d'),len(df),elapsed_time)
self.MySQL.Execute_Code(self.RECORDS_SQL)
self.logging.info('表{0}.{1},数据更新成功'.format(self.section1,self.section2))
except:
self.logging.info('表{0}.{1},数据更新失败'.format(self.section1,self.section2))
self.logging.debug(traceback.format_exc())
def READ_DATA(self, WhereCondition=''):
try:
result = pd.read_sql('''SELECT * FROM {0}.{1} '''.format(self.section1,self.section2)
+ WhereCondition, con=self.engine)
self.logging.info('表{0}.{1},数据读取成功'.format(self.section1,self.section2))
return result
except:
self.logging.info('表{0}.{1},数据读取失败'.format(self.section1,self.section2))
self.logging.debug(traceback.format_exc())
return 0
if __name__ == '__main__':
MySQL_Config = 'DB_MySQL.config'
BD_Name = 'udata'
Table_Config = 'DB_Table.config'
Table_Name = 'tb_stock_list'
# 实例化
TB_Stock_List_Main = TB_Stock_List(MySQL_Config,BD_Name,Table_Config,Table_Name)
# 创建表结构
TB_Stock_List_Main.CREATE_TABLE()
# 更新数据
TB_Stock_List_Main.UPDATE_DATA()
# 读取数据
data = TB_Stock_List_Main.READ_DATA()
(1)附件文件目录:
DB_MySQL.config
DB_Table.config
MySQLOperation.py
TB_Stock_List.py
(文件下载请前往 https://developer.hs.net/thread/1501 ,附件位于文章末端)
(2)下载附件文件后,将配置文件DB_MySQL.config中的Token与数据库参数,修改为自己的参数;将代码放置在同一目录下执行。
下一节《Python量化数据仓库搭建系列4:股票数据落库》
本系列教程为量化开发者,提供本地量化金融数据仓库的搭建教程与全套源代码。我们以恒有数(UDATA)金融数据社区为数据源,将金融基础数据落到本地数据库。教程提供全套源代码,包括历史数据下载与增量数据更新,数据更新任务部署与日常监控等操作。
在上一节讲述中,我们选择了MySQL作为本系列教程的数据库,故本文着重讲解Python操作MySQL的步骤,并封装方法。在文末简单介绍Python操作MongoDB、SQLite、PostgreSQL数据库;
pip install pymysql
from pymysql import *
# 打开数据库连接,数据库参数可以在MySQL界面或数据库配置文件中查看
conn = pymysql.connect(host = '数据库IP',
port = '端口',
user = '用户名',
password = '密码',
database='数据库名称')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()
# 在数据库操作执行完毕后,关闭数据库连接
# conn.close()
from pymysql import *
# 执行SQL代码:建表、删表、插入数据
def Execute_Code(sql_str):
# 打开数据库连接
conn = pymysql.connect(host = '127.0.0.1',port = 3306,user = 'root',
password = '密码',database='udata')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()
try:
# 使用execute()方法执行SQL
cursor.execute(sql)
# 提交到数据库执行
conn.commit()
except:
# 发生错误时回滚
conn.rollback()
# 关闭数据库连接
conn.close()
A、建表
sql_str = '''CREATE TABLE TB_Stock_List_Test (
secu_code CHAR(20),
hs_code CHAR(20),
secu_abbr CHAR(20),
chi_name CHAR(40),
secu_market CHAR(20),
listed_state CHAR(20),
listed_sector CHAR(20),
updatetime CHAR(20));'''
Execute_Code(sql_str)
B、插入数据
sql_str = '''
INSERT INTO TB_Stock_List_Test
(`secu_code`,`hs_code`,`secu_abbr`,`chi_name`,`secu_market`,`listed_state`
,`listed_sector`,`updatetime`)
VALUES
('000001','000001.SZ','平安银行','平安银行股份有限公司','深圳证券交易所','上市',
'主板','2021-10-25 20:10:55');
'''
Execute_Code(sql_str)
C、更新数据
sql_str = "UPDATE tb_stock_list SET updatetime = '2021-10-30 20:10:55' "
Execute_Code(sql_str)
D、删除数据
sql_str = 'DELETE FROM tb_stock_list'
Execute_Code(sql_str)
E、删除表格
sql_str = 'DROP TABLE IF EXISTS tb_stock_list'
Execute_Code(sql_str)
def Select_Code(sql_str):
# 打开数据库连接
conn = pymysql.connect(host = '127.0.0.1',port = 3306,user = 'root',
password = '密码',database='udata')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()
# 使用execute()方法执行SQL
cursor.execute(sql_str)
# 获取所有记录列表
results = cursor.fetchall()
# 关闭数据库连接
conn.close()
return results
sql_str = 'select * from tb_stock_list'
results = Select_Code(sql_str)
results
将上述用法,封装为自定义类,存为MySQLOperation.py文件,代码如下:
from pymysql import *
# MySQL操作函数
class MySQLOperation:
def __init__(self, host, port, db, user, passwd, charset='utf8'):
# 参数初始化
self.host = host
self.port = port
self.db = db
self.user = user
self.passwd = passwd
self.charset = charset
def open(self):
# 打开数据库连接
self.conn = connect(host=self.host,port=self.port
,user=self.user,passwd=self.passwd
,db=self.db,charset=self.charset)
# 使用 cursor() 方法创建一个游标对象 cursor
self.cursor = self.conn.cursor()
def close(self):
# 断开数据库连接
self.cursor.close()
self.conn.close()
def Execute_Code(self, sql):
# 执行SQL代码:建表、删表、插入数据
try:
self.open() # 打开数据库连接
self.cursor.execute(sql) # 使用execute()方法执行SQL
self.conn.commit() # 提交到数据库执行
self.close() # 断开数据库连接
except Exception as e:
self.conn.rollback() # 发生错误时回滚
self.close() # 断开数据库连接
print(e)
def Select_Code(self, sql):
# 执行SQL代码,查询数据
try:
self.open() # 打开数据库连接
self.cursor.execute(sql) # 使用execute()方法执行SQL
result = self.cursor.fetchall() # 获取所有记录列表
self.close() # 断开数据库连接
return result # 返回查询数据
except Exception as e:
self.conn.rollback() # 发生错误时回滚
self.close() # 断开数据库连接
print(e)
插入与查询用法如下,其余用法类似,此处不再赘述;
import pandas as pd
host='127.0.0.1'
port=3306
user='root'
passwd="密码"
db='udata'
# 方法实例化
MySQL = MySQLOperation(host, port, db, user, passwd)
# 插入操作代码
sql_str = '''
INSERT INTO tb_stock_list
(`secu_code`,`hs_code`,`secu_abbr`,`chi_name`,`secu_market`,`listed_state`,`listed_sector`,`updatetime`)
VALUES
('000001','000001.SZ','平安银行','平安银行股份有限公司','深圳证券交易所','上市',
'主板','2021-10-25 20:15:55');
'''
MySQL.Execute_Code(sql_str)
# 查询数据
sql_str = 'select * from tb_stock_list'
results = MySQL.Select_Code(sql_str)
results
由于上述pymysql用法已经可以满足大部分使用需求,sqlalchemy实现功能与之类似。这里着重介绍一下基于sqlalchemy链接数据库的pandas.to_sql和pandas.read_sql操作。
pip install sqlalchemy
from sqlalchemy import create_engine
host='127.0.0.1'
port = 3306
user='root'
password='密码'
database='udata'
engine = create_engine('mysql://{0}:{1}@{2}:{3}/{4}?charset=utf8'.format(user
,password
,host
,port
,database))
将DataFrame中的数据,写入MySQL数据库,代码示例如下:
import pandas as pd
# 定义需要写入的数据,DataFrame格式
data = pd.DataFrame([['000001','000001.SZ','平安银行','平安银行股份有限公司'
,'深圳证券交易所','上市','主板','2021-10-25 20:12:55'],
['000002','000002.SZ','万 科A','万科企业股份有限公司'
,'深圳证券交易所','上市','主板','2021-10-25 20:12:55']])
# 列名赋值
data.columns = ['secu_code','hs_code', 'secu_abbr', 'chi_name'
, 'secu_market', 'listed_state','listed_sector','updatetime']
# 写入数据库
data.to_sql(name='tb_stock_list', con=engine, index=False, if_exists='append')
if_exists
参数用于当目标表已经存在时的处理方式,默认是 fail
,即目标表存在就失败。另外两个选项是 replace
表示替代原表,即删除再创建,append
选项仅添加数据。
从数据库中,将数据读取为DataFrame,代码示例如下:
# 将sql查询结果,赋值为result
result = pd.read_sql('''SELECT * FROM tb_stock_list ''', con=engine)
result
(1)安装pymongo:pip install pymongo
(2)操作简介
import pymongo
# 连接MongoDB
conn = pymongo.MongoClient(host='localhost',port=27017
,username='username', password='password')
# 指定数据库
db = conn['udata'] # db = client.udata
# 指定集合
collection = db['tb_stock_list'] # collection = db.tb_stock_list
# 插入数据 insert_one()、insert_many()
data1 = {} # 集合,键值对,1条数据
data2 = {} # 集合,键值对,1条数据
result = collection.insert_many([data1, data2])
# result = collection.insert_one(data1)
# 查询数据 find_one()、find()
result = collection.find_one({'secu_code': '000001'})
# 更新数据 update_one()、update()
result = collection.update_one({'secu_code': '000001'}, {'$set': {'hs_code': '000001'}})
# 删除数据 remove()、delete_one()和delete_many()
result = collection.remove({'secu_code': '000001'})
(1)安装sqlite3:pip install sqlite3
(2)操作简介
import sqlite3
# 连接数据库
conn = sqlite3.connect('udata.db')
# 创建游标
cursor = conn.cursor()
# 执行SQL
sql = "增减删等SQL代码"
cursor.execute(sql)
# 查询数据
sql = "查询sql代码"
values = cursor.execute(sql)
# 提交事物
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
(1)安装psycopg2:pip install psycopg2
(2)操作简介
import psycopg2
# 连接数据库
conn = psycopg2.connect(database="udata", user="postgres"
, password="密码", host="127.0.0.1", port="5432")
# 创建游标
cursor = conn.cursor()
# 执行SQL
sql = "增减删等SQL代码"
cursor.execute(sql)
# 查询全部数据
sql = "查询sql代码"
cursor.execute(sql)
rows = cursor.fetchall()
# 事物提交
conn.commit()
# 关闭数据库连接
conn.close()
综上,Python操作数据库的简要介绍就结束了;还有很多类型的数据库,Python操作它们的过程大同小异,后续我也将会继续梳理相关资料。
下一节《Python量化投资数据仓库搭建3:数据落库代码封装》
本系列教程为量化开发者,提供本地量化金融数据仓库的搭建教程与全套源代码。我们以恒有数(UDATA)金融数据社区为数据源,将金融基础数据落到本地数据库。教程提供全套源代码,包括历史数据下载与增量数据更新,数据更新任务部署与日常监控等操作。
数据仓库(Data Warehouse)简称DW或DWH,数据仓库顾名思义,是一个很大的数据存储集合。是数据库的一种概念上的升级,输入方是各种各样的数据源,最终的输出用于数据分析、量化分析、数据挖掘、数据报表等方向,从逻辑上讲数据仓库和数据库是没有什么区别的。
目前常用的开源免费数据库有MySQL、MongoDB 、Postgresql 和 SQLite (Python自带)。在2020-2021年DB-Engines 排行榜前十的见下图,各个数据库有各自的特点和适用场景。具体选用哪一个作为量化投资的数据库,取决于存储的数据特点、性能要求和成本。对于个人来说,硬件水平、技术水平、费用成本和学习时间成本等因素都相当重要。
本系列教程,选用MySQL数据库为例,讲解数据仓库的搭建过程。其他数据库相关教程,也将会陆续推出,敬请期待。
MySQL数据库是当今最流行的开放源码数据库之一,为用户提供了一个相对简单的解决方案,适用于广泛的应用程序部署。MySQL Community Server是MySQL数据库的免费开源版,对个人用户非常友好。
安装包下载网页为:https://dev.mysql.com/downloads/mysql/ ,选择对应的操作系统,点击下载,例如下图为下载64位Windows系统MySQL Community Server安装包:
A、双击安装包,进行安装;
B、Choosing a Setup Type页面,选择Developer Default,点击next进入下一步;
C、Path Conflicts页面,确认安装路径与数据存放路径,点击next进入下一步;
D、Check Requirements页面,检查安装条件,直接点击next进入下一步;
E、Installation页面,点击execute执行(此处等待时间较久),执行完后点击next进入下一步;
F、Product Configuration页面,点击next进入下一步;
G、Type and Networking页面,点击next进入下一步;
H、Authentication Method页面,点击next进入下一步;
I、Accounts and Roles页面,设置Root密码,点击next进入下一步;
J、Windows Service页面,点击next进入下一步;
K、Apply Configuration页面,点击execute执行,点击Finish;
L、Product Configuration页面,点击next进入下一步;
M、MySQL Router Configuration页面,点击Finish;
N、Product Configuration页面,点击next进入下一步;
O、Connect To Server页面,填写并check一下root密码,点击next进入下一步;、
P、Apply Configuration页面,点击execute执行,点击Finish;
Q、Product Configuration页面,点击next进入下一步;
R、Installation Complete页面,点击Finish;
完成上述步骤,即可完成安装。
create database <数据库名>;
在MySQL Workbench界面中,建库操作如下图:
drop database <数据库名>;
create table table_name(column_name column_type);
以股票列表为例,建表代码如下:
/*
参数名 类型 长度 说明 备注
secu_code String 20 证券代码
hs_code String 20 HS代码
secu_abbr String 20 证券简称
chi_name String 20 中文名称
secu_market String 20 证券市场
listed_state String 20 上市状态
listed_sector String 20 上市板块
*/
CREATE TABLE udata.TB_Stock_List (
secu_code CHAR(20),
hs_code CHAR(20),
secu_abbr CHAR(20),
chi_name CHAR(40),
secu_market CHAR(20),
listed_state CHAR(20),
listed_sector CHAR(20),
updatetime CHAR(20));
drop table table_name;
alter table old_name rename to new_name或rename table old_name to new_name;
alter table table_name add column_name column_type;
alter table table_name change column_name new_column_name new_column_name_type;
alter table table_name drop column_name;
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
SELECT column_name1,column_name2
FROM table_name
[WHERE Clause]
[LIMIT N]
A、查询语句中,可以使用一个或者多个表,表之间使用逗号分割,并使用WHERE语句来设定查询条件;
B、SELECT 命令可以读取一条或者多条记录;
C、可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据;
D、可以使用 WHERE 语句来包含任何条件;
E、可以使用 LIMIT 属性来设定返回的记录数
SELECT field1, field2,...fieldN FROM table_name1, table_name2
WHERE condition1 AND condition2
A、使用 AND 或者 OR 指定一个或多个条件;
B、WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令;
C、WHERE 子句类似于程序语言中的 if 条件;
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
A、可以同时更新一个或多个字段;
DELETE FROM table_name [WHERE Clause]
A、如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除;
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
A、可以设定多个字段来排序;
B、可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列;
UNION、LIKE、GROUP BY、JOIN、NULL、索引、临时表等等,更多用法可参考专业教程系统学习。
下一节《Python量化数据仓库搭建系列2:Python操作数据库》
(1)在PC端打开恒有数金融数据社区(https://udata.hs.net) 网站主页,点击注册账号;
(2)使用手机号注册,设置密码,并勾选注册协议等;
(3)首页右上角,点击登录按钮,进入登录页面;
(1)在数据页面,查看数据目录;
(2)在订阅页面,下单免费的体验套餐;
(3)在页面右侧,点击新人礼包,领取新人一折券(活动2021-12-31截止);
(4)使用一折券订阅套餐;
(5)在页面右上角,点击查看订阅信息
(1)在数据页面,点击预览或页面右侧在线预览
(2)在页面中,填写查询条件,点击查询即可查看数据,点击导出即可下载数据
(1)在页面右上角,点击进入总览页面,获取Token;
(2)参考帮助文档或者数据页面接口文档中代码示例,将示例中的Token替换为自己的Toekn,使用数据接口获取数据;
更多产品使用教程详见https://udata.hs.net/help/195
恒生电子是一家以“让金融变简单”为使命的金融科技公司,总部位于中国杭州。1995年成立,2003年在上海证券交易所主板上市(600570.SH)。恒生聚焦金融行业,致力于为证券、期货、基金、信托、保险、银行、交易所、私募等机构提供整体解决方案和服务。
恒生已连续13年入选FINTECH100全球金融科技百强榜单,2020年排名第40位。目前拥有超过9000名员工,其中研发人员占比约60%。多年来,恒生以技术服务为核心,凭借多年金融IT建设经验,以及对互联网的深刻洞察和理解,用优质的产品与服务,持续赋能金融机构创新发展。 同时,恒生还积极履行企业社会责任,在投资者教育、扶贫济困、关爱自闭症儿童等领域持续贡献力量,实现企业与社会共同可持续发展。
恒有数金融数据社区(https://udata.hs.net) ,源自恒生的金融数据开放和可视化社区,旨在为量化投资爱好者、金融从业人员、高校师生、政府机构和财经媒体等人群提供专业的金融数据服务,满足不同用户丰富多样的数据分析和投资研究需求。
恒有数提供涵盖股票、基金、债券、期权期货、港股等金融数据(数据目录见[附录1])。提供在线预览、在线下载和在线调试等功能,简单高效的API接口(接口语言包括HTTP、Python、MATLAB、Java),丰富的接口文档与帮助文档,使得用户可以方便快捷地获取数据。
未来,恒有数还会继续扩充专业数据,完善产品功能,不断提升服务能力。
(1)提供涵盖股票、基金、债券、期权期货、港股等品种的基本信息、市场数据、财务数据等,共计142个数据接口;提供多种数据接口语言,包括http、Python、MATLAB、Java;并提供详细的数据接口说明文档与各种语言的使用示例;
(2)提供在线化数据服务,包括在线预览、在线下载、在线调试,实现零代码获取数据;同时提供社区社群的在线服务,给用户提供及时专业的解答与帮助;
(3)提供金融基础知识、金融数据分析、数据挖掘等视频教程服务;
(4)计划提供在线可视化工具,包括图表模板库、在线画板、金融数据海报等;整合现有短视频编辑工具,并与金融数据接口联动,提供数据图表和数据海报的自动与订阅服务;
(5)计划提供因子库与衍生指标计算服务、策略开发与回测平台,并整合现有的模拟仿真平台,为用户提供一站式全流程的量化策略研究服务;
(1)在线数据服务,登录即用;无需搭建本地数据库,无需下载数据到本地;
(2)不限次,不限量,不限调用次数,不限调用数据量;
(3)数据丰富,包含股票基金债券等全品种数据、基本面数据及行情数;
(4)持续更新,已包含全量30年历史数据,数据保持每日更新;
(5)取数便捷,支持在线预览、下载和在线调试,提供简单高效的API接口;
(6)支持多种语言,接口支持http、Python、MATLAB、Java语言;
(7)保障稳定不宕机,专业团队,专人维护,实时响应;
(1)量化开发者,量化基础学习、策略研究、指标定制、策略开发和回测、模拟仿真等;
(2)金融从业者,金融数据分析,研究报告等;
(3)高校师生,财经相关课程学习与实践,金融基础知识、Python金融数据分析、金融工程等课程学习;财经类课程的课程设计、课题研究与论文撰写等;
(4)财经媒体,金融数据报道,数据图表和短视频制作;
(5)泛金融爱好者,了解金融市场基础知识;
个人用户,可以通过恒有数官网(https://udata.hs.net),在订阅页面选择适当的套餐进行订阅(目前有新人礼包活动,限时领取1折券)。各套餐定价(单位:元)见下表:
注:金融数据和A股数据产品中,包含期权期货和债券相关数据;
高校客户,可通过网页中的在线客服联系商务,进行洽谈。
如下图所示:
高校提供校园网IP等信息,并确定采购数据范围、使用权限及总并发性能。高校只需将恒有数产品简介、使用方法与网址链接,放置在图书馆电子资源目录即可。不需要安排专门的老师管理分发账号;在校师生可按实际需要,注册账号使用数据,不限账户数。
我们将校园网IP加入恒有数网关白名单,配置该IP对应的数据范围、使用权限与总并发性能;完成开发、测试与交付流程。
教师或学生在恒有数网页注册账号并登录网站,在个人总览页面获取Token;按照数据页面的说明文档与帮助页面的取数教程,获取对应的金融数据。
当教师或学生所处的网络环境是校园网环境,使用恒有数数据接口时,该账号将会享有对应高校所购置的数据权限与性能。当网络环境处于非校园网时,教师或学生使用恒有数的流程与普通用户流,需要自行下单订阅,来获取数据权限。
教师和学生还可以加入恒有数社区社群。师生在取数用数过程中遇到问题或疑问,可以通过发帖、发消息联系我们工作人员,我们将会及时提供专业答复。
公司机构用户,可通过网页中的在线客服联系商务,进行洽谈。
对接方式:可参考高校合作对接方式,亦可依据实际使用场景与需求进行深入商谈;
(1)在恒有数主页(https://udata.hs.net) 完成注册登录,可用手机号或微信进行注册登录;
(2)订阅页面提供多品种产品、多种时长可供选择,下单订阅后对应数据权限随即开通;
(3)获取数据的方式有数据预览页面在线下载与高效的API数据接口,接口支持Python、MATLAB、Java、HTTP共4种语言;
(1)在线下载,无需安装编程环境,在恒有数网页预览页面即可在线下载数据;
(2)Python语言,安装3.0以上版本的Python;安装函数包pandas、PyYAML、requests;
(3)MATLAB语言,安装MATLAB 2012a或更高版本;
(4)Java语言,安装Java1.8环境,配置maven与commons;
(5)Http接口,安装Postman接口调试软件;或者其他可调试http接口的环境;
(1)安装3.0以上版本的Python,按需求安装IDE软件;(详细配置步骤,见附录2)
(2)安装基础函数包pandas、PyYAML、requests;
(3)安装恒有数函数包hs_udata;
(4)在数据接口页面,获取接口名称、请求参数及Python代码示例;编写脚本并执行;
注:使用教程见https://udata.hs.net/help/294;
(1)安装2012a或更高版本的MATLAB软件;
(2)在MATLAB中,配置hs_udata工具箱;
(3)在数据接口页面,获取接口名称、请求参数及MATLAB代码示例;编写脚本并执行;
注:使用教程见https://udata.hs.net/help/303;
(1)安装Java1.8环境;
(2)配置hs_udata-SDK包;
(3)在数据接口页面,获取接口名称、请求参数及Java代码示例;编写脚本并执行;
注:使用教程见https://udata.hs.net/help/304;
(1)新建GET或POST请求;
(2)设置请求方式和URL地址,参考数据页面http示例代码;
(3)在Headers中设置Token;在Params中设置输入参数;
(4)点击Send发送请求;
注:使用教程见https://udata.hs.net/help/293;
Python语言示例:
from hs_udata import set_token,trading_calendar
set_token(token = 'xxxxxxxxxxxxxxxxxx')
data = trading_calendar(secu_market=’83’)
print(data.head())
该示例表示,获取沪深证券交易所近1年的交易日历数据,并打印前5行数据;
Python语言示例:
from hs_udata import set_token,stock_list
set_token(token = 'xxxxxxxxxxxxxxxxxx')
data = stock_list()
print(data.head())
(3) 股票分钟行情(stock_quote_minutes)
Python语言示例:
from hs_udata import set_token,stock_quote_minutes
set_token(token = 'xxxxxxxxxxxxxxxxxx')
data = stock_quote_minutes(en_prod_code="000001.SZ",
begin_date="20210805",end_date="20210809")
print(data.head())
该示例表示,获取000001.SZ股票,20210805至20210809的分钟行情数据,并打印前5行数据;
(4) 期权资料(fut_basic)
Python语言示例:
from hs_udata import set_token, fut_basic
set_token(token = 'xxxxxxxxxxxxxxxxxx')
data = fut_basic()
print(data.head())
该示例表示,获取全部期权合约数据,并打印前5行数据;
(5) 期货盘后分钟切片(fut_quote_minute)
Python语言示例:
from hs_udata import set_token, fut_quote_minute
set_token(token = 'xxxxxxxxxxxxxxxxxx')
data = fut_quote_minute(en_prod_code=’SC2009.INE’, begin_date=’2021-05-15’, end_date=’2021-05-20’)
print(data.head())
该示例表示,获取期货合约’SC2009.INE’,在2021-05-15~2021-05-20时间范围内分钟行情数据,并打印前5行数据;
(更多数据接口使用说明,见网站数据页面:https://udata.hs.net/datas/202)
网站首页底部二维码与群号:
直接扫码关注、进群:
网站点击右侧“智能客服”标志,即可在线咨询相关问题。
如图所示:
电话:0571-26695555-7
邮箱:gtn@hundsun.com
地址:浙江省杭州市滨江区江南大道3588号恒生大厦
编号 | 一级目录 | 二级目录 | 数据名称 | 接口名称 |
---|---|---|---|---|
1 | 1.A股数据 | 1.1基础数据 | 1.1.1 股票列表 | stock_list |
2 | 1.A股数据 | 1.1基础数据 | 1.1.2 交易日历 | trading_calendar |
3 | 1.A股数据 | 1.1基础数据 | 1.1.3 上市新股 | ipo_list |
4 | 1.A股数据 | 1.1基础数据 | 1.1.4 公司简介 | company_profile |
5 | 1.A股数据 | 1.1基础数据 | 1.1.5 股票简介 | stock_Info |
6 | 1.A股数据 | 1.1基础数据 | 1.1.6 高管简介 | leader_profile |
7 | 1.A股数据 | 1.1基础数据 | 1.1.7 ST股票列表 | st_stock_list |
8 | 1.A股数据 | 1.1基础数据 | 1.1.8 沪深港通成分股 | shszhk_stock_list |
9 | 1.A股数据 | 1.2市场行情 | 1.2.1 股票日行情 | stock_quote_daily |
10 | 1.A股数据 | 1.2市场行情 | 1.2.2 股票周行情 | stock_quote_weekly |
11 | 1.A股数据 | 1.2市场行情 | 1.2.3 股票月行情 | stock_quote_monthly |
12 | 1.A股数据 | 1.2市场行情 | 1.2.4 股票年行情 | stock_quote_yearly |
13 | 1.A股数据 | 1.2市场行情 | 1.2.5 资金流向 | money_flow |
14 | 1.A股数据 | 1.2市场行情 | 1.2.6 停牌列表 | suspension_list |
15 | 1.A股数据 | 1.2市场行情 | 1.2.7 十大股东 | shareholder_top10 |
16 | 1.A股数据 | 1.2市场行情 | 1.2.8 十大流通股东 | float_shareholder_top10 |
17 | 1.A股数据 | 1.2市场行情 | 1.2.9 每日龙虎榜 | lh_daily |
18 | 1.A股数据 | 1.2市场行情 | 1.2.10 个股龙虎榜 | lh_stock |
19 | 1.A股数据 | 1.2市场行情 | 1.2.11 分钟行情 | stock_quote_minutes |
20 | 1.A股数据 | 1.2市场行情 | 1.2.12 沪深港通资金流 | shszhk_capitalflow |
21 | 1.A股数据 | 1.2市场行情 | 1.2.13 沪深港通十大成交股 | shszhk_deal_top10 |
22 | 1.A股数据 | 1.2市场行情 | 1.2.14 沪深港通涨跌分布 | shszhk_distribution |
23 | 1.A股数据 | 1.2市场行情 | 1.2.15 沪深港通十大涨幅股 | shszhk_change_top10 |
24 | 1.A股数据 | 1.2市场行情 | 1.2.16 股票代码列表(用于行情查询) | quote_stocklist |
25 | 1.A股数据 | 1.3市场数据 | 1.3.1 行业分类 | Industry_category |
26 | 1.A股数据 | 1.3市场数据 | 1.3.2 指数成分股 | Index_constituent |
27 | 1.A股数据 | 1.3市场数据 | 1.3.3 机构持仓 | org_hold |
28 | 1.A股数据 | 1.3市场数据 | 1.3.4 股东数量 | holder_num |
29 | 1.A股数据 | 1.3市场数据 | 1.3.5 限售解禁流通时间表 | restricted_schedule |
30 | 1.A股数据 | 1.3市场数据 | 1.3.6 股东股权质押 | holder_pledge |
31 | 1.A股数据 | 1.3市场数据 | 1.3.7 股东增减持 | holder_Increase |
32 | 1.A股数据 | 1.3市场数据 | 1.3.8 股票质押式回购 | pledge_repo |
33 | 1.A股数据 | 1.3市场数据 | 1.3.9 个股股权质押 | stock_pledge |
34 | 1.A股数据 | 1.3市场数据 | 1.3.10 大宗交易 | block_trade |
35 | 1.A股数据 | 1.3市场数据 | 1.3.11 融资融券 | margin_trading |
36 | 1.A股数据 | 1.3市场数据 | 1.3.12 融资融券区间统计 | interval_margin_trading |
37 | 1.A股数据 | 1.3市场数据 | 1.3.13 融资融券交易历史明细 | margin_trade_detail |
38 | 1.A股数据 | 1.3市场数据 | 1.3.14 融资融券交易总量历史查询 | margin_trade_total |
39 | 1.A股数据 | 1.3市场数据 | 1.3.15 股票分红 | stock_dividend |
40 | 1.A股数据 | 1.3市场数据 | 1.3.16 股票增发 | stock_additional |
41 | 1.A股数据 | 1.3市场数据 | 1.3.17 上市以来增发统计 | stock_additional_all |
42 | 1.A股数据 | 1.3市场数据 | 1.3.18 股票配股 | stock_allotment |
43 | 1.A股数据 | 1.3市场数据 | 1.3.19 业绩预增列表 | stock_asforecastabb |
44 | 1.A股数据 | 1.3市场数据 | 1.3.20 首次减持计划列表 | stock_asunderweight |
45 | 1.A股数据 | 1.3市场数据 | 1.3.21 首次增持计划列表 | stock_asoverweight |
46 | 1.A股数据 | 1.3市场数据 | 1.3.22 股权转让列表 | stock_asrighttransfer |
47 | 1.A股数据 | 1.3市场数据 | 1.3.23 举牌列表 | stock_asraising |
48 | 1.A股数据 | 1.4财务数据 | 1.4.1 预约披露日 | schedule_disclosure |
49 | 1.A股数据 | 1.4财务数据 | 1.4.2 股票关键指标 | stock_key_indicator |
50 | 1.A股数据 | 1.4财务数据 | 1.4.3 报告期会计数据 | accounting_data |
51 | 1.A股数据 | 1.4财务数据 | 1.4.4 现金流量表 | financial_cashflow |
52 | 1.A股数据 | 1.4财务数据 | 1.4.5 利润表 | financial_income |
53 | 1.A股数据 | 1.4财务数据 | 1.4.6 资产负债表 | financial_balance |
54 | 1.A股数据 | 1.4财务数据 | 1.4.7 利润表-一般企业(单季) | financial_gene_qincome |
55 | 1.A股数据 | 1.4财务数据 | 1.4.8 利润表-商业银行(单季) | financial_bank_qincome |
56 | 1.A股数据 | 1.4财务数据 | 1.4.9 利润表-证券公司(单季) | financial_secu_qincome |
57 | 1.A股数据 | 1.4财务数据 | 1.4.10 利润表-保险公司(单季) | financial_insu_qincome |
58 | 1.A股数据 | 1.4财务数据 | 1.4.11 现金流量表-一般企业(单季) | financial_gene_qcashflow |
59 | 1.A股数据 | 1.4财务数据 | 1.4.12 现金流量表-商业银行(单季) | financial_bank_qcashflow |
60 | 1.A股数据 | 1.4财务数据 | 1.4.13 现金流量表-证券公司(单季) | financial_secu_qcashflow |
61 | 1.A股数据 | 1.4财务数据 | 1.4.14 现金流量表-保险公司(单季) | financial_insu_qcashflow |
62 | 1.A股数据 | 1.4财务数据 | 1.4.15 上市公司业绩预告 | performance_forecast |
63 | 1.A股数据 | 1.4财务数据 | 1.4.16 上市公司业绩快报 | performance_letters |
64 | 1.A股数据 | 1.4财务数据 | 1.4.17 上市公司业绩快报(单季) | performance_letters_q |
65 | 1.A股数据 | 1.4财务数据 | 1.4.18 主营业务构成 | main_composition |
66 | 1.A股数据 | 1.4财务数据 | 1.4.19 主要客户及供应商 | trading_parties |
67 | 1.A股数据 | 1.4财务数据 | 1.4.20 公司历年审计意见 | audit_opinion |
68 | 1.A股数据 | 1.4财务数据 | 1.4.21 公司每股指标 | per_share_index |
69 | 1.A股数据 | 1.4财务数据 | 1.4.22 公司盈利能力 | profitability |
70 | 1.A股数据 | 1.4财务数据 | 1.4.23 公司成长能力(同比) | growth_capacity |
71 | 1.A股数据 | 1.4财务数据 | 1.4.24 公司杜邦分析 | du_pont_analysis |
72 | 1.A股数据 | 1.4财务数据 | 1.4.25 衍生财务指标 | deri_fin_indicators |
73 | 1.A股数据 | 1.4财务数据 | 1.4.26 单季度财务指标 | q_financial_indicator |
74 | 1.A股数据 | 1.4财务数据 | 1.4.27 估值基本信息 | valuation_info |
75 | 1.A股数据 | 1.4财务数据 | 1.4.28 企业价值 | corporation_value |
76 | 1.A股数据 | 1.5科创板 | 1.5.1 科创板IPO申报列表 | star_ipodeclare |
77 | 1.A股数据 | 1.5科创板 | 1.5.2 科创板公司概况 | star_companyprofile |
78 | 1.A股数据 | 1.6新三板 | 1.6.1 新三板股票基本信息 | neeq_basic |
79 | 1.A股数据 | 1.6新三板 | 1.6.2 新三板公司基本信息 | neeq_company |
80 | 1.A股数据 | 1.6新三板 | 1.6.3 新三板管理层任职 | neeq_leader |
81 | 1.A股数据 | 1.6新三板 | 1.6.4 新三板高管层成员数量 | neeq_leader_num |
82 | 1.A股数据 | 1.6新三板 | 1.6.5 新三板公司行业划分 | neeq_industry |
83 | 2.基金数据 | 2.1基本数据 | 2.1.1 基金列表 | fund_list |
84 | 2.基金数据 | 2.1基本数据 | 2.1.2 基金管理人 | fund_manager_company |
85 | 2.基金数据 | 2.1基本数据 | 2.1.3 基金经理 | fund_manager |
86 | 2.基金数据 | 2.1基本数据 | 2.1.4 基金概况 | fund_profile |
87 | 2.基金数据 | 2.1基本数据 | 2.1.5 相关机构 | fund_institutions |
88 | 2.基金数据 | 2.1基本数据 | 2.1.6 ETF基本资料 | fund_etf |
89 | 2.基金数据 | 2.1基本数据 | 2.1.7 基金规模 | fund_size |
90 | 2.基金数据 | 2.1基本数据 | 2.1.8 基金费率 | fund_charge_rate |
91 | 2.基金数据 | 2.1基本数据 | 2.1.9 上市指标 | fund__index |
92 | 2.基金数据 | 2.1基本数据 | 2.1.10 基金分类 | fund_type |
93 | 2.基金数据 | 2.1基本数据 | 2.1.11 所属风格 | fund_style |
94 | 2.基金数据 | 2.1基本数据 | 2.1.12 公募基金持有人 | fund_holder |
95 | 2.基金数据 | 2.2基金行情 | 2..2.1 基金日行情历史数据 | fund_quote_daily_history |
96 | 2.基金数据 | 2.2基金行情 | 2..2.2 基金日行情 | fund_quote_daily |
97 | 2.基金数据 | 2.2基金行情 | 2..2.3 基金周行情 | fund_quote_weekly |
98 | 2.基金数据 | 2.2基金行情 | 2..2.4 基金月行情 | fund_quote_monthly |
99 | 2.基金数据 | 2.2基金行情 | 2..2.5 基金年行情 | fund_quote_yearly |
100 | 2.基金数据 | 2.2基金行情 | 2..2.6 基金净值指标 | fund_net_value |
101 | 2.基金数据 | 2.2基金行情 | 2..2.7 货币基金收益 | moneyfund_performance |
102 | 2.基金数据 | 2.2基金行情 | 2..2.8 股票投资明细 | fund_stock_detail |
103 | 2.基金数据 | 2.2基金行情 | 2..2.9 资产配置 | fund_asset |
104 | 2.基金数据 | 2.2基金行情 | 2..2.10 持有人结构 | fund_holder |
105 | 2.基金数据 | 2.2基金行情 | 2..2.11 基金区间涨幅 | fund_rangerise |
106 | 2.基金数据 | 2.2基金行情 | 2..2.12 基金同类排名 | fund_rank |
107 | 3.期权期货 | 3.1期权期货 | 3.1.1 期权资料 | fut_basic |
108 | 3.期权期货 | 3.1期权期货 | 3.1.2 期货盘后分钟切片 | fut_quote_minute |
109 | 3.期权期货 | 3.1期权期货 | 3.1.3 期货代码列表 | fut_list |
110 | 3.期权期货 | 3.1期权期货 | 3.1.4 股指期货日多空占比 | fut_count_rank |
111 | 3.期权期货 | 3.1期权期货 | 3.1.5 期货实际合约持仓龙虎榜 | fut_holding_lh |
112 | 3.期权期货 | 3.1期权期货 | 3.1.6 期货合约品种 | fut_contract_type |
113 | 4.债券数据 | 4.1债券数据 | 4.1.1 可转债转股价格变动 | con_price |
114 | 4.债券数据 | 4.1债券数据 | 4.1.2 可转债转股时间提示 | con_time |
115 | 4.债券数据 | 4.1债券数据 | 4.1.3 可转债详情 | con_detail |
116 | 4.债券数据 | 4.1债券数据 | 4.1.4 可转债日历 | con_calender |
117 | 5.港股数据 | 5.1基础数据 | 5.1.1 港股上市列表 | hk_list |
118 | 5.港股数据 | 5.1基础数据 | 5.1.2 港股IPO | hk_ipo |
119 | 5.港股数据 | 5.1基础数据 | 5.1.3 港股公司基本资料 | hk_company |
120 | 5.港股数据 | 5.1基础数据 | 5.1.4 港股股票基本信息 | hk_secu |
121 | 5.港股数据 | 5.1基础数据 | 5.1.5 港股管理层任职 | hk_leader |
122 | 5.港股数据 | 5.2行情数据 | 5.2.1 港股日行情 | hk_daily_quote |
123 | 5.港股数据 | 5.2行情数据 | 5.2.2 港股周行情 | hk_weekly_quote |
124 | 5.港股数据 | 5.2行情数据 | 5.2.3 港股月行情 | hk_monthly_quote |
125 | 5.港股数据 | 5.2行情数据 | 5.2.4 港股年行情 | hk_yearly_quote |
126 | 5.港股数据 | 5.2行情数据 | 5.2.5 港股区间行情 | hk_section_quote |
127 | 5.港股数据 | 5.2行情数据 | 5.2.6 港股日行情卖空成交指标 | hk_daily_quote_short |
128 | 5.港股数据 | 5.2行情数据 | 5.2.7 港股周行情卖空成交指标 | hk_weekly_quote_short |
129 | 5.港股数据 | 5.2行情数据 | 5.2.8 港股月行情卖空成交指标 | hk_monthly_quote_short |
130 | 5.港股数据 | 5.2行情数据 | 5.2.9 港股年行情卖空成交指标 | hk_yearly_quote_short |
131 | 5.港股数据 | 5.2行情数据 | 5.2.10 港股区间行情卖空指标 | hk_section_quote_short |
132 | 5.港股数据 | 5.2行情数据 | 5.2.11 港股通切片代码列表 | hk_minutes_hkscclist |
133 | 5.港股数据 | 5.2行情数据 | 5.2.12 港股通盘后分钟切片 | hk_minutes_hkscc |
134 | 5.港股数据 | 5.3市场数据 | 5.3.1 港股股本 | hk_share_stru |
135 | 5.港股数据 | 5.3市场数据 | 5.3.2 港股公司行业分类 | hk_exgindustry |
136 | 5.港股数据 | 5.3市场数据 | 5.3.3 港股资本结构 | hk_cap_structure |
137 | 5.港股数据 | 5.3市场数据 | 5.3.4 港股盈利能力 | hk_profit_ability |
138 | 5.港股数据 | 5.3市场数据 | 5.3.5 港股每股指标 | hk_per_share_index |
139 | 5.港股数据 | 5.3市场数据 | 5.3.6 港股偿债能力 | hk_solvency |
140 | 5.港股数据 | 5.3市场数据 | 5.3.7 港股主营收入构成 | hk_mainincomestru |
141 | 5.港股数据 | 5.3市场数据 | 5.3.8 港股分红 | hk_dividend |
142 | 5.港股数据 | 5.3市场数据 | 5.3.9 港股回购 | hk_buyback |
注册流程:https://udata.hs.net/help/206
获取Token:https://udata.hs.net/help/292
HTTP接口教程:https://udata.hs.net/help/293
Python安装教程:https://udata.hs.net/help/636
Python取数教程:https://udata.hs.net/help/294
MATLAB取数教程:https://udata.hs.net/help/303
Java取数教程:https://udata.hs.net/help/304
恒有数(https://udata.hs.net/home?channel_source=vnpy )
恒有数函数包
Python SDK在线安装:pip install hs_udata
Python SDK下载:https://udata.hs.net/data/udata/udata-static/help/hs_udata-Python%20SDK.rar
MATLAB工具箱下载:https://udata.hs.net/data/udata/udata-static/help/hs_udata-MATLAB.rar
Java SDK下载:https://udata.hs.net/data/udata/udata-static/help/hs_udata-java-sdk.rar
恒有数(https://udata.hs.net/home?channel_source=vnpy )
运行环境
(1)配置Java1.8环境,安装jdk软件,下载地址为:https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html;
(2)安装IDE,下载地址为:https://www.jetbrains.com/idea/download/#section=windows;
(3)配置maven,下载地址为:http://maven.apache.org/download.cgi;
(4)配置commons,下载地址为:https://commons.apache.org/;
(5)下载恒有数Java SDK文件,下载地址为:https://udata.hs.net/data/udata/udata-static/help/hs_udata-java-sdk.rar ,并完成相关配置;
使用步骤
(1)登录平台,获取Token;详细步骤见获取Token;
(2)在数据页面,获取接口名称、请求参数,并查看返回参数及代码示例;
(3)编写Java脚本文件,并执行,如下所示:
import com.hundsun.UdataRequest;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class UdataTest {
public static void main(String[] args) throws IOException {
String appToken = "xxxxxxxxxxxxxxxxxx";
String url = "https://udata.hs.net/udata/business/v1/app_services/basic_data/trading_calendar";
Map<String, Object> mapParam = new HashMap<>(12);
mapParam.put("secu_market","72");
String resultGet = UdataRequest.sendGet(appToken, url, mapParam);
String resultPost = UdataRequest.sendPost(appToken, url, mapParam);
}
}
恒有数(https://udata.hs.net/home?channel_source=vnpy )
运行环境
(1)安装2012a以上版本的MATLAB,官网为:https://www.mathworks.com/;
(2)下载恒有数MATLAB工具箱:https://udata.hs.net/data/udata/udata-static/help/hs_udata-MATLAB.rar;
(3)文件解压后,放置到软件安装目录下\toolbox文件夹;执行hs_udata_setup.m文件,进行工具箱安装;
使用步骤
(1)登录平台,获取Token;详细步骤见获取Token;
(2)在数据页面,获取接口名称、请求参数,并查看返回参数及代码示例;
(3)编写MATLAB脚本文件,并执行,如下所示:
clc;clear;close all;
% 设置Token
appToken = "xxxxxxxxxxxxxxxxxx";
% 设置URL
url = "https://udata.hs.net/udata/business/v1/app_services/basic_data/stock_list";
% 设置入参
Params.fields = "secu_abbr,listed_state,secu_market";
Params.listed_state = "1";
% 调用GET请求方法
[Get_Data,Get_error_code,Get_error_info] = hs_udata.sendGet(url,appToken,Params);
% 调用POST请求方法
[Post_data,Post_error_code,Post_error_info] = hs_udata.sendPost(url,appToken,Params);
数据导出
将数据导出为Excel文件
在上述代码最后,添加代码
# 写出Excel文件
xlswrite('Get_Data.xlsx', [fieldnames(Get_Data) struct2cell(Get_Data)]);
xlswrite('Post_data.xlsx', [fieldnames(Post_data) struct2cell(Post_data)]);
恒有数(https://udata.hs.net/home?channel_source=vnpy )
运行环境
(1)安装3.0以上版本的python,下载地址为:https://www.python.org/downloads/;
(2)按需求安装Python IDE,如PyCharm、Jupyter等;
(3)安装基础函数包pandas、PyYAML、requests(安装方法见python使用教程);
(4)安装函数包hs_udata:
(a)使用命令行安装:pip install hs_udata
(b)whl文件安装,下载地址为:https://udata.hs.net/data/udata/udata-static/help/hs_udata-Python%20SDK.rar ;(安装方法见python使用教程)
使用步骤
(1)登录平台,获取Token;详细步骤见获取Token;
(2)在数据页面,获取接口名称、请求参数,并查看返回参数及代码示例;
(3)编写python脚本,并执行,如下所示:
from hs_udata import set_token,stock_list # 引入hs_udata模块中set_token和stock_list
set_token(token = 'xxxxxxxxxxxxxxxxxx') # 设置Token
data = stock_list() # 获取 股票列表数据,返回格式为dataframe
print(data.head()) # 打印数据前5行
secu_abbr chi_name listed_state ... secu_market listed_sector hs_code
0 平安银行 平安银行股份有限公司 上市 ... 深圳证券交易所 主板 000001.SZ
1 万 科A 万科企业股份有限公司 上市 ... 深圳证券交易所 主板 000002.SZ
2 PT金田A 金田实业(集团)股份有限公司 终止 ... 深圳证券交易所 主板 000003.SZ
3 国华网安 深圳国华网安科技股份有限公司 上市 ... 深圳证券交易所 主板 000004.SZ
4 ST 星 源 深圳世纪星源股份有限公司 上市 ... 深圳证券交易所 主板 000005.SZ
数据导出
将数据导出为Excel、CSV、TXT文件
a、安装函数包openpyxl
b、在上述代码最后,添加代码
data.to_excel('股票列表.xlsx') # 写出Excel文件
data.to_csv('股票列表.csv',sep=',',encoding='utf_8_sig') # 写出CSV文件
data.to_csv('股票列表.txt',sep=' ',encoding='utf_8_sig') # 写出TXT文件
账号注册
(1)点击恒有数(https://udata.hs.net/home?channel_source=vnpy ) 首页右上角的登录|注册按钮,可进入用户登录和用户注册页面。
(2)点击恒有数页面右上方的注册按钮,进入LIGHT云平台的注册页面。
(3)仔细阅读《用户注册协议》和《隐私政策声明》后,输入手机号、短信验证码并设置账号密码,勾选同意《用户注册协议》和《隐私政策声明》,完成LIGHT云账号的注册。
(4)账号注册成功后,即可使用LIGHT云账号在恒有数的登录页面进行登录。
账号登录
(1)点击恒有数页面右上方的登录按钮,进入LIGHT云平台的登录页面。
(a)使用账号密码登录
填写您注册时的手机号、密码及验证码,点击【登录】按钮。
(b)使用手机验证码登录
填写您注册时的手机号以及短信验证码,点击【登录】按钮。
(2)登录成功后,打开总览页面获取Token来获取数据。
忘记密码
(1)点击LIGHT云登录页面右下角【忘记密码】按钮。
(2)按页面提示信息输入手机号或邮箱找回密码。
(3)通过手机号验证:输入新密码及手机校验码,即可完成新密码的设置
(4)通过电子邮箱验证:验证邮件已发往邮箱,进入邮箱点击链接完成验证,验证成功后输入新密码,即可完成新密码的设置
恒有数(https://udata.hs.net/home?channel_source=vnpy )
安装包下载
在官网,选择对应操作系统及版本
例如:在64位Windows环境下安装Python 3.9.5
a、打开官网安装包下载地址:https://www.python.org/downloads/
b、点击Windows,进入该环境的下载详情页,在页面中点击 Windows installer (64-bit) 进行下载;
或者
a、打开官网安装包下载地址:https://www.python.org/downloads/
b、在页面下方点击 Python 3.9.5,进入该版本详情页,在页面下方点击Windows installer (64-bit)进行下载;
注:恒有数金融数据社区Python SDK是基于3.x版本环境开发的,需要用户安装3.x版本的软件;
软件安装(Windows环境)
a、双击运行安装包,注意勾选 Add Python 3.x to PATH;
b、按提示与具体需要修改安装设置,直至完成安装;
Python IDE安装(集成开发环境)
推荐使用PyCharm或者Jupyter,市面上还有很多优秀的IDE,大家可以按自己的习惯进行选择;
例如:
PyCharm:
下载地址:https://www.jetbrains.com/pycharm/download/#section=windows
可选择Community免费版
Anaconda:
下载地址:https://www.anaconda.com/products/individual
在页面最下方,选择对应的操作系统与版本;安装完成后,可打开Jupyter,进行使用;
库函数安装
在cmd环境中安装(Windows环境)
a、将python安装路径添加至系统环境变量(计算机—属性—高级系统设置—系统属性—环境变量—系统变量—Path—编辑—新建—输入python安装路径—确定),如果在安装时,勾选了Add Python 3.x to PATH,则无需此操作;
b、打开cmd命令框,输入:pip install 函数名
例如:安装pandas包
在cmd中,输入:pip install pandas
然后回车(点击enter键),即可完成安装
通过whl文件安装
a、下载函数包的whl安装文件,在https://pypi.org/中搜索并下载函数包的whl文件(也可选择其他第三方库);
b、将python安装路径添加至系统环境变量,操作过程与上述一致;
c、打开cmd命令框,输入:pip install 文件绝对路径
例如:安装hs_data包
在帮助文档《python取数教程》中,下载hs_data的whl安装文件,并放置在桌面,并获得文件的绝对路径为:C:\Users\admin\Desktop\hs_udata-0.1.0-py3-none-any.whl;(可通过选中文件,右击查看属性,获得文件位置的路径)
在cmd中,输入:pip install C:\Users\admin\Desktop\hs_udata-0.1.0-py3-none-any.whl
然后回车(点击enter键),即可完成安装
通过Python IDE进行安装
在PyCharm中,新建项目后,可通过File—Settings—Project Interpreter—点击加号“+”—搜索包的名称—选中需要安装的包及其版本,点击Install Package;
恒有数(https://udata.hs.net/home?channel_source=vnpy )
HTTP协议简介
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口,HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回请求的文件、错误消息、或者其它信息。
可以通过Postman软件,简单快速实现http取数,也可生成各类编程语言的取数代码。
Postman实现http接口取数
Postman是一款非常流行的API调试工具,简单方便,而且功能强大。
Postman安装包下载地址为https://www.getpostman.com/apps ,支持MAC、Windows和Linux。
Postman的取数过程:
(1)新建请求;
(2)设置请求方式和URL地址(支持GET和POST请求);
(3)在Headers中设置token;在Params中设置输入参数;
(4)点击Send发送请求;
编程语言实现http接口取数
可以使用Postman自动生成各种编写语言调用http接口的代码,包括Python、Java、C、PHP、Shell等等
例如:Python - http.client
import http.client
conn = http.client.HTTPSConnection("udata.sit.hs.net")
payload = ''
headers = {
'Application-Token': 'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
}
conn.request("GET", "/light_data/business/v1/app_services/juyuan_basicdata/stock_list?secu_market=83", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
例如: JavaScript - Fetch
var myHeaders = new Headers();
myHeaders.append("Application-Token", "xxxxxxxxxxxxxxxxxxxxxxxxxxx");
var requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
fetch("https://udata.sit.hs.net/light_data/business/v1/app_services/juyuan_basicdata/stock_list?secu_market=83", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));