如何计算股票交易的加权平均价格

时间:2017-02-22 18:23:20

标签: php mysql

鉴于以下股票交易表:

TID   |DATE      |TIME    |SYMBOL|SIDE|QUANTITY |PRICE    |OPENPOSITION
339791|2014-11-14|12:45:25|ABEV3 |Buy |  -900.00|15.920000|        -900
339780|2014-11-21|10:54:37|ABEV3 |Sell|   900.00|16.650000|           0
339775|2014-11-24|14:52:59|ABEV3 |Buy | -1500.00|16.950000|       -1500
339725|2017-01-20|14:54:26|ABEV3 |Sell|  1500.00|17.280000|           0
339662|2017-02-03|10:43:31|ABEV3 |Buy | -5900.00|17.020000|       -5900
339661|2017-02-03|11:44:57|ABEV3 |Buy | -5900.00|17.229492|      -11800
339655|2017-02-03|12:37:08|ABEV3 |Sell| 10800.00|17.250000|       -1000
339528|2017-02-15|11:04:07|ABEV3 |Buy |-15000.00|17.580000|      -16000
339527|2017-02-15|12:07:30|ABEV3 |Sell|  2300.00|17.610000|      -13700
339524|2017-02-15|12:10:36|ABEV3 |Sell|   100.00|17.620000|      -13600
339522|2017-02-15|12:44:23|ABEV3 |Sell| 14900.00|17.640000|        1300
339518|2017-02-15|12:49:52|ABEV3 |Buy | -2300.00|17.670000|       -1000
339474|2017-02-17|11:45:33|ABEV3 |Buy |-20000.00|17.860000|      -21000
339472|2017-02-17|13:36:16|ABEV3 |Sell| 20000.00|17.960000|       -1000

如何生成一个mysql查询来计算交易的平均加权价格,无论是买入还是卖出。

在上面的例子中,交易者开始买入900股,卖出900股,头寸余额为0(见第二行)。他以1500股股票做同样的事情,但随后他买入并卖出了几次,剩下1000股。手动计算时,平均购买价格为

5900 * 17.23 + 5900 * 17.02 + 2300 * 17.67 + 15000 * 17.58 + 20000 * 17.86 / 49100 = $ 17.59

有没有办法构建一个只考虑仍然开放的交易价格的查询或php函数?

2 个答案:

答案 0 :(得分:0)

如果该信息在数据库中,您将编写一个类似于:

的SQL选择
SELECT price,quantity FROM stock_transactions WHERE ___
但是你的意思是过去关闭的帽子吗?它们是否在当前日期之前关闭? (今天)?

若是,那就是:

SELECT price,quantity FROM stock_transactions WHERE CURDATE() >= '2017-02-22'

那将获得那些记录。

然后运行一个结果集,在while循环中运行那些乘以你的价格*数量,将它(+ = not assignment)添加到变量(在循环fyi之外声明)。然后重复一遍

答案 1 :(得分:0)

  1. 选择具有OPENPOSITION = 0的给定符号的所有行,并按降序日期和时间对它们进行排序。

  2. 读取返回的第一行并获取日期和时间。这将是您想要的记录的下限。

  3. 选择给定符号的所有行,日期和时间大于下限。

  4. 读取所有返回的行并计算股价的加权平均值。