Example #1
0
def getDetails(requests):
	(user,inputDict,getParams) = (requests.user,requests.data,requests.GET)

	if 'type' not in getParams:
		return errorResp(406)

	if 'name' not in getParams:
		return errorResp(406)

	if getParams['type'] == 'b': 
		try:
			bank = bankInfoFD.objects.get(id = getParams['name'])
			rinfo = {'name': bank.name, 'group': bank.group, 'period': bank.period, 'taxStatus': bank.taxStatus, 'interestRate': bank.interestRate}
		except:
			return errorResp(406)
	elif getParams['type'] == 's':
		try:
			comp = company.objects.get(id = getParams['name'])
			rinfo = {'name': comp.name, 'last closing price': comp.ltp, 'prediction variance': comp.testMSE}
		except:
			return errorResp(406)
	elif getParams['type'] == 'p':
		try:
			ppty = rproperty.objects.get(id = getParams['name'])
			rinfo = {'pid': ppty.pid, 'LatLng': {'lat': ppty.lat, 'lng': ppty.log}, 'area(insqfeet)': ppty.sqfeet, 'price': ppty.price}
		except:
			return errorResp(406)
	return Response(rinfo)
Example #2
0
def actualVspred(requests):
	(user,inputDict,getParams) = (requests.user,requests.data,requests.GET)
	if 'company' not in getParams: return errorResp(406)
	cname = getParams['company']
	try:
		comp = company.objects.get(name=cname)
	except:
		return errorResp(406)
	# print(np.array(comp.graphData['predictions'])[-50:].shape, np.array(comp.graphData['expected'])[-50:].shape)
	return_data = { "graphData":{"expected": np.array(comp.graphData['expected'])[-300:].flatten().tolist(),"predictions": np.array(comp.graphData['predictions'])[-300:].flatten().tolist(), "labels": np.arange(len(np.array(comp.graphData['expected'])[-300:].flatten().tolist())).tolist()}, "mse": comp.testMSE, "mae": comp.testMAE}
	return JsonResponse(return_data)
Example #3
0
def trainModel(requests):
	(user,inputDict,getParams) = (requests.user,requests.data,requests.GET)
	# if user.userType not in [3, 4]:
	# 	return errorResp(401)
	
	if 'update' not in inputDict:
		return errorResp(406)
	
	if not inputDict['update']:
		return Response({})

	if 'companies' not in inputDict: compList = COMPANIES
	else: compList = inputDict['companies']

	if 'plength' not in inputDict: plength = 2
	else: plength = inputDict['plength'] 

	if 'seqlength' not in inputDict: seqlength = 30
	else: seqlength = inputDict['seqlength'] 

	for symbol in compList:
		try:
			comp = company.objects.get(name=symbol)
		except:
			return errorResp(406,readable_error="Company Doesn't exist.")

		train_data = stockData.objects.filter(companyDetails=comp) 
		trainX, trainY, testX, testY = getTrainableFeatures(train_data, plength=plength, seqlength=seqlength, mode="train", maxVal = train_data[0])
		# print (trainX.shape, trainY.shape)
		# assert len(trainX) == len(trainY)
		model = build_LSTMmodel(seqlength, plength)
		model_info, test_mse, test_mae, test_acc, model, pred, tlabels = trainNetwork(trainData = trainX, 
									trainLabels = trainY, 
									testData = testX, 
									testLabels = testY, 
									model = model,
									company=symbol)

		path = "./modelData/final_"+symbol+".hdf5"
		model.save(path)
		comp.modelPath = path
		comp.graphData = {'predictions': pred, 'expected': tlabels}
		comp.modelInfo = model_info
		comp.testMSE = test_mse
		comp.testMAE = test_mae
		comp.testAccuracy = test_acc*100
		comp.save()
	return Response({'status':True, 'text':"Training Completed"})
Example #4
0
def compare(requests):
	(user,inputDict,getParams) = (requests.user,requests.data,requests.GET)
	# if user.userType not in [3, 4]:
	# 	return errorResp(401)
	
	if 'company1' and 'company2' not in getParams: return errorResp(406)

	cname1, cname2 = getParams['company1'], getParams['company2']
	try:
		comp1 = company.objects.get(name=cname1)
	except:
		return errorResp(406, readable_error="Company Doesn't exist.")
	try:
		comp2 = company.objects.get(name=cname2)
	except:
		return errorResp(406, readable_error="Company Doesn't exist.")
	try:
		pred1 = predictionData.objects.get(companyDetails=comp1)
	except:
		return errorResp(406)
	try:
		pred2 = predictionData.objects.get(companyDetails=comp2)
	except:
		return errorResp(406)

	tweetComp1 = companyTweets.objects.filter(companyDetails = comp1)
	tweetComp2 = companyTweets.objects.filter(companyDetails = comp2)

	newsComp1 = companyTweets.objects.filter(companyDetails = comp1)
	newsComp2 = companyTweets.objects.filter(companyDetails = comp2)

	stock1 = stockData.objects.filter(companyDetails=comp1)
	stock2 = stockData.objects.filter(companyDetails=comp2)

	stock1 = stock1[len(stock1)-1]
	stock2 = stock2[len(stock2)-1]

	ourCompInfo = getOurSelection(pred1.predictions['stocks'], pred2.predictions['stocks'], tweetComp1, tweetComp2, newsComp1, newsComp2, comp1, comp2, stock1, stock2)

	return_data = {"predictions": {"company1": pred1.predictions['stocks'], "company2": pred2.predictions['stocks'], "labels": pred1.predictions['label']}, "tableInfo": ourCompInfo}

	return JsonResponse(return_data)
Example #5
0
def updateNews(requests):
	(user,inputDict,getParams) = (requests.user,requests.data,requests.GET)
	# if user.userType not in [3, 4]:
	# 	return errorResp(401)
	
	if 'update' not in inputDict:
		return errorResp(406)
	
	if not inputDict['update']:
		return Response({})

	if "gold" in inputDict:
		if inputDict['gold']:
			news_info, subjectivity, polarity = getNewsDetails(company="gold",
									date=date.today())
			try:
				comp = company.objects.get(name="goldPrediction")
			except:
				return errorResp(406, readable_error="Company Doesn't exist.")

			for ni, ns, np in zip(news_info, subjectivity, polarity):
				companyNews.objects.create(companyDetails=comp,
								news=ni,
								sentimentPolarity=np,
								sentimentSubjectivity=ns)
	else:
		for symbol in COMPANIES:
			try:
				comp = company.objects.get(name=symbol)
			except:
				return errorResp(406, readable_error="Company Doesn't exist.")
			news_info, subjectivity, polarity = getNewsDetails(company=symbol,
										date=date.today())
			for ni, ns, np in zip(news_info, subjectivity, polarity):
				companyNews.objects.create(companyDetails=comp,
								news=ni,
								sentimentPolarity=np,
								sentimentSubjectivity=ns)

	return Response({'status':True, 'text':'News updated'})
Example #6
0
def updateDatabaseCurrent(requests):
	(user,inputDict,getParams) = (request.user,request.data,request.GET)
	if user.userType not in [3, 4]:
		return errorResp(401)
	
	if 'update' not in inputDict:
		return errorResp(406)
	
	if not inputDict['update']:
		return Response({})

	nse = Nse()
	for symbol in COMPANIES:
		data = nse.get_quote(symbol)

		try:
			comp = company.objects.get(name = symbol)
		except:
			comp = company.objects.create(name = symbol)

		try:
			_=stockData.objects.get(companyDetails=comp,
							dataTime=data['secDate'])
		except:
			_=stockData.objects.create(companyDetails=comp,
							dateTime=data['secDate'],
							openPrice=data['open'],
							previousPrice=data['previousClose'],
							lowPrice=data['dayLow'],
							highPrice=data['dayHigh'],
							closePrice=data['closePrice'],
							# ltp=data['lastPrice'],
							# trades=data['totalTradedValue'],
							# turnover=data[''],
							volume=data['totalTradedVolume'],
							series=data['series'])

	return Response({'status': True, 'text': "Today's stockdata updated successfully." })
Example #7
0
def predict(requests):
	(user,inputDict,getParams) = (requests.user,requests.data,requests.GET)
	# if user.userType not in [3, 4]:
	# 	return errorResp(401)
	
	if 'company' not in getParams: 
		# print("qwertyuiop[")
		return errorResp(406, readable_error="Get Param Not found.")

	cname = getParams['company']
	try:
		comp = company.objects.get(name=cname)
	except:
		# print("Adssadsdasd")
		return errorResp(406, readable_error="Company Doesn't exist.")
	try:
		pred = predictionData.objects.get(companyDetails=comp)
		return_data = {"predictions":pred.predictions}
		# print(return_data)
	except:
		# print("Asdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
		return errorResp(406, readable_error="Prediction Data Doesn't exist.")
	return JsonResponse(return_data)
Example #8
0
def updateTweets(requests):
	(user,inputDict,getParams) = (requests.user,requests.data,requests.GET)
	# if user.userType not in [3, 4]:
	# 	return errorResp(401)
	
	if 'update' not in inputDict:
		return errorResp(406)
	
	if not inputDict['update']:
		return Response({})

	if "gold" in inputDict:
		if inputDict['gold']:
			tweet_info, retweet_count, subjectivity, polarity = getTweetDetails(company="gold",
												date=date.today())
			for ti, tr, ts, tp in zip(tweet_info, retweet_count, subjectivity, polarity):
				GoldTweets.objects.create(tweetInfo=ti,
								retweets=tr,
								sentimentPolarity=tp,
								sentimentSubjectivity=ts)

	else:
		for symbol in COMPANIES:
			try:
				comp = company.objects.get(name=symbol)
			except:
				return errorResp(406,readable_error="Company Doesn't exist.")
			tweet_info, retweet_count, subjectivity, polarity = getTweetDetails(company=symbol,
													date=date.today())
			for ti, tr, ts, tp in zip(tweet_info, retweet_count, subjectivity, polarity):
				companyTweets.objects.create(companyDetails=comp,
									tweetInfo=ti,
									retweets=tr,
									sentimentPolarity=tp,
									sentimentSubjectivity=ts)

	return Response({'status':True, 'text':'Tweets updated'})
Example #9
0
def predictPath(requests):
	(user,inputDict,getParams) = (requests.user,requests.data,requests.GET)
	for k in ['amt', 'period', 'risk']:
		if k not in inputDict: 
			return errorResp(406)

	percentage = {'property':0, 'banking':0, 'stocks':0, 'gold': 0}
	
	# TODO: proper study to set these equations using some optimization techniques
	theta1, theta2 = 0.5, 0.3
	k1, k2, k3, k4 = 0.25, 0.25, 0.25, 0.25

	percentage['property'] = k1*inputDict['risk']**theta1*inputDict['period']
	percentage['gold'] = k3*inputDict['period']/inputDict['risk']
	percentage['stocks'] = k2*inputDict['risk'] * inputDict['period']**theta2
	percentage['banking'] = k4*inputDict['period']

	#normalize percentages
	dr = percentage['property']+percentage['gold']+percentage['stocks']+percentage['banking']

	percentage['property'] = 100*percentage['property']//dr
	percentage['stocks'] = 100*percentage['stocks']//dr
	percentage['gold'] = 100*percentage['gold']//dr
	percentage['banking'] = 100*percentage['banking']//dr

	###
	stockamt = percentage['stocks']*inputDict['amt']/(100*10) # min 10 lots
	propamt = percentage['property']*inputDict['amt']/100

	companyList = company.objects.filter(ltp__lte =stockamt)
	bestbanks = bankInfoFD.objects.filter(interestRate__gte = 8.5)# think of it
	propertyList = rproperty.objects.filter(price__lte = propamt)

	### Insert Sorting methods
	complist = []
	for comp in companyList:
		try:
			data = predictionData.objects.get(companyDetails = comp).predictions['stocks']
			if (data[len(data)-2]) > int(data[len(data) - 3]) or (data[len(data)-1]) > int(data[len(data) - 3]):
				complist.append({'name': comp.name,'id':comp.id})
		except: pass
		
	### serialize
	blist = [{'name': bb.name, 'id': bb.id} for bb in bestbanks]
	plist = [{'name': ppt.pid, 'id':ppt.id} for ppt in propertyList]

	return Response({'percentagedistri':percentage, 'stockcompanies': complist, 'propertyList': plist, 'banks': blist})
Example #10
0
def updateDatabaseHistory(requests):
	(user,inputDict,getParams) = (requests.user,requests.data,requests.GET)
	if 'update' not in inputDict:
		return errorResp(406)

	if not inputDict['update']:
		return Response({})

	if 'companies' not in inputDict: comp = COMPANIES
	else: comp = inputDict['companies']

	for symbol in comp:
		print("[{}] current company:  {}".format(os.getpid(), symbol))
		data = get_history(symbol = symbol,
					start = startDate,
					end = endDate)
		try:
			comp = company.objects.get(name = symbol)
		except:
			comp = company.objects.create(name = symbol)
		date = list(data.index)
		details = data.as_matrix()
		# compD: [Symbol, Series, Prev Close, Open, High, Low, Last, Close, VWAP, \
		#                       Volume, Turnover, Trades, Deliverable Volume, %Deliverble]
		for dt, compD in zip(date, details):
			comp.ltp = compD[5]
			comp.save()
			try:
				_=stockData.objects.get(companyDetails=comp,
								dateTime=dt)
			except:
				_=stockData.objects.create(companyDetails=comp,
								dateTime=dt,
								openPrice=compD[3],
								previousPrice=compD[2],
								lowPrice=compD[5],
								highPrice=compD[4],
								closePrice=compD[7],
								turnover=compD[10],
								volume=compD[9],
								series=compD[1])
	return Response({'status':True, 'text': 'History Updated'})
 def _view(request, *args, **kwargs):
     request.user = None
     headers = request.META
     if loginRequired:  #if required, return 401/412
         if 'HTTP_AUTHORIZATION' in headers:
             value = headers['HTTP_AUTHORIZATION']  #format keyw/m=auth
             elements = value.split('=')
             if len(elements) != 2:
                 return errorResp(401)
             auth_val = elements[1]
             if elements[0] == 'keym':
                 try:
                     obj = authToken.objects.get(mauth=auth_val)
                     if not checkAuthTimestamp(obj.mlastUpdated):
                         obj.misExpired = True
                         obj.save()
                         return errorResp(412, "Auth expired")
                     request.user = obj.user
                     if request.method in [
                             'POST', 'PUT', 'PATCH', 'DELETE'
                     ]:
                         if isDemoUser(request.user):
                             return demoError()
                     return view_func(request, *args, **kwargs)
                 except authToken.DoesNotExist:
                     try:
                         obj = authToken.objects.get(pmauth=auth_val)
                         if not checkAuthTimestamp(obj.mlastUpdated):
                             obj.misExpired = True
                             obj.save()
                             return errorResp(412, "Auth expired")
                         request.user = obj.user
                         if request.method in [
                                 'POST', 'PUT', 'PATCH', 'DELETE'
                         ]:
                             if isDemoUser(request.user):
                                 return demoError()
                         return view_func(request, *args, **kwargs)
                     except authToken.DoesNotExist:
                         return errorResp(401, "Token not found")
             elif elements[0] == 'keyw':
                 try:
                     obj = authToken.objects.get(wauth=auth_val)
                     if not checkAuthTimestamp(obj.wlastUpdated):
                         obj.wisExpired = True
                         obj.save()
                         return errorResp(412, "Auth expired")
                     request.user = obj.user
                     if request.method in [
                             'POST', 'PUT', 'PATCH', 'DELETE'
                     ]:
                         if isDemoUser(request.user):
                             return demoError()
                     return view_func(request, *args, **kwargs)
                 except authToken.DoesNotExist:
                     try:
                         obj = authToken.objects.get(pwauth=auth_val)
                         if not checkAuthTimestamp(obj.wlastUpdated):
                             obj.wisExpired = True
                             obj.save()
                             return errorResp(412, "Auth expired")
                         request.user = obj.user
                         if request.method in [
                                 'POST', 'PUT', 'PATCH', 'DELETE'
                         ]:
                             if isDemoUser(request.user):
                                 return demoError()
                         return view_func(request, *args, **kwargs)
                     except authToken.DoesNotExist:
                         return errorResp(401, "Token not found")
             else:
                 return errorResp(401)
         else:
             return errorResp(401)
     else:  #not required send 412
         if 'HTTP_AUTHORIZATION' in headers:
             value = headers['HTTP_AUTHORIZATION']  #format key=auth
             elements = value.split('=')
             if len(elements) != 2:
                 return errorResp(401)
             auth_val = elements[1]
             if elements[0] == 'keym':
                 try:
                     obj = authToken.objects.get(mauth=auth_val)
                     if not checkAuthTimestamp(obj.mlastUpdated):
                         obj.misExpired = True
                         obj.save()
                         return errorResp(412, "Auth expired")
                     request.user = obj.user
                     if request.method in ['PATCH', 'DELETE']:
                         if isDemoUser(request.user):
                             return demoError()
                     return view_func(request, *args, **kwargs)
                 except authToken.DoesNotExist:
                     try:
                         obj = authToken.objects.get(pmauth=auth_val)
                         if not checkAuthTimestamp(obj.mlastUpdated):
                             obj.misExpired = True
                             obj.save()
                             return errorResp(412, "Auth expired")
                         request.user = obj.user
                         if request.method in ['PATCH', 'DELETE']:
                             if isDemoUser(request.user):
                                 return demoError()
                         return view_func(request, *args, **kwargs)
                     except authToken.DoesNotExist:
                         return errorResp(401, "Token not found")
             elif elements[0] == 'keyw':
                 try:
                     obj = authToken.objects.get(wauth=auth_val)
                     if not checkAuthTimestamp(obj.wlastUpdated):
                         obj.wisExpired = True
                         obj.save()
                         return errorResp(412, "Auth expired")
                     request.user = obj.user
                     if request.method in ['PATCH', 'DELETE']:
                         if isDemoUser(request.user):
                             return demoError()
                     return view_func(request, *args, **kwargs)
                 except authToken.DoesNotExist:
                     try:
                         obj = authToken.objects.get(pwauth=auth_val)
                         if not checkAuthTimestamp(obj.wlastUpdated):
                             obj.wisExpired = True
                             obj.save()
                             return errorResp(412, "Auth expired")
                         request.user = obj.user
                         if request.method in ['PATCH', 'DELETE']:
                             if isDemoUser(request.user):
                                 return demoError()
                         return view_func(request, *args, **kwargs)
                     except authToken.DoesNotExist:
                         return errorResp(401, "Token not found")
         return view_func(request, *args, **kwargs)
Example #12
0
def updateModelPredictions(requests):
	(user,inputDict,getParams) = (requests.user,requests.data,requests.GET)
	# if user.userType not in [3, 4]:
	# 	return errorResp(401)
	
	if 'update' not in inputDict:
		return errorResp(406)
	
	if not inputDict['update']:
		return Response({})

	if 'seqlength' not in inputDict: seqlength = 30
	else: seqlength = inputDict['seqlength'] 

	if 'plength' not in inputDict: plength = 2
	else: plength = inputDict['plength']

	if 'gold' in inputDict: 	
		print(inputDict['gold'])
		if inputDict['gold']: COMPANIES = ["goldPrediction"]
		else: return Response({'status':True})


	for symbol in COMP:
		print("[{}] current company:  {}, seqlength: {}, plength: {}".format(os.getpid(), symbol, seqlength, plength))
		try:
			comp = company.objects.get(name = symbol)
		except:
			return errorResp(406, readable_error="Compny Doen't exist")

		if 'gold' in inputDict: 
			data = goldPrices.objects.all()
			eval_data = data[len(data) - seqlength: len(data)]
			evaluateX = getTrainableFeatures(eval_data, mode="eval", maxVal=data[0], mtype="gold", seqlength=seqlength, plength=plength)
		else:  
			data = stockData.objects.filter(companyDetails=comp)
			eval_data = data[len(data) - seqlength: len(data)]
			evaluateX = getTrainableFeatures(eval_data, mode="eval", maxVal=data[0], seqlength=seqlength, plength=plength)
		
		predictions = predictOutput(modelpath=comp.modelPath, data=evaluateX)
		# for i in 	range(plength):
		# 	print("hi")
		# 	temp = 0
		# 	if i == 0:
		# 		if predictions[0][i] < np.mean(evaluateX):
		# 			temp = predictions[0][i+1] - predictions[0][i] 
		# 			predictions[0][i] = np.mean(evaluateX) + np.random.normal(0, 0.01, 1)

		# 	else:
		# 		if predictions[0][i] < np.mean(evaluateX):
		# 			predictions[0][i] = predictions[0][i-1] + temp

		save_data = np.concatenate([evaluateX[0],predictions.T],0).reshape(seqlength+plength)
		dates = [str(d.dateTime)[0:10] for d in eval_data]
		dates += ['day +' +str(i+1) for i in range(plength)]
		try:
			pred=predictionData.objects.get(companyDetails=comp, dateTime=date.today())
		except:
			pred = predictionData.objects.create(companyDetails=comp, dateTime=date.today())
		if "gold" in inputDict: pdata = {"price": np.dot(save_data, data[0].price), 'label': dates}
		else: pdata = {'stocks':np.dot(save_data, data[0].closePrice), 'label': dates}
		pred.predictions = pdata
		pred.save()
	return Response({'status':True})