9.【PTrade使用指南】- 公共参数

计算函数
技术指标计算函数
get_MACD - 异同移动平均线
get_MACD(close, short=12, long=26, m=9)
使用场景
该函数仅在回测、交易模块可用
接口说明
获取异同移动平均线MACD指标的计算结果
参数
close:价格的时间序列数据, numpy.ndarray类型;
short: 短周期, int类型;
long: 长周期, int类型;
m: 移动平均线的周期, int类型;
返回
MACD指标dif值的时间序列, numpy.ndarray类型
MACD指标dea值的时间序列, numpy.ndarray类型
MACD指标macd值的时间序列, numpy.ndarray类型
示例
def initialize(context):g.security = "600570.XSHG"set_universe(g.security)def handle_data(context, data):h = get_history(100, '1d', ['close','high','low'], security_list=g.security)close_data = h['close'].values macdDIF_data, macdDEA_data, macd_data = get_MACD(close_data, 12, 26, 9)dif = macdDIF_data[-1]dea = macdDEA_data[-1]macd = macd_data[-1]
get_KDJ - 随机指标
get_KDJ(high, low, close, n=9, m1=3, m2=3)
使用场景
该函数仅在回测、交易模块可用
接口说明
获取随机指标KDJ指标的计算结果
参数
high:最高价的时间序列数据, numpy.ndarray类型;
low:最低价的时间序列数据, numpy.ndarray类型;
close:收盘价的时间序列数据, numpy.ndarray类型;
n: 周期, int类型;
m1: 参数m1, int类型;
m2: 参数m2, int类型;
返回
KDJ指标k值的时间序列, numpy.ndarray类型
KDJ指标d值的时间序列, numpy.ndarray类型
KDJ指标j值的时间序列, numpy.ndarray类型
示例
def initialize(context):g.security = "600570.XSHG"set_universe(g.security)def handle_data(context, data):h = get_history(100, '1d', ['close','high','low'], security_list=g.security)high_data = h['high'].values low_data = h['low'].values close_data = h['close'].values k_data, d_data, j_data = get_KDJ(high_data, low_data, close_data, 9, 3, 3)k = k_data[-1]d = d_data[-1]j = j_data[-1]
get_RSI - 相对强弱指标
get_RSI(close, n=6)
使用场景
该函数仅在回测、交易模块可用
接口说明
获取相对强弱指标RSI指标的计算结果
参数
close:价格的时间序列数据, numpy.ndarray类型;
n: 周期, int类型;
返回
RSI指标rsi值的时间序列, numpy.ndarray类型
示例
def initialize(context):g.security = "600570.XSHG"set_universe(g.security)def handle_data(context, data):h = get_history(100, '1d', ['close','high','low'], security_list=g.security)close_data = h['close'].values rsi_data = get_RSI(close_data, 6)rsi = rsi_data[-1]
get_CCI - 顺势指标
get_CCI(close, n=14)
使用场景
该函数仅在回测、交易模块可用
接口说明
获取顺势指标CCI指标的计算结果
参数
high:最高价的时间序列数据, numpy.ndarray类型;
low:最低价的时间序列数据, numpy.ndarray类型;
close:收盘价的时间序列数据, numpy.ndarray类型;
n: 周期, int类型;
返回
CCI指标cci值的时间序列, numpy.ndarray类型
示例
def initialize(context):g.security = "600570.XSHG"set_universe(g.security)def handle_data(context, data):h = get_history(100, '1d', ['close','high','low'], security_list=g.security)high_data = h['high'].values low_data = h['low'].values close_data = h['close'].values cci_data = get_CCI(high_data, low_data, close_data, 14)cci = cci_data[-1]
其他函数
log-日志记录
log(content)
使用场景
该函数仅在回测、交易模块可用。
接口说明
该接口用于打印日志。
支持如下场景的日志记录:
log.debug("debug")log.info("info")log.warning("warning")log.error("error")log.critical("critical")
与Python的logging模块用法一致
注意事项:
无
参数
参数可以是字符串、对象等。
返回
None
示例
# 打印出一个格式化后的字符串g.security='600570.SS'log.info("Selling %s, amount=%s" % (g.security, 10000))
is_trade-业务代码场景判断
is_trade()
使用场景
该函数仅在回测、交易模块可用。
接口说明
该接口用于提供业务代码执行场景判断依据,明确标识当前业务代码运行场景为回测还是交易。因部分函数仅限回测或交易场景使用,该函数可以协助区分对应场景,以便限制函数可以在一套策略代码同时兼容回测与交易场景。
注意事项:
无
参数
无
返回
布尔类型,当前代码在交易中运行返回True,当前代码在回测中运行返回False(bool)。
示例
def initialize(context):g.security = '600570.SS'set_universe(g.security)def handle_data(context, data):_id = order(g.security, 100)if is_trade():log.info("当前运行场景:交易")else:log.info("当前运行场景:回测")
check_limit - 代码涨跌停状态判断
check_limit(security)
使用场景
该函数仅在交易模块可用。
接口说明
该接口用于标识当日股票的涨跌停情况。
注意事项:
无
参数
security:单只股票代码或者多只股票代码组成的列表,必填字段(list[str]/str);
返回
正常返回一个dict类型数据,包含每只股票代码的涨停状态。多只股票代码查询时其中部分股票代码查询异常则该代码返回既不涨停也不跌停状态0。(dict[str:int])
涨跌停状态说明:
-
2:触板涨停(已经是涨停价格,但还有卖盘);
-
1:涨停;
-
0:既不涨停也不跌停;
-
-1:跌停;
-
-2:触板跌停(已经是跌停价格,但还有买盘);
示例
def initialize(context):g.security = '600570.SS'set_universe(g.security)def handle_data(context, data):# 代码涨跌停状态stock_flag = check_limit(g.security)log.info(stock_flag)
send_emAIl - 发送邮箱信息
send_email(send_email_info, get_email_info, smtp_code, info='', path='', subject='')
使用场景
该函数仅在交易模块可用。
接口说明
该接口用于通过QQ邮箱发送邮件内容。
注意事项:
1、该接口需要服务端连通外网,是否开通由所在券商决定
2、是否允许发送附件(即path参数),由所在券商的配置管理决定
3、邮件中接受到的附件为文件名而非附件路径
参数
send_email_info:发送方的邮箱地址,必填字段,如:50xxx00@qq.com(str);
get_email_info:接收方的邮箱地址,必填字段,如:[50xxx00@qq.com, 1xxx10@126.com](list[str]/str);
smtp_code:邮箱的smtp授权码,注意,不是邮箱密码,必填字段(str);
info:发送内容,选填字段,默认空字符串(str);
path:附件路径,选填字段,如:'/home/fly/notebook/stock.csv',默认空字符串(str);
subject:邮件主题,默认空字符串(str);
返回
None
示例
def initialize(context):g.security = '600570.SS'set_universe(g.security)def handle_data(context, data):#发送文字信息send_email('53xxxxxx7@qq.com', ['53xxxxx7@qq.com', 'Kxxxxn@126.com'], 'phfxxxxxxxxxxcd', info='今天的股票池信息')
send_qywx - 发送企业微信信息
send_qywx(corp_id, secret, agent_id, info='', path='', toparty='', touser= '', totag= '')
使用场景
该函数仅在交易模块可用。
接口说明
该接口用于通过企业微信发送内容,使用方法请查看企业微信功能使用手册。
注意事项:
1、该接口需要服务端连通外网,是否开通由所在券商决定
2、是否允许发送文件(即path参数),由所在券商的配置管理决定
3、企业微信不能同时发送文字和文件,当同时入参info和path的时候,默认发送文件
4、企业微信接受到的文件为文件名而非文件路径
参数
corp_id:企业ID,必填字段(str);
secret:企业微信应用的密码,必填字段(str);
agent_id:企业微信应用的ID,必填字段(str);
info:发送内容,选填字段,默认空字符串(str);
path:发送文件,选填字段,如:'/home/fly/notebook/stock.csv',默认空字符串(str);
toparty:发送对象为部门,选填字段,默认空字符串(str),多个对象之间用 '|' 符号分割;
touser:发送内容为个人,选填字段,默认空字符串(str),多个对象之间用 '|' 符号分割;
totag:发送内容为分组,选填字段,默认空字符串(str),多个对象之间用 '|' 符号分割;
注意:toparty、touser、totag如果都不传入,接口默认发送至应用中设定的第一个toparty
返回
None
示例
def initialize(context):g.security = '600570.SS'set_universe(g.security)def handle_data(context, data):#发送文字信息send_qywx('wwxxxxxxxxxxxxf9', 'hixxxxxxxxxxxxxxxxxxxBX8', '10xxxx3', info='已触发委托买入', toparty='1|2')
permission_test-权限校验
permission_test(account=None, end_date=None)
使用场景
该函数仅在交易模块可用
接口说明
该接口用于账号和有效期的权限校验,用户可以在接口中入参指定账号和指定有效期截止日,策略运行时会校验运行策略的账户与指定账户是否相符,以及运行当日日期是否超过指定的有效期截止日,任一条件校验失败,接口都会返回False,两者同时校验成功则返回True。校验失败会在策略日志中提示原因。
注意事项:
如果需要使用授权模式下载功能,不要在接口中入参,策略编码时候直接调用permission_test(),授权工具会把需要授权的账号和有效期信息放到策略文件中。
该函数仅在initialize、before_trading_start、after_trading_end模块中支持调用
参数
account:授权账号,选填字段,如果不填就代表不需要验证账号(str);
end_date:授权有效期截止日,选题字段,如果不填就代表不需要验证有效期(str),日期格式必须为'YYYYmmdd'的8位日期格式,如'20200101';
返回
布尔类型,校验成功返回True,校验失败返回False(bool)。
示例
def initialize(context):g.security = '600570.SS'set_universe(g.security)def handle_data(context, data):passdef after_trading_end(context, data):# 需要用授权模式下载功能的情况下不用入参flag = permission_test()if not flag:raise RuntimeError('授权不通过,终止程序,抛出异常')# 不需要用授权模式下载功能的情况下通过入参来进行授权校验flag = permission_test(account='10110922',end_date='20220101')if not flag:raise RuntimeError('授权不通过,终止程序,抛出异常')
create_dir-创建文件目录路径
create_dir(user_path=None)
使用场景
该函数在研究、回测、交易模块可用
接口说明
由于PTrade引擎禁用了os模块,因此用户无法在策略中通过编写代码实现子目录创建。用户可以通过此接口来创建文件的子目录路径。
注意事项:
文件根目录路径为'/home/fly/notebook'。
参数
user_path:子目录路径,选填字段,(str)。
比如user_path='download',会在研究中生成/home/fly/notebook/download的目录;
比如user_path='download/2022',会在研究中生成/home/fly/notebook/download/2022的目录;
返回
None
示例
def initialize(context):g.security = '600570.SS'set_universe(g.security)create_dir(user_path=g.security)def handle_data(context, data):pass
对象
g-全局对象
使用场景
该对象仅支持回测、交易模块。
对象说明
全局对象g,用于存储用户的各类可被不同函数(包括自定义函数)调用的全局数据,如:
g.security = None #股票池
注意事项:
无
示例
def initialize(context):g.security = "600570.SS"g.count = 1g.flag = 0set_universe(g.security)def handle_data(context, data):log.info(g.security)log.info(g.count)log.info(g.flag)
Context-上下文对象
使用场景
该对象仅支持回测、交易模块。
对象说明
类型为业务上下文对象
注意事项:
无
内容:
cAPItal_base -- 起始资金previous_date –- 前一个交易日sim_params -- SimulationParameters对象capital_base -- 起始资金data_frequency -- 数据频率portfolio -- 账户信息,可参考Portfolio对象initialized -- 是否执行初始化slippage -- 滑点,VolumeShareSlippage对象volume_limit -- 成交限量price_impact -- 价格影响力commission -- 佣金费用,Commission对象tax—印花税费率cost—佣金费率min_trade_cost—最小佣金blotter -- Blotter对象(记录)current_dt -- 当前单位时间的开始时间,datetime.datetime对象(北京时间)recorded_vars -- 收益曲线值
示例
def initialize(context):g.security = ['600570.SS', '000001.SZ']set_universe(g.security)def handle_data(context, data):#获得当前回测相关时间pre_date = context.previous_date log.info(pre_date)year = context.blotter.current_dt.year log.info(year)month = context.blotter.current_dt.month log.info(month)day = context.blotter.current_dt.day log.info(day)hour = context.blotter.current_dt.hour log.info(hour)minute = context.blotter.current_dt.minute log.info(minute)second = context.blotter.current_dt.second log.info(second)#得到"年-月-日"格式date = context.blotter.current_dt.strftime("%Y-%m-%d")log.info(date)#得到周几weekday = context.blotter.current_dt.isoweekday()log.info(weekday)
SecurityUnitData
使用场景
该对象仅支持回测、交易模块。
对象说明
一个单位时间内的股票的数据,是一个字典,根据sid获取BarData对象数据
注意事项:
无
基本属性
以下属性也能通过get_history/get_price获取到
dt 时间open 时间段开始时价格close 时间段结束时价格price结束时价格low 最低价high 最高价volume 成交的股票数量money 成交的金额
Portfolio
使用场景
该对象仅支持回测、交易模块。
对象说明
对象数据包含账户当前的资金,标的信息,即所有标的操作仓位的信息汇总
注意事项:
无
内容
cash 当前可用资金(不包含冻结资金)positions 当前持有的标的(包含不可卖出的标的),dict类型,key是标的代码,value是Position对象portfolio_value 当前持有的标的和现金的总价值positions_value 持仓价值capital_used 已使用的现金returns 当前的收益比例, 相对于初始资金pnl 浮动盈亏start_date 开始时间
示例
def initialize(context):g.security = "600570.SS"set_universe([g.security])def handle_data(context, data):log.info(context.portfolio.portfolio_value)
Position
使用场景
该对象仅支持回测、交易模块。
对象说明
持有的某个标的的信息。
注意事项:
无
内容
sid 标的代码enable_amount 可用数量amount 总持仓数量last_sale_price 最新价格cost_basis 持仓成本价格(期货不支持)today_amount 今日开仓数量(期货不支持,且仅回测有效)期货专用字段:delivery_date 交割日,期货使用today_short_amount 空头今仓数量today_long_amount 多头今仓数量long_cost_basis 多头持仓成本short_cost_basis 空头持仓成本margin_rate 保证金比例contract_multiplier 合约乘数long_amount 多头总持仓量short_amount 空头总持仓量long_pnl 多头浮动盈亏short_pnl 空头浮动盈亏long_enable_amount 多头可用数量short_enable_amount 多空头可用数量business_type 业务类型
示例
def initialize(context):g.security = '600570.SS'set_universe(g.security)def handle_data(context, data):order(g.security,1000)position = get_position(g.security)log.info(position)
Order
使用场景
该对象仅支持回测、交易模块。
对象说明
买卖订单信息
注意事项:
无
内容
id -- 订单号dt -- 订单产生时间limit -- 指定价格symbol -- 标的代码(备注:标的代码尾缀为四位,上证为XSHG,深圳为XSHE,如需对应到代码请做代码尾缀兼容)amount -- 下单数量,买入是正数,卖出是负数created -- 订单生成时间, datetime.date对象filled -- 成交数量,买入时为正数,卖出时为负数entrust_no -- 委托编号priceGear -- 盘口档位status -- 订单状态(str),该字段取值范围:'0' -- "未报"'1' -- "待报"'2' -- "已报"'3' -- "已报待撤"'4' -- "部成待撤"'5' -- "部撤"'6' -- "已撤"'7' -- "部成"'8' -- "已成"'9' -- "废单"'+' -- "已受理"'-' -- "已确认"'V' -- "已确认"
示例
def initialize(context):g.security = '600570.SS'set_universe(g.security)def handle_data(context, data):order(g.security, 100)order_obj = get_orders()log.info(order_obj)
