【python量化交易】qteasy使用教程02 - 获取和管理金融数据
qteasy教程2 - 获取并管理金融数据
- `qteasy`教程2 - 获取并管理金融数据
- 开始前的准备工作
- 获取基础数据以及价格数据
- 下载交易日历和基础数据
- 查看股票和指数的基础数据
- 下载沪市股票数据
- 从本地获取股价数据
- 生成K线图
- 数据类型的查找
- 定期下载数据到本地
- 回顾总结
qteasy
教程2 - 获取并管理金融数据
qteasy
是一个完全本地化部署和运行的量化交易分析工具包,具备以下功能:
- 金融数据的获取、清洗、存储以及处理、可视化、使用
- 量化交易策略的创建,并提供大量内置基本交易策略
- 向量化的高速交易策略回测及交易结果评价
- 交易策略参数的优化以及评价
- 交易策略的部署、实盘运行
通过本系列教程,您将会通过一系列的实际示例,充分了解qteasy
的主要功能以及使用方法。
开始前的准备工作
在开始本教程前,请完成以下工作:
- 完成
qteasy
的安装并升级到最新版本 - 注册
tushare pro
账户并确保有一定的积分(大多数高级数据需要较多积分才能下载) - 完成
qteasy.cfg
文件的配置,将tushare_token
写入配置文件 - 完成
mysql
数据库的配置,并将数据库配置写入qteasy.cfg·
(可选项) - 完成
ta-lib
的安装 (可选项)
在上一篇教程中,我介绍了如何新建一个虚拟环境,并在新的虚拟环境中安装并初始化qteasy
,如果还没有完成这一步的朋友,请移步前一篇教程完成qteasy
的安装和基础配置。
另外,为了方便后续图表等功能的使用,建议使用jupyter notebook
来进行开发,您可以在新建的虚拟环境中运行以下命令安装jupyter notebook
:
pip install notebook
安装完成后,可以使用下面命令启动jupyter notebook
:
jupyter notebook
启动后,就可以在浏览器中的一个交互式开发环境中运行代码了,如下图所示:
如果不使用jupyter notebook
,也可以使用ipython
:
pip install ipython
ipython 运行在terminal中,但是对图表的支持没有那么好
获取基础数据以及价格数据
如上一篇教程介绍,刚刚初始化的qteasy是无法调用任何历史数据的,所有历史数据都必须首先下载到本地,保存到一个称为Datasource的数据仓库之后,才能完成后续所有需要数据的工作,例如调用历史数据,进行策略的回测和优化等等。
qteasy需要使用的数据种类很多,所有的数据都是保存在一些预定义的数据表中,Datasource就是一系列数据表的集合。其中最基础的数据表包括:
- trade_calendar - 交易日历数据,包括不同交易所的开市、闭市日期计划,每年底更新下一年的交易日历
- stock_basics - 股票基础信息,包括沪深股市所有股票的基本信息,包括代码、名称、全称、上市日期、分类等等基础信息
- index_basics - 指数基础信息,包括沪深股市所有指数的基本信息,包括代码、名称、全称等等信息
在配置好tushare_token以后,第一次导入qteasy时,如果系统未找到交易日历数据,会显示以下提示信息:
import qteasy as qt
UserWarning: trade calendar is not loaded, some utility functions may not work properly, to download trade calendar, run
"qt.refill_data_source(tables='trade_calendar')"warnings.warn(f'trade calendar is not loaded, some utility functions may not work '
qteasy提供了一个函数get_table_overview()来显示本地存储的数据信息,运行这个函数,可以打印出本地保存的数据表的清单,存储的数据量、占用的磁盘空间大小、以及数据范围等等。
import qteasy as qt
qt.get_table_overivew()
[Out]:
Analyzing local data source tables... depending on size of tables, it may take a few minutes
[########################################]62/62-100.0% Analyzing completed!or>>>>>ht>or>>
file://csv@qt_root/data/
Following tables contain local data, to view complete list, print returned DataFrame
Empty DataFrame
Columns: [has_data, size, records, min2, max2]
Index: []
如果本地数据源中没有数据,将会显示上面的内容。此时需要下载数据到本地数据源。
下载交易日历和基础数据
我们可以调用refill_data_source
函数下载交易日历和基础数据。这个函数是qteasy
的标准数据下载接口函数,所有的历史数据类型均可以通过此接口下载。这个函数的基本参数是tables,传入数据表的名称即可下载相应的数据到本地存储了。使用refill_data_source
下载交易数据时,qteasy
会自动进行数据清洗,排除重复数据,去除错误数据,发生错误自动重试,并将下载的数据合并到本地数据表中。目前qteasy
仅支持通过tushare
下载金融数据,未来还会增加其他的金融数据接口,丰富用户选择。
要下载前面提到的交易日历、股票和指数的基本信息,只需要运行下面的代码:
qt.refill_data_source(tables='trade_calendar, stock_basic, index_basic')
[out]:
Filling data source file://csv@qt_root/data/ ...
[########################################]9/9-100.0% <trade_calendar:SSE-XHKG>74804wrtn in ~9't
[########################################]3/3-100.0% <stock_basic:SSE-BSE>5365wrtn in ~1't
[########################################]7/7-100.0% <index_basic:SSE-OTH>10365wrtn in ~1't
数据下载过程中会显示一个进度条,下载完成后,再次运行qt.get_table_overview()
函数,可以看到数据已经成功下载到本地:
qt.get_table_overivew()
[Out]:
Analyzing local data source tables... depending on size of tables, it may take a few minutes
[########################################]62/62-100.0% Analyzing completed!or>>>>>ht>or>>
file://csv@qt_root/data/
Following tables contain local data, to view complete list, print returned DataFrameHas_data Size_on_disk Record_count Record_start Record_end
table
trade_calendar True 1.9MB 75K 19901012 20241231
stock_basic True 355KB 2K None None
index_basic True 3.4MB 10K None None
可以看到,三张数据表已经被下载到本地数据源,数据源的类型为"file://csv@qt_root/data/"
类型(即数据以csv
文件形式存储在qt根路径的/data/
路径下),包含三张数据表,其中交易日历的范围涵盖到2024年年底。
查看股票和指数的基础数据
上面的基础数据下载好之后,建议重新启动IDE,重新导入qteasy
。这时,我们就可以使用qteasy
筛选和查找股票/指数了。
查找股票/指数详细信息可以使用get_stock_info()
或者get_basic_info()
函数,两个函数功能相同,都可以根据输入的证券代码、名称或者关键字查找证券的信息,支持通配符或者模糊查找;如果同一个代码对应不同的qt_code
,例如股票000001
代表平安银行,对应qt_code: 000001.SZ
,而指数000001
代表上证指数,qt_code: 000001.SZ
,qteasy
会罗列出所有的证券信息:
import qteasy as qt# 通过完整的qt_code获取信息
qt.get_basic_info('000001.SZ')
[Out]:
found 1 matches, matched codes are {'E': {'000001.SZ': '平安银行'}, 'count': 1}
More information for asset type E:
------------------------------------------
ts_code 000001.SZ
name 平安银行
area 深圳
industry 银行
fullname 平安银行股份有限公司
list_status L
list_date 1991-04-03
-------------------------------------------# 如果不知道完整的qt_code,可以通过六位数字证券代码获取所有相关的证券信息,并列出他们的qt_code
qt.get_basic_info('000001')
found 4 matches, matched codes are {'E': {'000001.SZ': '平安银行'}, 'IDX': {'000001.CZC': '农期指数', '000001.SH': '上证指数'}, 'count': 3}
More information for asset type E:
------------------------------------------
ts_code 000001.SZ
name 平安银行
area 深圳
industry 银行
fullname 平安银行股份有限公司
list_status L
list_date 1991-04-03
-------------------------------------------
More information for asset type IDX:
------------------------------------------
ts_code 000001.CZC 000001.SH
name 农期指数 上证指数
fullname 农期指数 上证综合指数
publisher 郑州商品交易所 中证公司
category 商品指数 综合指数
list_date None 1991-07-15
-------------------------------------------# 通过中文名称关键字搜索相关证券代码
qt.get_basic_info('平安银行')
found 4 matches, matched codes are {'E': {'000001.SZ': '平安银行', '600928.SH': '西安银行'}, 'IDX': {'802613.SI': '平安银行养老新兴投资指数'}, 'count': 3}
More information for asset type E:
------------------------------------------
ts_code 000001.SZ 600928.SH
name 平安银行 西安银行
area 深圳 陕西
industry 银行 银行
fullname 平安银行股份有限公司 西安银行股份有限公司
list_status L L
list_date 1991-04-03 2019-03-01
-------------------------------------------
More information for asset type IDX:
------------------------------------------
ts_code 802613.SI
name 平安银行养老新兴投资指数
fullname 平安银行养老新兴投资指数
publisher 申万研究
category 价值指数
list_date 2017-01-03
-------------------------------------------# 有时候精确匹配证券名称无法找到结果
qt.get_basic_info('贵州钢绳')
No match found! To get better result, you can
- pass "match_full_name=True" to match full names of stocks and funds# 此时可以指定搜索全名,从而找到相关的证券
qt.get_basic_info('贵州钢绳', match_full_name=True)
found 1 matches, matched codes are {'E': {'600992.SH': '贵绳股份'}, 'count': 1}
More information for asset type E:
------------------------------------------
ts_code 600992.SH
name 贵绳股份
area 贵州
industry 钢加工
fullname 贵州钢绳股份有限公司
list_status L
list_date 2004-05-14
-------------------------------------------
在上面的例子中,系统只找到了类型为股票和指数的证券,如果还需要查找基金、期货等更多的证券信息,用同样的方法下载更多的基础数据表即可:
- fund_basic: 基金基础数据
- future_basic: 期货基础数据
除了查找股票或证券的基本信息以外,我们还能用qt.filter_stock()函数来筛选股票:
qt.filter_stocks(date='20240212', industry='银行', area='上海')
[Out]:name area industry market list_date exchange
qt_code
600000.SH 浦发银行 上海 银行 主板 1999-11-10 SSE
601229.SH 上海银行 上海 银行 主板 2016-11-16 SSE
601328.SH 交通银行 上海 银行 主板 2007-05-15 SSE
601825.SH 沪农商行 上海 银行 主板 2021-08-19 SSE
下载沪市股票数据
金融数据中最重要的数据类型非量价数据莫属。接下来,我们就来下载历史价格数据。
qteasy的历史数据全都是以K线数据的形式存储在数据表中的,目前支持的K线数据包括:
- 分钟K线 - 1分钟/5分钟/15分钟/30分钟/60分钟K线
- 日K线
- 周K线
- 月K线
我们同样使用qt.refill_data_source()函数下载股票数据。最常用的股票日K线数据保存在stock_daily表中。不过由于数据量较大,我们最好在下载数据时限定数据的范围,通过start_date/end_date参数,指定下载数据的起始日期,分批下载历史数据,否则,下载的过程将会非常漫长:
qt.refill_data_source(tables='stock_daily', start_date='20230101', end_date='20231231')
[Out]:
Filling data source file://csv@qt_root/data/ ...
[########################################]247/247-100.0% <stock_daily:20230104-20231229>97486200wrtn in ~49"
上面的代码下载了2023年全年所有已上市股票的日K线数据,同样,下面的代码可以用来下载常用指数(上证指数和沪深300指数)的日K线数据:
qt.refill_data_source(tables='index_daily', symbols='000001, 000300', start_date='20231231', end_date='20240208')
[Out]:
Filling data source file://csv@qt_root/data/ ...
[########################################]7/7-100.0% <index_basic:SSE-OTH>10365wrtn in ~1't
[########################################]2/2-100.0% <index_daily:000001.SH-000300.SH>97050wrtn in ~2"
从本地获取股价数据
当股价数据保存在本地之后,就可以随时提取出来使用了。
我们可以使用qt.get_history_data()
函数来获取股票的量价数据。这个函数时qteasy
的一个通用接口,可以用来获取各种类型的数据。在函数的参数中指定数据的类型(通过数据类型ID)、股票的代码以及其他参数,就可以获取相应的数据了。如果要获取刚刚下载的K线价格,需要设置数据类型为"open, high, low, close, vol"
以获取开盘价、最高价、最低价、收盘价和交易量:
qt.get_history_data(htypes='open, high, low, close, vol', shares='000001.SZ', start='20230101', end='20230201')
[Out]:
{'000001.SZ':open high low close vol2023-01-04 13.71 14.42 13.63 14.32 2189682.532023-01-05 14.40 14.74 14.37 14.48 1665425.182023-01-06 14.50 14.72 14.48 14.62 1195744.712023-01-09 14.75 14.88 14.52 14.80 1057659.112023-01-10 14.76 14.89 14.39 14.44 1269423.392023-01-11 14.45 14.78 14.39 14.67 830566.122023-01-12 14.77 14.77 14.53 14.67 625694.842023-01-13 14.67 14.95 14.55 14.95 949085.832023-01-16 14.95 15.28 14.85 15.08 1560039.892023-01-17 15.13 15.18 14.77 14.97 935834.542023-01-18 14.95 15.18 14.91 15.11 718434.032023-01-19 15.13 15.25 14.87 15.09 641875.202023-01-20 15.16 15.24 15.00 15.13 608590.082023-01-30 15.60 15.74 14.89 15.15 1374317.502023-01-31 15.24 15.51 14.96 14.99 1030497.842023-02-01 15.03 15.08 14.51 14.70 1653421.48}
上面函数的输出是一个字典,字典的键为shares参数指定的所有股票的代码,而值为一个DataFrame,包含该股票在指定期间的历史数据,这里我们指定了数据类型为K线量价数据。当然,我们也可以指定其他的数据类型,只要这些数据已经下载到了本地,就可以直接读取。
例如,指定数据类型htypes='pe, pb, total_mv’可以获取股票的市盈率、市净率和总市值等三项财务指标。如果某些指标存在缺失值的时候,可以定义填充方式填充缺失值,还可以对数据进行重新采样,将每日的数据变为每周或每小时数据。
关于get_history_data函数参数的详细解释,请参见qteasy文档
生成K线图
使用量价数据,更加方便易读的方法是将数据显示为K线图。
qteasy提供了qt.candle()函数,用于显示专业K线图,只要数据下载到本地后,就可以立即显示K线图:
qt.candle('600004.SH', start='20230101', end='20230301')
下载复权因子数据到本地后,就可以显示复权价格了:
qt.refill_data_source(tables='adj', start_date='20230101', end_date='20230601')
[Out]:
Filling data source file://csv@qt_root/data/ ...
[########################################]99/99-100.0% <stock_adj_factor:20230103-20230601>508575wrtn in ~56"
[########################################]99/99-100.0% <fund_adj_factor:20230103-20230601>121647wrtn in ~4"
qt.candle('600004.SH', start='20230101', end='20230301', adj='b')
qt.candle()
函数支持传入K线图的开始日期、结束日期、K线频率、复权方式以显示不同区间和频率的K线图,也支持传入移动均线的时长和macd的不同参数显示不同的均线,qt.candle()
函数还支持通过股票名称显示K线图,如果输入是股票名称,会自动模糊查找,并且支持通配符。
下面是更多的K线图例子,展示了股票、基金、指数等不同的资产类别,不同的数据频率,不同的均线设定、不同的图表类型等,为了显示下面示例中的K线图,您需要下载相应的数据。
import qteasy as qt
df = qt.candle('159601', start='20210420', freq='d') # 根据证券代码模糊搜索,显示K线图
df = qt.candle('000001.SH', start = '20211221', asset_type='IDX', plot_type='c') # 设置K线图的开始日期,结束日期为今天
df = qt.candle('000300.SH', start = '20220331', asset_type='IDX', mav=[], plot_type='c') # 不显示移动平均价
df = qt.candle('000300.SH', start = '20221021', asset_type='IDX', mav=[], plot_type='c', freq='30min') # 显示30分钟K线
df = qt.candle('601728', freq='30min', adj='b', plot_type='c') # 后复权
df = qt.candle('沪镍主力', start = '20211130', mav=[5, 12, 36]) # 指定计算5日/12日/36日移动平均价
df = qt.candle('510300', start='20200101', asset_type='FD', adj='b', mav=[])
df = qt.candle('格力电器', start='20220101', asset_type='E', adj='f', mav=[5, 10, 20, 30])
df = qt.candle('513100', asset_type='FD', adj='f', mav=[]) # 显示基金的净值
df = qt.candle('110025', asset_type='FD', adj='f', mav=[9, 28])
df = qt.candle('001104', asset_type='FD', adj='f', mav=[12, 26])
数据类型的查找
前面提到过,qteasy
中的所有数据类型均有一个唯一的ID,通过这个ID,可以提取数据,在交易策略中引用该数据类型,完成qteasy
中所需的工作。
为了更加了解qteasy
中的数据类型,我们可以用qt.find_history_data()
函数来查询所需的数据类型。qteasy
中定义的数据类型是与数据频率、资产类型挂钩的,也就是说,不同资产的收盘价是不同的数据类型,不同频率的收盘价也是不同的。
qt.find_history_data()
函数可以根据输入查找相关的数据类型,并且显示它们的ID,数据表、说明等相关信息,例如,搜索‘close’
(收盘价)可以找到所有相关的数据类型:
qt.find_history_data('close')
[Out]:
matched following history data,
use "qt.get_history_data()" to load these historical data by its data_id:
------------------------------------------------------------------------freq asset table desc
data_id
close d E stock_daily 股票日K线 - 收盘价
close w E stock_weekly 股票周K线 - 收盘价
close m E stock_monthly 股票月K线 - 收盘价
close 1min E stock_1min 股票60秒K线 - 收盘价
close 5min E stock_5min 股票5分钟K线 - 收盘价
close 15min E stock_15min 股票15分钟K线 - 收盘价
close 30min E stock_30min 股票30分钟K线 - 收盘价
close h E stock_hourly 股票小时K线 - 收盘价
close d IDX index_daily 指数日K线 - 收盘价
close w IDX index_weekly 指数周K线 - 收盘价
close m IDX index_monthly 指数月K线 - 收盘价
close 1min IDX index_1min 指数60秒K线 - 收盘价
close 5min IDX index_5min 指数5分钟K线 - 收盘价
close 15min IDX index_15min 指数15分钟K线 - 收盘价
close 30min IDX index_30min 指数30分钟K线 - 收盘价
close h IDX index_hourly 指数小时K线 - 收盘价
close d FT future_daily 期货日K线 - 收盘价
close 1min FT future_1min 期货60秒K线 - 收盘价
close 5min FT future_5min 期货5分钟K线 - 收盘价
close 15min FT future_15min 期货15分钟K线 - 收盘价
close 30min FT future_30min 期货30分钟K线 - 收盘价
close h FT future_hourly 期货小时K线 - 收盘价
close d OPT options_daily 期权日K线 - 收盘价
close 1min OPT options_1min 期权60秒K线 - 收盘价
close 5min OPT options_5min 期权5分钟K线 - 收盘价
close 15min OPT options_15min 期权15分钟K线 - 收盘价
close 30min OPT options_30min 期权30分钟K线 - 收盘价
close h OPT options_hourly 期权小时K线 - 收盘价
close d FD fund_daily 基金日K线 - 收盘价
close 1min FD fund_1min 基金60秒K线 - 收盘价
close 5min FD fund_5min 基金5分钟K线 - 收盘价
close 15min FD fund_15min 基金15分钟K线 - 收盘价
close 30min FD fund_30min 基金30分钟K线 - 收盘价
close h FD fund_hourly 基金小时K线 - 收盘价
close d Any top_list 融资融券交易明细 - 收盘价
========================================================================
再例如,搜索市盈率pe,可以得到:
qt.find_history_data('pe')
[Out]:
matched following history data,
use "qt.get_history_data()" to load these historical data by its data_id:
------------------------------------------------------------------------freq asset table desc
data_id
initial_pe d E new_share 新股上市信息 - 发行市盈率
pe d IDX index_indicator 指数技术指标 - 市盈率
pe d E stock_indicator 股票技术指标 - 市盈率(总市值/净利润, 亏损的PE为空)
pe_2 d E stock_indicator2 股票技术指标 - 动态市盈率
========================================================================
查找到相应的数据之后,只需要查看该数据所属的数据表,将该数据表下载到本地数据源中(refill_data_source(tables, ...)
),即可使用这些数据(qt.get_history_data(htype, shares, ...)
)了。
定期下载数据到本地
为了保持本地数据源的数据更新,我们可以使用qt.refill_data_source()
函数定期下载数据到本地。创建一个文件refill_data.py
,并在其中写入以下代码:
import qteasy as qtif __name__ == '__main__':# 解析命令行参数,--tabls参数表示数据表类型,--start_date和--end_date表示下载数据的起始日期和结束日期import argparseparser = argparse.ArgumentParser(description='refill data source')parser.add_argument('--tables', type=str, default='stock_daily', help='data table type')parser.add_argument('--start_date', type=str, default='20230101', help='start date')parser.add_argument('--end_date', type=str, default='20231231', help='end date')parser.add_argument('--parallel', type=bool, default=True, help='parallel download')parser.add_argument('--merge_type', type=str, default='update', help='merge type')args = parser.parse_args()tables = args.tablesstart_date = args.start_dateend_date = args.end_dateparallel = args.parallelmerge_type = args.merge_typeif tables == 'events':# 下载低频data和event数据,下载周期较长以cover所有的季度月度周度数据 (每周下载或每月下载)tables = 'stock_weekly, stock_monthly, index_weekly, index_monthly, 'tables += 'income, balance, cashflow, financial, forecast, express, comp, report, events'elif tables == 'basics':# 下载基础数据,下载周期较长以cover所有的季度月度周度数据 (每周下载或每月下载)tables = 'basics'elif tables == 'daily':# 下载日频数据,下载周期较短以减少下载负载 (每天或每周下载)tables = 'adj, stock_daily, fund_daily, future_daily, options_daily, stock_indicator, stock_indicator2, index_indicator, shibor, libor, hibor, index_daily'elif tables == 'stock_mins':tables = 'adj, stock_1min, stock_5min, stock_15min, stock_30min, stock_hourly'elif tables == 'index_mins':tables = 'adj, index_1min, index_5min, index_15min, index_30min, index_hourly'elif tables == 'fund_mins':tables = 'adj, fund_1min, fund_5min, fund_15min, fund_30min, fund_hourly'else:tables == tablesqt.refill_data_source(tables=tables, start_date=start_date, end_date=end_date, parallel= parallel, merge_type=merge_type)
上面的脚本文件提供了最基本的数据下载功能,可以根据需要修改tables
和start_date
、end_date
参数,以及parallel
和merge_type
参数,来下载不同的数据类型和不同的数据范围。
您可以自行改进脚本文件以实现更多的功能
要下载2023年全年的stock_daily
数据,只需要在命令行中运行以下命令:
python -m refill_data --tables stock_daily --start_date 20230101 --end_date 20231231
回顾总结
至此,我们已经初步了解了qteasy
中对数据的管理方式,了解了数据下载的方法。下载了基本数据以及一些量价数据。我们学会了如何提取数据、如何显示K线图。最后,我们还学会了查询数据的方法,如果需要某种数据,知道如何查询,如何下载和调用这些数据。
在下一篇教程中,我们将进一步加深对qteasy的了解,我们将学会如何创建交易策略,如何运行并回测交易策略。
关于qteasy的更多介绍,请参见qteasy文档
相关文章:

【python量化交易】qteasy使用教程02 - 获取和管理金融数据
qteasy教程2 - 获取并管理金融数据 qteasy教程2 - 获取并管理金融数据开始前的准备工作获取基础数据以及价格数据下载交易日历和基础数据查看股票和指数的基础数据下载沪市股票数据从本地获取股价数据生成K线图 数据类型的查找定期下载数据到本地回顾总结 qteasy教程2 - 获取并…...

数据库学习案例20240206-ORACLE NEW RAC agent and resource关系汇总。
1 集群架构图 整体集群架构图如下: 1 数据库启动顺序OHASD层面 操作系统进程init.ohasd run启动ohasd.bin init.ohasd run 集群自动启动是否被禁用 crsctl enable has/crsGIHOME所在文件系统是否被正常挂载。管道文件npohasd是否能够被访问, cd /var/t…...

TypeScript 入门
课程地址 ts 开发环境搭建 npm i -g typescript查看安装位置: $ npm root -g C:\Users\Daniel\AppData\Roaming\npm\node_modules创建 hello.ts: console.log("hello, ts");编译 ts 文件,得到 js 文件: $ tsc foo.…...
linux 磁盘相关操作
1.U盘接入虚拟机 (1)在插入u盘时,虚拟机会检测usb设备,在弹出窗口选择连接到虚拟机即可。 (2)或 直接在虚拟机--->可移动设备--->找到U盘---->连接 2.检测U盘是否被虚拟机识别 ls /dev/sd* 查…...
PyTorch: torch.max()函数详解
torch.max函数详解:基于PyTorch的深入探索 🌵文章目录🌵 🌳引言🌳🌳torch.max()函数简介🌳🌳torch.max()的返回值🌳🌳torch.max()的应用示例🌳&am…...

Rust基础拾遗--核心功能
Rust基础拾遗 前言1.所有权与移动1.1 所有权 2.引用3.特型与泛型简介3.1 使用特型3.2 特型对象3.3 泛型函数与类型参数 4.实用工具特型5.闭包 前言 通过Rust程序设计-第二版笔记的形式对Rust相关重点知识进行汇总,读者通读此系列文章就可以轻松的把该语言基础捡起来…...

MySQL:常用指令
MySQL官网 一、在Windows 系统 cmd窗口里执行的命令 启动:net start MySQL停止:net stop MySQL卸载:sc delete MySQL 二、在macOS系统终端里执行的命令 启动:mysql.server start停止:mysql.server stop重启:mysql.server restart 三、执行帮…...

Scrapy:Python中强大的网络爬虫框架
Scrapy:Python中强大的网络爬虫框架 在当今信息爆炸的时代,从互联网上获取数据已经成为许多应用程序的核心需求。Scrapy是一款基于Python的强大网络爬虫框架,它提供了一种灵活且高效的方式来提取、处理和存储互联网上的数据。本文将介绍Scrap…...
linux系统非关系型数据库redis的配置文件
redis配置文件 Redis的配置文件位于Redis安装目录下,文件名为redis.conf,配置项说明如下 Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no当Redis以守护进程方式运行时,Red…...

电力负荷预测 | 基于LSTM、TCN的电力负荷预测(Python)
文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于LSTM、TCN的电力负荷预测(Python) 源码设计 #------------------...

Java+SpringBoot实习管理系统探秘
✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…...
c入门第十六篇——学生成绩管理系统
师弟:“师兄,我最近构建了一个学生成绩管理系统,有空试用一下么?” 我:“好啊!” 一个简单的学生成绩管理系统,基本功能包括:添加学生信息、显示所有学生信息、按学号查找学生信息、…...

大文件上传如何做断点续传?
文章目录 一、是什么分片上传断点续传 二、实现思路三、使用场景小结 参考文献 一、是什么 不管怎样简单的需求,在量级达到一定层次时,都会变得异常复杂 文件上传简单,文件变大就复杂 上传大文件时,以下几个变量会影响我们的用…...

SpringCloud-Eureka原理分析
Eureka是Netflix开源的一款用于实现服务注册与发现的工具。在微服务架构中,服务的动态注册和发现是必不可少的组成部分,而Eureka正是为了解决这一问题而诞生的。 一、为何需要Eureka 在微服务架构中,服务之间的协同合作和高效通信是至关重要…...

LeetCode周赛——384
1.修改矩阵(模拟) class Solution { public:vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {int n matrix.size();int m matrix[0].size();vector<int> ans(m);for(int i 0; i < m; i)for(…...

C#,巴都万数列(Padonve Number)的算法与源代码
1 巴都万数列(Padovan Sequence) 巴都万数列(Padovan Sequence)是一个整数数列。 首数个值为1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 16, 21, 28, 37 ... 此数列以建筑师理察巴都万命名,他的论文Dom(1994年&a…...

NSSCTF Round#18 RE GenshinWishSimulator WP
恶搞原神抽卡模拟器 看到软件的界面,大致有三种思路: 修改石头数量一直抽,如果概率正常肯定能抽到(但是估计设置的概率是0)在源码里找flag的数据把抽卡概率改成100%直接抽出来 Unity逆向,根据经验应该dnsp…...
鸿蒙系统对应安卓版本
鸿蒙系统对应安卓版本 使用安卓studio 新建一个app 然后添加代码打印: Log.d(“MainActivity”, "SDK Version: " Build.VERSION.SDK_INT); 或者把 Build.VERSION.SDK_INT 添加到显示的字符串上面 我这里 build.gradle.kts 配置 android {compileSdk…...

算法-16-并查集
并查集简介 并查集:一开始,把a,b,c放入并查集,a自己一个集合,b自己一个,c自己一个 提供的方法 1.boolean isSameSet(a,b),判断ab是否在同一个集合 2.void union(a,b),把a所…...

【C/C++】2024春晚刘谦春晚魔术步骤模拟+暴力破解
在这个特别的除夕夜,我们不仅享受了与家人的温馨团聚,还被电视机前的春节联欢晚会深深吸引。特别是,魔术师刘谦的精彩表演,为我们带来了一场视觉和心灵的盛宴。在我的博客“【C/C】2024春晚刘谦春晚魔术步骤模拟暴力破解”中&…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...