Example #1
0
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)
Example #2
0
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)