作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 php/mysql 在 yahoo 上编写一个股票市场交易游戏,并且已经快完成了。我正在努力的最后一部分是计算损益
假设将这些作为交易起始余额 = 5000 美元
> order_id stock_id transaction qty_shares cost user_id
> 1 1234 B 100 1000 1
> 2 1234 B 50 450 1
> 3 1234 S 80 640 1
> 4 1234 S 30 300 1
我在尝试提出一种算法或 mysql 查询来计算损益时迷失了
阅读下面发布的 2 条回复后添加附加说明:请注意,在此场景中,购买了 150 股,仅出售了 110 股,并且所有股票均以不同的价格购买和出售
最佳答案
SELECT SUM(qty_shares*cost) AS out, user_id, stock_id, order_id
FROM table
WHERE transaction = 'B'
GROUP BY user_id, stock_id, order_id
然后:
SELECT SUM(qty_shares*cost) AS in, user_id, stock_id
FROM table
WHERE transaction = 'S'
GROUP BY user_id, stock_id, order_id
PHP:
$Margin = ($query2->in - $query1->out);
$Balance += $Margin;
这一切都可以在单个查询上完成,但如果速度更重要,那么这可能比子查询更快。
编辑:每股平均损益:
SELECT AVG(qty_shares/cost) AS price_per_share, transaction, user_id, stock_id
FROM table
GROUP BY transaction,user_id,stock_id
这应该返回每种交易类型、每个用户每种股票类型的每股平均价格。因此,交易 S 行是卖出的平均价格,交易 B 行是买入的平均价格。它们之间的差异就是平均利润或损失。
SELECT
SUM(
qty_shares *
(
SELECT AVG(A.qty_shares/A.cost) AS price_per_share
FROM table AS A
WHERE A.transaction = table.transaction
AND A.user_id = table.user_id
AND A.stock_id = table.stock_id
)
), user_id, stock_id, order_id
FROM table
WHERE transaction = 'B'
GROUP BY user_id, stock_id, order_id
该查询应返回每行出售的股票数量乘以当前每股平均价格,从而得出每笔交易的平均利润(出售利润为负数)。但您可能会发现查询速度很慢。我建议使用此信息作为起点,并找到最适合您的应用程序的方法。
关于mysql - php mysql 股市交易游戏 - 计算盈亏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11412842/
我是一名优秀的程序员,十分优秀!