【问题标题】:Maximizing profits for given stock quotes and volumes最大化给定股票报价和交易量的利润
【发布时间】:2014-08-07 11:25:06
【问题描述】:

给定一个按时间顺序排列的股票报价数组 Q[0], ..., Q[n-1] 和相应的交易量 V[0], ..., V[n-1] 作为股数,当您的交易量均受 V[0], ..., V[n-1] 限制时,您如何找到最佳的买入或卖出时间和交易量?

【问题讨论】:

  • 您能否通过提供示例输入和预期输出来澄清一下?

标签: algorithm optimization dynamic-programming


【解决方案1】:

我假设您希望以每只股票的 0 股开始和结束,并且您拥有无限的资本。

问题可以归结为以最低价格买入并以最高价格卖出,附带条件是必须先购买股票再卖出。

我会按时间顺序处理数据并添加购买,只要将来有更高价格的可用数量(对于每次购买,您都需要使用可用的最高未来价格勾选与出售相同数量的股票)。

只要未来有盈利的时间出售,就继续及时增加购买。如果有剩余数量可用数量但未来没有可用的盈利销售点,您需要回头看看当前价格是否低于任何已经购买的价格。在这种情况下,将过去最昂贵的股票换成更便宜的股票,但前提是有未来的卖点可用。还要检查报废的采购订单是否有任何有利可图的卖点。

示例:

Day  Price    Volume
1    100      1000
2    80       1000
3    110      1000
4    70       1000
5    120      2000

第 1 天: 以每股 100 的价格购买 1000。第 4 天以 120 卖出 1000。

第 2 天: 以每股 80 的价格购买 1000。第 4 天以 120 卖出 1000。

第 3 天: 没有可用的有利可图的卖出机会,因为所有价格高于 70 的未来股票都已被预订! 回头看看你有没有在110以上的价格购买过。 你还没有,所以没有购买。

第 4 天: 没有可用的盈利机会,因为价格高于 70 的所有未来数量都已被预订! 回头看看有没有70以上的价格买过。 将第 1 天购买 1000 股替换为第 70 天第 4 天购买 1000 股。 重新检查第一天的股票并检查是否有任何其他有利可图的销售(您只需要考虑到第 4 天的时间线)。 有,所以第 1 天以每股 100 的价格购买 1000,并在第 3 天以每股 110 的价格出售。

最终的订单是:

Day Price Volume Order type   shares owned
1   100   1000   Buy          1000
2   80    1000   Buy          2000
3   110   1000   Sell         1000
4   70    1000   Buy          2000
5   120   2000   Sell         0

Total profit: 10000

【讨论】:

    猜你喜欢
    • 2012-03-19
    • 2016-08-29
    • 2019-12-22
    • 2013-05-29
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    相关资源
    最近更新 更多