runlevel7 - 2006-05-28

I just wanted to post modifications I used to adjust for stock splits.

Historical data from Yahoo is not adjusted for stock splits, ie open, high, low, and close are quoted unadjusted. However there is a column called adj. price, which can be used to calculate an adjustment coefficient. Another modification I made to YahooEODQuoteFilter object is to add a Symbol variable to toEODQuote method: toEODQuote(String quoteLine, Symbol ticker). This  allows you to import Yahoo historical data from .csv files.

Here is the patch:
--- ../../../../../../venice-0.72beta-src/src/org/mov/quote/YahooEODQuoteFilter.java    2006-05-06 01:26:18.000000000 -0700
+++ ../../../../../src/org/mov/quote/YahooEODQuoteFilter.java    2006-04-20 22:30:37.000000000 -0700
@@ -42,8 +42,6 @@
public class YahooEODQuoteFilter implements EODQuoteFilter {

     private Symbol symbol;
-    //public Symbol symbol;
-  

     /**
      * Creates an instance of the filter.
@@ -51,12 +49,7 @@
     public YahooEODQuoteFilter(Symbol symbol) {
         this.symbol = symbol;
     }
-   
-    public void TransferSymbol(Symbol symbol) {
-        this.symbol = symbol;
-    }
-   
-   
+
     /**
      * Return the name of the filter.
      *
@@ -65,7 +58,7 @@
     public String getName() {
     return "Yahoo";
     }
-   
+
     /**
      * Parse the given text string and returns the stock quote or null
      * if it did not contain a valid quote.
@@ -74,11 +67,10 @@
      * @exception QuoteFormatException if the quote could not be parsed
      * @return    the stock quote
      */
-    public EODQuote toEODQuote(String quoteLine, Symbol ticker) throws QuoteFormatException {
-        Object temp;
+    public EODQuote toEODQuote(String quoteLine) throws QuoteFormatException {
     EODQuote quote = null;
-       String header = "Date,Open,High,Low,Close,Volume,Adj. Close*";
-    if(quoteLine != null & quoteLine.compareTo(header) != 0) {
+
+    if(quoteLine != null) {
         String[] quoteParts = quoteLine.split(",");
         int i = 0;
        
@@ -98,36 +90,16 @@
                     float day_high = Float.parseFloat(quoteParts[i++]);
                     float day_low = Float.parseFloat(quoteParts[i++]);
                     float day_close = Float.parseFloat(quoteParts[i++]);
-                    float unadj_day_volume = Long.parseLong(quoteParts[i++]);
-                    float adj_day_close=Float.parseFloat(quoteParts[i++]);
-                    
-                    float adj_coeff=adj_day_close/day_close;    //calculate adjustment coefficient for dividents and splits
-                    day_open=day_open*adj_coeff;    //applying adjustment coefficient
-                    day_high=day_high*adj_coeff;
-                    day_low=day_low*adj_coeff;
-                    long day_volume= (long) (unadj_day_volume/adj_coeff);
-                    day_close=adj_day_close;
-                   
-                    if (day_open==0 || day_high==0 || day_low==0 || day_close==0){
-                        try {
-                            Symbol invalid_symbol = Symbol.toSymbol("invalid");
-                            quote = new EODQuote(invalid_symbol, date, 1, 1, 1, 1, 1);
-                        } catch (SymbolFormatException ex) {
-                            ex.printStackTrace();
-                        }
-                    }
-                    else {                                      
-                        quote = new EODQuote(ticker, date, day_volume, day_low, day_high, day_open, day_close);     
-                    }
+                    int day_volume = Integer.parseInt(quoteParts[i++]);
+                    // the remaining one is adjusted day close

+                    quote = new EODQuote(symbol, date, day_volume, day_low, day_high,
+                                         day_open, day_close);
                 }
                 catch(NumberFormatException e) {
                     throw new QuoteFormatException(Locale.getString("ERROR_PARSING_NUMBER",
                                                                     quoteParts[i - 1]));
                 }
-                catch(ArithmeticException e) {
-                    throw new QuoteFormatException(Locale.getString("ERROR_ARITHMETIC_EXCEPTION"));
-                }               
             }
             else
                 throw new QuoteFormatException(Locale.getString("WRONG_FIELD_COUNT"));