0
我寫了一個計算賣出貨幣交易過程(ASK)的平均值和標準差的方法,但我認爲這不是定義這種行爲的最簡單方法,所以我需要一個幫助。從解析的XML文件中計算標準偏差
在我看來有太多的創建Bigdecimal值。
我也懷疑使用Arraylist獲取值以計算標準偏差,也許這是更好的數據結構來實現該目標。
該方法還包含購買貨幣兌換課程的平均值(BID在解析文件中),但請不要關注它。
package pl.parser.nbp;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Counting {
public void countAverageAndStandartDeviaton(String address){
try
{
DocumentBuilderFactory df = DocumentBuilderFactory.newInstance();
DocumentBuilder db = df.newDocumentBuilder();
Document doc = db.parse(address);
doc.getDocumentElement().normalize();
NodeList nList = doc.getElementsByTagName("Rate");
List<BigDecimal> listForStandartDeviation = new ArrayList<>();
BigDecimal averageOfBid = new BigDecimal("0");
BigDecimal averageOfAsk = new BigDecimal("0");
BigDecimal divisor = new BigDecimal(nList.getLength());
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
BigDecimal valueForBidAverage = new BigDecimal(eElement.getElementsByTagName("Bid").item(0).getTextContent());
BigDecimal valueForStandartDeviation = new BigDecimal(eElement.getElementsByTagName("Ask").item(0).getTextContent());
averageOfBid = averageOfBid.add(valueForBidAverage);
averageOfAsk = averageOfAsk.add(valueForStandartDeviation);
listForStandartDeviation.add(valueForStandartDeviation);
}
}
averageOfBid = new BigDecimal(averageOfBid.divide(divisor).toString()).setScale(4, RoundingMode.HALF_UP);
averageOfAsk = new BigDecimal(averageOfAsk.divide(divisor).toString());
System.out.println(averageOfBid + " - BID Average");
BigDecimal sumStandartDeviation = new BigDecimal("0");
for(int i = 0 ; i<listForStandartDeviation.size(); i++){
BigDecimal valueFromList = new BigDecimal(listForStandartDeviation.get(i).toString());
sumStandartDeviation = sumStandartDeviation.add((valueFromList.subtract(averageOfAsk)).pow(2));
}
sumStandartDeviation = sumStandartDeviation.divide(divisor);
sumStandartDeviation = new BigDecimal(Math.sqrt(sumStandartDeviation.doubleValue()))
.setScale(4, RoundingMode.HALF_UP);
System.out.println(sumStandartDeviation + " - ASK Standart Deviation");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
這個問題可能會更恰當地貼在[代碼審查堆棧交易所網站(HTTP://代碼審查。 stackexchange.com/)。 –
謝謝你,我也在codereview網站發佈 – glinczux