rowAlign

语法

rowAlign(left, right, how)

参数

left/right 是数组向量。
注:
  • leftright 的长度和类型必须相同,但它们对应的每行向量的个数可以相同或不同。例如:left 的长度是3,其第一行向量的长度是5,则 right 的长度必须是3,其每一行向量的长度可以是5或者其它值。

  • 必须保证 left/right 中每行向量的数据严格有序排列。

how 字符串,用于指定数据对齐的方式。设置值不同,会影响 leftright 对齐的数据范围。可选值为:
how(不区分大小写) 含义 对齐后的最大值 对齐后的最小值
"bid" 表示 left/right 为多档买方报价数据,其数据严格降序排列。 max(max(left), max(right)) max(min(left), min(right))
"ask" 表示 left/right 为多档卖方报价数据,其数据严格升序排列。 min(max(left), max(right)) min(min(left), min(right)
"allBid" 表示 left/right 为多档买方报价数据,其数据严格降序排列。 max(max(left), max(right)) min(min(left), min(right))
”allAsk“ 表示 left/right 为多档卖方报价数据,其数据严格升序排列。 max(max(left), max(right)) min(min(left), min(right)

详情

根据值,按行进行数据对齐,返回一个长度为 2 的元组,分别表示对齐后数据在原数据中的索引。若 left/right 中不存在数据与 right/left 对齐,则返回 -1。

通过 rowAt 函数可以按行取出对应索引的元素。

  • how = "bid" 或 "allBid" 时,bid 中某行数据的对齐过程如下图所示:
    rowAlign1
  • how = "ask" 或 "allAsk" 时,ask 中某行数据的对齐过程如下图所示:
    rowAlign2

例子

left = array(DOUBLE[], 0, 5).append!([9.01 9.00 8.99 8.98 8.97, 9.00 8.98 8.97 8.96 8.95, 8.99 8.97 8.95 8.93 8.91])
right = array(DOUBLE[], 0, 5).append!([9.02 9.01 9.00 8.99 8.98, 9.01 9.00 8.99 8.98 8.97, 9.00 8.98 8.97 8.96 8.95])
leftIndex, rightIndex = rowAlign(left, right, "bid")
leftIndex
# output
[[-1,0,1,2,3],[-1,0,-1,1,2],[-1,0,-1,1,-1,2]]
left.rowAt(leftIndex)
# output
[[,9.01,9.00,8.99,8.98],[,9,,8.99,8.97],[,8.99,,8.97,,8.95]]

rightIndex
# output
[[0,1,2,3,4],[0,1,2,3,4],[0,-1,1,2,3,4]]
right.rowAt(rightIndex)
# output
[[9.02,9.01,9.00,8.99,8.98],[9.01,9.00,8.99,8.98,8.97],[9.00,,8.98,8.97,8.96,8.95]]

// 输出 left 与 right 数据对齐后的买方报价
left.rowAt(leftIndex).nullFill(right.rowAt(rightIndex))
# output
[[9.02,9.01,9,8.99,8.98],[9.01,9.00,8.99,8.98,8.97],[9.00,8.99,8.98,8.97,8.96,8.95]]

// 假定 bid 对应的 qty 如下
 leftBidQty = array(INT[], 0, 5).append!([10 5 15 20 13, 12 15 20 21 18, 7 8 9 9 10])
 rightBidQty = array(INT[], 0, 5).append!([8 12 10 12 8, 10 5 15 18 13, 12 15 20 21 19])

// 计算 left 和 right 五档报价对应委托量的变化
leftBidQty.rowAt(leftIndex).nullFill(0) - rightBidQty.rowAt(rightIndex).nullFill(0)
# output
[[-8,-2,-5,3,12],[-10,7,-15,-3,7],[-12,7,-15,-12,-21,-10]]

leftIndex, rightIndex = rowAlign(left, right, "allBid")
leftIndex
# output
[[-1,0,1,2],[-1,-1,0,1,2],[-1,0,-1,1,2]]

rightIndex
# output
[[0,1,2,-1],[0,1,2,-1,-1],[0,-1,1,2,-1]]

left = array(DOUBLE[], 0, 3).append!([8.99 9.00 9.01, 8.97 8.99 9.00, 8.95 8.97 8.99])
right = array(DOUBLE[], 0, 3).append!([9.00 9.01 9.02, 8.99 9.00 9.01, 8.97 8.98 9.00])
leftIndex, rightIndex = rowAlign(left, right, "ask")
leftIndex
# output
[[0,1,2],[0,1,2],[0,1,-1,2]]

rightIndex
# output
[[-1,0,1],[-1,0,1],[-1,0,1,-1]]

leftIndex, rightIndex = rowAlign(left, right, "allAsk")
leftIndex
# output
[[0,1,2,-1],[0,1,2,-1],[0,1,-1,2,-1]]

rightIndex
# output
[[-1,0,1,2],[-1,0,1,2],[-1,0,1,-1,2]]