实测A_BuyAvgPrice与A_BuyAvgPriceO返回结果没差别,是文档描述问题么?

根据文档的描述A_BuyAvgPrice和A_BuyAvgPriceO返回的是分别按照结算价计算和按照成 本价计算的持仓均价,实际测试了一下返回结果相通,以下是测试过程:


所有的操作都是在同一日完成的,没有跨交易日


  1. 先买入2手ni,  持仓均价127620
  2. 通过策略调用A_BuyAvgPrice和A_BuyAvgPriceO, 显示返回的结果都是127620
  3. 稍后等价格下跌又买入3手nie, 这次成交价是127093
  4. 通过策略调用A_BuyAvgPrice和A_BuyAvgPriceO, 发生了变化,显示返回的结果都是127304



按照一般理解的持仓均价概念,这两次操作买入的持仓均价=(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和A_BuyAvgPriceO的区别,帮忙澄清下理解
A_BuyAvgPriceO取不到价格
=与==有什么差别
=与==,有什么差别
回测数据与策略数据差别问题
判断结果返回问题
A_BuyAvgPriceO是否是后复权价格
实测数据源策略函数中多个函数持续返回0
请问,在表达日期与时间的场景下,Numeric类型与TimeStamp类型到底有什么差别呢?
明明有开仓信号,结果成交结果里没有,委托没成交里也没有

隔了一个交易日查看:

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


第二天再来看 ,隔日了才会结算

好的,谢谢王老师