鉴于以下股票交易表:
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函数?
答案 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)
选择具有OPENPOSITION = 0的给定符号的所有行,并按降序日期和时间对它们进行排序。
读取返回的第一行并获取日期和时间。这将是您想要的记录的下限。
选择给定符号的所有行,日期和时间大于下限。
读取所有返回的行并计算股价的加权平均值。