根据文档的描述A_BuyAvgPrice和A_BuyAvgPriceO返回的是分别按照结算价计算和按照成 本价计算的持仓均价,实际测试了一下返回结果相通,以下是测试过程:
所有的操作都是在同一日完成的,没有跨交易日
按照一般理解的持仓均价概念,这两次操作买入的持仓均价=(127620 x 2 + 127093 x 3)/ (2 + 5) = 127303.8, 四舍五入得到127304,也算是跟计算结果一致
我的问题是:
#1 这两个函数应该返回同样的结果么?
#2 A_BuyAvgPrice的计算规则是什么?
#3 A_BuyAvgPriceO的计算规则是什么?
附上代码:
If(QuoteStatus == Enum_QuoteStatus_RealTime and BarStatus == 2)
{
Numeric buyavg = A_BuyAvgPrice();
Numeric buyavgo = A_BuyAvgPriceO();
Print("A_BuyAvgPrice = " + Text(buyavg));
Print("A_BuyAvgPriceO = " + Text(buyavgo));
}
关联之前提问帖: https://bbs.tbquant.net/thread/20250110173357699724
隔了一个交易日查看:
A_BuyAvgPrice = 128020
A_BuyAvgPriceO = 127477
PreSettlement:128020
Tick last Price:127410
第二天查看
A_BuyAvgPrice = 127570 (不符合)
A_BuyAvgPriceO = 127477 (符合昨日预期)
昨日结算价为:
Tick. PreSettlement:127570
跟昨天预期的值 A_BuyAvgPrice = (127520 x 5 + Tick.PreSettlement x 5) / 10 = (127520 x 5 + 127570 x 5)/10 = 127545
目前共有5手ni, 又以成交价127650买入了5手ni, 用于明日检查A_Buy_AvgPrice变化, 成交后的数据如下
A_BuyAvgPrice = 127585
计算公式: (127520(昨日结算价) x 5 + 127650(成交价,作为盘中当日结算价) x 5)/10 = 127585
A_BuyAvgPriceO = 127477
计算公式:(127304 x5 + 127650 x 5)/ 10 = 127477
目前数据与推测的都是对的上的,预计明天的结果是:
A_BuyAvgPrice = (127520 x 5 + Tick.PreSettlement x 5) / 10
A_BuyAvgPriceO = 127477
按照论坛帖子里的方法获取了昨日结算价, 与A_BuyAvgPrice()获取的数据一致
Tick Last Price:127570
PreSettle Price:127520 (昨日结算价)
Settle Price:0 (今日结算价)
获取昨日结算价的方法: https://bbs.tbquant.net/thread/forum11965
做个记录供参考,第二日重新运行得到的数据是
A_BuyAvgPrice = 127520
A_BuyAvgPriceO = 127304
第二天再来看 ,隔日了才会结算
好的,谢谢王老师