获取港股日线行情数据
由bq5bun29创建,最终由small_q 被浏览 82 用户
根据模版构建可视化线性策略
1.首先选取需要的线性策略组成部分:
2.修改特征
在m2输入特征内修改表达式特征并使表达式过滤条件为空中输入DISTINCT instrument并且修改数据库为cnhk_stock_bar1d从而提取出港股专用字段且只提取股票信息。 使用Distinct是因为只需要提取出股票信息。
\
3.提取数据
并在m4数据抽取中选取提取数据需要的时间信息(如图所示)
代码部分
1.Import(导入)代码中需要使用的数据库
1.Import(导入)代码中需要使用的数据库
import numpy as np
import pandas as pd
import dai
\
2.获取股票代码列表
# 获取股票代码列表
inst = dai.DataSource("cnhk_stock_instruments").read_bdb(as_type=pd.DataFrame, partition_filter={
"date": ("2005-01-01", "2024-05-31")
}, columns=["instrument"])["instrument"].unique()
inst = list(inst)
inst
这段代码使用 dai.DataSource("cnhk_stock_instruments") 创建一个数据源对象,并调用 read_bdb 方法从数据源中读取数据。参数设置如下:
- \
as_type=pd.DataFrame: 指定读取的数据将以 pandas.DataFrame 的形式返回。
- partition_filter: 用于过滤数据的条件,这里设置的条件是日期范围从 2005-01-01 到 2024-05-31。
- \
columns: 指定要读取的列,这里只读取 instrument 列。
读取的数据被转换为 pandas.DataFrame,然后通过 ["instrument"] 选择 instrument 列的数据,并通过 .unique() 方法获取这一列中所有独特的值。
- 将结果转换为列表:inst = list(inst)
- 将获取的独特股票代码转换为 Python 列表。
- 显示获取的股票代码列表:inst
3.获取股票历史数据
# 初始化空的 DataFrame
df = pd.DataFrame({})
flag = True
# 循环读取每个股票的历史数据
for ins in inst:
datas = dai.DataSource("cnhk_stock_bar1d").read_bdb(
as_type=pd.DataFrame,
partition_filter={
"date": ("2014-01-01", "2018-01-01"),
},
columns=["date", "close", "instrument"], # 确保包含所有必要的字段
filters={"instrument": ins} # 根据股票代码过滤
)
# 检查 datas 是否为空或者是否包含 'close' 列
if type(datas)!=type(None) and not datas.empty and 'close' in datas.keys():
df[ins] = datas['close']
if flag:
df['Date'] = datas['date']
flag = False
# 设置 DataFrame 的索索为日期并移除 'Date' 列
df.set_index('Date', inplace=True)
df.head()初始化空的 DataFrame
df = pd.DataFrame({})
flag = True
这段代码创建了一个空的 pandas DataFrame,用来存储之后从数据源中获取的股票数据。flag 变量用于确保日期列仅在第一次迭代时添加到 DataFrame 中。
-
循环读取每个股票的历史数据:
这段代码遍历 inst 列表中的每一个股票代码(ins),并从数据源 cnhk_stock_bar1d 中读取每个股票的历史数据。具体参数如下:
• as_type=pd.DataFrame: 将读取的数据转换为 pandas DataFrame。
• partition_filter: 过滤数据的日期范围为 2014-01-01 到 2018-01-01。
• columns: 指定要读取的列,包括 date、close 和 instrument。
• filters: 根据股票代码进行过滤。
-
检查 datas 是否为空或者是否包含 ‘close’ 列
if type(datas) != type(None) and not datas.empty and 'close' in datas.keys():
这段代码检查读取的数据 datas 是否为空或者是否包含 close 列。如果满足条件,将 datas 中的 close 列数据添加到 df 中,以 ins(股票代码)作为列名。同时,如果 flag 为 True,将 datas 中的 date 列数据添加到 df 中并设置 flag 为 False,确保日期列只添加一次。
- 设置 DataFrame 的索引为日期并移除 ‘Date’ 列
df.set_index('Date', inplace=True)
df.head()
- 这段代码将 df 的索引设置为 Date 列,并移除 Date 列。inplace=True 表示在原地进行操作,不返回新的 DataFrame。最后,通过 df.head() 显示 DataFrame 的前几行数据。
这段代码的目的是将多个股票的历史收盘价数据合并到一个 DataFrame 中,以便进一步分析和处理。
4.删除有空值的产品
#删除有空值的产品
for k in empty:
df.pop(k)
np.shape(df)删除包含空值的列:
for k in empty:
df.pop(k)
- 删除包含空值的列:
这段代码遍历 empty 列表中的每一列名,并使用 df.pop(k) 删除对应的列。
- 输出 DataFrame 的形状:
print(np.shape(df))
- 使用 np.shape(df) 输出 df 的形状,即行数和列数。
这段代码首先从数据源中读取股票数据,并将其合并到一个 DataFrame 中,然后删除所有包含空值的列,最后输出处理后的 DataFrame 的形状。
https://bigquant.com/codesharev2/84457887-07ea-4598-b869-4247cf285f6b
\