Example usage for org.joda.time DateTime plusHours

List of usage examples for org.joda.time DateTime plusHours

Introduction

In this page you can find the example usage for org.joda.time DateTime plusHours.

Prototype

public DateTime plusHours(int hours) 

Source Link

Document

Returns a copy of this datetime plus the specified number of hours.

Usage

From source file:brickhouse.udf.date.AddHoursUDF.java

License:Apache License

public String evaluate(String dateHourStr, int numHours) {
    DateTime dt = YYYYMMDDHH.parseDateTime(dateHourStr);
    DateTime addedHour = dt.plusHours(numHours);
    String addedHourStr = YYYYMMDDHH.print(addedHour);

    return addedHourStr;
}

From source file:calculadora.CalculadoraDeHoras.java

License:Apache License

public Tempo quantidadeDeHoras(DateTime dataInicial, DateTime dataFinal, Janela janela) {

    long horasTrabalhadas = 0;

    int minutosDaHoraInicial = 0;
    int minutosDaHoraFinal = 0;

    if (forDiferente(dataInicial, dataFinal)) {
        minutosDaHoraInicial = tratarMinutosIniciais(dataInicial, janela);
        minutosDaHoraFinal = tratarMinutosFinais(dataFinal, janela);
    } else {// w  w  w . ja  v a2 s.  c  om
        minutosDaHoraInicial = dataFinal.getMinuteOfHour();
        minutosDaHoraFinal = dataInicial.getMinuteOfHour() * -1;
    }

    dataInicial = dataInicial.plusMinutes(minutosDaHoraInicial);

    while (forDiferente(dataInicial, dataFinal) && dataInicial.isBefore(dataFinal)) {

        if (janela.estaDentro(dataInicial)) {
            horasTrabalhadas++;
        }

        dataInicial = dataInicial.plusHours(1);

    }

    return criarTempo(horasTrabalhadas, minutosDaHoraInicial, minutosDaHoraFinal);
}

From source file:ch.css.workingdiary.service.UserService.java

License:Open Source License

public Optional<Map<String, String>> getAccessToken(final User user) {
    final DateTime now = DateTime.now();
    final HmacSHA512Signer signer = new HmacSHA512Signer(tokenSecret);
    final JsonWebToken token = JsonWebToken.builder().header(JsonWebTokenHeader.HS512())
            .claim(JsonWebTokenClaim.builder().param("principal", user.getUsername())
                    .param("userId", user.getId()).issuedAt(now).expiration(now.plusHours(1)).build())
            .build();/*from   ww w  .  j a  v  a2 s . c  om*/
    final String signedToken = signer.sign(token);
    return Optional.of(singletonMap("accessToken", signedToken));
}

From source file:ch.emad.business.schuetu.BusinessImpl.java

License:Apache License

private List<SpielZeile> createZeilen(DateTime startIn, final boolean sonntag) {
    DateTime start = startIn;

    final int millis = start.getMillisOfDay();

    start = start.minusMillis(millis);//from   ww  w .  java 2s.  c  o m

    start = start.plusHours(8);

    final DateTime end = start.plusHours(11);

    final List<SpielZeile> zeilen = new ArrayList<SpielZeile>();
    while (start.isBefore(end.getMillis())) {
        final SpielZeile zeile = new SpielZeile();

        if (start.getHourOfDay() == 8) {
            zeile.setPause(true);
        }

        if (start.getHourOfDay() == MITTAG) {
            zeile.setPause(true);
        }

        if ((start.getHourOfDay() > MITTAG) && sonntag) {
            zeile.setFinale(true);
        }

        // wunsch enum wird gesetzt um spaeter die kategorie gegenpruefen zu koennen
        if (sonntag && (start.getHourOfDay() <= MITTAG)) {
            zeile.setSpieltageszeit(SpielTageszeit.SONNTAGMORGEN);
        }
        if (!sonntag && (start.getHourOfDay() < MITTAG)) {
            zeile.setSpieltageszeit(SpielTageszeit.SAMSTAGMORGEN);
        }
        if (!sonntag && (start.getHourOfDay() > MITTAG)) {
            zeile.setSpieltageszeit(SpielTageszeit.SAMSTAGNACHMITTAG);
        }

        zeile.setStart(start.toDate());
        zeilen.add(zeile);

        final DateTimeZone zone = start.getZone();
        BusinessImpl.LOG.info("zone: " + zone + " date: " + start.toDate());

        zeile.setSonntag(sonntag);

        start = start.plusMinutes(
                this.getSpielEinstellungen().getPause() + this.getSpielEinstellungen().getSpiellaenge());
    }
    return zeilen;
}

From source file:ch.emad.web.schuetu.modelwrapper.SpielBusiness.java

License:Apache License

public SpieleContainer getSpielzeilen() {

    DateTime start = new DateTime(business.getSpielEinstellungen().getStarttag());

    start = start.plusHours(7);
    DateTime end = start.plusHours(12);/*from  ww w.  j av  a  2  s  .  co  m*/

    List<SpielZeile> zeilen = new ArrayList<SpielZeile>();
    while (start.isBefore(end.getMillis())) {
        SpielZeile zeile = new SpielZeile();
        zeile.setStart(start.toDate());
        zeilen.add(zeile);

        start = start.plusMinutes(business.getSpielEinstellungen().getPause()
                + business.getSpielEinstellungen().getSpiellaenge());

    }
    SpieleContainer c = new SpieleContainer();
    c.setSelectedZeilen(zeilen.toArray());
    return c;
}

From source file:ch.imetrica.mdfaTradingStrategies.MDFAStrategyEvolution.java

public boolean startStrategy() {

    int j, i, l, N, file_count, k;
    double sum = 0;
    Double D;/*w w  w .j a v a 2s . c o  m*/
    double spreadnow;
    String ddelims = "[-]";
    boolean computed = false;
    double b0_sum = 0;
    int nobs_count = 0;
    boolean print_filter = false;
    boolean no_return = true;
    String date_stamp, strline;
    signal = new double[trade_obs];
    xt = new double[trade_obs];
    lag_signals = new double[trade_obs];
    prix = new double[trade_obs];
    lo_prix = new double[trade_obs];
    hi_prix = new double[trade_obs];
    total_succ = 0;
    total = 0;
    log_price = 0;
    N = n_obs;
    avg_vol = 0.0;
    b_avg = new double[L * n_rep];
    count = 0;
    trade_succ_ratio = 0;
    int advance = 8; // number of observations afterwhich we optimize
    double prev_signal;
    int changed_signs = 0;
    reg_trading_hours = false;
    String[] intdates;
    //make sure arraylists empty
    ArrayList<String> latestDates = new ArrayList<String>();
    last_trades = new ArrayList<Integer>();
    final_trades = new ArrayList<Double>();
    dailyoutret = new ArrayList<Double>();
    maxIntValue = new ArrayList<Double>();
    avg_volatility = new ArrayList<Double>();
    close_series = new ArrayList<Double>();
    highlow_series = new ArrayList<Double>();
    exp_series_1 = new ArrayList<Double>();
    exp_series_2 = new ArrayList<Double>();
    price = new ArrayList<Double>();
    lo_price = new ArrayList<Double>();
    hi_price = new ArrayList<Double>();
    mid = new ArrayList<Double>();
    bid = new ArrayList<Double>();
    ask = new ArrayList<Double>();
    dates_series = new ArrayList<String>();
    dailyReport = new ArrayList<String>();
    b0_trend = new ArrayList<Double>();
    vol_0 = new ArrayList<Double>();
    vol_1 = new ArrayList<Double>();
    sub_returns = new ArrayList<Double>();
    trade_days = new ArrayList<String>();
    returns = new ArrayList<Double>();
    longreturns = new ArrayList<Double>();
    shortreturns = new ArrayList<Double>();
    dropdowns = new ArrayList<Double>();
    success = new ArrayList<Double>();
    dates_low_high = new ArrayList<String>();
    crits = new ArrayList<String>();
    svm = new ArrayList<String>();
    filters = new ArrayList<Filter>();
    date_returns = new ArrayList<String>();

    live_series = new ArrayList<Double>(); //the data to be applied out of sample
    ib_data_hash = new ibHash();

    fridayROI = 0;
    fridayROI_pos = 0;
    fridays = 0;

    int all_trades, all_succ_trades, tot_all_trades, tot_succ_trades;
    lookback_returns = new ArrayList<Double>();
    num_pos_returns = 0;
    deg_0 = new ArrayList<Double>();
    deg_1 = new ArrayList<Double>();
    crit_0 = new ArrayList<Double>();
    crit_1 = new ArrayList<Double>();
    full_returns_array = new ArrayList<double[]>();
    morning_returns = new ArrayList<double[]>();

    morning_buy = true; //enter transaction at morning open
    morning_optimize = false; //optimize in the morning trading hours
    num_full_positive_returns = 0;
    //--- Now get historical interp values ------
    //uploadInterpParams("max_int.dat"); 
    //-------------------------------------------
    forex24 = true;
    ret_dist = new double[trade_obs];
    pos_ret_dist = new int[trade_obs];
    neg_ret_dist = new int[trade_obs];
    neg_trades_started = new int[trade_obs];
    pos_trades_started = new int[trade_obs];
    neg_trades_started_mean = new double[trade_obs];
    pos_trades_started_mean = new double[trade_obs];
    diff_account = new double[trade_obs];
    pos_ret_mean_time = new double[trade_obs];
    neg_ret_mean_time = new double[trade_obs];

    mdfaTrades = new ArrayList<MDFATrade>();
    fmt = DateTimeFormat.forPattern("y-MM-dd HH:mm:ss");
    formatter = new DecimalFormat("#0.000000");
    formatter3 = new DecimalFormat("#0.00000");
    formatter2 = new DecimalFormat("#0.00");
    tot_all_trades = 0;
    tot_succ_trades = 0;
    histo_stat = new int[100];
    interp_vals = new ArrayList<Double>();
    max_ranks = new ArrayList<Double>();
    profit_baby = 0;
    //setForecastDFAParameters();
    bad_starts = 0;
    n_out_samp = 0;

    //take_profit = true;
    //take_profit_thresh = .0020;

    if (ib_data && ib_data_file != null) {
        try {

            fin = new FileInputStream(ib_data_file);
            din = new DataInputStream(fin);
            br = new BufferedReader(new InputStreamReader(din));

            while ((strline = br.readLine()) != null) {
                String[] sp = strline.split("[,]+");
                ib_data_hash.put(sp[0], new String(
                        sp[1] + " " + sp[2] + " " + sp[3] + " " + sp[4] + " " + sp[5] + " " + sp[6]));
                //System.out.println(sp[1] + " " + sp[2] + " " + sp[3] + " " + sp[4] + " " + sp[5]  + " " + sp[6]);
            }
        } catch (FileNotFoundException fe) {
            System.out.println("File not found..." + fe);
        } catch (IOException ioe) {
            System.out.println("IO procedure faulty..." + ioe);
        }
    }

    for (i = 0; i < trade_obs; i++) {
        neg_ret_dist[i] = 0;
        pos_ret_dist[i] = 0;
        ret_dist[i] = 0;
        pos_ret_mean_time[i] = 0;
        neg_ret_mean_time[i] = 0;
        neg_trades_started[i] = 0;
        pos_trades_started[i] = 0;
        neg_trades_started_mean[i] = 0;
        pos_trades_started_mean[i] = 0;
    }
    pos_ret_mean = 0;
    neg_ret_mean = 0;
    n_pos_ret = 0;
    n_neg_ret = 0;

    try {
        //PrintWriter overall = new PrintWriter(new FileWriter("performance_total.dat"));
        PrintWriter max_int = new PrintWriter(new FileWriter("max_interpolation.dat"));
        PrintWriter b0_coeff = new PrintWriter(new FileWriter("b0_coeff.dat"));
        PrintWriter perform = new PrintWriter(new FileWriter("intraday_performance.dat"));
        PrintWriter dailyout = new PrintWriter(new FileWriter("daily_nasdaq.dat"));
        PrintWriter out = new PrintWriter(new FileWriter("strategy_results.dat"));
        PrintWriter svmout = new PrintWriter(new FileWriter("neural.dat"));

        for (file_count = 0; file_count < 1; file_count++) {

            if (dataFiles[file_count].indexOf("JPY") != -1 && dataFiles[file_count].indexOf("NOKJPY") == -1) {
                //change_time_zone = true; System.out.println("Changed time zone to Tokyo");
                jpy = true;
                stop_loss_thresh = stop_loss_thresh * 100;
                take_profit_thresh = take_profit_thresh * 100;
            }

            setTimeStandards(new File(dataFiles[file_count]));
            System.out.println("opening " + dataFiles[file_count]);
            fin = new FileInputStream(dataFiles[file_count]);
            din = new DataInputStream(fin);
            br = new BufferedReader(new InputStreamReader(din));
            lookback_ready = false;
            spread = new PrintWriter(new FileWriter("spread_" + dataFiles[file_count] + ".dat"));
            //if(print_debug)System.out.println("Entering loop...");
            trading_hours = false;
            nobs_count = 0;
            computed = false;
            while ((strline = br.readLine()) != null) {

                //System.out.println(strline);
                tokens = strline.split(delims);
                n_toks = tokens.length; //System.out.println("Number of toks = "+n_toks);
                if (n_toks == 0) {
                    System.out.println("End of file");
                    break;
                }

                if (n_toks >= 6) {
                    bid_ask_data = true;
                } else {
                    bid_ask_data = false;
                }

                if (change_time_zone) {
                    String[] dts = tokens[0].split("[ ]+");
                    String[] ymd = dts[0].split("[-]+");
                    String[] hmss = dts[1].split("[:]+");

                    DateTime localTime = new DateTime((new Integer(ymd[0])).intValue(),
                            (new Integer(ymd[1])).intValue(), (new Integer(ymd[2])).intValue(),
                            (new Integer(hmss[0])).intValue(), (new Integer(hmss[1])).intValue(),
                            (new Integer(hmss[2])).intValue(), 0);

                    localTime = localTime.plusHours(13);
                    tokens[0] = localTime.toString(fmt);
                }

                date_stamp = tokens[0];
                date_tokens = date_stamp.split(date_delims);
                intdates = date_tokens[0].split(ddelims);
                DateTime weekend = new DateTime((new Integer(intdates[0])).intValue(),
                        (new Integer(intdates[1])).intValue(), (new Integer(intdates[2])).intValue(), 14, 0);

                //System.out.println(strline + " " + final_trade_time);

                if (let_shop) {
                    setTimeInterval(insampStart, permEndTrading, final_trade_time);
                } else {
                    setTimeInterval(insampStart, permEndTrading, permEndTrading);
                }
                friday = false;
                //System.out.println(strline + " " + forex24);
                if (forex24) //need to change friday trading end time 
                {
                    //System.out.println(weekend.dayOfWeek().getAsText());
                    if (weekend.dayOfWeek().getAsText().equals("Friday") && !change_time_zone) //change number of trading days
                    {
                        if (min30trade) {
                            setTimeInterval(insampStart, "16:30:00", "16:30:00");
                        } else {
                            setTimeInterval(insampStart, "16:00:00", "16:00:00");
                        }
                        friday = true;
                    } else if (weekend.dayOfWeek().getAsText().equals("Saturday") && change_time_zone) {
                        if (min30trade) {
                            setTimeInterval(insampStart, "05:30:00", "05:30:00");
                        } else {
                            setTimeInterval(insampStart, "05:00:00", "05:00:00");
                        }
                        friday = true;
                    } else {
                        if (let_shop) {
                            setTimeInterval(insampStart, permEndTrading, final_trade_time);
                        } else {
                            setTimeInterval(insampStart, permEndTrading, permEndTrading);
                        }
                    }

                    //System.out.println(startingTime + " " + insampStart + " " + endingTime + " " + final_trade_time + " " + start_seq + " " + trade_obs);           
                }
                //System.out.println(startingTime + " " + insampStart + " " + endingTime + " " + start_seq + " " + trade_obs); 

                if (date_stamp.indexOf(insampStart) != -1) {

                    signal = new double[trade_obs];
                    xt = new double[trade_obs];
                    lag_signals = new double[trade_obs];
                    prix = new double[trade_obs];
                    lo_prix = new double[trade_obs];
                    hi_prix = new double[trade_obs];
                }

                //print_filter = true;
                latestDates.add(date_stamp);

                //use only iqfeed data for insample, use ib for out-of-sample

                //strategy is as follows 

                if (bid_ask_data) {

                    D = new Double(tokens[4]);
                    close_series.add(D);

                    if (ib_data && ib_data_hash.containsKey(tokens[0])) {

                        String[] hashed = ib_data_hash.get(tokens[0]).split("[ ]+");
                        //System.out.println("Contains " + tokens[0] + ", lengths = " + hashed.length + ", " + tokens.length);
                        for (i = 1; i < hashed.length; i++) {
                            tokens[i] = hashed[i];
                        } // System.out.print(tokens[i] + " ");} 
                        bid.add(new Double(tokens[2]));
                        ask.add(new Double(tokens[3]));
                        mid.add(new Double(tokens[1]));
                    } else {
                        bid.add(new Double(tokens[2]));
                        ask.add(new Double(tokens[3]));
                        mid.add(new Double(tokens[1]));
                    }

                    spreadnow = ask.get(ask.size() - 1) - bid.get(bid.size() - 1);
                    //System.out.println(date_stamp + " spread = " + spreadnow);

                    if ((date_stamp.indexOf(startingTime) != -1) && current_signal > 0) {
                        D = new Double(tokens[3]);
                        price.add(D);
                        if (spread_method == 0) {
                            live_series.add(log(bid.get(bid.size() - 1)) - log(bid.get(bid.size() - 2)));
                        } //low urgency
                        else if (spread_method == 1) {
                            live_series.add(log(bid.get(bid.size() - 1)) - log(mid.get(mid.size() - 2)));
                        } //med urgency
                        else {
                            live_series.add(log(bid.get(bid.size() - 1)) - log(ask.get(ask.size() - 2)));
                        } //high urgency
                    } else if ((date_stamp.indexOf(startingTime) != -1) && current_signal < 0) {
                        D = new Double(tokens[2]);
                        price.add(D);
                        if (spread_method == 0) {
                            live_series.add(log(bid.get(bid.size() - 1)) - log(bid.get(bid.size() - 2)));
                        } //low urgency
                        else if (spread_method == 1) {
                            live_series.add(log(ask.get(ask.size() - 1)) - log(mid.get(mid.size() - 2)));
                        } //med urgency
                        else {
                            live_series.add(log(ask.get(ask.size() - 1)) - log(bid.get(bid.size() - 2)));
                        } //high urgency
                    } else if ((date_stamp.indexOf(startingTime) == -1) && current_signal > 0) {
                        D = new Double(tokens[2]);
                        price.add(D);
                        if (spread_method == 0) {
                            live_series.add(log(bid.get(bid.size() - 1)) - log(bid.get(bid.size() - 2)));
                        } //low urgency
                        else if (spread_method == 1) {
                            live_series.add(log(bid.get(bid.size() - 1)) - log(mid.get(mid.size() - 2)));
                        } //med urgency
                        else {
                            live_series.add(log(bid.get(bid.size() - 1)) - log(ask.get(ask.size() - 2)));
                        } //high urgency
                    } else if ((date_stamp.indexOf(startingTime) == -1) && current_signal < 0) {
                        D = new Double(tokens[3]);
                        price.add(D);
                        if (spread_method == 0) {
                            live_series.add(log(bid.get(bid.size() - 1)) - log(bid.get(bid.size() - 2)));
                        } //low urgency
                        else if (spread_method == 1) {
                            live_series.add(log(ask.get(ask.size() - 1)) - log(mid.get(mid.size() - 2)));
                        } //med urgency
                        else {
                            live_series.add(log(ask.get(ask.size() - 1)) - log(bid.get(bid.size() - 2)));
                        } //high urgency
                    } else {
                        D = new Double(tokens[1]);
                        price.add(D);

                        D = new Double(tokens[4]);
                        if (ib_data && ib_data_hash.containsKey(tokens[0])) {
                            live_series.add(log(mid.get(mid.size() - 1)) - log(mid.get(mid.size() - 2)));
                        } else {
                            live_series.add(new Double(tokens[4]));
                        }
                    }
                    //lo_price.add((new Double(tokens[7])) + spreadnow/2.0); hi_price.add((new Double(tokens[8])) - spreadnow/2.0);

                    if (ib_data && ib_data_hash.containsKey(tokens[0])) //use as is
                    {
                        lo_price.add(new Double(tokens[7]));
                        hi_price.add(new Double(tokens[8]));
                    } else {
                        lo_price.add((new Double(tokens[7])) + spreadnow);
                        hi_price.add((new Double(tokens[8])));
                    }

                    //System.out.println(date_stamp + " " + live_series.get(live_series.size() - 1));
                    //              if(live_series.size() > 2)
                    //              {
                    //               System.out.println("\n" + date_stamp + " " + live_series.get(live_series.size() - 1) + ", ask = " + ask.get(ask.size()-1) + ", bid = " + bid.get(bid.size()-1) + 
                    //               ", ask_t-1 " + ask.get(ask.size()-2) + ", bid_t-1 " + bid.get(bid.size()-2));
                    //              }
                    //spread.println(date_stamp + " " + (new Double(tokens[3]) - new Double(tokens[2])));

                } else {

                    D = new Double(tokens[1]);
                    price.add(D);
                    D = new Double(tokens[2]);
                    close_series.add(D);

                    //if(print_debug)System.out.println(date_stamp + " " + price.get(price.size()-1) + " " + close_series.get(close_series.size()-1));
                    //System.out.println(date_stamp + " " + price.get(price.size()-1) + " " + close_series.get(close_series.size()-1));
                    if (n_rep > 2 && tokens.length > 3) {
                        D = new Double(tokens[3]);
                        exp_series_1.add(D);
                    }
                    if (n_rep > 3 && tokens.length > 4) {
                        D = new Double(tokens[4]);
                        exp_series_2.add(D);
                    }
                }

                //System.out.println(nobs_count + " " + n_obs);  
                if (nobs_count >= n_obs) {
                    computed = true;
                    //---- collect data and put in time series                 
                    if (daily_strategy) {
                        trading_hours = true;
                    }

                    if (date_stamp.indexOf(insampStart) != -1 || trading_hours) //start at 9:30
                    {
                        //                  if(print_debug)System.out.println("Start the day trading");
                        //                  System.out.println("Starting TIME = " + startingTime);
                        //System.out.println("ENDING TIME = " + endingTime + " " + finalCall);
                        if (trade_count < trade_obs) {
                            //--- new series 

                            //System.out.println("trade count = " + trade_count + " " + trade_obs);
                            n_out_samp++;
                            trading_hours = true;
                            tseries = new double[n_rep * n_obs];
                            out_series = new double[n_obs];

                            if (!bid_ask_data) {
                                if (n_rep == 3) {
                                    for (i = 0; i < n_obs; i++) {
                                        tseries[n_obs - 1 - i] = close_series.get(close_series.size() - 1 - i);
                                        if (n_rep > 2 && exp_series_1.size() > 0) {
                                            tseries[n_obs + n_obs - 1 - i] = exp_series_1
                                                    .get(exp_series_1.size() - 1 - i);
                                        }
                                        if (exp_series_2.size() > 0) {
                                            tseries[n_obs * 2 + n_obs - 1 - i] = exp_series_2
                                                    .get(exp_series_2.size() - 1 - i);
                                        }
                                    }
                                } else {
                                    for (i = 0; i < n_obs; i++) {
                                        tseries[n_obs - 1 - i] = close_series.get(close_series.size() - 1 - i);
                                        tseries[n_obs + n_obs - 1 - i] = close_series
                                                .get(close_series.size() - 1 - i);
                                        if (n_rep > 2 && exp_series_1.size() > 0) {
                                            tseries[n_obs * 2 + n_obs - 1 - i] = exp_series_1
                                                    .get(exp_series_1.size() - 1 - i);
                                        }
                                        if (n_rep > 3 && exp_series_2.size() > 0) {
                                            tseries[n_obs * 3 + n_obs - 1 - i] = exp_series_2
                                                    .get(exp_series_2.size() - 1 - i);
                                        }
                                    }
                                }
                            } else {

                                if (classical_data) {
                                    for (i = 0; i < n_obs; i++) {
                                        tseries[n_obs - 1 - i] = live_series.get(live_series.size() - 1 - i);
                                        tseries[n_obs + n_obs - 1 - i] = live_series
                                                .get(live_series.size() - 1 - i);
                                        if (n_rep > 2 && exp_series_1.size() > 0) {
                                            tseries[n_obs * 2 + n_obs - 1 - i] = exp_series_1
                                                    .get(exp_series_1.size() - 1 - i);
                                        }
                                        if (n_rep > 3 && exp_series_2.size() > 0) {
                                            tseries[n_obs * 3 + n_obs - 1 - i] = exp_series_2
                                                    .get(exp_series_2.size() - 1 - i);
                                        }
                                    }

                                    for (i = 0; i < n_obs; i++) {
                                        out_series[n_obs - 1 - i] = tseries[n_obs - 1 - i];
                                    }

                                } else {
                                    for (i = 0; i < n_obs; i++) {
                                        tseries[n_obs - 1 - i] = close_series.get(close_series.size() - 1 - i);
                                        tseries[n_obs + n_obs - 1 - i] = close_series
                                                .get(close_series.size() - 1 - i);
                                        if (n_rep > 2 && exp_series_1.size() > 0) {
                                            tseries[n_obs * 2 + n_obs - 1 - i] = exp_series_1
                                                    .get(exp_series_1.size() - 1 - i);
                                        }
                                        if (n_rep > 3 && exp_series_2.size() > 0) {
                                            tseries[n_obs * 3 + n_obs - 1 - i] = exp_series_2
                                                    .get(exp_series_2.size() - 1 - i);
                                        }
                                    }

                                    for (i = 0; i < n_out_samp; i++) {
                                        out_series[n_obs - 1 - i] = live_series.get(live_series.size() - 1 - i);
                                    }
                                    for (i = n_out_samp; i < n_obs; i++) {
                                        out_series[n_obs - 1 - i] = tseries[n_obs - 1 - i];
                                    }
                                }

                            }

                            //---- set new time series------------      
                            //                   if((gaussianize || volatility_thresh) || save_volatility)
                            //                   {
                            //                     if(date_stamp.indexOf(startingTime) != -1) 
                            //                     {      
                            //                      gaussianizeData(.9,.01,2.0);
                            //                      morningSeries = new double[n_rep*n_obs];
                            //                      System.arraycopy(tseries,0,morningSeries,0,morningSeries.length);
                            //                      computePeriodogram();
                            //                     }
                            //                     else
                            //                     {
                            //                      updateGaussianData();
                            //                      gauss_target.add(tseries[n_obs-1]);
                            //                      if(n_rep > 2)
                            //                      {
                            //                       gauss_1.add(tseries[n_obs*2 + n_obs-1]);
                            //                       gauss_2.add(tseries[n_obs*3 + n_obs-1]); 
                            //                      }
                            //                      for(i=0;i<trade_count;i++)
                            //                      {
                            //                        tseries[n_obs-1-i] = gauss_target.get(gauss_target.size()-1-i);
                            //                        tseries[n_obs + n_obs - 1 - i] = tseries[n_obs-1-i];
                            //                        if(n_rep > 2)
                            //                        {tseries[n_obs*2 + n_obs-1 - i] = gauss_1.get(gauss_1.size()-1-i);}
                            //                        if(n_rep > 3)
                            //                        {tseries[n_obs*3 + n_obs-1 - i] = gauss_2.get(gauss_2.size()-1-i);}
                            //                      }   
                            //                      
                            //                      //System.out.println(date_stamp + " " + tseries[n_obs-1] + " " + tseries[n_obs*2 + n_obs-1] + " " + tseries[n_obs*3 + n_obs-1]);
                            //                      
                            //                     }
                            //                     avg_vol = avg_vol + vol[vol.length-1];
                            //                   }

                            mdfa.set_tseries(tseries, n_obs, n_rep);

                            //--- compute new filter --------
                            //if(pulse_count >= recomp_pulse || (date_stamp.indexOf(startingTime) != -1)) 
                            if (date_stamp.indexOf(insampStart) != -1 && day_count == 0) {

                                //                      System.out.println(date_stamp + " " + insampStart + " " + startingTime + " " + tseries[n_obs-1] + " " + tseries[n_obs - 2] + " " + tseries[n_obs-3] + " " + tseries[n_obs-4] + " " 
                                //                         + price.get(price.size()-1));

                                if (!useH0) //general filtering
                                {

                                    //if(print_debug) System.out.println(date_stamp);

                                    //                     if(date_stamp.indexOf("2013-04-03") != -1 || date_stamp.indexOf("2013-04-02") != -1) 
                                    //                     { 
                                    //                       System.out.println(date_stamp);
                                    //                       System.out.println("AT THE END!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                    //                     }

                                    mdfa.computeFilterGeneral(true, print_filter);

                                    b_coeffs = new double[(n_rep - 1) * L]; //System.out.println(b_coeffs.length + " " + L + n_rep); 
                                    for (l = 0; l < L; l++) {

                                        for (i = 0; i < n_rep - 1; i++) {
                                            b_coeffs[L * i + l] = mdfa.b[L * (i + 1) + l];
                                        } // System.out.println(b_coeffs[l]);}               
                                        //if(date_stamp.indexOf("2013-12-17") != -1) {System.out.println(b_coeffs[l]);}
                                    }
                                    //if(print_debug) System.out.println(date_stamp + " b_coeffs = " + b_coeffs[0] + " " + b_coeffs[1] + " " + b_coeffs[2]);
                                    pulse_count = 0;
                                    b_copy = new double[mdfa.b.length];
                                    System.arraycopy(mdfa.b, 0, b_copy, 0, b_copy.length);
                                    b0_coeff.println(b_coeffs[0]); // + ", " + b_coeffs[L] + ", " + b_coeffs[2*L]);

                                    b0_sum = 0;
                                    for (l = 0; l < L; l++) {
                                        b0_sum = b0_sum + b_coeffs[l];
                                    }
                                    b0_trend.add(b0_sum);
                                    //                     if(filters.size() > 5)
                                    //                     {
                                    //                      System.out.println("Old BO = " + b_coeffs[0] + " " + b_coeffs[L] + " " + b_coeffs[L+L]);     
                                    //                      averageFilters(3,.3);
                                    //                      System.out.println("Avg BO = " + b_coeffs[0] + " " + b_coeffs[L] + " " + b_coeffs[L+L]);
                                    //                     }
                                } else {
                                    if (H0set) //H0_Optimization_Lookback2(double delta, double interp_start)
                                    {
                                        if (!lookback_ready) {
                                            H0_Optimization(h0_outsamp, localdecay, h0_delta, interp_start);
                                            avg_volatility.add(0.0);
                                            System.out.println("First");
                                        }
                                        //else{H0_Optimization_Lookback(h0_delta, 0.0); max_int.println(max_interp_value + " " + max_ret_interp + " " + ROI + " " + date_stamp);}
                                        else {
                                            //if(morning_optimize)
                                            //{H0_Optimization(h0_outsamp, localdecay, h0_delta, interp_start);}
                                            //else
                                            //{
                                            H0_Optimization_Lookback(h0_delta, 0);
                                            //H0_Optimization_Lookback_Test(yesterday_series, h0_delta, 0.0, optval, cut); 
                                            //max_int.println(max_interp_value + " " + optval + " " + max_ret_interp + " " + zero_ret);     
                                            max_int.println(max_interp_value + " " + max_ret_interp);
                                            //System.out.println("New BO = " + b_coeffs[0] + " " + b_coeffs[L] + " " + b_coeffs[L+L]);
                                            //}
                                        }
                                        //H0_Optimization_Morning(localdecay, h0_delta, interp_start); 
                                        //max_int.println(max_interp_value + " " + max_ret_interp);
                                        pulse_count = 0;
                                    } else {
                                        System.out.println("Problem: Couldn't find H0 filter");
                                        break;
                                    }
                                }
                            }
                            //System.out.println("Out of sample " + date_stamp);
                            //else {pulse_count++;}

                            //---- change filter to updated filter -------------------------------- 
                            if ((morning_optimize && (date_stamp.indexOf(optimizeTime) != -1))
                                    && lookback_ready) {
                                System.out.println("Optimizing at 12:30");
                                advance = 13; //   !!!! Caution, this value must correspond with the optimizeTime (e.g. 8 = 11:30)  
                                //optval = max_interp_value;        
                                H0_Optimization_Intraday(h0_delta, 0.0, advance); //find optimized parameter at new time
                                // max_int.println(max_interp_value + " " + optval);         
                            }

                            if (date_stamp.indexOf("09:30") != -1) {
                                reg_trading_hours = true;
                            }

                            //start_seq = 10; 
                            if (pulse_count < recomp_pulse && reg_trading_hours) {
                                if (H0set && (pulse_count % start_seq == 0) && pulse_count > 0) //5 is best
                                //if(H0set)
                                {
                                    H0_Optimization_Update(0, trade_count, true, true);
                                }
                                pulse_count++;
                            } else if (pulse_count < recomp_pulse && date_stamp.indexOf("08:30") != -1) {
                                System.out.println("Starting out for the day");
                                double[] outs = computeInterpolation(tseries, 0);

                                int lag4 = 2 * (n_obs - L + 1) + 2 * (n_rep + 1) * K1;
                                b_coeffs = new double[(n_rep - 1) * L];
                                for (l = 0; l < L; l++) {
                                    for (i = 0; i < n_rep - 1; i++) {
                                        b_coeffs[L * i + l] = outs[lag4 + L * (i + 1) + l];
                                    }
                                }
                                pulse_count = 0;
                            }

                            //---- apply the mother filter------------
                            sum = 0.0;
                            if (!bid_ask_data) {
                                for (j = 1; j < n_rep; j++) {
                                    for (l = 0; l < L; l++) {
                                        sum = sum + b_coeffs[L * (j - 1) + l] * tseries[N * j + n_obs - 1 - l];
                                    }
                                }
                            } else {
                                for (l = 0; l < L; l++) {
                                    sum = sum + b_coeffs[l] * out_series[n_obs - 1 - l];
                                } // System.out.println(out_series[n_obs-1-l]);}
                            }
                            //System.out.println("");

                            prev_signal = current_signal;
                            current_signal = sum;

                            if (sig_inverse) {
                                current_signal = -current_signal;
                            }

                            if (morning_optimize && (date_stamp.indexOf(optimizeTime) != -1)) {
                                if ((prev_signal > 0 && current_signal < 0)
                                        || (prev_signal < 0 && current_signal > 0)) {
                                    System.out.println(
                                            "Sign of signal changed after optimization, forced to enter transaction.");
                                    changed_signs++;
                                }
                            }

                            if (cont_lookback) //compute previous lag 
                            {
                                if (compute_lag) {
                                    mdfa.set_lag(lag + 1);
                                    mdfa.computeFilterGeneral(true, false);
                                    b_lag = new double[(n_rep - 1) * L];
                                    for (l = 0; l < L; l++) {
                                        for (i = 0; i < n_rep - 1; i++) {
                                            b_lag[L * i + l] = mdfa.b[L * (i + 1) + l];
                                        }
                                    }
                                    sum = 0.0;
                                    for (j = 1; j < n_rep; j++) {
                                        for (l = 0; l < L; l++) {
                                            sum = sum + b_lag[L * (j - 1) + l] * tseries[N * j + n_obs - 1 - l];
                                        }
                                    }
                                    lag_signal = sum;
                                } else {
                                    sum = 0.0;
                                    for (j = 1; j < n_rep; j++) {
                                        for (l = 0; l < L; l++) {
                                            sum = sum + b_coeffs[L * (j - 1) + l]
                                                    * tseries[N * j + n_obs - 2 - l];
                                        }
                                    }
                                    lag_signal = sum;
                                }
                            }

                            if (adaptive_filtering) {
                                //------------------- Adaptive steps --------------------------------------------
                                if (adapt_pulse_count >= adaptive_recomp_pulse
                                        || (date_stamp.indexOf(startingTime) != -1)) {
                                    adaptiveUpdateFilter();
                                    updateAdaptiveSignal();
                                    adapt_pulse_count = 0;
                                } else {
                                    updateAdaptiveSignal();
                                    adapt_pulse_count++;
                                }

                                current_signal = update_signal[update_signal.length - 1];
                                lag_signal = update_signal[update_signal.length - 2];
                            }

                            //                   if(print_debug)
                            //                   {
                            //                    System.out.println(date_stamp + ", " + formatter.format(price.get(price.size()-1)) + ", " + formatter.format(tseries[n_obs-1]) + ", " + formatter.format(current_signal));      
                            //                   }
                            //                   if(!forex24) {dailyReport.add(""+date_stamp + ", " + formatter2.format(Math.exp(price.get(price.size()-1))) + ", " + formatter.format(tseries[n_obs-1]) + ", " + formatter.format(current_signal));}
                            //                   else {dailyReport.add(""+date_stamp + ", " + formatter.format(price.get(price.size()-1)) + ", " + formatter.format(tseries[n_obs-1]) + ", " + formatter.format(current_signal));}
                            if (!bid_ask_data) {
                                dailyReport.add(
                                        "" + date_stamp + ", " + formatter3.format(price.get(price.size() - 1))
                                                + ", " + formatter3.format(lo_price.get(lo_price.size() - 1))
                                                + ", " + formatter3.format(hi_price.get(hi_price.size() - 1))
                                                + ", " + formatter.format(tseries[n_obs - 1]) + ", "
                                                + formatter.format(current_signal));
                            } else {
                                dailyReport.add(
                                        "" + date_stamp + ", " + formatter3.format(price.get(price.size() - 1))
                                                + ", " + formatter3.format(lo_price.get(lo_price.size() - 1))
                                                + ", " + formatter3.format(hi_price.get(hi_price.size() - 1))
                                                + ", " + formatter.format(out_series[n_obs - 1]) + ", "
                                                + formatter.format(current_signal));
                            }
                            //                   double binsig = 0;
                            //                   if(current_signal > 0) binsig = 1; 
                            //                   else binsig = -1;
                            //                   
                            //                   dailyReport.add(""+date_stamp + ", " + formatter.format(price.get(price.size()-1)) + ", " + binsig);

                            //System.out.println(dailyReport.size());

                            xt[trade_count] = close_series.get(close_series.size() - 1).doubleValue();
                            signal[trade_count] = current_signal;

                            if (diff_sig_trading && trade_count > 0) {
                                signal[trade_count] = signal[trade_count] - signal[trade_count - 1];
                            }

                            prix[trade_count] = price.get(price.size() - 1).doubleValue();
                            lo_prix[trade_count] = lo_price.get(lo_price.size() - 1).doubleValue();
                            hi_prix[trade_count] = hi_price.get(hi_price.size() - 1).doubleValue();

                            if (trade_count > 0 && cont_lookback) {
                                lag_signals[trade_count - 1] = lag_signal;
                            }

                            trade_count++;
                        }

                        if (date_stamp.indexOf(finalCall) != -1)
                        //if(date_stamp.indexOf(endingTime) != -1) 
                        {
                            //System.out.println("ENDING TIME Data at " + endingTime);
                            //                    for(i=0;i<L;i++)
                            //                    {
                            //                      System.out.println(tseries[n_obs-1-i] + " " + tseries[n_obs + n_obs-1 - i] + " " + tseries[2*n_obs + n_obs-1 - i] + " " + tseries[3*n_obs + n_obs-1 - i]); 
                            //                    }

                            if (reset_signal) {
                                current_signal = 0;
                            }
                            current_signal = 0;
                            n_out_samp = 0;
                            reg_trading_hours = false;
                            daily_return = price.get(price.size() - 1).doubleValue() - log_price;
                            log_price = price.get(price.size() - 1).doubleValue();
                            trade_count = 0;
                            trading_hours = false;
                            pulse_count = 0;

                            //                   if(startingTime.equals("09:30"))
                            //                   {

                            actual_price = new double[trade_obs - start_seq];
                            actual_loprice = new double[trade_obs - start_seq];
                            actual_hiprice = new double[trade_obs - start_seq];
                            actual_signal = new double[trade_obs - start_seq];
                            for (i = 0; i < actual_price.length; i++) {
                                actual_price[i] = prix[i + start_seq];
                                actual_signal[i] = signal[i + start_seq];
                                actual_loprice[i] = lo_prix[i + start_seq];
                                actual_hiprice[i] = hi_prix[i + start_seq];

                            } /// System.out.println(actual_price[i] + " " + actual_signal[i]);}                                      

                            short_sell = true;
                            long_buy = true;
                            if (!let_shop) {
                                insampleTradingDiff(actual_price, actual_signal, actual_price.length);
                                ROI = account[account.length - 1];
                            } else {
                                insampleTradingDiff_Cust_SL(actual_price, actual_loprice, actual_hiprice,
                                        actual_signal, actual_price.length);
                                ROI = account[end_time_index];
                            }

                            if (jpy) {
                                ROI = .01 * ROI;
                            }
                            //date_tokens = date_stamp.split("[ ]+");

                            diff_account = new double[account.length];
                            diff_account[0] = 0;

                            //System.out.println(date_tokens[0]);
                            for (k = 1; k < account.length; k++) {
                                diff_account[k] = account[k] - account[k - 1];

                                ret_dist[k] = ret_dist[k] + diff_account[k];

                                if (diff_account[k] > 0) {
                                    pos_ret_dist[k] = pos_ret_dist[k] + 1;
                                    pos_ret_mean_time[k] = pos_ret_mean_time[k] + diff_account[k];
                                    pos_ret_mean = pos_ret_mean + diff_account[k];
                                    n_pos_ret++;
                                } else if (diff_account[k] < 0) {
                                    neg_ret_dist[k] = neg_ret_dist[k] + 1;
                                    neg_ret_mean_time[k] = neg_ret_mean_time[k] + diff_account[k];
                                    neg_ret_mean = neg_ret_mean + diff_account[k];
                                    n_neg_ret++;
                                }
                            }

                            //----- now do the trade analysis ---------
                            trade_started = 0;
                            no_return = true;
                            for (k = 1; k < account.length; k++) {

                                if (k > end_time_index) {
                                    break;
                                }

                                if (diff_account[k] != 0) {
                                    no_return = false;
                                }

                                if (diff_account[k] > 0) {

                                    min_pnl_dd = 0;
                                    max_pnl_uu = 0;

                                    l = k;
                                    while (l > 0) {
                                        if (pnl[l] < min_pnl_dd) {
                                            min_pnl_dd = pnl[l];
                                        }
                                        if (png[l] > max_pnl_uu) {
                                            max_pnl_uu = png[l];
                                        }

                                        l--;

                                        if (diff_account[l] != 0) {
                                            break;
                                        }
                                    }
                                    //System.out.println("trade, " + k + " " + trade_started + " " + end_time_index);
                                    if (trade_started != end_time_index) {
                                        pos_trades_started[trade_started] = pos_trades_started[trade_started]
                                                + 1;
                                        pos_trades_started_mean[trade_started] = pos_trades_started_mean[trade_started]
                                                + diff_account[k];
                                        if (jpy) {
                                            mdfaTrades.add(new MDFATrade(date_tokens[0], trade_started, k,
                                                    .01 * min_pnl_dd, .01 * max_pnl_uu, .01 * diff_account[k]));
                                        } else {
                                            mdfaTrades.add(new MDFATrade(date_tokens[0], trade_started, k,
                                                    min_pnl_dd, max_pnl_uu, diff_account[k]));
                                        }
                                        //System.out.println("trade, " + trade_started + " " + k + " " + min_pnl_dd + " " + diff_account[k]);
                                    }
                                    trade_started = k;
                                }
                                if (diff_account[k] < 0) {

                                    min_pnl_dd = 0;
                                    max_pnl_uu = 0;

                                    l = k;
                                    while (l > 0) {
                                        if (pnl[l] < min_pnl_dd) {
                                            min_pnl_dd = pnl[l];
                                        }
                                        if (png[l] > max_pnl_uu) {
                                            max_pnl_uu = png[l];
                                        }

                                        l--;

                                        if (diff_account[l] != 0) {
                                            break;
                                        }
                                    }
                                    //System.out.println("trade, " + k + " " + trade_started + " " + end_time_index);
                                    if (trade_started != end_time_index) {
                                        neg_trades_started[trade_started] = neg_trades_started[trade_started]
                                                + 1;
                                        neg_trades_started_mean[trade_started] = neg_trades_started_mean[trade_started]
                                                - diff_account[k];
                                        if (jpy) {
                                            mdfaTrades.add(new MDFATrade(date_tokens[0], trade_started, k,
                                                    .01 * min_pnl_dd, .01 * max_pnl_uu, .01 * diff_account[k]));
                                        } else {
                                            mdfaTrades.add(new MDFATrade(date_tokens[0], trade_started, k,
                                                    min_pnl_dd, max_pnl_uu, diff_account[k]));
                                        }
                                        //System.out.println("trade, " + trade_started + " " + k + " " + min_pnl_dd + " " + diff_account[k]);
                                    }

                                    trade_started = k;
                                }

                            }

                            //the day had no action, so place an empty trade
                            if (no_return) {
                                mdfaTrades.add(new MDFATrade(date_tokens[0], 0, end_time_index, 0, 0, .00001));
                            }

                            if (print_debug) {
                                System.out.println("");
                                for (k = 0; k < account.length; k++) {
                                    System.out.println(dailyReport.get(k + start_seq) + ", "
                                            + formatter.format(account[k]) + ", " + formatter.format(pnl[k])
                                            + ", " + formatter.format(png[k]));
                                }
                            }
                            all_trades = total_trades;
                            all_succ_trades = succ_trades;
                            tot_all_trades = tot_all_trades + total_trades;
                            tot_succ_trades = tot_succ_trades + succ_trades;

                            short_sell = false;
                            long_buy = true;
                            //insampleTradingDiff_Cust_SL(actual_price, actual_signal, actual_price.length); 
                            //longROI = account[account.length-1];
                            longROI = account[end_time_index];

                            short_sell = true;
                            long_buy = false;
                            //insampleTradingDiff_Cust_SL(actual_price, actual_signal, actual_price.length); 
                            //shortROI = account[account.length-1];                    
                            shortROI = account[end_time_index];

                            final_trades.add(final_trade);
                            last_trades.add(last_trade);
                            sub_returns.add(diff_band);
                            //I_MDFA.plotData(xt, signal, trade_obs);

                            avg_vol = avg_vol / trade_obs;

                            dailyReport.clear();
                            mnmx = minmax(account);
                            ratio = ((double) succ_trades) / ((double) total_trades);

                            if (ROI < 0) {
                                losses_in_arow++;
                            } else {
                                losses_in_arow = 0;
                            }

                            if (useH0) {
                                //System.out.println("using H0");
                                if (lookback_ready) {
                                    dailyoutret.add(daily_return);
                                    maxIntValue.add(max_interp_value);
                                    avg_volatility.add(avg_vol - 0.25);
                                    returns.add(ROI - all_trades * tradingCost);
                                    longreturns.add(longROI);
                                    shortreturns.add(shortROI);
                                    dropdowns.add(drop_down);
                                    success.add(ratio);
                                    trade_days.add(date_tokens[0]);
                                    dates_low_high.add(date_stamp + ", " + mnmx[0] + ", " + mnmx[1]);
                                } else {
                                    lookback_ready = true;
                                }
                            } else {
                                //System.out.println("Not using H0");
                                dailyoutret.add(daily_return);
                                maxIntValue.add(max_interp_value);
                                avg_volatility.add(100000.0 * (avg_vol - 0.30));
                                returns.add(ROI - all_trades * tradingCost);
                                longreturns.add(longROI);
                                shortreturns.add(shortROI);
                                dropdowns.add(drop_down);
                                success.add(ratio);
                                trade_days.add(date_tokens[0]);
                                dates_low_high.add(date_stamp + ", " + mnmx[0] + ", " + mnmx[1]);
                            }

                            if (ROI < 0 && first_trade_loss) {
                                bad_starts++;
                            }

                            if (mnmx[1] > .005) {
                                profit_baby++;
                            }
                            //out.println("Result for " + date_stamp + ", ROI = " + ROI + ", " + mnmx[0] + ", " + mnmx[1] + ", " + succ_trades + ", " + total_trades);
                            if (print_debug)
                                System.out.println("Result for " + date_stamp + ", ROI = "
                                        + (ROI - all_trades * tradingCost) + ", succ_trades = "
                                        + all_succ_trades + ", total_trades = " + all_trades);

                            //                   if(returns.size() > rolling_length) //take latest 30 days and compute a few stats
                            //                   {
                            //                     double[] latRets = new double[rolling_length];
                            //                     Double[] latRetsD = new Double[rolling_length];
                            //                     for(k=0;k<rolling_length;k++) 
                            //                     {
                            //                      latRets[rolling_length - 1 - k] = returns.get(returns.size() - 1 - k);
                            //                      latRetsD[rolling_length - 1 - k] = returns.get(returns.size() - 1 - k);
                            //                     } 
                            //                     //compute sharpe
                            //                     double[] mstd = mean_std(latRets); 
                            //                     double sh = Math.sqrt(250)*mstd[0]/mstd[1];
                            //                     //compute rank
                            //                     double rc = rankCoefficient(latRets,rolling_length);
                            //                     //compute Ulcer
                            //                     double ui = ulcerIndex(latRetsD);
                            //                     //computer Kelly
                            //                     
                            //                     rolling_ind.add(sh + " " + rc + " " + ui + " " + kp);     
                            //                   }
                            //                   else
                            //                   {rolling_ind.add("0 0 0 0");}

                            dailyout.println(daily_return);
                            signal = new double[trade_obs];
                            xt = new double[trade_obs];
                            prix = new double[trade_obs];
                            lag_signals = new double[trade_obs];

                            avg_vol = 0.0;
                            total_ROI = total_ROI + ROI - all_trades * tradingCost;
                            total_succ = total_succ + succ_trades;
                            total = total + total_trades;
                            //System.out.println("total trades = " + total_succ + "/" + total);

                            if (ROI > 0) {
                                trade_succ_ratio++;
                            }

                            yesterday_vol = 0;//avg_volatility.get(avg_volatility.size() - 2);
                            if (ROI > .006)// && (avg_volatility.get(avg_volatility.size() - 2) < 4.007053e-07 ))
                            {

                                avg_count++;
                                for (k = 1; k < n_rep; k++) {
                                    for (l = 0; l < L; l++) {
                                        b_avg[L * k + l] = b_avg[L * k + l] + b_coeffs[L * (k - 1) + l];
                                    }
                                }
                            }

                            if (day_count == recompute_day) {
                                day_count = 0;
                            } else {
                                day_count++;
                            }

                        }
                    }
                }
                nobs_count++;
                //System.out.println(nobs_count);
            }

            //out.println("Total ROI: " + total_ROI + ", Total successful trades = " + succ_trades + ", total trades = " + total_trades + ", rate = " + (double)succ_trades/(double)total_trades);
            System.out.println("Total ROI: " + total_ROI + ", Total successful trades = " + tot_succ_trades
                    + ", total trades = " + tot_all_trades + ", avg_n_trades = "
                    + (double) tot_all_trades / returns.size() + ", rate = "
                    + (double) tot_succ_trades / (double) tot_all_trades);
            //System.out.println("Avg Friday ROI = " + (fridayROI/fridays) + ", friday success = " + ((double)fridayROI_pos/fridays));

            avg_n_trades = (double) tot_all_trades / (double) returns.size();
            avg_rate = (double) tot_succ_trades / (double) tot_all_trades;

            dailyoutret.set(0, 0.0);
            if (!H0set || recomp_pulse > 0) {
                System.out.println("Summing statistics");
                num_trade_days = returns.size();
                if (num_trade_days == 0) {
                    for (i = 0; i < 100; i++)
                        returns.add(0.0);
                }
                num_trade_days = returns.size();
                mean = 0.0;
                num_gains = 0;
                num_losses = 0;
                dreturns = new double[num_trade_days];
                //double ret = returns.get(0);
                double ret = 0;
                if (num_trade_days > 0)
                    dreturns[0] = 0;
                for (i = 0; i < num_trade_days; i++) {
                    ret = returns.get(i);
                    if (ret > 0) {
                        num_gains++;
                    } else {
                        num_losses++;
                    }

                    mean = mean + ret;
                    out.println(ret);
                    if (i > 0)
                        dreturns[i] = dreturns[i - 1] + ret;
                }
                mean = mean / ((double) returns.size());

                double risk = -neg_ret_mean / (double) n_neg_ret;
                System.out.println("neg_ret_mean = " + (-neg_ret_mean) + ", " + n_neg_ret);
                double reward = pos_ret_mean / (double) n_pos_ret;
                System.out.println("pos_ret_mean = " + pos_ret_mean + ", " + n_pos_ret);
                double win_ratio = (double) (n_pos_ret) / (n_pos_ret + n_neg_ret);

                kellyPerc = win_ratio - (1.0 - win_ratio) * (risk / reward);
                ulcer_index = ulcerIndex(returns.toArray(new Double[0]));

                System.out.println("win ratio = " + win_ratio + ", risk = " + risk + ", reward = " + reward);
                System.out.println("kelly and ulcer = " + kellyPerc + " " + ulcer_index);

                sum_sd = 0;
                for (i = 0; i < returns.size(); i++) {
                    sum_sd = sum_sd
                            + (returns.get(i) - mean) * (returns.get(i) - mean) / ((double) returns.size());
                }
                standard_deviation = Math.sqrt(sum_sd);
            } else {
                num_trade_days = lookback_returns.size();
                mean = 0.0;
                num_gains = 0;
                num_losses = 0;
                dreturns = new double[num_trade_days];
                double ret = lookback_returns.get(0);
                dreturns[0] = ret;
                for (i = 0; i < num_trade_days; i++) {
                    ret = lookback_returns.get(i);
                    if (ret > 0) {
                        num_gains++;
                    } else {
                        num_losses++;
                    }

                    mean = mean + ret;
                    out.println(ret);
                    if (i > 0)
                        dreturns[i] = dreturns[i - 1] + ret;
                }
                mean = mean / ((double) lookback_returns.size());

                sum_sd = 0;
                for (i = 0; i < lookback_returns.size(); i++) {
                    sum_sd = sum_sd + (lookback_returns.get(i) - mean) * (lookback_returns.get(i) - mean)
                            / ((double) lookback_returns.size());
                }
                standard_deviation = Math.sqrt(sum_sd);
            }

            out.println("");
            /*        for(i=0;i<num_trade_days;i++)
                    {
                       out.println(dreturns[i] + " " + dailyoutret.get(i));
                       System.out.println(dreturns[i] + " " + avg_volatility.get(i));
                    }*/
            maxdraw = computeDrawdown(dreturns);

            //rankCoefficient(dreturns, num_trade_days);

            rank_coeff = segmentRankCorrelation(15, dreturns);

            out.println("Rank Coefficient = " + rank_coeff + ", mean = " + mean);
            System.out.println("Rank Coefficient = " + rank_coeff + ", mean = " + mean);
            mean_perf = mean;
            rank_perf = rank_coeff;
        }

        for (i = 0; i < svm.size(); i++) {
            svmout.println(svm.get(i));
        }

        out.close();
        dailyout.close();
        perform.close();
        b0_coeff.close();
        max_int.close();
        svmout.close();
        spread.close();
    } catch (FileNotFoundException fe) {
        System.out.println("File not found..." + fe);
    } catch (IOException ioe) {
        System.out.println("IO procedure faulty..." + ioe);
    }

    total_obs = returns.size();
    if (trade_days.size() < total_obs) {
        total_obs = trade_days.size();
    }

    for (i = 0; i < total_obs; i++) {
        //System.out.println(trade_days.get(i) + " " + returns.get(i) + " " + avg_volatility.get(i) + " " + maxIntValue.get(i) + " " + interp_vals.get(i) + crits.get(i));      
        if (!morning_optimize) {
            System.out.println(trade_days.get(i) + ", " + returns.get(i));
            date_returns.add(trade_days.get(i) + ", " + dailyoutret.get(i));
        } else {
            System.out.println(trade_days.get(i) + ", " + returns.get(i) + ", " + interp_vals.get(i) + ", "
                    + max_ranks.get(i));
        }
    }

    for (i = 0; i < morning_returns.size(); i++) {
        double[] array = morning_returns.get(i);
        for (j = 0; j < array.length - 1; j++) {
            System.out.print(df4.format(array[j]) + " ");
        }
        System.out.println(df4.format(array[array.length - 1]));
    }

    if (!morning_optimize) {
        for (i = 0; i < crits.size(); i++) {
            System.out.println(crits.get(i));
        }

    }

    System.out.println(avg_count);
    for (k = 1; k < n_rep; k++) {
        for (l = 0; l < L; l++) {
            b_avg[L * k + l] = b_avg[L * k + l] / (double) avg_count;
        }
    }

    try {
        //PrintWriter overall = new PrintWriter(new FileWriter("performance_total.dat"));
        PrintWriter b0_coeff = new PrintWriter(new FileWriter("h0b0_filter.dat"));
        b0_coeff.println(L + " " + n_rep);
        for (l = 0; l < L; l++) {
            for (k = 0; k < n_rep - 1; k++) {
                b0_coeff.print(b_avg[L * k + l] + " ");
            }
            b0_coeff.println(b_avg[L * (n_rep - 1) + l]);
        }
        b0_coeff.close();
    } catch (IOException ioe) {
        System.out.println("IO procedure faulty..." + ioe);
    }

    try {

        PrintWriter ret_dists = new PrintWriter(new FileWriter("return_dists_" + dataFiles[0]));
        for (l = 1; l < trade_obs; l++) {
            ret_dists.println((ret_dist[l] / (double) total_obs) + " "
                    + (pos_ret_dist[l] / (double) (pos_ret_dist[l] + neg_ret_dist[l])) + " "
                    + (pos_ret_mean_time[l] / (double) pos_ret_dist[l]) + " "
                    + (neg_ret_mean_time[l] / (double) neg_ret_dist[l]));

            if (pos_trades_started[l - 1] == 0 && neg_trades_started[l - 1] == 0) {
                System.out.println("0    0     0");
            } else {
                System.out.println(formatter
                        .format((pos_trades_started[l - 1]
                                / (double) (pos_trades_started[l - 1] + neg_trades_started[l - 1])))
                        + " "
                        + formatter.format(pos_trades_started_mean[l - 1] / (double) pos_trades_started[l - 1])
                        + " " + formatter
                                .format(neg_trades_started_mean[l - 1] / (double) neg_trades_started[l - 1]));
            }
        }
        ret_dists.close();
    } catch (IOException ioe) {
        System.out.println("IO procedure faulty..." + ioe);
    }

    for (i = 0; i < full_returns_array.size(); i++) {
        double[] array = full_returns_array.get(i);
        for (j = 0; j < array.length - 1; j++) {
            System.out.print(df4.format(array[j]) + " ");
        }
        System.out.println(df4.format(array[array.length - 1]));
    }

    if (morning_optimize) {
        System.out.println("Signal changed signs at " + optimizeTime + " " + changed_signs + " times");
    }

    return computed;

}

From source file:cl.usach.managedbeans.TrabajoSemanalManagedBean.java

public List<Semana> buscarSemanas(Date datei, Date datef) {
    DateTime fechai = new DateTime(datei);
    DateTime fechaf = new DateTime(datef);
    LocalDate lunesI = fechai.toLocalDate().withDayOfWeek(DateTimeConstants.MONDAY);
    LocalDate domingoF = fechaf.toLocalDate().withDayOfWeek(DateTimeConstants.SUNDAY);

    List<Semana> semanas = new ArrayList<>();
    DateTime i = lunesI.toDateTimeAtStartOfDay();
    while (i.isBefore(domingoF.toDateTimeAtStartOfDay())) {
        DateTime domingoi = i.toLocalDate().withDayOfWeek(DateTimeConstants.SUNDAY).toDateTimeAtStartOfDay();
        domingoi = domingoi.plusHours(23).plusMinutes(59).plusSeconds(59);
        semanas.add(new Semana(i.toDate(), domingoi.toDate()));
        i = i.plusWeeks(1);/*from w  w w.j a  v  a2 s. c o  m*/
    }
    return semanas;
}

From source file:cn.cuizuoli.appranking.util.DateRangeUtil.java

License:Apache License

/**
 * getHourListOfDay/*from  ww w.  j a  v  a  2  s . co  m*/
 * @param date
 * @return
 */
public static List<String> getHourListOfDay(String date) {
    List<String> dateHourList = new ArrayList<String>();
    DateTime datetime = DateUtil.fromDay(date).withHourOfDay(0);
    while (StringUtils.equals(DateUtil.toDay(datetime), date)) {
        dateHourList.add(DateUtil.toHour(datetime));
        datetime = datetime.plusHours(1);
    }
    return dateHourList;
}

From source file:cn.cuizuoli.appranking.util.DateRangeUtil.java

License:Apache License

/**
 * getHourList/*w w  w .  j  a  v  a 2 s  .com*/
 * @param dateHour
 * @return
 */
public static List<String> getHourList(String dateHour) {
    List<String> dateHourList = new ArrayList<String>();
    DateTime datetime = DateUtil.fromHour(dateHour);
    for (int i = 0; i < MAX_RANGE; i++) {
        dateHourList.add(DateUtil.toHour(datetime));
        datetime = datetime.plusHours(1);
    }
    return dateHourList;
}

From source file:cn.cuizuoli.appranking.util.DateUtil.java

License:Apache License

/**
 * plusHours/*  w ww.  j av  a 2  s  . co m*/
 * @param hour
 * @param hours
 * @return
 */
public static String plusHours(String hour, int hours) {
    DateTime datetime = fromHour(hour);
    return toHour(datetime.plusHours(hours));
}