给予多个股票最大化股票利润

时间:2017-01-16 20:02:16

标签: java algorithm stock maximum-profit-problem

我根据情况研究了股票利润最大化算法。

对于我只有一只股票而且可以买入/卖出一次或多次的情况的策略我很清楚。您分别使用最大差异和最大子数组。

但是当给予两只股票及其各自的波动价格时会发生什么?您不能同时持有这两种股票而且卖出一只股票并购买另一种股票会引入交易成本。

示例:给予股票A和B最大化回报。股票价格在不同时期波动。因此,如果给定一个数组,A和B的每个数组中的索引表示特定时间的股票价格。考虑到您不能同时持有两种股票并购买A和卖B会导致交易成本,那么最佳策略是什么?

1 个答案:

答案 0 :(得分:1)

让:

dp[i, j] = maximum worth obtainable at period i if we currently hold 
           stock j

假设t[i] = transaction cost at period i

我们有:

dp[0, A] = A[0] # buy the best at time 0
dp[0, B] = B[0] # you said only buying A and selling B induces a cost,
                # you didn't say buying B induces a cost. If it does,
                # just subtract t accordingly below
dp[i, A] = max(
             dp[i - 1, B] + A[i] - t[i], # sell B, buy A
             A[i]                        # buy A alone
           )                             # we buy A no matter what

dp[i, B] = max(
             dp[i - 1, A] + B[i],        # sell A, buy B, - t[i] if needed
             B[i]                        # buy B alone
           )

答案是:

max{dp[i, A], dp[i, B]}
 i