/ / Javaで初期移動平均値を設定するには? - Java、金融、移動平均、取引

Javaで初期移動平均値を設定する方法は? - Java、金融、移動平均、取引

以下の計算式を使用して在庫データの移動平均を積極的に計算したいと考えています。

 public class Average {

private static double usdJpy;
private int counter = 1;

private double movingAverageUsdJpy_ = 100.5;

public void calculateAverage(){

ReadData myData = new ReadData();

usdGbp = myData.getUsdGbp();
usdJpy = myData.getUsdJpy();

System.out.println("Before: " + movingAverageUsdJpy_);

movingAverageUsdJpy_ = (counter * movingAverageUsdJpy_ + usdJpy) / (counter + 1);

counter++;

System.out.println("Moving Average: " + movingAverageUsdJpy_);
}

}

- > Counterは、配列内の要素の数です。

私の質問は、株式データにはすでに移動平均を使用して、最初のmovingAverage値をそれに設定したい(たとえば97.883)。しかし、私がメソッドを呼び出すたびに、私のプログラムがmovingAverageのために計算した最新の値は、私が以前に設定した初期値によって上書きされるため、私に間違った結果がもたらされます。 moveAverageはメソッドを呼び出すたびに更新される必要があるので、私は実際にファイナルを使用することはできません。

この問題を解決する方法はありますか?

回答:

回答№1は2

あなたの数式は間違っています。もし counter まだインクリメントされていない値です

movingAverage = (counter * movingAverage + latestRate) / (counter + 1)

その後、インクリメント counter もしあなたが望むならば counter (このような財務データを報告するときにはかなり一般的ですが)サイズを固定するには、その数の要素をメモリに保持する必要があります。


回答№2の場合は0

おそらく次のようなものがあります:

class Something{
public int calculateAverage(){
int movingAverage = 98888;
//more code to count average
}
}

あなたがする必要があるのは次のとおりです:

class Something{
private int myAverage = 98888;

public int calculateAverage(){
//code to calculate using myAverage variable;
}
}

回答№3の場合は-1

新しいプライベートフィールドを作成します。前の平均。私は、言葉ごとの移動平均にはあまりよく慣れていませんが、あなたが用意した公式を使って私は少し調整しました。通常、下線はクラスレベルの変数が private

private double movingAverage_;
private double prevAverage_ = 97.883;

public void calculateMovingAverage()
{
movingAverage_ = prevAverage_ + (latestRate - prevAverage_)/counter;
prevAverage_ = movingAverage_;

// finish other logic
}