Skip to main content

DataProcessing_README

ETF、股指数据清洗规则​

量化研究​

  1. 由于券商行情的推送机制是当存在订单簿变化的时候才推送新的快照,因此对于数据处理应当先由时间早向时间晚填充后,再对异常的值填充NA或nan,从而避免问题数据对后续曲面和回测的影响。
  2. 对14:57之前的ETF行情和全部股指相关行情,首先校验订单簿是否从买五到卖五严格单调变化,即 1e−12≤bidpx5≤bidpx4≤⋯≤bidpx1≤askpx1≤⋯≤askpx51e^{-12}\leq bidpx_5\leq bidpx_4\leq\cdots\leq bidpx_1\leq askpx_1\leq \cdots\leq askpx_5 如若不满足上述条件,则将该订单簿设置为NA
  3. 对于行情中仅有一边有报价的情况,应当在填充行情完成之后再将这一合约的订单簿设置为NA
  4. NA不能出现在有效价格中间。
  5. 在使用较早时间的数据对较晚时间的数据进行填充时,应遵循orderbook整体填充,而不是每列分别向后填充。

量化开发​

由于实盘交易中往往按照流式处理收到的行情数据,流程与上面一个部分略有差异。

  1. 对于非0的ETF期权价格需要遵循下述单调性,并仅仅校验14:57及之前的行情。 −1e−12≤bidpx5≤bidpx4≤⋯≤bidpx1≤askpx1≤⋯≤askpx5-1e^{-12}\leq bidpx_5\leq bidpx_4\leq\cdots\leq bidpx_1\leq askpx_1\leq \cdots\leq askpx_5 当不满足要求时,则抛弃这一行情,不再传递给曲面拟合,也禁止策略对这一合约进行交易。
  2. 对于非0的股指期货和期权价格需要遵循下述单调性,校验全部行情。 −1e−12<bidpx5<bidpx4<⋯<bidpx1<askpx1<⋯<askpx5-1e^{-12}<bidpx_5<bidpx_4<\cdots<bidpx_1<askpx_1<\cdots<askpx_5 当不满足要求时,则抛弃这一行情,不再传递给曲面拟合,也禁止策略对这一合约进行交易。
  3. 价格为0的报价不能出现在上述不等式中两个报价中间。
  4. 对于某一合约的当前行情,如果合约最新行情能够通过最新的校验,则将最新行情视作当前行情;如果不能通过当前校验,则认为当前合约无行情。

套利检验​

该算法用于检验某个处于熔断的 (strike, expiration) 的报价是否存在套利

Notation​

  • K∗K^* 表示熔断的 strike,T∗T^* 表示熔断的 expiration
  • K+K^{+} 表示同一个 expiration 下,未熔断的 strike 中大于 K∗K^* 的最小行权价
  • K−K^{-} 表示同一个 expiration 下,未熔断的 strike 中小于 K∗K^* 的最大行权价
  • T+T^{+} 表示同一个 strike 下,未熔断的 expiration 中大于 T∗T^* 的最小 expiration
  • T−T^{-} 表示同一个 strike 下,未熔断的 expiration 中小于 T∗T^* 的最大 expiration
  • 当上述变量中不存在K+K^{+} 或 K−K^{-} 或 T+T^{+} 或 T−T^{-} 时,涉及相应变量的检查跳过。即当变量不存在时设置为NULL或NAN,此时涉及NULL或NAN的不等式跳过。

Spread Arbitrage​

对于 Call 而言,同一个 expiration 下熔断的 strike K∗K^* 无 spread arbitrage 当且仅当:

CallBid1(K+)≤Call(K∗)≤CallAsk1(K+)+D(K+−K∗)CallBid1(K−)−D(K∗−K−)≤Call(K∗)≤CallAsk1(K−)\begin{aligned} \text{CallBid1}(K^{+}) &\leq& \text{Call}(K^*) &\leq& \text{CallAsk1}(K^{+}) + D(K^{+}-K^{*}) \\ \text{CallBid1}(K^{-}) - D(K^{*}-K^{-}) &\leq& \text{Call}(K^*) &\leq& \text{CallAsk1}(K^{-}) \end{aligned}

对于 Put 而言,同一个 expiration 下熔断的 strike K∗K^* 无 spread arbitrage 当且仅当:

PutBid1(K−)≤Put(K∗)≤PutAsk1(K−)−D(K−−K∗)PutBid1(K+)+D(K∗−K+)≤Put(K∗)≤PutAsk1(K+)\begin{aligned} \text{PutBid1}(K^{-}) &\leq& \text{Put}(K^*) &\leq& \text{PutAsk1}(K^{-}) - D(K^{-}-K^{*}) \\ \text{PutBid1}(K^{+}) + D(K^{*}-K^{+}) &\leq& \text{Put}(K^*) &\leq& \text{PutAsk1}(K^{+}) \end{aligned}

其中 DD 为贴现因子,可近似取 1。

Butterfly Arbitrage​

对于 Call 而言,同一个 expiration 下熔断的 strike K∗K^* 无 butterfly arbitrage 当且仅当:

w−CallBid1(K−)+w+CallBid1(K+)≤Call(K∗)≤w−CallAsk1(K−)+w+CallAsk1(K+)w^{-}\text{CallBid1}(K^{-})+w^{+}\text{CallBid1}(K^{+}) \leq \text{Call}(K^{*}) \leq w^{-}\text{CallAsk1}(K^{-})+w^{+}\text{CallAsk1}(K^{+})

对于 Put 而言,同一个 expiration 下熔断的 strike K∗K^* 无 butterfly arbitrage 当且仅当:

w−PutBid1(K−)+w+PutBid1(K+)≤Put(K∗)≤w−PutAsk1(K−)+w+PutAsk1(K+)w^{-}\text{PutBid1}(K^{-})+w^{+}\text{PutBid1}(K^{+}) \leq \text{Put}(K^{*}) \leq w^{-}\text{PutAsk1}(K^{-})+w^{+}\text{PutAsk1}(K^{+})

其中:

ω−=K+−K∗K+−K−,ω+=K∗−K−K+−K−\omega^{-} = \frac{K^{+}-K^{*}}{K^{+}-K^{-}}, \omega^{+} = \frac{K^{*}-K^{-}}{K^{+}-K^{-}}

Calendar Arbitrage​

对于 Call 而言,同一个 strike 下熔断的 T∗T^{*} 无 calendar arbitrage 当且仅当:

CallBid1(T−)≤Call(T∗)≤CallAsk1(T+)\text{CallBid1}(T^{-}) \leq \text{Call}(T^{*}) \leq \text{CallAsk1}(T^{+})

对于 Put 而言,同一个 strike 下熔断的 T∗T^{*} 无 calendar arbitrage 当且仅当:

PutBid1(T−)≤Put(T∗)≤PutAsk1(T+)\text{PutBid1}(T^{-}) \leq \text{Put}(T^{*}) \leq \text{PutAsk1}(T^{+})