def writePortfolioData(portData, fname):
    """ Output portfolio data.
    @param portData: a time series
    @param fname: name of the output file, which has the format y | m | d | value
    @return: nothing
    """

    f = open(fname, 'w')
    for i in xrange(portData.shape[0]):
        curDate = portData.index[i]
        f.write(str(curDate.year) + ',' + str(curDate.month) + ',' + str(curDate.day) + ',' + str(portData.ix[i]) + '\n')
    f.close()


if __name__ == '__main__':
    initialInvestment, ordersFname, outputFname = sys.argv

    """
    Test data:
               symbol  numShares
    2008-12-03   AAPL     130
    2008-12-08   AAPL    -130
    2008-12-05    IBM      50
    """
    # ordersData = pd.DataFrame([['AAPL', 130], ['AAPL', -130], ['IBM', 50]],
    #     index=[datetime(2008, 12, 3), datetime(2008, 12, 8), datetime(2008, 12, 5)],
    #     columns=['symbol', 'numShares'])

    ordersData = readOrdersData(ordersFname)
    portValues = marketsim(ordersData, initialInvestment, verbose=True)
    writePortfolioData(portValues, outputFname)
    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()