上期所对撮合价格的说明:
交易所计算机撮合系统将买卖申报指令以价格优先、时间优先的原则进行排序,当买入价大于、等于卖出价则自动撮合成交。
交易所交易系统的撮合成交价等于买入价(bp)、卖出价(sp)和前一成交价(cp)三者中居中的一个价格。即:
当 bp≥sp≥cp, 则: 最新成交价=sp
bp≥cp≥sp, 最新成交价=cp
cp≥bp≥sp, 最新成交价=bp
vnpy这样回测应该是有道理的
可以考虑用 conda 的 virtual env
vnpy 限价单成交价的计算是 order.price 和 ***_best_price 作比较:
if long_cross:
trade_price = min(order.price, long_best_price)
pos_change = order.volume
else:
trade_price = max(order.price, short_best_price)
pos_change = -order.volume
这是否意味着每次都是把限价单当做 taker order来撮合的
假如这个 order 是上一根 K 线没有匹配上,那么这个 order 就会进入 orderbook 成为一个 maker order
那这里是不是就不用取 max/min 了,直接 trade_price = order.price
? 但是假如流动性好的话,我们可以认为 bar(T).open == bar(T-1).close
,所以其实影响不大?