advanced crypto advice

This commit is contained in:
JP
2018-02-06 23:02:45 +01:00
parent f15f151bb9
commit 4db5ce7d4c
+93 -9
View File
@@ -4,6 +4,7 @@ from discord.ext import commands
from urllib import request from urllib import request
import json, requests import json, requests
import time import time
import random
class Cryptocoin(object): class Cryptocoin(object):
"""Voor al uw crypto currency advies.""" """Voor al uw crypto currency advies."""
@@ -45,26 +46,25 @@ class Cryptocoin(object):
except: except:
return -1 return -1
#dermines the expected growth of coin
def analyseCoin(self, coinId): def analyseCoin(self, coinId):
N_DATAPOINTS = 12 N_DATAPOINTS = 12
TIME_BETWEEN_DATAPOINTS = 86400 * 7 #one week TIME_BETWEEN_DATAPOINTS = 86400 * 7 #one week
#Get the price history:
history = [] history = []
for j in range(0, N_DATAPOINTS): for j in range(0, N_DATAPOINTS):
history.append(self.getCoinPrice(coinId, "USD", int(time.time()) - (N_DATAPOINTS-j)*TIME_BETWEEN_DATAPOINTS)) history.append(self.getCoinPrice(coinId, "USD", int(time.time()) - (N_DATAPOINTS-j)*TIME_BETWEEN_DATAPOINTS))
#print(history) #Check the growth. Do some linear regression
growFactorLongTerm, dummy = self.basic_linear_regression(range(0, N_DATAPOINTS), history) growFactorLongTerm, dummy = self.basic_linear_regression(range(0, N_DATAPOINTS), history)
growFactorShortTerm, dummy = self.basic_linear_regression(range(0, 3), growFactorShortTerm, dummy = self.basic_linear_regression(range(0, 3),
[ history[N_DATAPOINTS-3], history[N_DATAPOINTS-2], history[N_DATAPOINTS-1] ]) [ history[N_DATAPOINTS-3], history[N_DATAPOINTS-2], history[N_DATAPOINTS-1] ])
#print("long: ", growFactorLongTerm) if (history[N_DATAPOINTS-1] == 0):
#print("short: ", growFactorShortTerm) growPercentageLongTerm = 0
growPercentageShortTerm = 0
#print(growFactor) else:
if (history[N_DATAPOINTS-1] != 0):
growPercentageLongTerm = growFactorLongTerm / history[N_DATAPOINTS-1] growPercentageLongTerm = growFactorLongTerm / history[N_DATAPOINTS-1]
growPercentageShortTerm = growFactorShortTerm / history[N_DATAPOINTS-1] growPercentageShortTerm = growFactorShortTerm / history[N_DATAPOINTS-1]
@@ -76,6 +76,83 @@ class Cryptocoin(object):
# - https://en.wikipedia.org/wiki/Head_and_shoulders_(chart_pattern) # - https://en.wikipedia.org/wiki/Head_and_shoulders_(chart_pattern)
# - neural networks??? # - neural networks???
#will return some random advice about a semi-random crypto coin
def getRandomCoinAdvice(self):
#get all the coins!
coinlistUrl = "https://min-api.cryptocompare.com/data/all/coinlist"
coinlistResponse = requests.get(coinlistUrl)
popularCoins = [
{"Symbol" : "BTC", "Name" : "BitCoin"},
{"Symbol" : "ETH", "Name" : "Ethereum"},
{"Symbol" : "ETC", "Name" : "Ethereum Classic"},
{"Symbol" : "LTC", "Name" : "LiteCoin"},
{"Symbol" : "XMR", "Name" : "Monero"},
{"Symbol" : "XRP", "Name" : "Ripple"},
{"Symbol" : "DOGE", "Name" : "Dogecoin"},
{"Symbol" : "NLG", "Name" : "Gulden"}
]
if (coinlistResponse.ok):
coinlistData = json.loads(coinlistResponse.content.decode('utf-8'))
coinlist = []
for coin in coinlistData["Data"]:
coinlist.append({
"Symbol" : coinlistData["Data"][coin]["Symbol"] ,
"Name" : coinlistData["Data"][coin]["CoinName"]
})
#Analyse until you've found something interesting
for i in range(0, 99):
#pick a random coin
if (random.randint(0, 4) == 4):
#kans van 1 op 5 dat we naar een populaire coin kijken
randIndex = random.randint(0, len(popularCoins)-1)
tempId = popularCoins[randIndex]["Symbol"]
tempName = popularCoins[randIndex]["Name"]
else:
randIndex = random.randint(0, len(coinlist)-1)
tempId = coinlist[randIndex]["Symbol"]
tempName = coinlist[randIndex]["Name"]
#analyse:
growPercentage, tempHistory = self.analyseCoin(tempId)
#For the first few iterations we're picky
if (growPercentage > 0.1):
return (tempName + " (" + tempId + ") gaat to the moon!")
if (growPercentage > 0.06):
return ("Ik zou zeker een paar " + tempName + " (" + tempId + ") kopen.")
if (i > 2):
#Later, negative advices are also acceptable...
if (growPercentage < -0.2):
return ("Ik zou zeker " + tempName + " (" + tempId + ") afraden!")
if (growPercentage > 0.015):
return ("Ken je " + tempName + " (" + tempId + ") al? Best leuk")
if(i > 4):
#After a while, we're happy to give less useful advice
if (growPercentage > 0.008):
return (tempName + " (" + tempId + ") kan interessant worden...")
if (growPercentage < -0.06):
return ("Als je toevallig " + tempName + " (" + tempId + ") hebt: verkopen.")
if(i > 5):
#Anything goes. We're desperate.
if (tempHistory[ len(tempHistory)-1 ] == 0):
return (tempId + " is echt niks waard...")
if (growPercentage > 0.005):
return (tempName + " (" + tempId + ") is een crypto currency. Wist je dat?")
time.sleep(0.1) #don't overload the API
return "Sorry. De crypto adviezen zijn uitverkocht vandaag."
else:
raise Exception("API error")
#user functions below #user functions below
@commands.command(pass_context=True) @commands.command(pass_context=True)
@@ -108,10 +185,17 @@ class Cryptocoin(object):
@asyncio.coroutine @asyncio.coroutine
def coinadvice(self, ctx, coinId: str=""): def coinadvice(self, ctx, coinId: str=""):
"""Voor al uw adviezen in monopolygeld """Voor al uw adviezen in monopolygeld
Vraag Stroop's mening over een specifieke coin:
!coinadvice NLG
Of vraag gewoon advies in het algemeen:
!coinadvice
(Over deze laatste optie moet soms even nagedacht worden)
""" """
#Geen specieke coin? Doe random.
if(coinId == ""): if(coinId == ""):
return #TODO yield from ctx.channel.send( self.getRandomCoinAdvice() )
return
coinId = coinId.upper() coinId = coinId.upper()