trade.app.backend/generalApp/exchangeVO.py

123 lines
5.3 KiB
Python
Executable File

from django.http import HttpResponse
from datetime import datetime
from .models import *
from .utilities import *
import threading
import requests
import json
import os
class ExchangeVO():
triggerList = None
def __init__(self):
pass
@classmethod
def checkTrigger(self):
triggerAll = Triggers.objects.filter(status = 1).values("id", "user_id", "status", "course_values_for_trigger", "date_of_trigger")
self.triggerList = []
for x in triggerAll:
self.triggerList.append(x)
actualGraph = self.refreshGraph(1800)
for candle in actualGraph['candles']:
candleDate = datetime.strptime(candle['Date'], "%Y-%m-%d %H:%M:%S")
inArea = 0
for trigger in self.triggerList:
triggerDate = datetime.strptime(trigger['date_of_trigger'], "%Y-%d-%m %H:%M")
if int(trigger['course_values_for_trigger']) > int(candle['Min']) and triggerDate < candleDate:
inArea += 1
if int(trigger['course_values_for_trigger']) < int(candle['Max']) and triggerDate < candleDate:
inArea += 1
if inArea == 2:
disableTrigger = Triggers.objects.get(id = int(trigger['id']))
disableTrigger.status = 0
message = f"Exchange got Your Trigger Value! \nTrigger Value: {trigger['course_values_for_trigger']} \nCandle Date: {candle['Date']}"
newNotification = Notifications(user_id = int(trigger['user_id']), message = message)
newNotification.save()
disableTrigger.save()
inArea = 0
print(self.triggerList)
@classmethod
def createActualPrognosis(self, request, time, price, privilige):
actualGraph = self.refreshGraph(time)
svg = []
svgAll = 0
volume = []
actualCourse = 0
for candle in actualGraph['candles']:
svg.append((float(candle['Close'] + candle['Open']) / 2))
volume.append(float(candle['Volume']))
actualCourse = float(candle['Close'])
datePayment = candle['Date']
if svgAll == 0:
svgAll = svgAll + svg[-1]
else:
svgAll = (svgAll + svg[-1]) / 2
onePercentOfActualCourse = actualCourse / 100
percentsFromPriceToCourse = price / onePercentOfActualCourse
onePercentOfSvgCourse = svgAll / 100
priceAfterCourse = percentsFromPriceToCourse * onePercentOfSvgCourse
difference = priceAfterCourse - price
percentDifference = difference / onePercentOfSvgCourse
data = {
"price" : price,
"price_forecast" : priceAfterCourse,
"percent_of_difference" : percentDifference,
"course_on_payment" : actualCourse,
"svg_of_all" : svgAll,
"date_of_transaction" : datePayment
}
return HttpResponse(json.dumps(data))
@classmethod
def refreshGraph(self, time):
graph = []
try:
graph = self.createGraph(time)
except:
currentDirectory = os.path.dirname(__file__)
jsonPath = os.path.join(currentDirectory, '../testGraph.txt')
with open(jsonPath) as graphJson:
graph = json.load(graphJson)
return self.createGraph(time)
@classmethod
def createGraph(self, time):
miliseconds = 1000
firstResult = int(datetime.now().timestamp() * miliseconds)
lastResult = firstResult - 100000 * (time * 2)
url = f"https://api.bitbay.net/rest/trading/candle/history/BTC-PLN/{time}?from={lastResult}&to={firstResult}"
querystring = {"from": f"{lastResult}","to": f"{firstResult}"}
exchangeGraph = requests.request("GET", url, params=querystring)
response = json.loads(exchangeGraph.text)
graph = { 'candles': [], 'candlesCount' : 0, 'graphMin': float(response['items'][0][1]['h']), 'graphMax': 0 }
for x in range(len(response['items'])):
graph['candles'].append({'Open': 0, 'Close': 0, 'Max': 0, 'Min': 0, 'Volume': 0, 'Date': 0 })
graph['candles'][x]['Open'] = float(response['items'][x][1]['o'])
graph['candles'][x]['Close'] = float(response['items'][x][1]['c'])
graph['candles'][x]['Max'] = float(response['items'][x][1]['h'])
graph['candles'][x]['Min'] = float(response['items'][x][1]['l'])
graph['candles'][x]['Volume'] = float(response['items'][x][1]['v'])
graph['candles'][x]['Date'] = str(datetime.fromtimestamp(int(response['items'][x][0])/1000.0))
if graph['candles'][x]['Min'] < graph['graphMin']:
graph['graphMin'] = graph['candles'][x]['Min']
if graph['candles'][x]['Max'] > graph['graphMax']:
graph['graphMax'] = graph['candles'][x]['Max']
graph['candlesCount'] = len(response['items']) - 1
return graph
@classmethod
def getGraphView(self, request, time):
graph = []
try:
graph = self.createGraph(time)
except:
currentDirectory = os.path.dirname(__file__)
jsonPath = os.path.join(currentDirectory, '../testGraph.txt')
with open(jsonPath) as graphJson:
graph = json.load(graphJson)
return HttpResponse(json.dumps(graph))