ptrade量化新手需要注意的几个问题(避坑指南)

PTD 阅读:22 2025-06-26 10:08:13 评论:0

首先需要通读API文档

null

软件结构和三个模块场景

可以使用API文档的场景有三种分别是

  1. 交易模块
  2. 回测模块
  3. 研究模块

这三个不同的场景模块,可以调用的函数是不一样的。并不是每个函数都可以被调用,这是一大坑点。

必选函数

1. initialize(必选)
2. before_trading_start(可选)
3. handle_data(必选)
4. after_trading_end(可选)
5. tick_data(可选)
6. on_order_response - 委托主推(可选)
7. on_trade_response - 交易主

initialize(必选)

注意事项:
该函数只会在回测和交易启动的时候运行一次

可调用接口

set_universe(回测/交易) set_benchmark(回测/交易) set_commission(回测)
set_fixed_slippage(回测) set_slippage(回测) set_volume_ratio(回测)
set_limit_mode(回测) set_yesterday_position(回测) run_daily(回测/交易)
run_interval(交易) get_trading_day(研究/回测/交易) get_all_trades_days(研究/回测/交易)
get_trade_days(交易) convert_position_from_csv(回测) get_user_name(回测/交易)
is_trade(回测/交易) get_research_path(回测/交易) permission_test(交易)
set_future_commission(回测(期货)) set_margin_rate(回测(期货)) get_margin_rate(回测(期货))
create_dir(回测/交易) set_parameters(回测/交易)

参数
context: Context对象,存放有当前的账户及持仓信息;
返回
None

before_trading_start(可选)

注意事项:
在回测中,该函数在每个回测交易日8:30分执行。
在交易中,该函数在开启交易时立即执行,从隔日开始每天9:10分(默认)执行。
当在9:10前开启交易时,受行情未更新原因在该函数内调用实时行情接口会导致数据有误。可通过在该函数内sleep至9:10分或调用实时行情接口改为run_daily执行等方式进行避免。

可调用接口

set_universe(回测/交易) get_Ashares(研究/回测/交易) set_yesterday_position(回测)
get_stock_info(研究/回测/交易) get_index_stocks(研究/回测/交易) get_fundamentals(研究/回测/交易)
get_trading_day(回测/交易) get_all_trades_days(研究/回测/交易) get_trade_days(研究/回测/交易)
get_history(回测/交易) get_price(研究/回测/交易) get_individual_entrust(交易)
get_individual_transaction(交易) convert_position_from_csv(回测) get_stock_name(研究/回测/交易)
get_stock_status(研究/回测/交易) get_stock_exrights(研究/回测/交易) get_stock_blocks(研究/回测/交易)
get_etf_list(交易) get_industry_stocks(研究/回测/交易) get_user_name(回测/交易)
get_cb_list(交易) get_deliver(交易) get_fundjour(交易)
get_research_path(回测/交易) get_market_list(研究/回测/交易) get_market_detail(研究/回测/交易)
permission_test(交易) get_trade_name(交易) set_future_commission(回测(期货))
set_margin_rate(回测(期货)) get_margin_rate(回测(期货)) get_instruments(回测/交易(期货))
get_MACD(回测/交易) get_KDJ(回测/交易) get_RSI(回测/交易)
get_CCI(回测/交易) create_dir(回测/交易) get_opt_objects(研究/回测/交易(期权))
get_opt_last_dates(研究/回测/交易(期权)) get_opt_contracts(研究/回测/交易(期权)) get_contract_info(研究/回测/交易(期权))
set_parameters(回测/交易) get_cb_info(研究/交易) get_enslo_security_info(交易)
get_ipo_stocks(交易)

参数
context: Context对象,存放有当前的账户及持仓信息;
data:保留字段暂无数据;
返回
None

handle_data(必选)

该函数仅在回测、交易模块可用
接口说明
该函数在交易时间内按指定的周期频率运行,是用于处理策略交易的主要模块,根据策略保存时的周期参数分为每分钟运行和每天运行,是策略运行的唯二必须定义函数之一。
注意事项:
该函数每个单位周期执行一次
如果是日线级别策略,每天执行一次。股票回测场景下,在15:00执行;股票交易场景下,执行时间为券商实际配置时间。
如果是分钟级别策略,每分钟执行一次,股票回测场景下,执行时间为9:31 – 15:00,股票交易场景下,执行时间为9:30 – 14:59。
回测与交易中,handle_data函数不会在非交易日触发(如回测或交易起始日期为2015年12月21日,则策略在2016年1月1日-3日时,handle_data不会运行,4日继续运行)。

可调用接口

get_trading_day(回测/交易) get_all_trades_days(研究/回测/交易) get_trade_days(研究/回测/交易)
get_history(回测/交易) get_price(研究/回测/交易) get_individual_entrust(交易)
get_individual_transaction(交易) get_gear_price(交易) get_stock_name(研究/回测/交易)
get_stock_status(研究/回测/交易) get_stock_exrights(研究/回测/交易) get_stock_blocks(研究/回测/交易)
get_index_stocks(研究/回测/交易) get_industry_stocks(研究/回测/交易) get_fundamentals(研究/回测/交易)
get_Ashares(研究/回测/交易) get_snapshot(交易) convert_position_from_csv(回测)
order(回测/交易) order_target(回测/交易) order_value(回测/交易)
order_target_value(回测/交易) order_market(交易) ipo_stocks_order(交易)
after_trading_order(交易) after_trading_cancel_order(交易) etf_basket_order(交易)
etf_purchase_redemption(交易) cancel_order(回测/交易) get_stock_info(研究/回测/交易)
get_order(回测/交易) get_orders(回测/交易) get_open_orders(回测/交易)
get_trades(回测/交易) get_position(回测/交易) get_positions(回测/交易)
get_etf_info(交易) get_etf_stock_info(交易) get_etf_stock_list(交易)
get_etf_list(交易) get_all_orders(交易) cancel_order_ex(交易)
debt_to_stock_order(交易) get_user_name(回测/交易) get_research_path(回测/交易)
get_marginsec_stocks(交易) get_margincash_stocks(交易) debt_to_stock_order(交易)
get_margin_contractreal(交易) get_margin_contract(交易) marginsec_direct_refund(交易)
get_margin_entrans_amount(交易) get_margin_contract(交易) margincash_direct_refund(交易)
marginsec_open(交易) marginsec_close(交易) margincash_open(交易)
margincash_close(交易) margin_trade(交易) get_marginsec_close_amount(交易)
get_marginsec_open_amount(交易) get_margincash_close_amount(交易) get_margincash_open_amount(交易)
get_cb_list(交易) get_tick_direction(交易) get_sort_msg(交易)
get_trade_name(交易) get_margin_rate(回测(期货)) get_instruments(回测/交易(期货)
buy_open(回测/交易(期货) sell_close(回测/交易(期货) sell_close(回测/交易(期货)
buy_close(回测/交易(期货) get_MACD(回测/交易) get_KDJ(回测/交易)
get_RSI(回测/交易) get_CCI(回测/交易) create_dir(回测/交易)
get_opt_objects(研究/回测/交易(期权)) get_opt_last_dates(研究/回测/交易(期权)) get_opt_contracts(研究/回测/交易(期权))
get_contract_info(研究/回测/交易(期权)) set_parameters(回测/交易) get_covered_lock_amount(交易(期权))
get_covered_unlock_amount(交易(期权)) buy_open(交易(期权)) sell_close(交易(期权))
sell_open(交易(期权)) buy_close(交易(期权)) open_prepared(交易(期权))
close_prepared(交易(期权)) option_exercise(交易(期权)) option_covered_lock(交易(期权))
option_covered_unlock(交易(期权)) get_cb_info(研究/交易) get_enslo_security_info(交易)
get_ipo_stocks(交易) check_limit(回测/研究/交易)

参数
context: Context对象,存放有当前的账户及持仓信息;

data:一个字典(dict),key是标的代码,value是当时的SecurityUnitData对象,存放当前周期(日线策略,则是当天;分钟策略,则是这一分钟)的数据;

注意:为了加速,data中的数据只包含股票池中所订阅标的的信息,可使用data[security]的方式来获取当前周期对应的标的信息;
返回
None

after_trading_end(可选)

使用场景
该函数仅在回测、交易模块可用
接口说明
该函数会在每天交易结束之后调用,用于处理每天收盘后的操作,如无盘后处理需求,该函数可以在策略中不做定义。
注意事项:
该函数只会执行一次
该函数执行时间为由券商配置决定,一般为15:30。
可调用接口

get_trades_file(回测) get_stock_info(研究/回测/交易) get_open_orders(回测/交易)
get_all_trades_days(研究/回测/交易) get_trade_days(研究/回测/交易) get_history(回测/交易)
get_price(研究/回测/交易) get_individual_entrust(交易) get_individual_transaction(交易)
get_Ashares(研究/回测/交易) get_stock_name(研究/回测/交易) get_stock_status(研究/回测/交易)
get_stock_exrights(研究/回测/交易) get_stock_blocks(研究/回测/交易) get_index_stocks(研究/回测/交易)
get_industry_stocks(研究/回测/交易) get_fundamentals(研究/回测/交易) get_user_name(回测/交易)
get_cb_list(交易) get_deliver(交易) get_fundjour(交易)
get_research_path(回测/交易) get_trade_name(交易) get_market_list(研究/回测/交易)
get_market_detail(研究/回测/交易) permission_test(交易) get_tick_direction(交易)
get_sort_msg(交易) get_margin_rate(回测(期货)) get_margin_rate(回测(期货))
get_instruments(回测/交易(期货)) get_MACD(回测/交易) get_KDJ(回测/交易)
get_RSI(回测/交易) get_CCI(回测/交易) create_dir(回测/交易)
get_opt_objects(研究/回测/交易(期权)) get_opt_last_dates(研究/回测/交易(期权)) get_opt_contracts(研究/回测/交易(期权))
get_contract_info(研究/回测/交易(期权)) set_parameters(回测/交易) get_cb_info(研究/交易)
get_enslo_security_info(交易)

参数
context: Context对象,存放有当前的账户及持仓信息;

data:保留字段暂无数据;

返回
None

tick_data(可选)

使用场景
该函数仅交易模块可用

接口说明
该函数可以用于处理tick级别策略的交易逻辑,每隔3秒执行一次,如无tick处理需求,该函数可以在策略中不做定义。

注意事项:

该函数执行时间为9:30 – 14:59。
该函数中的data和handle_data函数中的data是不一样的,请勿混肴。
参数data中包含的逐笔委托,逐笔成交数据需开通level2行情才能获取到数据,否则对应数据返回None。
参数data中的tick数据取自get_snapshot()并转换为DataFrame格式,如要更快速的获取快照强烈建议直接使用get_snapshot()获取。
当调用set_parameters()并设置tick_data_no_l2=”1”时,参数data中将不包含逐笔委托、逐笔成交字段,当券商有l2行情时配置该参数可提升data取速;
当策略执行时间超过3s时,将会丢弃中间堵塞的tick_data。
在收盘后,将会清空队列中未执行的tick_data。
参数data中包含的逐笔委托,逐笔成交数据正常返回DataFrame格式,异常时返回None。
可调用接口

get_trading_day(研究/回测/交易) get_all_trades_days(研究/回测/交易) get_trade_days(研究/回测/交易)
get_cb_list(交易) get_history(回测/交易) get_price(研究/回测/交易)
get_individual_entrust(交易) get_individual_transaction(交易) get_tick_direction(交易)
get_sort_msg(交易) get_etf_info(交易) get_etf_stock_info(交易)
get_gear_price(交易) get_snapshot(交易) get_stock_name(研究/回测/交易)
get_stock_info(研究/回测/交易) get_stock_status(研究/回测/交易) get_stock_exrights(研究/回测/交易)
get_stock_blocks(研究/回测/交易) get_index_stocks(研究/回测/交易) get_etf_stock_list(交易)
get_industry_stocks(研究/回测/交易) get_fundamentals(研究/回测/交易) get_Ashares(研究/回测/交易)
get_etf_list(交易) get_user_name(回测/交易) get_research_path(研究/回测/交易)
get_trade_name(交易) set_universe(回测/交易) order(回测/交易)
order_target(回测/交易) order_value(回测/交易) order_target_value(回测/交易)
order_market(交易) ipo_stocks_order(交易) after_trading_order(交易)
after_trading_cancel_order(交易) etf_basket_order(交易) etf_purchase_redemption(交易)
get_positions(回测/交易) order_tick(交易) cancel_order(回测/交易)
cancel_order_ex(交易) debt_to_stock_order(交易) get_open_orders(回测/交易)
get_order(回测/交易) get_orders(回测/交易) get_all_orders(交易)
get_trades(回测/交易) get_position(回测/交易) margin_trade(交易)
margincash_open(交易) margincash_close(交易) margincash_direct_refund(交易)
marginsec_open(交易) marginsec_close(交易) marginsec_direct_refund(交易)
get_margincash_stocks(交易) get_marginsec_stocks(交易) get_margin_contract(交易)
get_margin_contractreal(交易) get_margin_assert(交易) get_assure_security_list(交易)
get_margincash_open_amount(交易) get_margincash_close_amount(交易) get_marginsec_open_amount(交易)
get_marginsec_close_amount(交易) get_margin_entrans_amount(交易) buy_open(回测/交易(期货))
sell_close(回测/交易(期货)) sell_open(回测/交易(期货)) buy_close(回测/交易(期货))
get_instruments(回测/交易(期货)) log(回测/交易) is_trade(回测/交易)
check_limit(交易) send_email(交易) send_qywx(交易)
get_MACD(回测/交易) get_KDJ(回测/交易) get_RSI(回测/交易)
get_CCI(回测/交易) create_dir(回测/交易) get_opt_contracts(研究/回测/交易(期权))
get_contract_info(研究/回测/交易(期权)) set_parameters(回测/交易) get_covered_lock_amount(交易(期权))
get_covered_unlock_amount(交易(期权)) buy_open(交易(期权)) sell_close(交易(期权))
sell_open(交易(期权)) buy_close(交易(期权)) open_prepared(交易(期权))
close_prepared(交易(期权)) option_exercise(交易(期权)) option_covered_lock(交易(期权))
option_covered_unlock(交易(期权)) get_cb_info(研究/交易) get_enslo_security_info(交易)
get_ipo_stocks(交易)

参数
context: Context对象,存放有当前的账户及持仓信息;
data: 一个字典(dict),key为对应的标的代码(如:’600570.SS’),value为一个字典(dict),包含order(逐笔委托)、tick(当前tick数据)、transcation(逐笔成交)三项。
结构如下:

{'股票代码':
    {
        'order(最近一条逐笔委托)':DataFrame/None,
        'tick(当前tick数据)':DataFrame,
        'transcation(最近一条逐笔成交)':DataFrame/None,
    }
}

每项具体介绍:

order - 逐笔委托对应DataFrame包含字段:
    business_time:时间戳毫秒级
    hq_px:价格
    business_amount:委托量
    order_no:委托编号
    business_direction:委托方向
        0 – 卖;
        1 – 买;
        2 – 借入;
        3 – 出借;
    trans_kind:委托类别
        1-- 市价委托;
        2 -- 限价委托;
        3 -- 本方最优;
tick - tick数据对应DataFrame包含字段:
    amount:持仓量
    avg_px:均价
    bid_grp:买档位,dict类型,内容如:{1:[42.71,200,0],2:[42.74,200,0],3:[42.75,700,...,以档位为Key,以list为Value,每个Value包含:委托价格、委托数量和委托笔数;
    business_amount:成交数量;
    business_amount_in:内盘成交量;
    business_amount_out:外盘成交量
    business_balance:成交金额;
    business_count:成交笔数;
    circulation_amount:流通股本;
    close_px:今日收盘
    current_amount:最近成交量(现手);
    down_px:跌停价格;
    end_trade_date:最后交易日
    entrust_diff:委差;
    entrust_rate:委比;
    high_px:最高价;
    hsTimeStamp:时间戳,格式为YYYYMMDDHHMISS,如20170711141612,表示2017年7月11日14时16分12秒的tick数据信息;
    issue_date:上市日期
    last_px:最新成交价;
    low_px:最低价;
    offer_grp:卖档位,dict类型,内容如:{1:[42.71,200,0],2:[42.74,200,0],3:[42.75,700,...,以档位为Key,以list为Value,每个Value包含:委托价格、委托数量和委托笔数;
    open_px:今开盘价;
    pb_rate:市净率;
    pe_rate:动态市盈率;
    preclose_px:昨收价;
    prev_settlement:昨结算
    px_change_rate: 涨跌幅
    settlement:结算价
    start_trade_date:首个交易日
    tick_size:最小报价单位
    total_bid_turnover: 委买金额
    total_bidqty: 委买量
    total_offer_turnover: 委卖金额
    total_offerqty: 委卖量
    trade_mins:交易时间,距离开盘已过交易时间,如100则表示每日240分钟交易时间中的第100分钟;
    trade_status:交易状态;
        START -- 市场启动(初始化之后,集合竞价前)
        PRETR -- 盘前
        OCALL -- 开始集合竞价
        TRADE -- 交易(连续撮合)
        HALT -- 暂停交易
        SUSP -- 停盘
        BREAK -- 休市
        POSTR -- 盘后
        ENDTR -- 交易结束
        STOPT -- 长期停盘,停盘n天,n>=1
        DELISTED -- 退市
        POSMT -- 盘后交易
        PCALL -- 盘后集合竞价
        INIT -- 盘后固定价格启动前
        ENDPT -- 盘后固定价格闭市阶段
        POSSP -- 盘后固定价格停牌
    turnover_ratio:换手率
    up_px:涨停价格;
    vol_ratio:量比;
    wavg_px:加权平均价;
transcation - 逐笔成交对应DataFrame包含字段:
    business_time:时间戳毫秒级;
    hq_px:价格;
    business_amount:成交量;
    trade_index:成交编号;
    business_direction:成交方向;
        0 – 卖;
        1 – 买;
    buy_no: 叫买方编号;
    sell_no: 叫卖方编号;
    trans_flag: 成交标记;
        0 – 普通成交;
        1 – 撤单成交;
    trans_identify_am: 盘后逐笔成交序号标识;
        0 – 盘中;
        1 – 盘后;
    channel_num: 成交通道信息;

on_order_response - 委托主推(可选)

使用场景
该函数仅在交易模块可用
接口说明
该函数会在委托主推回调时响应,比引擎、get_order()和get_orders()函数更新Order状态的速度更快,适合对速度要求比较高的策略。
注意事项:
目前可接收股票、可转债、ETF、LOF、期货代码的主推数据。
当接到策略外交易产生的主推时(需券商配置默认不推送),由于没有对应的Order对象,主推信息中order_id字段赋值为””。
当在主推里调用委托接口时,需要进行判断处理避免无限迭代循环问题。
当券商配置接收策略外交易产生的主推且策略调用set_parameters()并设置receive_other_response=”1”时,策略中将接收非本交易产生的主推。
当策略调用set_parameters()并设置receive_cancel_response=”1”,策略接收到撤单成交主推时,主推信息中的order_id为买入或卖出委托Order对象的order_id,entrust_no为撤单委托的委托编号。
撤单委托主推信息中成交数量均处理为正数。
可调用委托接口

order(回测/交易) order_target(回测/交易) order_value(回测/交易)
order_target_value(回测/交易) order_market(交易) ipo_stocks_order(交易)
after_trading_order(交易) after_trading_cancel_order(交易) etf_basket_order(交易)
etf_purchase_redemption(交易) cancel_order(回测/交易) margin_trade(交易)
margincash_open(交易) margincash_close(交易) margincash_direct_refund(交易)
margincash_open(交易) marginsec_close(交易) marginsec_direct_refund(交易)
get_user_name(回测/交易) get_cb_list(交易) get_instruments(回测/交易(期货))
get_opt_contracts(研究/回测/交易(期权)) get_contract_info(研究/回测/交易(期权)) set_parameters(回测/交易)
get_cb_info(研究/交易) get_enslo_security_info(交易)

参数
context: Context对象,存放有当前的账户及持仓信息;

order_list:一个列表,当前委托单发生变化时,发生变化的委托单列表。委托单以字典形式展现,内容包括:’entrust_no’(委托编号), ‘error_info’(错误信息), ‘order_time’(委托时间), ‘stock_code’(股票代码), ‘amount’(委托数量), ‘price’(委托价格), ‘business_amount’(成交数量), ‘status’(委托状态), ‘entrust_type’(委托类别), ‘entrust_prop’(委托属性), ‘order_id’(Order对象编号);

字段备注:

status – 委托状态,详见Order对象;
entrust_type – 委托类别(str)
0 – 委托
2 – 撤单
4 – 确认
6 – 信用融资
7 – 信用融券
9 – 信用交易
entrust_prop – 委托属性(str)
0 – 买卖
1 – 配股
3 – 申购
7 – 转股
9 – 股息
N – ETF申赎
Q – 对手方最优价格
R – 最优五档即时成交剩余转限价
S – 本方最优价格
T – 即时成交剩余撤销
U – 最优五档即时成交剩余撤销
b – 定价委托
c – 确认委托
d – 限价委托

on_trade_response - 交易主推(可选)

使用场景
该函数仅在交易模块可用
接口说明
该函数会在成交主推回调时响应,比引擎和get_trades()函数更新Order状态的速度更快,适合对速度要求比较高的策略。
注意事项:
目前可接收股票、可转债、ETF、LOF、期货代码的主推数据。
当接到策略外交易产生的主推时(需券商配置默认不推送),由于没有对应的Order对象,主推信息中order_id字段赋值为””。
当在主推里调用委托接口时,需要进行判断处理避免无限迭代循环问题。
当券商配置接收策略外交易产生的主推且策略调用set_parameters()并设置receive_other_response=”1”时,策略中将接收非本交易产生的主推。
当策略调用set_parameters()并设置receive_cancel_response=”1”,策略接收到撤单成交主推时,主推信息中的order_id为买入或卖出委托Order对象的order_id,entrust_no为撤单委托的委托编号。
撤单成交主推信息中成交数量均处理为正数。
部分券商柜台成交主推信息中status字段为””,策略中需予以保护。
可调用委托接口

order(回测/交易) order_target(回测/交易) order_value(回测/交易)
order_target_value(回测/交易) order_market(交易) ipo_stocks_order(交易)
after_trading_order(交易) after_trading_cancel_order(交易) etf_basket_order(交易)
etf_purchase_redemption(交易) cancel_order(回测/交易) margin_trade(交易)
margincash_open(交易) margincash_close(交易) margincash_direct_refund(交易)
margincash_open(交易) marginsec_close(交易) marginsec_direct_refund(交易)
get_user_name(回测/交易) get_cb_list(交易) get_instruments(回测/交易(期货))
get_opt_contracts(研究/回测/交易(期权)) get_contract_info(研究/回测/交易(期权)) set_parameters(回测/交易)
get_cb_info(研究/交易) get_enslo_security_info(交易)

参数
context: Context对象,存放有当前的账户及持仓信息;
trade_list:一个列表,当前成交单发生变化时,发生变化的成交单列表。成交单以字典形式展现,内容包括:’entrust_no’(委托编号), ‘business_time’(成交时间), ‘stock_code’(股票代码), ‘entrust_bs’(成交方向), ‘business_amount’(成交数量), ‘business_price’(成交价格), ‘business_balance’(成交额), ‘business_id’(成交编号), ‘status’(委托状态), ‘order_id’(Order对象编号);
字段备注:
entrust_bs – 成交方向(str),1-买,2-卖;
status – 委托状态,详见Order对象;

本文由 海星量化研究所 作者提供,转载请保留链接和署名!网址:https://qmt.hxquant.com/?id=44

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源; 2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任; 3.作者投稿可能会经我们编辑修改或补充。

搜索
排行榜
关注我们

扫码开通QMT/ptrade