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()