部分代码更新
This commit is contained in:
191
coinbus/nochain_eth_lyq.py
Normal file
191
coinbus/nochain_eth_lyq.py
Normal file
@@ -0,0 +1,191 @@
|
||||
# coding=utf-8
|
||||
import ujson
|
||||
from binance.websocket.spot.websocket_client import SpotWebsocketClient as WebsocketClient
|
||||
import time
|
||||
import requests
|
||||
#from loguru import logger
|
||||
import datetime
|
||||
import pymysql
|
||||
import math
|
||||
|
||||
|
||||
class NochainDbIf:
|
||||
def __init__(self, host="172.17.0.1", port=4423, user="root", password="2GS@bPYcgiMyL14A", dbname="ethdb"):
|
||||
self.conn = pymysql.connect(host=host, port=port, user=user, password=password, database=dbname,
|
||||
cursorclass=pymysql.cursors.DictCursor)
|
||||
print("init nochain db suceess!")
|
||||
|
||||
def save(self, day, price, ma350x2, ma111, ma350x1, ma350x1r6, ma350x3, ma350x5):
|
||||
with self.conn.cursor() as cursor:
|
||||
sql_insert = "REPLACE INTO `nochainv3a` (`unixdt`, `price`, `ma350x2`, `ma111`, ma350x1, ma350x1r6, ma350x3, ma350x5) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s)"
|
||||
# print(sql_insert)
|
||||
cursor.execute(sql_insert, (day, price, ma350x2, ma111, ma350x1, ma350x1r6, ma350x3, ma350x5))
|
||||
self.conn.commit()
|
||||
|
||||
def prepare_maxxx(prices, day, madays):
|
||||
total = 0
|
||||
cnt = 0
|
||||
for i in range(madays):
|
||||
if day in prices:
|
||||
total += prices[day]
|
||||
cnt += 1
|
||||
# print(day, total, cnt)
|
||||
day = str(int(day) - 3600 * 24)
|
||||
|
||||
if cnt > 0:
|
||||
return total / cnt
|
||||
return 0
|
||||
|
||||
def prepare_ma350(prices, day):
|
||||
return prepare_maxxx(prices, day, 350)
|
||||
|
||||
def prepare_ma111(prices, day):
|
||||
return prepare_maxxx(prices, day, 111)
|
||||
|
||||
def prepare_gold_ratio(prices):
|
||||
ma350x1 = {}
|
||||
ma350x1r6 = {}
|
||||
ma350x2 = {}
|
||||
ma350x3 = {}
|
||||
ma350x5 = {}
|
||||
for day in prices:
|
||||
ma350x1[day] = prepare_maxxx(prices, day, 350)
|
||||
ma350x1r6[day] = ma350x1[day] * 1.6
|
||||
ma350x2[day] = ma350x1[day] * 2
|
||||
ma350x3[day] = ma350x1[day] * 3
|
||||
ma350x5[day] = ma350x1[day] * 5
|
||||
|
||||
return ma350x1, ma350x1r6, ma350x2, ma350x3, ma350x5
|
||||
|
||||
def calc_pi_cycle_top(dbif, prices):
|
||||
ma350x2 = {}
|
||||
ma111 = {}
|
||||
for day in prices:
|
||||
ma350x2[day] = prepare_ma350(prices, day) * 2
|
||||
ma111[day] = prepare_ma111(prices, day)
|
||||
return ma350x2, ma111
|
||||
|
||||
def get_current_utc():
|
||||
curtime = time.gmtime(time.time())
|
||||
daystr = time.strftime("%d %b %Y", curtime)
|
||||
dayutc = int(time.mktime(time.strptime(daystr, "%d %b %Y")))
|
||||
return dayutc
|
||||
|
||||
def get_current_price():
|
||||
url = "https://data.messari.io/api/v1/assets/eth/metrics/market-data&interval=1d"
|
||||
header_set = {}
|
||||
header_set["x-messari-api-key"] = "aH2pyj5i4QGo1k1gLxXEbIJ5RJr+FYKLEWk6cRT6RuSc6lRY"
|
||||
response_price = requests.get(url, headers=header_set)
|
||||
if response_price.status_code == 200:
|
||||
priceweb = ujson.loads(response_price.content)
|
||||
if "data" in priceweb:
|
||||
priceset = priceweb["data"]
|
||||
if "market_data" in priceset:
|
||||
pricedata = priceset["market_data"]
|
||||
if "price_usd" in pricedata:
|
||||
price = pricedata["price_usd"]
|
||||
return price
|
||||
return None
|
||||
|
||||
|
||||
def get_history_price(coin_id):
|
||||
prices = {}
|
||||
|
||||
dayutc = get_current_utc()
|
||||
price = get_current_price()
|
||||
if price is not None:
|
||||
prices[str(dayutc)] = price
|
||||
print("start...", dayutc, price)
|
||||
|
||||
dayt = time.gmtime()
|
||||
daystr = time.strftime("%Y", dayt)
|
||||
year = int(daystr)
|
||||
end_year = year
|
||||
while True:
|
||||
# if end_year < 2022:
|
||||
# break
|
||||
url = ""
|
||||
if end_year != year:
|
||||
start_year = end_year
|
||||
url = "https://data.messari.io/api/v1/assets/" + coin_id + "/metrics/price/time-series?start="
|
||||
else:
|
||||
url = "https://data.messari.io/api/v1/assets/" + coin_id + "/metrics/price/time-series?after=" + str(
|
||||
year) + "-01-01&order=descending&interval=1d"
|
||||
# now_time = time.gmtime()
|
||||
# daystr = time.strftime("%Y-%m-%d", now_time)
|
||||
# url = url + daystr + "&order=desc&format=json"
|
||||
if end_year != year:
|
||||
url = url + str(start_year) + "-01-01&end=" + str(end_year) + "-12-31&interval=1d&order=descending&interval=1d"
|
||||
header_set = {}
|
||||
header_set["x-messari-api-key"] = "aH2pyj5i4QGo1k1gLxXEbIJ5RJr+FYKLEWk6cRT6RuSc6lRY"
|
||||
# header_set["Content-Type"] = "application/json"
|
||||
print(header_set, url)
|
||||
response_supply = requests.get(url, headers=header_set)
|
||||
# print(response_supply)
|
||||
if response_supply.status_code == 200:
|
||||
#print(response_supply.content)
|
||||
supplyweb = ujson.loads(response_supply.content)
|
||||
if "data" in supplyweb:
|
||||
supplyset = supplyweb["data"]
|
||||
if "values" in supplyset:
|
||||
valueset = supplyset["values"]
|
||||
if valueset is not None:
|
||||
for supply in valueset:
|
||||
dayutc = int(supply[0] / 1000)
|
||||
s = supply[1]
|
||||
prices[str(dayutc)] = float(s)
|
||||
# print(s, dayutc, supplys[str(dayutc)])
|
||||
# break
|
||||
else:
|
||||
break
|
||||
else:
|
||||
break
|
||||
end_year -= 1
|
||||
time.sleep(2)
|
||||
return prices
|
||||
|
||||
def get_eth_history_price():
|
||||
return get_history_price("ethereum")
|
||||
|
||||
def nochain():
|
||||
global dbif
|
||||
dbif = NochainDbIf()
|
||||
print("prepare...")
|
||||
prices = get_eth_history_price()
|
||||
#print(prices)
|
||||
|
||||
ma350x2, ma111 = calc_pi_cycle_top(dbif, prices)
|
||||
print("calc_pi_cycle_top ok.")
|
||||
ma350x1, ma350x1r6, ma350x2, ma350x3, ma350x5 = prepare_gold_ratio(prices);
|
||||
print("prepare_gold_ratio ok.")
|
||||
for day in prices:
|
||||
#print(day)
|
||||
ma350x21 = 0
|
||||
if day in ma350x2:
|
||||
ma350x21 = ma350x2[day]
|
||||
ma1111 = 0
|
||||
if day in ma111:
|
||||
ma1111 = ma111[day]
|
||||
|
||||
ma350x11 = 0
|
||||
if day in ma350x1:
|
||||
ma350x11 = ma350x1[day]
|
||||
|
||||
ma350x1r61 = 0
|
||||
if day in ma350x1r6:
|
||||
ma350x1r61 = ma350x1r6[day]
|
||||
|
||||
ma350x31 = 0
|
||||
if day in ma350x3:
|
||||
ma350x31 = ma350x3[day]
|
||||
|
||||
ma350x51 = 0
|
||||
if day in ma350x5:
|
||||
ma350x51 = ma350x5[day]
|
||||
|
||||
# print(day, prices[day], ma350x21, ma1111, supply, issue, s2f_ratio1, s2f_deflection1)
|
||||
dbif.save(int(day), prices[day], ma350x21, ma1111, ma350x11,
|
||||
ma350x1r61, ma350x31, ma350x51)
|
||||
#print("save ok.")
|
||||
|
||||
nochain()
|
||||
Reference in New Issue
Block a user