Question

Je suis sûr que ma logique est une erreur évidente, mais je n'arrive pas à comprendre ce que je fais mal. J'ai tout simplement une liste de codes de sécurité, je veux calculer la corrélation entre chaque combinaison de codes de sécurité. Mon code est le suivant:

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);
    }

}

Le résultat obtenu est -

----- GOOG
GOOG - GOOG - La corrélation est de 1.0000000000000002
GOOG - YHOO - La corrélation est de 0,6986623807707519
GOOG - MSFT - La corrélation est de 0.7275411317567286
GOOG - CSCO - La corrélation est de 0,8122979333663799
GOOG - AAPL - La corrélation est de 0.8217785260604609
GOOG - ADBE - La corrélation est de 0.6102679356472099
GOOG - DISH - La corrélation est de 0.644852624453125
GOOG - NSOL - La corrélation est égale à 0.11600387177879072
GOOG - SBUX - La corrélation est de 0.6694306410719489
GOOG - PSFT - La corrélation est de -0.09921822861087544
GOOG - XOM - La corrélation est de 0.6728272039489009
GOOG - WMT - La corrélation est de 0.4004364090315347
GOOG - IBM - La corrélation est de 0.7559988282095168
GOOG - JPM - La corrélation est de 0.7085525367336528
GOOG - ADN - La corrélation est 0.13628949379947575
GOOG - HPQ - La corrélation est de 0.7819350018750656
GOOG - KO - La corrélation est de 0.5700932682157461
GOOG - VZ - La corrélation est de 0.737881573641585
GOOG - INTC - La corrélation est de 0.7654127298771953
GOOG - SPY - La corrélation est de 0.8042488406758052
GOOG - PEP - La corrélation est de 0,6297924741882344
GOOG - WFC - La corrélation est de 0.5064491351161948
GOOG - ABT - La corrélation est de 0.238752389446595
GOOG - QCOM - La corrélation est de 0.726356709262025
GOOG - COP - La corrélation est de 0.570604981251932
GOOG - MCD - La corrélation est de 0.5434872575410538

Mais je ne reçois jamais

YHOO - GOOG - La corrélation est .... etc. etc.

Je suis sûr que c'est une simple erreur et, pour une raison quelconque, je ne le récupère pas.

Je sais que je fais les calculs de corrélation deux fois, je corrigerai cela une fois que cette partie fonctionnera comme prévu.

Faites-moi savoir si je dois fournir plus d'informations.

Était-ce utile?

La solution

Une application de test rapide ayant supprimé les références au code que nous ne connaissons pas fonctionne bien pour moi.

Est-il possible que quelque chose jette une exception non contrôlée que vous ne gérez pas? Si vous pouviez publier un programme court mais complet démontrant le problème, cela aiderait énormément. Prenez une copie de votre projet complet et supprimez simplement les bits (par exemple, les données codées en dur et les valeurs renvoyées) jusqu'à ce que vous ne puissiez plus rien enlever sans que le problème ne disparaisse aussi. À ce stade, vous avez peut-être trouvé le problème, bien sûr.

En passant, si vous utilisez Java 1.5 ou une version ultérieure, il est plus simple d’utiliser une boucle for étendue que d’utiliser explicitement un itérateur. Vous feriez:

for (String code1 : codes) {
    // ...
    for (String code2 : codes) {
        // ...
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top