"""

from datetime import datetime, timedelta
import pandas as pd
import sys
from utilities import analyze

def readPriceData(fname):
    """ Read orders data from csv of format y | m | d | value
     @return a time series
    """

    df = pd.read_csv(fname, header=None, names=['y', 'm', 'd', 'value'])

    # parse dates
    dates = df.apply(lambda row: datetime(int(row['y']), int(row['m']), int(row['d'])), axis=1)

    return pd.Series(df['value'], index=dates)


if __name__ == '__main__':
    pricesFname, marketSymbol = sys.argv

    # test data:
    # prices = pd.TimeSeries(data=[100., 150., 120., 300., 100., 150., 120., 300.],
    #                        index=[datetime(2008, 12, 2), datetime(2008, 12, 3), datetime(2008, 12, 4), datetime(2008, 12, 5),
    #                               datetime(2008, 12, 20), datetime(2008, 12, 30), datetime(2008, 12, 25), datetime(2008, 12, 15)])

    prices = readPriceData(pricesFname)
    analyze(prices, marketSymbol, verbosity=1)
    marketBenchMark = 1

    holdingPeriod = 5
    numStocksTraded = 100
    initialInvestment = 100000

    # ----- compute prices and create events -----
    prices = getPrices(startDate, endDate, symbols, 'close', isSymbolsList=True, additionalSymbol=marketSymbol)
    # prices = getPrices(startDate, endDate, symbols, 'close', additionalSymbol=marketSymbol)
    bollingerVals, _, _, _, _ = calculateBollingerValues(prices, lookBackPeriod, numOfStds)

    eventFilter, actionDates = createBollingerEventFilter(bollingerVals,
                                                          {'type': 'CROSS_WRT_MARKET_FALL', 'bolBenchMark': bolBenchMark,
                                                           'marketBenchMark': marketBenchMark, 'marketSymbol': marketSymbol,
                                                           'lookBackPeriod': lookBackPeriod, 'numOfStds': numOfStds})

    try:
        eventprofiler(eventFilter, {'close': prices}, i_lookback=lookBackPeriod, i_lookforward=holdingPeriod,
                      b_market_neutral=True, b_errorbars=True, s_market_sym=marketSymbol, s_filename='eventPlot.pdf')
    except:
        print "There aren't enough events for the event profiler."

    # ----- trade and evaluate -----
    orders = makeOrdersAccordingToEvents(eventFilter, holdingPeriod, numStocksTraded, saveIntermediateResults=True)

    portValues = marketsim(orders, initialInvestment)
    # calculateMetrics(portValues, saveIntermediateResults=True)

    analyze(portValues, '$SPX', plotFname='performancePlot.pdf', verbosity=0)

    plt.show()