【问题标题】:Volume-weighted average price for a missing quatinty缺失数量的成交量加权平均价格
【发布时间】:2015-12-09 10:59:36
【问题描述】:

我正在编写一个 Java 代码来计算我们必须购买的数量,以便加权平均值等于目标平均价格。

示例:假设是产品 p

Q1 = 310; // 我已经有这么多数量了。

P1 = 16.40; // 我以 P1 价格购买了 Q1 数量。

P2 = 15.00; // 数量的当前市场价格。

P3 = 15.10; // 目标平均价格。我必须把我的平均价格带到他的 价格。

Q2 = ? // 以价格购买多少产品 p P2。这样我的平均价格等于 P3。

我无法为此找出一个直接公式

到目前为止,我已经尝试过:

void int getQuantity(Q1,P1,P2,P3) 
{
    int i = 0;
    while(true) 
    {
        double calcPrice = ((Q1*P1)+(i*P2))/(Q1+i);

        // If Calculated price equals to Target Price, break out of loop
        if(calcPrice == P3) {
            break;
        }
        // if values not same Increment i by 1.
        ++i;
    }
    return i;
}

我们将不胜感激。

谢谢

【问题讨论】:

    标签: java math statistics weighted-average


    【解决方案1】:

    这背后的数学很简单。公式为:

    Q1 * P1 + Q2 * P2
    ----------------   =   P3
        Q1 + Q2
    

    如果您在第二季度解决这个问题,您将拥有:

          Q1 * (P1 - P3)
    Q2 = ---------------
            (P3 - P2)
    

    在代码中是:

    double Q2 = Q1 * (P1-P3) / (P3-P2);
    

    完整的方法必须涵盖P2 == P3P2 > P3 之类的内容。您可以像这样处理这些情况(例如):

    public double getQuantity(int Q1, double P1, double P2, double P3) throws IllegalArgumentException {
        if ((P1 > P3 && P3 > P2) || (P1 < P3 && P3 < P2))
            return Q1*(P1-P3)/(P3-P2);
        else if (P1 == P3)
            return 0;
        else
            throw new IllegalArgumentException("P3 has to be between P1 and P2!");
    }
    

    【讨论】:

    • 感谢您的快速回复。但如果当前价格和目标价格相等,此公式将不起作用。即 P2 == P3。
    • 原因是当时不可能达到平均价格。你必须购买无限量才能达到它;)但我会相应地编辑我的帖子以帮助你解决这个问题
    • @Teepeemm 你是对的!我会根据你的帖子调整我的例子!
    猜你喜欢
    • 2017-04-13
    • 2017-09-01
    • 2019-11-02
    • 2019-09-06
    • 2017-12-04
    • 2017-06-13
    • 2017-06-19
    • 1970-01-01
    • 2020-11-17
    相关资源
    最近更新 更多