def initialize(context): """ Define algorithm""" print "Initialize..." global TRAINING_STOCK, BACKTEST_STOCK context.security = None #becomes symbol(BACKTEST_STOCK) context.benchmark = symbol('SPY') context.training_data = loadTrainingData(TRAINING_TIME, TRAINING_STOCK) context.training_data_length = len(context.training_data) - 2 context.normalized_data = Manager.normalize(context.training_data) # will have to redo every time step target = Manager.getTargets(context.normalized_data) context.training_data = context.training_data[:-2] # delete last data entry, because it won't be used context.normalized_data = context.normalized_data[:-2] # delete last data entry, because it won't be used #print target #plt.figure("Training Data") #for i in range(len(context.normalized_data[0])): # plt.plot([x[i] for x in context.normalized_data]) #plt.legend(['open', 'high', 'low', 'close', 'volume', 'price'], loc='upper left') #plt.show() print "Train..." #print len(context.training_data), len(context.normalized_data), len(target) context.strategy = STRATEGY_CLASS([context.normalized_data], [target], num_epochs=EPOCHS) print "Capital Base: " + str(context.portfolio.cash)
def handle_data(context, data): #print "Cash: $" + str(context.portfolio.cash), "Data: ", str(len(context.training_data)) #assert context.portfolio.cash > 0.0, "ERROR: negative context.portfolio.cash" assert len(context.training_data) == context.training_data_length; "ERROR: " context.security = symbol(BACKTEST_STOCK) # data stored as (open, high, low, close, volume, price) if IS_NORMALIZE: feed_data = ([ data[context.security].open - data[context.security].open, data[context.security].high - data[context.security].open, data[context.security].low - data[context.security].open, data[context.security].close - data[context.security].open #data[context.security].volume, #data[context.security].close, ]) else: feed_data = ([ data[context.security].open, data[context.security].high, data[context.security].low, data[context.security].close #data[context.security].volume, #data[context.security].close, ]) #keep track of history. context.training_data.pop(0) context.training_data.append(feed_data) context.normalized_data = Manager.normalize(context.training_data) # will have to redo every time step #print len(context.training_data), len(context.normalized_data), len(context.normalized_data[0]) prediction = context.strategy.predict(context.training_data)[-1] print "Value: $%.2f Cash: $%.2f Predict: %.5f" % (context.portfolio.portfolio_value, context.portfolio.cash, prediction[0]) # Do nothing if there are open orders: if has_orders(context, data): print('has open orders - doing nothing!') # Put entire position in elif prediction > 0.5: order_target_percent(context.security, .98) # Take entire position out else: order_target_percent(context.security, 0) #order_target_percent(context.security, -.99) record(BENCH=data[context.security].price) record(SPY=data[context.benchmark].price)