123 lines
5.3 KiB
Python
Executable File
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))
|