HftStraBaseCtx交易订单控制模块

HftStraBaseCtx 虚拟操作接口层

HftStraBaseCtx::stra_enter_long_v:虚拟开多仓

  • 功能:用于进入一个虚拟的多头交易(买入操作)。
  • 流程
    • 检查是否存在交易对象 _trader,以及自定义的本地ID customLocalID 是否有效(必须非零)。
    • 检查交易模式是否支持虚拟订单(isVirtOrder())。
    • 提取股票/合约的标准代码(stdCode)并转换为真实代码(realCode)。
    • 查找相关合约信息(ct),若有 ruletag,则进行处理,确保获取正确的合约信息。
    • 通过锁定对应的虚拟订单锁 virt_order_locks[realCode],确保数据的一致性和防止并发冲突。
    • 填充订单信息并存入数据库。
    • 检查价格、数量和风控限制,若检查不通过,则返回错误信息。
    • 调用 _trader->buy_v 实际执行开仓操作。
    • 错误处理:若出现错误,会撤销订单并更新订单状态为“撤单”。

HftStraBaseCtx::stra_exit_long_v:虚拟平多仓

  • 功能:用于退出虚拟多头仓位(卖出操作,用于平掉已持有的多头仓位)。
  • 流程
    • 检查是否存在交易对象 _trader,以及 customLocalID 是否有效。
    • 确保当前交易模式支持虚拟订单。
    • 提取和转换标准代码为真实代码,并获取合约信息。
    • 锁定虚拟订单的锁,防止并发冲突。
    • 填充订单信息并存入数据库。
    • 查询当前虚拟仓位(v_pos_value),确保平仓的数量不超过现有的仓位。
    • 锁定仓位,更新数据库,执行_trader->sell_v卖出操作。
    • 错误处理:若操作失败或仓位不足,则还原仓位并更新订单状态为撤单。

HftStraBaseCtx::stra_enter_short_v and HftStraBaseCtx::stra_exit_short_v

HftStraBaseCtx::Error_handle错误处理

在每个交易函数中,错误处理机制都涉及:

  1. 价格检查:确保订单价格合法。
  2. 数量检查:确保订单数量符合要求。
  3. 风控检查:确保订单符合相关的风控要求(如流动性、限单等)。
  4. 仓位检查:对于平仓操作,必须确认仓位足够。如果仓位不足,会返回错误并且不进行交易。

TraderAdapter 虚拟下单接口层

Trader::buy_v:面向虚拟仓位的买入

  1. 参数解释
  • stdCode:商品代码(期货合约代码),是买入操作的标的。
  • price:买入价格,用户希望以此价格买入商品。
  • qty:买入数量,用户希望购买的数量。
  • flag:订单标志(可能用于区分不同的订单类型,如市价单、限价单等)。
  • errMsg:返回的错误信息,如果买入操作出错,错误信息会通过此参数返回。
  • customLocalID:用户提供的自定义本地ID,用于标识订单,可以关联其他系统或信息。
  • contextName:上下文名称,用于区分不同的交易会话或策略。
  • cInfo:指向一个 WTSContractInfo 类型的指针,表示合约信息。
  • needCancelOrder:是否需要取消当前已有的挂单。如果为 true,在执行买入操作之前,会检查并尝试取消已有的挂单。
  1. 获取合约信息和会话信息
  2. 获取当前的仓位和交易状态
  • _positions 获取当前品种(stdCode)的仓位信息(pItem)。
  • _stat_map 获取当前品种的交易状态信息(statInfo),如果该信息不存在,则创建并添加新的交易状态信息。
  • statItemstatInfo 中包含的交易统计信息,后续会根据它来判断是否满足某些交易规则。

4. 获取交易策略规则

  • 从策略管理器(_policy_mgr)获取与当前商品相关的交易规则(ruleGP)。这些规则决定了如何进行买入操作(比如是否执行开仓、平仓、锁仓等操作)。

    • const ActionRuleGroup& ruleGP = _policy_mgr->getActionRules(commInfo->getFullPid());
  • 遍历交易规则并执行相应操作

    • 锁仓操作 (AT_LockOrder)

      • 锁仓数量的计算:首先,lockQty 被设为当前的总仓位( total_pos(true)total_pos(false) 二者中的较大值),用于表示当前的锁仓量。
    • 开仓操作 (AT_Open)

      • 为当前订单生成一个localid。这是一个唯一的标识符,用来标识一个特定的交易操作。每当一个订单(如开仓、平仓、锁仓等)被触发时,系统会生成一个新的 localid

      • 执行开多仓操作:使用 openLong 函数尝试开多仓。如果返回的 ret_localid 不为 UINT_MAX(表示成功),则将剩余数量 left 设置为 0,表示操作完成。

      • 失败处理:如果订单创建失败,撤销本地ID并输出相关日志。

    • 平今仓操作 (AT_CloseToday)

      平今仓是指在同一个交易日内平掉已经开立的空仓。通常用于短期交易或当天的风险控制。

      • 计算最大可平仓数量maxQty 是当前可平仓的数量,这里使用 avail_new_pos(false) 来获取今天可平仓的数量。最大可平仓数量是剩余数量和可平仓数量中的较小值。

      • 平仓操作:调用 closeShort 函数执行平今仓操作。成功后,减少剩余数量 left

      • 失败处理:如果平仓失败,撤销本地ID,并记录错误日志。

    • 平昨仓操作 (AT_CloseYestoday)

      平昨仓是指平掉昨天的仓位,通常是在隔夜持仓的情况下进行。

      • 计算最大可平仓数量maxQty 是可以平掉的昨天仓位数量,使用 avail_pre_pos(false) 来获取可平仓的数量。

      • 平仓操作:调用 closeShort 执行平昨仓操作。如果成功,减少剩余数量 left

      • 失败处理:如果操作失败,撤销本地ID。

    • 普通平仓操作 (AT_Close)

      普通平仓操作是最常见的平仓方式,它会根据当前的持仓状况来平掉多余的仓位。

      • 计算可平仓数量maxQty 为剩余可平仓的数量,取 avail_pos(false) 和剩余买入数量 left 的较小值。

      • 执行平仓操作:使用 closeShort 执行平仓操作。如果成功,更新剩余数量。

      • 失败处理:如果平仓失败,撤销本地ID。

    • 错误处理和日志记录

    • addLocalIDToVirtOrder(contextName, customLocalID, localid);

      • 本地ID(localid)与虚拟订单关联起来。具体来说,它会将订单的 localid 和用户提供的 customLocalID 关联,并且可能与某个 contextName(上下文名称)一起进行管理。这意味着 localidcustomLocalID 之间的映射关系被记录下来,从而可以在后续的操作中查找和追踪相应的订单。

Trader::sell_v:面向虚拟仓位的卖出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值