Pergunta

Estou certo de que é um erro óbvio com a minha lógica, mas eu não consigo descobrir o que estou fazendo de errado. Muito simplesmente tenho uma lista de matriz de códigos de segurança, eu quero calcular a correlação entre cada combinação de códigos de segurança. Meu código é o seguinte:

private void crossCorr(ArrayList<String> codes, HashMap<String, Stock> stockMap){

    // iterate through the codes list and get all the cross correlations:

    Iterator<String> itr1 = codes.iterator();
    while(itr1.hasNext()){
        String code1 = itr1.next();
System.out.println("  -----  " +code1);
        Iterator<String> itr2 = codes.iterator();
        ArrayList<Double> corrs = new ArrayList<Double>();
        HashMap<String, Double> codeCorr = new HashMap<String, Double>();
        String code2="";
        double corr=-2;
        while(itr2.hasNext()){
            code2 = itr2.next();
            Maths calcs = new Maths();      
            corr = calcs.getCorrelation(stockMap.get(code1).getRorHistory(), stockMap.get(code2).getRorHistory());
            corrs.add(corr);    // we order this list and then use this ordered list
                                // to find the codes for the stocks with the highest
                                // correlation for any given stock
            codeCorr.put(code2, corr);
            System.out.println(code1+" - "+code2+" - Correlation is "+corr);
        }
        orderCorrs(6, codeCorr, corrs, code1);
    }

}

A saída que eu vejo é -

----- GOOG
GOOG - GOOG - Correlação é 1,0000000000000002
GOOG - YHOO - Correlação é ,6986623807707519
GOOG - MSFT - Correlação é ,7275411317567286
GOOG - CSCO - Correlação é ,8122979333663799
GOOG - AAPL - Correlação é ,8217785260604609
GOOG - ADBE - Correlação é 0.6102679356472099
GOOG - DISH - Correlação é 0.644852624453125
GOOG - NSOL - Correlação é 0,11600387177879072
GOOG - SBUX - Correlação é ,6694306410719489
GOOG - PSFT - Correlação é -0.09921822861087544
GOOG - XOM - Correlação é ,6728272039489009
GOOG - WMT - Correlação é 0.4004364090315347
GOOG - IBM - Correlação é ,7559988282095168
GOOG - JPM - Correlação é 0.7085525367336528
GOOG - DNA - Correlação é 0.13628949379947575
GOOG - HPQ - Correlação é 0.7819350018750656
GOOG - KO - Correlação é ,5700932682157461
GOOG - VZ - Correlação é 0.737881573641585
GOOG - INTC - Correlação é ,7654127298771953
GOOG - SPY - Correlação é 0.8042488406758052
GOOG - PEP - Correlação é 0.6297924741882344
GOOG - WFC - Correlação é ,5064491351161948
GOOG - ABT - Correlação é 0.238752389446595
GOOG - QCOM - Correlação é 0.726356709262025
GOOG - COP - Correlação é 0.570604981251932
GOOG - MCD - Correlação é ,5434872575410538

Mas eu nunca fico

YHOO - GOOG -. A correlação é .... etc etc

Estou certo de que este é um erro simples e por algum motivo eu não estou pegando-o.

Eu sei que eu estou fazendo os cálculos de correlação duas vezes, eu vou corrigir isso quando eu chegar esta parte funcionando como esperado.

Por favor, deixe-me saber se eu preciso para fornecer mais informações.

Foi útil?

Solução

A aplicação teste rápido ter referências removidos para código não sabemos sobre funciona bem para mim.

É possível que algo de lançar uma exceção desmarcada que você não está lidando? Se você pudesse postar uma curta mas completo Programa de demonstrar o problema, que iria ajudar imensamente. Leve uma cópia de seu projeto completo, e apenas remover pedaços até que você não pode tomar qualquer outra coisa longe sem o problema indo longe demais (por exemplo, dados e valores de retorno embutir). Nesse ponto você pode muito bem ter encontrado o problema por si mesmo, é claro.

A propósito, se você estiver usando Java 1.5 ou superior, é mais simples usar um prorrogado por ciclo do que usar explicitamente um iterador. Você faria:

for (String code1 : codes) {
    // ...
    for (String code2 : codes) {
        // ...
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top