给出阵列中的一系列股票价格。选择何时购买以及何时出售以获得最大利润

时间:2011-07-12 15:28:40

标签: algorithm pseudocode

给出阵列中的一系列股票价格。选择何时购买以及何时出售以获得最大利润。 从一个网站我得到类似的东西 - 如果maxprofit(价格):

  

buydate,selldate = 0,0

     

maxprof = 0 minprice = prices [0] mindate = 0

     

表示d,p表示枚举(价格[1:]):如果p < minprice:minprice = p   mindate = d + 1继续

     

prof = p - minprice

     

如果教授&gt; maxprof:maxprof = prof buydate,selldate = mindate,d + 1

     

return(buydate,selldate),maxprof

但我认为..我们应该考虑负价格......不是吗?任何其他解决方案或评论都是最受欢迎的

3 个答案:

答案 0 :(得分:3)

由于您有历史记录并且交易似乎没有受到惩罚,因此只需获取价格的衍生物并在d / dx从负值变为正值时买入,并在从正值变为负值时卖出。

通过这种方式,您可以在每次亏损之前购买并出售。

答案 1 :(得分:1)

理想情况下,您希望在最低价时购买股票,在价格最高时卖出。因此,找出数据中峰值和谷值的位置,分别是卖出点和买入点。

这就像通过数据集一样简单,一次查看两个相邻的点,并跟踪当前的“趋势”(市场是否上涨或下跌)。如果趋势上升且价格下跌,那么你应该在它下跌的前一天卖出。另一方面,如果趋势下降且价格上涨,您应该在涨价前一天买入。

答案 2 :(得分:0)

这是java中针对上述问题的代码,用于计算最大利润

class Solution {
public int solution(int[] a) {

    if(a==null || a.length==0 || a.length==1)
    {
        return 0;
    }
    int buyDay=0;
    int sellDay=0;
    int profit=0;
    for(int i=1;i<a.length;i++)
    {
    int diff=0;

        if(a[buyDay]>a[i])
        {
            buyDay=i;

        }
        else if(a[sellDay]<a[i])
        {
            sellDay=i;
        }

        if(sellDay<buyDay)
            sellDay=buyDay;
        diff=a[sellDay]-a[buyDay];
        if(diff>profit)
        {
            profit=diff;
        }


    }
    return profit;

}
}