ptrade从零开始学习量化交易第10期【ptrade策略引擎简介之tick_data(可选)】

策略引擎简介

更加详细的调用方法,后续会慢慢整理。

也可找寻博主历史文章,搜索关键词使用方案,比如本文涉及函数tick_data!

感谢关注,咨询开通量化回测与获取实盘权限,欢迎和博主联系!

ptrade业务流程框架

ptrade量化引擎以事件触发为基础,通过初始化事件(initialize)、盘前事件(before_trading_start)、盘中事件(handle_data)、盘后事件(after_trading_end)来完成每个交易日的策略任务。

initialize和handle_data是一个允许运行策略的最基础结构,也就是必选项,before_trading_start和after_trading_end是可以按需运行的。

handle_data仅满足日线和分钟级别的盘中处理,tick级别的盘中处理则需要通过tick_data或者run_interval来实现。

ptrade还支持委托主推事件(on_order_response)、交易主推事件(on_trade_response),可以通过委托和成交的信息来处理策略逻辑,是tick级的一个补充。

除了以上的一些事件以外,ptrade也支持通过定时任务来运行策略逻辑,可以通过run_daily接口实现。

tick_data(可选)

tick_data(context, data)

使用场景

该函数仅交易模块可用

接口说明

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

注意事项:

  1. 该函数执行时间为9:30 -- 14:59。

  2. 该函数中的data和handle_data函数中的data是不一样的,请勿混肴。

  3. 参数data中包含的逐笔委托,逐笔成交数据需开通level2行情才能获取到数据,否则对应数据返回None。

  4. 参数data中的tick数据取自get_snapshot()并转换为DataFrame格式,如要更快速的获取快照强烈建议直接使用get_snapshot()获取。

  5. 当调用set_parameters()并设置tick_data_no_l2="1"时,参数data中将不包含逐笔委托、逐笔成交字段,当券商有l2行情时配置该参数可提升data取速;

  6. 当策略执行时间超过3s时,将会丢弃中间堵塞的tick_data。

  7. 在收盘后,将会清空队列中未执行的tick_data。

  8. 参数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: 成交通道信息;

返回

None

示例
def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)

def tick_data(context,data):
    # 获取买一价
    security = g.security
    current_price = eval(data[security]['tick']['bid_grp'][0])[1][0]
    log.info(current_price)
    # 获取买二价
    # current_price = eval(data[security]['tick']['bid_grp'][0])[2][0]
    # 获取买三量
    # current_amount = eval(data[security]['tick']['bid_grp'][0])[3][1]
    # 获取tick最高价
    # current_high_price = data[security]['tick']['high_px'][0]
    # 最近一笔逐笔成交的成交量
    # transaction = data[security]["transcation"]
    # business_amount = list(transaction["business_amount"])
    # if len(business_amount) > 0:
    #     log.info("最近一笔逐笔成交的成交量:%s" % business_amount[0])
    # 最近一笔逐笔委托的委托类别
    # order = data[security]["order"]
    # trans_kind = list(order["trans_kind"])
    # if len(trans_kind) > 0:
    #     log.info("最近一笔逐笔委托的委托类别:%s" % trans_kind[0])
    if current_price > 38.19:
        # 按买一档价格下单
        order_tick(security, 100, 1)

def handle_data(context, data):
    pass
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值