将量化投资进行到底
提供专业的量化投资解决方案

用AlgoPlus做量化交易之数据

前文说过,交易就是传递信息的过程,本文就带大家了解一下这些具体信息。

买卖撤查请求

买卖报单、撤单、查询概括了所有的交易业务。这些业务都是由交易者主动发起的,并且提供必要的信息。交易者只需要传递相应参数,AlgoPlus就可以按照CTP标准组织信息并发起请求。

  • 买开仓
    buy_open(exchange_id, instrument_id, order_price, order_vol)

  • 卖平仓
    sell_close(exchange_id, instrument_id, order_price, order_vol, is_today)

  • 卖开仓
    sell_open(exchange_id, instrument_id, order_price, order_vol)

  • 买平仓
    buy_close(exchange_id, instrument_id, order_price, order_vol, is_today)

  • 撤单
    req_order_action(exchange_id, instrument_id, order_ref, order_sysid)

  • 查成交
    req_qry_trade()

  • 查持仓
    req_qry_investor_position()

  • 查资金账户
    req_qry_trading_account()

  • 查合约
    req_qry_instrument()

买卖撤查通知

  1. 交易者发起的买卖报单、撤单请求后,期货公司柜台会推送一条响应信息,AlgoPlus的回调函数以此作为参数被调用。

    • OnRspOrderInsert(pInputOrder, pRspInfo, nRequestID, bIsLast)

    • OnRspOrderAction(pInputOrderAction, pRspInfo, nRequestID, bIsLast)

    • pRspInfo是一个python字典,内容如下:

      {
          'ErrorID'0,  # 错误代码
          'ErrorMsg'"",  # 错误信息
      }
  2. 买卖报单、撤单请求到达交易所被执行的过程中,交易所实时推送订单状态变化信息,AlgoPlus的回调函数OnRtnOrder(pOrder)以此作为参数被调用。pOrder是一个python字典,内容如下:

    {
      'BrokerID'"",  # 经纪公司代码
      'InvestorID'"",  # 投资者代码
      'InstrumentID'"",  # 合约代码
      'OrderRef'"",  # 报单引用
      'UserID'"",  # 用户代码
      'OrderPriceType'"",  # 报单价格条件
      'Direction'"",  # 买卖方向
      'CombOffsetFlag'"",  # 组合开平标志
      'CombHedgeFlag'"",  # 组合投机套保标志
      'LimitPrice'0.0,  # 价格
      'VolumeTotalOriginal'0,  # 数量
      'TimeCondition'"",  # 有效期类型
      'GTDDate'"",  # GTD日期
      'VolumeCondition'"",  # 成交量类型
      'MinVolume'0,  # 最小成交量
      'ContingentCondition'"",  # 触发条件
      'StopPrice'0.0,  # 止损价
      'ForceCloseReason'"",  # 强平原因
      'IsAutoSuspend'0,  # 自动挂起标志
      'BusinessUnit'"",  # 业务单元
      'RequestID'0,  # 请求编号
      'OrderLocalID'"",  # 本地报单编号
      'ExchangeID'"",  # 交易所代码
      'ParticipantID'"",  # 会员代码
      'ClientID'"",  # 客户代码
      'ExchangeInstID'"",  # 合约在交易所的代码
      'TraderID'"",  # 交易所交易员代码
      'InstallID'0,  # 安装编号
      'OrderSubmitStatus'"",  # 报单提交状态
      'NotifySequence'0,  # 报单提示序号
      'TradingDay'"",  # 交易日
      'SettlementID'0,  # 结算编号
      'OrderSysID'"",  # 报单编号
      'OrderSource'"",  # 报单来源
      'OrderStatus'"",  # 报单状态
      'OrderType'"",  # 报单类型
      'VolumeTraded'0,  # 今成交数量
      'VolumeTotal'0,  # 剩余数量
      'InsertDate'"",  # 报单日期
      'InsertTime'"",  # 委托时间
      'ActiveTime'"",  # 激活时间
      'SuspendTime'"",  # 挂起时间
      'UpdateTime'"",  # 最后修改时间
      'CancelTime'"",  # 撤销时间
      'ActiveTraderID'"",  # 最后修改交易所交易员代码
      'ClearingPartID'"",  # 结算会员编号
      'SequenceNo'0,  # 序号
      'FrontID'0,  # 前置编号
      'SessionID'0,  # 会话编号
      'UserProductInfo'"",  # 用户端产品信息
      'StatusMsg'"",  # 状态信息
      'UserForceClose'0,  # 用户强平标志
      'ActiveUserID'"",  # 操作用户代码
      'BrokerOrderSeq'0,  # 经纪公司报单编号
      'RelativeOrderSysID'"",  # 相关报单
      'ZCETotalTradedVolume'0,  # 郑商所成交数量
      'IsSwapOrder'0,  # 互换单标志
      'BranchID'"",  # 营业部编号
      'InvestUnitID'"",  # 投资单元代码
      'AccountID'"",  # 资金账号
      'CurrencyID'"",  # 币种代码
      'IPAddress'"",  # IP地址
      'MacAddress'"",  # Mac地址
    }

    OrderStatus取值及含义:

    #///全部成交
    OrderStatus_AllTraded = b'0'
    #///部分成交还在队列中
    OrderStatus_PartTradedQueueing = b'1'
    #///部分成交不在队列中
    OrderStatus_PartTradedNotQueueing = b'2'
    #///未成交还在队列中
    OrderStatus_NoTradeQueueing = b'3'
    #///未成交不在队列中
    OrderStatus_NoTradeNotQueueing = b'4'
    #///撤单
    OrderStatus_Canceled = b'5'
    #///未知
    OrderStatus_Unknown = b'a'
    #///尚未触发
    OrderStatus_NotTouched = b'b'
    #///已触发
    OrderStatus_Touched = b'c'

    OrderSubmitStatus取值及含义:

    #///已经提交
    OrderSubmitStatus_InsertSubmitted = b'0'
    #///撤单已经提交
    OrderSubmitStatus_CancelSubmitted = b'1'
    #///修改已经提交
    OrderSubmitStatus_ModifySubmitted = b'2'
    #///已经接受
    OrderSubmitStatus_Accepted = b'3'
    #///报单已经被拒绝
    OrderSubmitStatus_InsertRejected = b'4'
    #///撤单已经被拒绝
    OrderSubmitStatus_CancelRejected = b'5'
    #///改单已经被拒绝
    OrderSubmitStatus_ModifyRejected = b'6'
  3. 当订单有成交发生时,交易所还会推送一条成交信息,AlgoPlus的回调函数OnRtnTrade(pTrade)以此作为参数被调用。除了成交价格之外,pTrade中的其他信息在pOrder中都有。

行情数据通知

发布实时最新成交数据是交易所重要的职能,也是交易者做决策的重要依据。

创建行情接口实例时,AlgoPlus会根据交易者传递的合约列表参数自动订阅合约。在盘中,AlgoPlus的回调函数OnRtnDepthMarketData(pDepthMarketData)以实时行情数据为参数被调用。pDepthMarketData是一个python字典,内容如下:

{
    'TradingDay'b'20200113'# 交易日
    'InstrumentID'b'rb2005'# 合约代码
    'ExchangeID'b''# 交易所代码
    'ExchangeInstID'b''# 合约在交易所的代码
    'LastPrice'3559.0# 最新价
    'PreSettlementPrice'3568.0# 上次结算价
    'PreClosePrice'3571.0# 昨收盘
    'PreOpenInterest'1357418.0# 昨持仓量
    'OpenPrice'3565.0# 今开盘
    'HighestPrice'3567.0# 最高价
    'LowestPrice'3544.0# 最低价
    'Volume'347796# 数量
    'Turnover'12361542250.0# 成交金额
    'OpenInterest'1345077.0# 持仓量
    'ClosePrice'1.7976931348623157e+308# 今收盘
    'SettlementPrice'1.7976931348623157e+308# 本次结算价
    'UpperLimitPrice'3782.0# 涨停板价
    'LowerLimitPrice'3353.0# 跌停板价
    'PreDelta'0.0# 昨虚实度
    'CurrDelta'1.7976931348623157e+308# 今虚实度
    'UpdateTime'b'23:00:01'# 最后修改时间
    'UpdateMillisec'0# 最后修改毫秒
    'BidPrice1'3559.0# 申买价一
    'BidVolume1'158# 申买量一
    'AskPrice1'3560.0# 申卖价一
    'AskVolume1'18# 申卖量一
    'BidPrice2'1.7976931348623157e+308# 申买价二
    'BidVolume2'0# 申买量二
    'AskPrice2'1.7976931348623157e+308# 申卖价二
    'AskVolume2'0# 申卖量二
    'BidPrice3'1.7976931348623157e+308# 申买价三
    'BidVolume3'0# 申买量三
    'AskPrice3'1.7976931348623157e+308# 申卖价三
    'AskVolume3'0# 申卖量三
    'BidPrice4'1.7976931348623157e+308# 申买价四
    'BidVolume4'0# 申买量四
    'AskPrice4'1.7976931348623157e+308# 申卖价四
    'AskVolume4'0# 申卖量四
    'BidPrice5'1.7976931348623157e+308# 申买价五
    'BidVolume5'0# 申买量五
    'AskPrice5'1.7976931348623157e+308# 申卖价五
    'AskVolume5'0# 申卖量五
    'AveragePrice'35542.50839572623# 当日均价
    'ActionDay'b'20200110' # 业务日期
}

目前,CTP推送中金所、大商所、郑商所一档行情,上期所五档行情(视期货公司而定)。所有交易所的行情都是快照。

赞(1) 打赏
未经允许不得转载:CTP量化投资技术研究 - AlgoPlus量化投资开源框架 - 将交易进行到底 » 用AlgoPlus做量化交易之数据
分享到: (0)

评论 抢沙发

评论前必须登录!

 

知者不惑,仁者不忧,勇者不惧

你的认可是我们最大的动力!

微信扫一扫打赏