# history_bars 某一合约历史数据
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str | 合约代码,必填项 |
bar_count | int | 获取的历史数据数量,必填项 |
frequency | str | 指定获取数据周期类型,必填项。 类型标识如下: 日线:'d' 分钟:'m' 秒线:'s' 取当前设置周期:'self' 分笔线:'tick' 周线:'week' 月线:'month' 季度线:'quarter' 半年线:'halfyear' 年线:'year' 等价线:'j' 等量线:'L' 例如: '1d'表示1日线, '2d'表示2日线, '5m'代表5分钟线, '5s'表示5秒线, '5h'表示5小时线, '0.2j'表示的等价k【价格/幅度单位】选项设置为0.2, '4000L'表示的等量k【指定等量数值】选项设置为4000。 |
fields | str OR str list | 返回数据字段。必填项。 时间戳:datetime 开盘价:open 最高价:high 最低价:low 收盘价:close 成交量:volume 成交额:total_turnover 持仓量:open_interest (期货专用) |
skip_suspended | bool | 是否跳过停牌,默认True,跳过停牌 |
include_now | bool | 是否包括不完整的bar数据。默认为False,不包括。举例来说,当前1分钟k时间为09:39的时候获取上一个5分钟线数据,默认将获取到09:31~09:35合成的5分钟线,即最近一根完整的5分钟线数据。如果设置为True,则将获取到09:36~09:39之间合成的"不完整"5分钟线,即最新一根5分钟线数据。 |
adjusted_price | bool | 是否复权数据,默认为 True |
reversal_price | bool | 是否价格反转,默认为 False |
ndarray ,方便直接与talib等计算库对接, 失败返回 空列表。
注意:返回值使用前应该判断数组长度和是否为空列表或者低于指定长度,以免运行出错。
#获取最近10天的日线收盘价序列
bar_len=10
bar_close=history_bars('SQRB00', bar_len, '1d', 'CLOSE')
#对返回值k线数量进行检查
if len(bar_close)<bar_len:
print('获取数据不足, 请补充数据!!!')
else:
print(bar_close)
2
3
4
5
6
7
8
# history_bars_date 某一合约指定时段内的历史数据
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str | 合约代码,必填项 |
start_date | str OR datetime | 开始日期,必填项 |
end_date | str OR datetime | 结束时间,必填项 如果仅填写日期,则不含结束日期当天的数据,可以带上时间或者增大结束日期。 |
frequency | str | 指定获取数据周期类型,必填项。 类型标识如下: 日线:'d' 分钟:'m' 秒线:'s' 取当前设置周期:'self' 分笔线:'tick' 周线:'week' 月线:'month' 季度线:'quarter' 半年线:'halfyear' 年线:'year' 等价线:'j' 等量线:'L' 例如: '1d'表示1日线, '2d'表示2日线, '5m'代表5分钟线, '5s'表示5秒线, '5h'表示5小时线, '0.2j'表示的等价k【价格/幅度单位】选项设置为0.2, '4000L'表示的等量k【指定等量数值】选项设置为4000。 |
fields | str OR str list | 返回数据字段。必填项。 时间戳:datetime 开盘价:open 最高价:high 最低价:low 收盘价:close 成交量:volume 成交额:total_turnover 持仓量:open_interest (期货专用) |
skip_suspended | bool | 是否跳过停牌,默认True,跳过停牌 |
include_now | bool | 是否包括不完整的bar数据。默认为False,不包括。举例来说,当前1分钟k时间为09:39的时候获取5分钟线数据,默认将获取到09:31~09:35合成的5分钟线,即最近一根完整的5分钟线数据。如果设置为True,则将获取到09:36~09:39之间合成的"不完整"5分钟线,即最新一根5分钟线数据。 |
adjusted_price | bool | 是否复权数据,默认为 True |
reversal_price | bool | 是否价格反转,默认为 False |
numpy.ndarray 对象 ,方便直接与talib等计算库对接, 失败返回 空列表。
注意:返回值使用前应该判断数组长度和是否为空列表或者低于指定长度,以免运行出错。
#获取20180901至20180910区间的日线收盘价序列
bar_close=history_bars_date('SQRB00', '20180901', '20180910', '1d', 'close')
#对返回值k线数量进行检查
print(bar_close)
2
3
4
#返回分钟数据
from PythonApi import *
import datetime
code = "SH600153"
start = '2020-02-01 10:00:00'
start_t = datetime.datetime.strptime(start,'%Y-%m-%d %H:%M:%S')
end = '2020-04-03 15:00:00'
end_t = datetime.datetime.strptime(end,'%Y-%m-%d %H:%M:%S')
bar_close = history_bars_date(code,start,end,'5m',['datetime','volume','close'],include_now=True)
print(bar_close[-1])
2
3
4
5
6
7
8
9
10
11
# pel_history_bars 获取历史数据(python引用)
python引用方式下获取历史数据,仅"pel_call"模式有效参数
参数 | 类型 | 说明 |
---|---|---|
bar_count | int | 获取的历史数据数量,必填项 |
fields | str OR str list | 返回数据字段。必填项。 时间戳:datetime 开盘价:open 最高价:high 最低价:low 收盘价:close 成交量:volume 成交额:total_turnover 持仓量:open_interest (期货专用) |
ndarray ,方便直接与talib等计算库对接, 失败返回 空列表。
注意:返回值使用前应该判断数组长度和是否为空列表或者低于指定长度,以免运行出错。
#调取收盘价数据, long_period的值为通过pel的SETPYTHONVAL函数设置
close = pel_history_bars(context.long_period+1 , 'close')
#计算均线,返回值放在context对象中。
context.ma10 = close[-context.long_period:].sum() / context.long_period
2
3
4
5
# get_flow_data 获取成交痕迹数据
get_flow_data(
order_book_id:
str, # 合约代码
bar_count:
int, # 查询数据数量
frequency:
str, # 周期类型
skip_suspended:
bool =
1, # 是否跳过停牌
include_now:
bool, # 是否包括不完整的bar数据 ) ->
numpy.ndarray # 返回:多维数组结构
参数 | 类型 | 缺省 | 必填 | 说明 |
---|---|---|---|---|
order_book_id | str | - | Y | 合约代码,必填项 |
bar_count | int | - | Y | 获取的历史数据数量,必填项 |
frequency | str | - | Y | 指定获取数据周期类型,必填项。 类型标识如下: 分钟:'m' 秒线:'s'例如: '5m'代表5分钟线, '5s'表示5秒线 |
skip_suspended | bool | - | Y | 是否跳过停牌, - True,跳过停牌 - False,包含停牌 |
include_now | bool | - | Y | 是否包括不完整的bar数据。默认为False,不包括。举例来说,当前1分钟k时间为09:39的时候获取上一个5分钟线数据,默认将获取到09:31~09:35合成的5分钟线,即最近一根完整的5分钟线数据。如果设置为True,则将获取到09:36~09:39之间合成的"不完整"5分钟线,即最新一根5分钟线数据。 |
状态 | 返回值 | 返回类型 | 说明 | 示例 |
---|---|---|---|---|
成功 | 数组结构 | numpy.ndarray | 数组元素为: [时间戳, 元组列表] ,元组格式为: (价格, 主买量, 主卖量) 。 | [[20250815174900 ((3188.0, 0.0, 191.0), (3189.0, 1570.0, 449.0))]] |
失败 | 空列表 [] | numpy.ndarray | 返回空列表。 | [] |
- 注意事项
- 返回值使用前应该判断数组长度和是否为空列表或者低于指定长度,以免运行出错。🚀成交痕迹图解
- 返回值使用前应该判断数组长度和是否为空列表或者低于指定长度,以免运行出错。
flow_data = get_flow_data('SQRB00', 2, '1m',True,True)
for bar in flow_data:
ts = bar[0] # 时间戳
ticks = bar[1] # 价格/主买量/主卖量 元组列表
print(f"时间戳: {ts}")
for price, buy_vol, sell_vol in ticks:
print(f" 价格: {price}, 主买量: {buy_vol}, 主卖量: {sell_vol}")
2
3
4
5
6
7
8
9
# 获取订单流数据
bar_close = get_flow_data('SQRB00', 5, '1m', True, True)
# 用于保存前几根 K 线的 Delta
delta_history = []
# 遍历每根 K 线
for bar in bar_close:
ts, ticks = bar # 解包元组,ts = 时间戳, ticks = ((价格, 买量, 卖量), ...)
# 计算买卖总量
total_buy = sum(buy for _, buy, _ in ticks)
total_sell = sum(sell for _, _, sell in ticks)
Delta = total_buy - total_sell
# 保存 Delta 历史,方便判断连续增大
delta_history.append(Delta)
print(f"时间戳: {ts} 买量: {total_buy} 卖量: {total_sell} Delta: {Delta}")
# 判断 Delta 是否连续 3 根 K 线增大
if len(delta_history) >= 3:
if delta_history[-3] < delta_history[-2] < delta_history[-1]:
last_price = ticks[-1][0] # 最后一档价格作为参考
prev_price = ticks[0][0] # 第一档价格作为上一价格
# 增加原来的做多条件
if Delta > 0 and last_price > prev_price:
print(f" 【做多信号】 时间: {ts} Delta: {Delta} 价格上涨: {prev_price} -> {last_price}")
buy_open(order_book_id="SQRB00", style="Market", price=0, volume=1,serial_id = 1)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# get_dynainf 当前快照数据
当前快照数据,只有最新值,无历史数据。(不支持回测)
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str | 合约代码,必填项 |
type | int | 快照数据类型, 同PEL函数dynainf |
float ,若失败返回 None
#获取rb00当前最新价
get_dynainf('SQRB00', 7)
2
# is_data_update 判断数据是否更新
判断这次调用该品种距离上次调用是否有过数据更新,可以使用该函数对停牌或交易不活跃品种进行过滤,防止调用history_bars取数据时的计算重复。
注意:
1.该函数受基准合约行情驱动触发时才会判断具体品种行情是否更新。
2.若你的策略中同一个品种多次不同跨周期使用数据,在回测("backtest"模式)时可能会导致该函数无法正确返回,但是在"paper_trading"模式实际交易时则不受影响。
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str | 合约代码,必填项 |
int类型
#判断'ag06'合约数据是否更新。
data = history_bars('sh600000', 1, 'self', 'CLOSE')
if is_data_update ('sh600000')==1:
write_logging('数据更新')
2
3
4
# istradertime 判断品种当前是否在交易时间时段内
判断指定品种当前是否在交易时间时段中
注意:请确保您的计算机时间处于正确时间中,因为某些时候需要借助本地时间做参考。
此函数回测时无效,仅用于实盘。
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str | 合约代码,必填项 |
bool True表示当前处于可交易时间中
# get_previous_trading_date 基准合约上一交易日
获取基准合约指定日期的上一(或n)交易日。 本函数依赖于基准合约数据。
参数 | 类型 | 说明 |
---|---|---|
date | str , datetime | 指定日期, 必填选项 |
n | int | 第 n 个交易日,默认为1 |
datetime.date ,若失败返回 None
#获取2018-07-29的前5个交易日所在的日期
get_previous_trading_date ('2018-07-29', 5)
2
# get_next_trading_date 基准合约下一交易日
获取基准合约指定日期的下一(或n)交易日
参数 | 类型 | 说明 |
---|---|---|
date | str , datetime | 指定日期, 必填选项 |
n | int | 第 n 个交易日,默认为1 |
datetime.date ,若失败返回 None
# get_trading_dates 基准合约的交易日列表
获取基准合约的交易日列表(起止日期加入判断)(仅策略交易状态时有效,"backtest"回测 和 "paper_trading"模式),该函数计算量较大,请注意编写效率,不要再循环中使用。
参数 | 类型 | 说明 |
---|---|---|
start_date | str, date | 开始日期,用户必须指定 |
end_date | str, date | 结束日期,用户必须指定 |
datetime.date list,若失败返回 None
#获取'2018-07-20'至'2018-07-30'期间的交易日期的集合
get_trading_dates ('2018-07-20', '2018-07-30')
2
# is_week_end 是否为本周最后一个交易日
判断当前是否为本周最后一个交易日
- 仅限国内市场有效
- 只在回测和实际交易时有效,不支持python模块形式的调用
int类型,是返回1,否返回0 ,错误返回-1
# is_month_end 是否为本月最后一个交易日
判断当前是否为本月最后一个交易日
- 仅限国内市场有效
- 只在回测和实际交易时有效,不支持python模块形式的调用
int类型,是返回1,否返回0 ,错误返回-1
# nearest_week_end 距离最近双休日的交易日间隔
当前距离最近双休日的交易日间隔的天数(含当日)
- 仅限国内市场有效
- 只在回测和实际交易时有效,不支持python模块形式的调用
int类型,成功返回天数 ,错误返回-1
# nearest_holiday 距离最近节假日的交易日间隔
当前距离最近节假日的交易日间隔的天数(含当日)
- 仅限国内市场有效
- 只在回测和实际交易时有效,不支持python模块形式的调用
int类型,成功返回天数 ,错误返回-1
# trading_date_diff 间隔交易日的天数
取得两个日期之间的交易日天数
参数 | 类型 | 说明 |
---|---|---|
date1 | str or date | 指定日期, 必填选项 |
date2 | str or date | 指定日期, 必填选项 |
注意:
- 仅限国内市场有效
- 目前有效截止日期为2030/12/31,预判数据将在到达截止日期前增加调整.
- 此函数依赖于节假日预判数据,预判数据存在依据确定后的节假日进行调整的情况。
- DATE1,DATE2有效范围(1990/12/19-2030/12/31),如果 DATE1晚于 DATE2,则 DATEDIFF函数返回负数
int类型,成功返回天数 ,错误返回-1
a = trading_date_diff(context.now,datetime.datetime.now())
print(a)
2
# get_split 当期除权数据
获取指定品种到策略当前日期的(除权)拆分情况
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str | 合约代码,必填项 |
count | int | 获取的历史记录条数,默认为1 |
list of split对象 , 若失败返回 None
#获取平安银行最近2次除权数据信息,其返回值为list of split对象
get_split ('sz000001', 2)
2
# get_price_change_rate 指定品种的历史涨跌幅
获取指定品种的历史涨跌幅(仅策略交易状态时有效,"backtest"回测 和 "paper_trading"模式),该函数计算量较大,请注意编写效率,不要再循环中使用。
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str | 合约代码,必填项 |
count | int | 获取的历史记录条数,默认为1 |
list of dataval对象 , 若失败返回 None
#获取平安银行最近10日的涨跌幅
get_price_change_rate('sz000001', 10)
2
# get_blocks 获取指定板块的成份股列表
获取指定板块的成份股列表
参数 | 类型 | 说明 |
---|---|---|
block_name | str | 板块或分类名 |
type | int | 0市场分类 1分类板块 2系统板块 |
注:
市场分类:来源于在k线图右键“更换品种”--“市场”中展示的分类。例如:上海期货、深圳A股等
分类板块: 来源于在菜单栏“工具”--“市场与板块”--“板块”中展示的板块,如:地域中的”北京、上海“,自选中的"自选股"等。
系统分类:来源于在菜单栏“工具”--“市场与板块”--“品种”中展示的分类。如“中金所”,“国内商品”
list of str (order_book_id list) , 若失败返回 None
#获取'自选股'分类版块中的品种代码,
get_blocks ('自选股', 1)
2
# get_inblocks 获取指定品种的所属板块
参数 | 类型 | 说明 |
---|---|---|
book_id | str | 合约代码 |
list of str , 若失败返回空列表
#获取'sz000001'品种所属的板块,
get_inblocks ('sz000001')
2
# update_blocks 更新板块中的品种
更新指定板块品种,该函数触发时,会将之前板块的品种清除后再添加新品种至板块中。
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str OR str list | 合约代码,可传入order_book_id, order_book_id list |
block_name | str | 板块名称 |
无
#将'600000'股票更新至自选股板块。
update_blocks ('SH600000', '自选股')
2
# append_blocks 添加指定板块中的品种
将指定品种以“追加方式”添加到指定版块中。
注:若在动态显示牌中查状态,需手工刷新一次板块。
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str OR str list | 合约代码,可传入order_book_id, order_book_id list |
block_name | str | 板块名称 |
无
#追加品种至指定'自选股'板块中。
append_blocks ('SH600007', '自选股')
2
# remove_blocks 删除指定板块中的品种
注:若在动态显示牌中查状态,需手工刷新一次板块。
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str OR str list | 合约代码,可传入order_book_id, order_book_id list |
block_name | str | 板块名称 |
无
#删除'自选股'板块中'SH600007'股票品种。
remove_blocks ('SH600007','自选股')
2
# get_turnover_rate 历史换手率
获取历史换手率
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str | 合约代码,必填项 |
count | int | 获取的历史记录条数,默认为1 |
stat | int | 统计的交易日,例如统计最近20个交易日的换手率这里就填20 |
list of dataval对象 , 若失败返回 None
#获取5日线历史换手率。
turnover_rate=get_turnover_rate('SH600000', 10, 5)
#获取最新一条换手率的日期时间和数值
rate_date=turnover_rate[-1].date_val
rate_values=turnover_rate[-1].values
2
3
4
5
6
# get_instruments 查询合约基础信息
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str | 合约代码,必填项 |
instruments对象, 若失败返回 None
#获取RB00品种的合约基本信息
instruments=get_instruments ('SQRB00')
#输出RB00合约的合约单位
print(instruments.multipliter)
2
3
4
# get_charge 计算交易费用
计算交易费用, 根据 交易菜单->合约信息设置 中预设的合约信息和费率
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str | 合约代码,必填项 |
price | float | 交易价格, 必填项 |
volume | int | 交易数量, 必填项 |
type | int | 交易类型, 必填项, 0表示开仓 1表示平昨仓 2表示平今 |
交易费用
#计算1手多头螺纹钢所需手续费费用
get_charge ('SQRB00', get_dynainf('SQRB00', 7), 1, 0)
2