coinbus代码更新

This commit is contained in:
fengche 2025-07-25 17:29:12 +08:00
commit 2ba7422c9c
9 changed files with 4948 additions and 0 deletions

8
coinbus/README.md Normal file
View File

@ -0,0 +1,8 @@
btc24h_stats.py --btc实时更新数据代码
btc24h_redis_if.py --btc实时更新数据代码redis数据库
btc24h_db_if.py --btc实时更新数据代码mysql数据库
btc_stats_qt.py --btc每天更新数据代码
redis_if_qt.py --btc每天更新数据代码redis数据库
db_if_qt.py --btc每天更新数据代码mysql数据库
btc_prices.py --获取历史币价代码
btc_prices_fetcher.py --获取实时币价代码

600
coinbus/btc24h_db_if.py Normal file
View File

@ -0,0 +1,600 @@
# coding=utf-8
import datetime
import json
import requests
import pymysql
from loguru import logger
import time
class DbIf:
def __init__(self, host="172.17.0.1", port=4419, user="root", password="IeQcJNnagkaFP1Or", dbname="btcdb"):
self.conn = pymysql.connect(host=host, port=port, user=user, password=password, database=dbname,
cursorclass=pymysql.cursors.DictCursor)
def update_to_dailyindsv2(self, dt_utc, height_begin, height_end, lth_volume, frm, cvdd, realized_price,
transferred_price, balanced_price, nvt_ratio, velocity):
with self.conn.cursor() as cursor:
print(dt_utc, height_begin, height_end, lth_volume, frm, cvdd, realized_price, transferred_price,
balanced_price, nvt_ratio, velocity)
# 调用消息订阅的api向topic中储存rt_dailyindsv2e2的实时数据
# url = "http://10.168.2.125:7101/marketall/push/realtime/btc/dailyindsv2e1"
# headers = {"accept": "application/json"}
# data = {"unixdt":dt_utc,"height_begin":height_begin,"height_end":height_end,"lth_volume":lth_volume,"frm":frm,"cvdd":cvdd,"realized_price":realized_price,"transferred_price":transferred_price,"balanced_price":balanced_price,"nvt_ratio":nvt_ratio,"velocity":velocity}
# response = requests.post(url=url, data=json.dumps(data), headers=headers)
sql_insert = "REPLACE INTO rt_dailyindsv3e2 (unixdt, height_begin, height_end, lth_volume, frm, cvdd, realized_price, transferred_price, balanced_price, nvt_ratio, velocity"
sql_insert = sql_insert + ") VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
cursor.execute(sql_insert, (
dt_utc, height_begin, height_end, lth_volume, frm, cvdd, realized_price, transferred_price,
balanced_price, nvt_ratio, velocity))
'''
def update_to_realtimeindsv2(self, dt_utc, mempool_volume, mempool_fees):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO realtimeindsv2b (unixdt, mempool_volume, mempool_fees)"
cursor.execute(sql_insert, (dt_utc, mempool_volume, mempool_fees))
'''
def update_to_dailyinds(self, dt_utc, height_begin, height_end, profitrate, fees, txs, new_address, total_address,
new_address_volume, active_address,
send_address, receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr,
asol, eaasol, dormancy, adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60,
day90, day180, day365, day730, csupply, mintusd, sumcsupply, sumcdd, sumeacdd,
liveliness, ealiveliness, rprofit, rloss, rplrate, price, marketcap, rcap, earcap, mvrv,
nupl):
with self.conn.cursor() as cursor:
# 调用消息订阅的api向topic中储存rt_dailyindsv2e1的实时数据
# 数据结构{dt_utc:'dt_utc'}
try:
url="https://coinbus.cc/api/v1/marketall/push/realtime/btc/dailyv2e1"
headers = {"accept": "application/json"}
data = {"unixdt":dt_utc,"height_begin":height_begin,"height_end":height_end,"profitrate":profitrate,
"fees":fees,"txs":txs,"new_address":new_address,"total_address":total_address,
"new_address_volume":new_address_volume,"active_address":active_address,"send_address":send_address,
"receive_address":receive_address,"volume":volume,"eavolume":eavolume,"sopr":sopr,"asopr":asopr,"easopr":easopr,
"lthsopr":lthsopr,"sthsopr":sthsopr,"asol":asol,"eaasol":eaasol,"dormancy":dormancy,
"adormancy":adormancy,"eadormancy":eadormancy,"cdd":cdd,"sacdd":sacdd,"eacdd":eacdd,"day1":day1,"day7":day7,
"day30": day30,"day60":day60,"day90":day90,"day180":day180,"day365":day365,"day730":day730,
"csupply":csupply,"mintusd":mintusd,"sumcsupply":sumcsupply,"sumcdd":sumcdd,"sumeacdd":sumeacdd,"liveliness":liveliness,
"ealiveliness":ealiveliness,"rprofit":rprofit,"rloss":rloss,"rplrate":rplrate,
"price":price,"marketcap":marketcap,"rcap":rcap,"earcap":earcap,"mvrv":mvrv,"nupl":nupl}
response = requests.post(url=url, data=json.dumps(data), headers=headers)
except:
print("api调用失败")
sql_insert = "REPLACE INTO rt_dailyindsv3e1 (unixdt, height_begin, height_end, profitrate, fees, txs, new_address, total_address, new_address_volume, active_address, send_address, receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr,"
sql_insert = sql_insert + " asol, eaasol, dormancy, adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60, day90, day180, day365, day730, csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, "
sql_insert = sql_insert + " ealiveliness, rprofit, rloss, rplrate, price, marketcap, rcap, earcap, mvrv, nupl"
sql_insert = sql_insert + ") VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (
dt_utc, height_begin, height_end, profitrate, fees, txs, new_address, total_address, new_address_volume,
active_address, send_address,
receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr, asol, eaasol, dormancy,
adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60, day90, day180, day365, day730,
csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, ealiveliness, rprofit, rloss, rplrate,
price, marketcap, rcap, earcap, mvrv,
nupl))
self.conn.commit()
'''
def update_to_dailyinds(self, dt_utc, height_begin, height_end, profitrate, fees, txs, new_address, new_address_volume, active_address,
send_address, receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr,
asol, eaasol, dormancy, adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60,
day90, day180, day365, day730, csupply, mintusd, sumcsupply, sumcdd, sumeacdd,
liveliness, ealiveliness, rprofit, rloss, rplrate, price, marketcap, rcap, earcap, mvrv,
lthmarketcap, lthrcap, sthmarketcap, sthrcap, lthmvrv, sthmvrv, nupl):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO dailyindsv1 (unixdt, height_begin, height_end, profitrate, fees, txs, new_address, new_address_volume, active_address, send_address, receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr,"
sql_insert = sql_insert + " asol, eaasol, dormancy, adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60, day90, day180, day365, day730, csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, "
sql_insert = sql_insert + " ealiveliness, rprofit, rloss, rplrate, price, marketcap, rcap, earcap, mvrv, lthmarketcap, lthrcap, sthmarketcap, sthrcap, lthmvrv, sthmvrv, nupl"
sql_insert = sql_insert + ") VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (
dt_utc, height_begin, height_end, profitrate, fees, txs, new_address, new_address_volume, active_address, send_address,
receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr, asol, eaasol, dormancy,
adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60, day90, day180, day365, day730,
csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, ealiveliness, rprofit, rloss, rplrate,
price, marketcap, rcap, earcap, mvrv, lthmarketcap, lthrcap, sthmarketcap, sthrcap, lthmvrv, sthmvrv,
nupl))
self.conn.commit()
'''
'''
# daily daily on-chain volume
def query_from_dailyvolume(self, start_id=0, end_id=0, start_time="", end_time="", limit=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `dailyvolume`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
print(sql_query)
cursor.execute(sql_query)
return cursor.fetchall()
'''
# newaddrs
'''
def update_to_newaddr(self, dayutc, last_profit_rate, last_fees, last_txs, last_eatxs, last_newaddr_cnt,
last_newaddr_vol, last_active_addr_cnt, last_tx_addr_cnt, last_rx_addr_cnt, last_vol_change,
last_vol):
with self.conn.cursor() as cursor:
sql_query = "SELECT COUNT(id) FROM `newaddrs` WHERE unixdt=FROM_UNIXTIME(%s)"
cursor.execute(sql_query, {dayutc, })
result = cursor.fetchone()
# print(dt_utc)
# print(result)
if result is not None:
if "COUNT(id)" in result:
if result["COUNT(id)"] > 0:
print("update")
sql_update = 'UPDATE newaddrs SET `total`=%s, `amount`=%s, `active`=%s, `tx`=%s, `rx`=%s, `volume_change`=%s, `volume=%s`,`txs`=%s, `eatxs`=%s, `fees`=%s, `last_profit_rate`=%s WHERE unixdt=FROM_UNIXTIME(%s)'
cursor.execute(sql_update, (
last_newaddr_cnt, last_newaddr_vol, last_active_addr_cnt, last_tx_addr_cnt,
last_rx_addr_cnt,
last_vol_change, last_vol, last_txs, last_eatxs, last_fees, last_profit_rate, dayutc))
else:
print("insert")
sql_insert = "INSERT INTO `newaddrs` (`unixdt`, `total`, `amount`, `active`, `tx`, `rx`, `volume_change`, `volume`, `txs`, `eatxs`, `fees`, `last_profit_rate`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (
dayutc, last_newaddr_cnt, last_newaddr_vol, last_active_addr_cnt, last_tx_addr_cnt,
last_rx_addr_cnt, last_vol_change, last_vol, last_txs, last_eatxs, last_fees,
last_profit_rate))
self.conn.commit()
'''
'''
def update_to_sellprofit(self, dayutc, current_price, block_buy_volume, block_sell_volume, block_sell_profit, last_height):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailybuysell` (`unixdt`, `price`, `buyvolume`, `sellvolume`, `sellprofit`, `height`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s)"
#print(sql_insert)
#print(datetime, txid, vout, voutalias, amount, height)
cursor.execute(sql_insert, (dayutc, current_price, block_buy_volume, block_sell_volume, block_sell_profit, last_height))
self.conn.commit()
'''
'''
def update_to_bigsellprofit(self, dayutc, current_price, tx_sell_average, tx_sell_amount, tx_sell_profit,
days_earliest, days_latest, days_largest, days_current, tx_buy_address, txid,
block_height):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `bigsell` (`unixdt`, `buyprice`, `sellprice`, `amount`, `profit`, `days_earliest`, `days_latest`, `days_largest`, `days_current`, `address`, `txid`, `height`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
# print(datetime, txid, vout, voutalias, amount, height)
cursor.execute(sql_insert, (
dayutc, current_price, tx_sell_average, tx_sell_amount, tx_sell_profit, days_earliest, days_latest,
days_largest, days_current, tx_buy_address, txid, block_height))
self.conn.commit()
'''
'''
def update_to_dailycdd(self, dt_utc, cdd):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `dailycdd` (`unixdt`, `cdd`) VALUES (FROM_UNIXTIME(%s), %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, cdd))
self.conn.commit()
'''
'''
def update_to_dailycdddays(self, dt_utc, dormancy, adormancy, eadormancy, cdd, acdd, eacdd, day1, day7, day30,
day60, day90, day180, day365, day730):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `dailycdddays` (`unixdt`, dormancy, adormancy, eadormancy, cdd, acdd, eacdd, `day1`, day7, day30, day60, day90, day180, day365, day730) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (
dt_utc, dormancy, adormancy, eadormancy, cdd, acdd, eacdd, day1, day7, day30, day60, day90, day180,
day365,
day730))
self.conn.commit()
'''
'''
def update_to_dailysopr(self, dt_utc, last_sopr, last_asopr, last_easopr, last_lth_sopr, last_sth_sopr):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `dailysopr` (`unixdt`, `sopr`, asopr, easopr, lth_sopr, sth_sopr) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, last_sopr, last_asopr, last_easopr, last_lth_sopr, last_sth_sopr))
self.conn.commit()
'''
'''
def update_to_inds(self, dt_utc, csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, ealiveliness, rprofit,
rloss, rplrate, price, marketcap, rcap, earcap, mvrv):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `inds` (`unixdt`, csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, ealiveliness, rprofit, rloss, rplrate, price, marketcap, rcap, earcap, mvrv) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (
dt_utc, csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, ealiveliness, rprofit, rloss,
rplrate,
price, marketcap, rcap, earcap, mvrv))
self.conn.commit()
'''
# daily volume
'''
def update_to_dailyvolume(self, dt_utc, volume):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `dailyvolume` (`unixdt`, `volume`) VALUES (FROM_UNIXTIME(%s), %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, volume))
self.conn.commit()
'''
'''with self.conn.cursor() as cursor:
sql_query = "SELECT COUNT(id) FROM `dailyvolume` WHERE unixdt=FROM_UNIXTIME(%s)"
cursor.execute(sql_query, {dt_utc,})
result = cursor.fetchone()
#print(dt_utc)
#print(result)
if result is not None:
if "COUNT(id)" in result:
if result["COUNT(id)"] > 0:
print("update")
sql_update = 'UPDATE dailyvolume SET `volume`=%s WHERE unixdt=FROM_UNIXTIME(%s)'
cursor.execute(sql_update, (volume, dt_utc))
else:
print("insert")
sql_insert = "INSERT INTO `dailyvolume` (`unixdt`, `volume`) VALUES (FROM_UNIXTIME(%s), %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, volume))
self.conn.commit()'''
'''
def update_to_dailyfees(self, dt_utc, fees):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `dailyfees` (`unixdt`, `fees`) VALUES (FROM_UNIXTIME(%s), %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, fees))
self.conn.commit()
'''
'''
def import_to_dailyvolume2(self, dt_utc, volume):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailyvolume` (`unixdt`, `volume`) VALUES (FROM_UNIXTIME(%s), %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, volume))
self.conn.commit()
def delete_dailyvolume_data(self, config):
with self.conn.cursor() as cursor:
sql_query = "DELETE FROM `dailyvolume`"
cursor.execute(sql_query)
self.conn.commit()
# daily market cap
def query_from_marketcap(self, start_id=0, end_id=0, start_time="", end_time="", limit=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `dailyprice`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
print(sql_query)
cursor.execute(sql_query)
return cursor.fetchall()
#daily price
def import_to_dailyprice(self, dt_utc, price, volume, marketcap, csupply):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailyprice` (`unixdt`, `price`, `volume`, `marketcap`, `csupply`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s)"
#print(sql_insert)
cursor.execute(sql_insert, (dt_utc, price, volume, marketcap, csupply))
self.conn.commit()
def update_to_dailyprice(self, dt_utc, price, volume, change):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailyprice` (`unixdt`, `price`, `volume`, `change`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s)"
#print(sql_insert)
cursor.execute(sql_insert, (dt_utc, price, volume, change))
self.conn.commit()
def update_to_dailyprice2(self, dt_utc, price, volume, change, marketcap, csupply):
with self.conn.cursor() as cursor:
sql_query = "SELECT COUNT(id) FROM `dailyprice` WHERE unixdt=FROM_UNIXTIME(%s)"
cursor.execute(sql_query, {dt_utc,})
result = cursor.fetchone()
#print(dt_utc)
#print(result)
if result is not None:
if "COUNT(id)" in result:
if result["COUNT(id)"] > 0:
print("update")
sql_update = 'UPDATE dailyprice SET `price`=%s, `marketcap`=%s, `csupply`=%s, `volume`=%s, `change`=%s WHERE unixdt=FROM_UNIXTIME(%s)'
cursor.execute(sql_update, (price, marketcap, csupply, volume, change, dt_utc))
else:
print("insert")
sql_insert = "INSERT INTO `dailyprice` (`unixdt`, `price`, `volume`, `change`, `marketcap`, `csupply`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, price, volume, change, marketcap, csupply))
self.conn.commit()
def update_dailypricechange(self):
with self.conn.cursor() as cursor:
sql_query = "SELECT unixdt,price FROM `dailyprice` order by unixdt"
cursor.execute(sql_query)
results = cursor.fetchall()
prevprice = -1
for result in results:
if prevprice < 0:
prevprice = result["price"]
else:
#print(result["unixdt"], result["price"], result["marketcap"])
try:
change = (result["price"]/prevprice - 1)*100
except:
change = 0
#print(csupply)
datestr = result["unixdt"]
logger.debug(datestr.__format__('%Y-%m-%d') + " " + str(change))
sql_update = 'UPDATE dailyprice SET `change`=%s WHERE unixdt=%s'
cursor.execute(sql_update, (str(change), result["unixdt"]))
prevprice = result["price"]
self.conn.commit()
def delete_dailyprice_data(self, config):
with self.conn.cursor() as cursor:
sql_query = "DELETE FROM `dailyprice`"
cursor.execute(sql_query)
self.conn.commit()
def delete_failed_blockvolume(self, height):
with self.conn.cursor() as cursor:
sql_insert = "DELETE FROM `bigamountvout` WHERE height=%s"
cursor.execute(sql_insert, (height,))
sql_insert = "DELETE FROM `bigamounttx` WHERE height=%s"
cursor.execute(sql_insert, (height,))
sql_insert = "DELETE FROM `blockamount` WHERE height=%s"
cursor.execute(sql_insert, (height,))
self.conn.commit()
#block check --- big amount for vout
def query_from_bigamountvout(self, start_id=0, end_id=0, start_time="", end_time="", address="", limit=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `bigamountvout`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
print(sql_query)
cursor.execute(sql_query)
return cursor.fetchall()
'''
def update_to_bigamountvout(self, datetime, txid, vout, voutn, vouttype, amount, height, days, buyin, sellout,
profit):
with self.conn.cursor() as cursor:
# url = "http://10.168.2.125:7101/marketall/push/realtime/btc/dailyindsv2e1"
# headers = {"accept": "application/json"}
# data = {"unixdt":datetime,"vout":vout,"voutn":voutn,"vouttype":vouttype,
# "amount":amount,"height":height,"txid":txid,"days":days,"buyin":buyin,
# "sellout":sellout,"profit":profit}
# response = requests.post(url=url, data=json.dumps(data), headers=headers)
sql_insert = "INSERT INTO `rt_bigamountvoutv3e` (`unixdt`, `vout`, `voutn`, `vouttype`, `amount`, `height`, `txid`, days, buyprice, sellprice, profit) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
# print(datetime, txid, vout, voutalias, amount, height)
cursor.execute(sql_insert,
(datetime, vout, voutn, vouttype, amount, height, txid, days, buyin, sellout, profit))
self.conn.commit()
'''
# block check --- big amount tx
def query_from_bigamounttx(self, start_id=0, end_id=0, start_time="", end_time="", address="", limit=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `bigamounttx`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
print(sql_query)
cursor.execute(sql_query)
return cursor.fetchall()
def update_to_bigamounttx(self, datetime, txid, amount, height):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `bigamounttx` (`unixdt`, `amount`, `height`, `txid`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s)"
#print(sql_insert)
#print(datetime, txid, amount, height)
cursor.execute(sql_insert, (datetime, amount, height, txid))
self.conn.commit()
# block check --- per block amount
def query_from_blockamount(self, start_id=0, end_id=0, start_time="", end_time="", limit=0, amount=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `blockamount`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
if amount > 0:
sql_query = sql_query + " AND amount > " + str(amount)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if amount > 0:
sql_query = sql_query + " AND amount > " + str(amount)
else:
if amount > 0:
sql_query = sql_query + "WHERE amount > " + str(amount)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
if amount > 0:
sql_query = sql_query + " AND amount > " + str(amount)
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
if amount > 0:
sql_query = sql_query + " AND amount > " + str(amount)
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
cursor.execute(sql_query)
return cursor.fetchall()
def update_to_blockamount(self, datetime, blockid, amount, height):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `blockamount` (`unixdt`, `amount`, `height`, `blockid`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s)"
#print(sql_insert)
#print(datetime, blockid, amount, height)
cursor.execute(sql_insert, (datetime, amount, height, blockid))
self.conn.commit()
def delete_node_data(self, config):
with self.conn.cursor() as cursor:
sql_query = "DELETE FROM `blockamount`"
cursor.execute(sql_query)
sql_query = "DELETE FROM `bigamountvout`"
cursor.execute(sql_query)
sql_query = "DELETE FROM `bigamounttx`"
cursor.execute(sql_query)
self.conn.commit()
def update_realize_cap(self, dayutc, last_rv):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailyrcap` (`unixdt`, `rcap`) VALUES (FROM_UNIXTIME(%s), %s)"
#print(sql_insert)
#print(datetime, blockid, amount, height)
cursor.execute(sql_insert, (dayutc, last_rv))
self.conn.commit()
# daily realize cap
def query_from_realizecap(self, start_id=0, end_id=0, start_time="", end_time="", limit=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `dailyrcap`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
print(sql_query)
cursor.execute(sql_query)
return cursor.fetchall()
def update_daily_addr(self, dayutc, last_add_cnt):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailyaddradd` (`unixdt`, `addcnt`) VALUES (FROM_UNIXTIME(%s), %s)"
#print(sql_insert)
#print(datetime, blockid, amount, height)
cursor.execute(sql_insert, (dayutc, last_add_cnt))
self.conn.commit()
def delete_daily_addr(self, config):
with self.conn.cursor() as cursor:
sql_query = "DELETE FROM `dailyaddradd`"
cursor.execute(sql_query)
self.conn.commit()
def delete_daily_rv(self, config):
with self.conn.cursor() as cursor:
sql_query = "DELETE FROM `dailyrcap`"
cursor.execute(sql_query)
self.conn.commit()
'''
def __del__(self):
self.conn.close()

613
coinbus/btc24h_redis_if.py Normal file
View File

@ -0,0 +1,613 @@
import time
from walrus import *
from loguru import logger
class RedisIf:
def __init__(self, host="127.0.0.1", port=6379, password="", db=0):
self.db = Database(host=host, port=port, db=db)
self.zbalance = self.db.ZSet("rt_balancev2e")
'''
#realize cap progress
self.rv = self.db.Hash("rv")
#address and balance progress
self.addr = self.db.Hash("addr")
#block volume progress
self.bv = self.db.Hash("bv")
#daily volume progress
self.dv = self.db.Hash("dv")
'''
'''
#stat tx progress
self.tx = self.db.Hash("tx")
#ETH daily contract progress
self.eth_dc = self.db.Hash("ethdc")
#btc stats fee
self.btc_stats = self.db.Hash("btcstats")
#btc stats volume
self.btc_volume = self.db.Hash("btcvolume")
# btc stats cdd
self.btc_cdd = self.db.Hash("btccdd")
# btc stats cdd days
self.btc_cdd_days = self.db.Hash("btccdddays")
'''
self.btc_block_time = self.db.Hash("rt_btcblocktimev2e")
'''
self.btc_sopr = self.db.Hash("btcsopr")
'''
self.btc_data = self.db.Hash("rt_btc_datav2e")
self.active_address = self.db.Set("rt_active_addressv2e")
self.send_address = self.db.Set("rt_send_addressv2e")
self.receive_address = self.db.Set("rt_receive_addressv2e")
def get_btc_data(self, key):
value = None
if self.btc_data[key] is not None:
value = self.btc_data[key]
return value
def set_btc_data(self, key, value):
self.btc_data[key] = value
def reset_btc_data(self):
self.btc_data.clear()
self.zbalance.clear()
# self.btc_block_time.clear()
'''
def get_last_btc_sopr(self):
last_sopr_buy = None
last_asopr_buy = None
last_easopr_buy = None
last_lth_sopr_buy = None
last_sth_sopr_buy = None
last_asol = None
last_eaasol = None
if self.btc_sopr["last_asol"] is not None:
last_asol = self.btc_sopr["last_asol"]
#last_asol = float(self.btc_sopr["last_asol"].decode("utf-8"))
if self.btc_sopr["last_eaasol"] is not None:
last_eaasol = self.btc_sopr["last_eaasol"]
#last_eaasol = float(self.btc_sopr["last_eaasol"].decode("utf-8"))
if self.btc_sopr["last_sopr_buy"] is not None:
last_sopr_buy = self.btc_sopr["last_sopr_buy"]
#last_sopr_buy = float(self.btc_sopr["last_sopr_buy"].decode("utf-8"))
if self.btc_sopr["last_asopr_buy"] is not None:
last_asopr_buy = self.btc_sopr["last_asopr_buy"]
#last_asopr_buy = float(self.btc_sopr["last_asopr_buy"].decode("utf-8"))
if self.btc_sopr["last_easopr_buy"] is not None:
last_easopr_buy = self.btc_sopr["last_easopr_buy"]
#last_easopr_buy = float(self.btc_sopr["last_easopr_buy"].decode("utf-8"))
if self.btc_sopr["last_lth_sopr_buy"] is not None:
last_lth_sopr_buy = self.btc_sopr["last_lth_sopr_buy"]
#last_lth_sopr_buy = float(self.btc_sopr["last_lth_sopr_buy"].decode("utf-8"))
if self.btc_sopr["last_sth_sopr_buy"] is not None:
last_sth_sopr_buy = self.btc_sopr["last_sth_sopr_buy"]
#last_sth_sopr_buy = float(self.btc_sopr["last_sth_sopr_buy"].decode("utf-8"))
last_sopr_sell = None
last_asopr_sell = None
last_easopr_sell = None
last_lth_sopr_sell = None
last_sth_sopr_sell = None
if self.btc_sopr["last_sopr_sell"] is not None:
last_sopr_sell = self.btc_sopr["last_sopr_sell"]
# last_sopr_sell = float(self.btc_sopr["last_sopr_sell"].decode("utf-8"))
if self.btc_sopr["last_asopr_sell"] is not None:
last_asopr_sell = self.btc_sopr["last_asopr_sell"]
# last_asopr = float(self.btc_sopr["last_asopr"].decode("utf-8"))
if self.btc_sopr["last_easopr_sell"] is not None:
last_easopr_sell = self.btc_sopr["last_easopr_sell"]
# last_easopr_sell = float(self.btc_sopr["last_easopr_sell"].decode("utf-8"))
if self.btc_sopr["last_lth_sopr_sell"] is not None:
last_lth_sopr_sell = self.btc_sopr["last_lth_sopr_sell"]
# last_lth_sopr_sell = float(self.btc_sopr["last_lth_sopr_sell"].decode("utf-8"))
if self.btc_sopr["last_sth_sopr_sell"] is not None:
last_sth_sopr_sell = self.btc_sopr["last_sth_sopr_sell"]
# last_sth_sopr_sell = float(self.btc_sopr["last_sth_sopr_sell"].decode("utf-8"))
return last_asol, last_eaasol, last_sopr_buy, last_asopr_buy, last_easopr_buy, last_lth_sopr_buy, last_sth_sopr_buy, last_sopr_sell, last_asopr_sell, last_easopr_sell, last_lth_sopr_sell, last_sth_sopr_sell
def set_last_btc_sopr(self, last_asol, last_eaasol, last_sopr_buy, last_asopr_buy, last_easopr_buy, last_lth_sopr_buy, last_sth_sopr_buy, last_sopr_sell, last_asopr_sell, last_easopr_sell, last_lth_sopr_sell, last_sth_sopr_sell):
self.btc_sopr["last_asol"] = last_asol
self.btc_sopr["last_eaasol"] = last_eaasol
self.btc_sopr["last_sopr_buy"] = last_sopr_buy
self.btc_sopr["last_asopr_buy"] = last_asopr_buy
self.btc_sopr["last_easopr_buy"] = last_easopr_buy
self.btc_sopr["last_lth_sopr_buy"] = last_lth_sopr_buy
self.btc_sopr["last_sth_sopr_buy"] = last_sth_sopr_buy
self.btc_sopr["last_sopr_sell"] = last_sopr_sell
self.btc_sopr["last_asopr_sell"] = last_asopr_sell
self.btc_sopr["last_easopr_sell"] = last_easopr_sell
self.btc_sopr["last_lth_sopr_sell"] = last_lth_sopr_sell
self.btc_sopr["last_sth_sopr_sell"] = last_sth_sopr_sell
'''
def get_block_time(self, height):
block_time = None
height_str = str(height)
if self.btc_block_time[height_str] is not None:
block_time = int(self.btc_block_time[height_str].decode("utf-8"))
# block_time = int(self.btc_block_time[height_str].decode("utf-8"))
return block_time
def set_block_time(self, height, ts):
height_str = str(height)
self.btc_block_time[height_str] = ts
'''
def get_last_btc_cdd_days(self):
last_cdd = None
last_acdd = None
last_eacdd = None
last_cdd_day1= None
last_cdd_day7 = None
last_cdd_day30 = None
last_cdd_day60 = None
last_cdd_day90 = None
last_cdd_day180 = None
last_cdd_day365 = None
last_cdd_day730 = None
last_date = None
last_height = None
last_date_str = None
if self.btc_cdd["last_cdd"] is not None:
last_cdd = float(self.btc_cdd["last_cdd"].decode("utf-8"))
if self.btc_cdd["last_acdd"] is not None:
last_acdd = float(self.btc_cdd["last_acdd"].decode("utf-8"))
if self.btc_cdd["last_eacdd"] is not None:
last_eacdd = float(self.btc_cdd["last_eacdd"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day1"] is not None:
last_cdd_day1 = float(self.btc_cdd_days["last_cdd_day1"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day7"] is not None:
last_cdd_day7 = float(self.btc_cdd_days["last_cdd_day7"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day30"] is not None:
last_cdd_day30 = float(self.btc_cdd_days["last_cdd_day30"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day60"] is not None:
last_cdd_day60 = float(self.btc_cdd_days["last_cdd_day60"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day90"] is not None:
last_cdd_day90 = float(self.btc_cdd_days["last_cdd_day90"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day180"] is not None:
last_cdd_day180 = float(self.btc_cdd_days["last_cdd_day180"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day365"] is not None:
last_cdd_day365 = float(self.btc_cdd_days["last_cdd_day365"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day730"] is not None:
last_cdd_day730 = float(self.btc_cdd_days["last_cdd_day730"].decode("utf-8"))
if self.btc_cdd_days["last_date"] is not None:
last_date = int(self.btc_cdd_days["last_date"].decode("utf-8"))
if self.btc_cdd_days["last_height"] is not None:
last_height = int(self.btc_cdd_days["last_height"].decode("utf-8"))
if self.btc_cdd_days["last_date_str"] is not None:
last_date_str = self.btc_cdd_days["last_date_str"].decode("utf-8")
return last_cdd, last_acdd, last_eacdd, last_cdd_day1, last_cdd_day7, last_cdd_day30, last_cdd_day60, last_cdd_day90, last_cdd_day180, last_cdd_day365, last_cdd_day730, last_date, last_height, last_date_str
def set_last_btc_cdd_days(self, cdd, acdd, eacdd, day1, day7, day30, day60, day90, day180, day365, day730, dt, height, dtstr):
self.btc_cdd["last_cdd"] = cdd
self.btc_cdd["last_acdd"] = acdd
self.btc_cdd["last_eacdd"] = eacdd
self.btc_cdd_days["last_cdd_day1"] = day1
self.btc_cdd_days["last_cdd_day7"] = day7
self.btc_cdd_days["last_cdd_day30"] = day30
self.btc_cdd_days["last_cdd_day60"] = day60
self.btc_cdd_days["last_cdd_day90"] = day90
self.btc_cdd_days["last_cdd_day180"] = day180
self.btc_cdd_days["last_cdd_day365"] = day365
self.btc_cdd_days["last_cdd_day730"] = day730
self.btc_cdd_days["last_date"] = dt
self.btc_cdd_days["last_height"] = height
self.btc_cdd_days["last_date_str"] = dtstr
'''
'''
def get_last_btc_cdd(self):
last_cdd = None
last_date = None
last_height = None
last_date_str = None
if self.btc_cdd["last_cdd"] is not None:
last_cdd = float(self.btc_cdd["last_cdd"].decode("utf-8"))
if self.btc_cdd["last_date"] is not None:
last_date = int(self.btc_cdd["last_date"].decode("utf-8"))
if self.btc_cdd["last_height"] is not None:
last_height = int(self.btc_cdd["last_height"].decode("utf-8"))
if self.btc_cdd["last_date_str"] is not None:
last_date_str = self.btc_cdd["last_date_str"].decode("utf-8")
return last_cdd, last_date, last_height, last_date_str
def set_last_btc_cdd(self, cdd, dt, height, dtstr):
self.btc_cdd["last_cdd"] = cdd
self.btc_cdd["last_date"] = dt
self.btc_cdd["last_height"] = height
self.btc_cdd["last_date_str"] = dtstr
def get_last_btc_volume(self):
last_volume = None
last_date = None
last_height = None
last_date_str = None
if self.btc_volume["last_volume"] is not None:
last_volume = float(self.btc_volume["last_volume"].decode("utf-8"))
if self.btc_volume["last_date"] is not None:
last_date = int(self.btc_volume["last_date"].decode("utf-8"))
if self.btc_volume["last_height"] is not None:
last_height = int(self.btc_volume["last_height"].decode("utf-8"))
if self.btc_volume["last_date_str"] is not None:
last_date_str = self.btc_volume["last_date_str"].decode("utf-8")
return last_volume, last_date, last_height, last_date_str
def set_last_btc_volume(self, volume, dt, height, dtstr):
self.btc_volume["last_volume"] = volume
self.btc_volume["last_date"] = dt
self.btc_volume["last_height"] = height
self.btc_volume["last_date_str"] = dtstr
'''
'''
def get_last_btc_stats(self):
last_fees = None
last_date = None
last_height = None
last_date_str = None
last_volume = None
if self.btc_stats["last_fees"] is not None:
last_fees = float(self.btc_stats["last_fees"].decode("utf-8"))
if self.btc_volume["last_volume"] is not None:
last_volume = float(self.btc_volume["last_volume"].decode("utf-8"))
if self.btc_stats["last_date"] is not None:
last_date = int(self.btc_stats["last_date"].decode("utf-8"))
if self.btc_stats["last_height"] is not None:
last_height = int(self.btc_stats["last_height"].decode("utf-8"))
if self.btc_stats["last_date_str"] is not None:
last_date_str = self.btc_stats["last_date_str"].decode("utf-8")
return last_fees, last_volume, last_date, last_height, last_date_str
def set_last_btc_stats(self, fees, volume, dt, height, dtstr):
self.btc_stats["last_fees"] = fees
self.btc_volume["last_volume"] = volume
self.btc_stats["last_date"] = dt
self.btc_stats["last_height"] = height
self.btc_stats["last_date_str"] = dtstr
def get_last_eth_dc(self):
last_date = None
last_height = None
last_date_str = None
if self.eth_dc["last_date"] is not None:
last_date = int(self.eth_dc["last_date"].decode("utf-8"))
if self.eth_dc["last_height"] is not None:
last_height = int(self.eth_dc["last_height"].decode("utf-8"))
if self.eth_dc["last_date_str"] is not None:
last_date_str = self.eth_dc["last_date_str"].decode("utf-8")
return last_date, last_height, last_date_str
def set_last_eth_dc(self, dt, height, dtstr):
self.eth_dc["last_date"] = dt
self.eth_dc["last_height"] = height
self.eth_dc["last_date_str"] = dtstr
'''
'''
def get_last_dv(self):
last_dv = None
last_date = None
last_height = None
last_date_str = None
if self.dv["last_dv"] is not None:
last_dv = float(self.dv["last_dv"].decode("utf-8"))
if self.dv["last_date"] is not None:
last_date = int(self.dv["last_date"].decode("utf-8"))
if self.dv["last_height"] is not None:
last_height = int(self.dv["last_height"].decode("utf-8"))
if self.dv["last_date_str"] is not None:
last_date_str = self.dv["last_date_str"].decode("utf-8")
return last_dv, last_date, last_height, last_date_str
def set_last_dv(self, dv, dt, height, dtstr):
self.dv["last_dv"] = dv
self.dv["last_date"] = dt
self.dv["last_height"] = height
self.dv["last_date_str"] = dtstr
def get_last_bv(self):
last_height = None
if self.bv["last_height"] is not None:
last_height = int(self.bv["last_height"].decode("utf-8"))
return last_height
def set_last_bv(self, height):
self.bv["last_height"] = height
'''
'''
def get_last_ind(self):
last_csupply = None
last_mintusd = None
last_sumcsupply = None
last_sumcdd = None
last_sumeacdd = None
last_rprofit = None
last_rloss = None
last_marketcap = None
last_rcap = None
last_mvrv = None
last_earcap = None
if self.tx["last_csupply"] is not None:
last_csupply = float(self.tx["last_csupply"].decode("utf-8"))
if self.tx["last_mintusd"] is not None:
last_mintusd = float(self.tx["last_mintusd"].decode("utf-8"))
if self.tx["last_sumcsupply"] is not None:
last_sumcsupply = float(self.tx["last_sumcsupply"].decode("utf-8"))
if self.tx["last_sumcdd"] is not None:
last_sumcdd = float(self.tx["last_sumcdd"].decode("utf-8"))
if self.tx["last_sumeacdd"] is not None:
last_sumeacdd = float(self.tx["last_sumeacdd"].decode("utf-8"))
if self.tx["last_rprofit"] is not None:
last_rprofit = float(self.tx["last_rprofit"].decode("utf-8"))
if self.tx["last_rloss"] is not None:
last_rloss = float(self.tx["last_rloss"].decode("utf-8"))
if self.tx["last_marketcap"] is not None:
last_marketcap = float(self.tx["last_marketcap"].decode("utf-8"))
if self.tx["last_rcap"] is not None:
last_rcap = float(self.tx["last_rcap"].decode("utf-8"))
if self.tx["last_earcap"] is not None:
last_earcap = float(self.tx["last_earcap"].decode("utf-8"))
if self.tx["last_mvrv"] is not None:
last_mvrv = float(self.tx["last_mvrv"].decode("utf-8"))
return last_csupply, last_mintusd, last_sumcsupply, last_sumcdd, last_sumeacdd, last_rprofit, last_rloss, last_marketcap, last_rcap, last_earcap, last_mvrv
def set_last_ind(self, last_csupply, last_mintusd, last_sumcsupply, last_sumcdd, last_sumeacdd, last_rprofit, last_rloss, last_marketcap, last_rcap, last_earcap, last_mvrv):
self.tx["last_csupply"] = last_csupply
self.tx["last_mintusd"] = last_mintusd
self.tx["last_sumcsupply"] = last_sumcsupply
self.tx["last_sumcdd"] = last_sumcdd
self.tx["last_sumeacdd"] = last_sumeacdd
self.tx["last_rprofit"] = last_rprofit
self.tx["last_rloss"] = last_rloss
self.tx["last_marketcap"] = last_marketcap
self.tx["last_rcap"] = last_rcap
self.tx["last_earcap"] = last_earcap
self.tx["last_mvrv"] = last_mvrv
def get_last_tx(self):
last_profit = None
last_fees = None
last_newaddr_cnt = None
last_newaddr_vol = None
last_active_addr_cnt = None
last_tx_addr_cnt = None
last_rx_addr_cnt = None
last_vol_change = None
last_vol = None
last_avol = None
last_date = None
last_height = None
last_date_str = None
last_txs = None
last_eatxs = None
if self.tx["last_profit_rate"] is not None:
last_profit = int(self.tx["last_profit"].decode("utf-8"))
if self.tx["last_fees"] is not None:
last_fees = int(self.tx["last_fees"].decode("utf-8"))
if self.tx["last_txs"] is not None:
last_txs = int(self.tx["last_txs"].decode("utf-8"))
if self.tx["last_eatxs"] is not None:
last_eatxs = int(self.tx["last_eatxs"].decode("utf-8"))
if self.tx["last_newaddr_cnt"] is not None:
last_newaddr_cnt = int(self.tx["last_newaddr_cnt"].decode("utf-8"))
if self.tx["last_newaddr_vol"] is not None:
last_newaddr_vol = float(self.tx["last_newaddr_vol"].decode("utf-8"))
if self.tx["last_active_addr_cnt"] is not None:
last_active_addr_cnt = int(self.tx["last_active_addr_cnt"].decode("utf-8"))
if self.tx["last_tx_addr_cnt"] is not None:
last_tx_addr_cnt = int(self.tx["last_tx_addr_cnt"].decode("utf-8"))
if self.tx["last_rx_addr_cnt"] is not None:
last_rx_addr_cnt = int(self.tx["last_rx_addr_cnt"].decode("utf-8"))
if self.tx["last_vol_change"] is not None:
last_vol_change = float(self.tx["last_vol_change"].decode("utf-8"))
if self.tx["last_vol"] is not None:
last_vol = float(self.tx["last_vol"].decode("utf-8"))
if self.tx["last_avol"] is not None:
last_avol = float(self.tx["last_avol"].decode("utf-8"))
if self.tx["last_date"] is not None:
last_date = int(self.tx["last_date"].decode("utf-8"))
if self.tx["last_height"] is not None:
last_height = int(self.tx["last_height"].decode("utf-8"))
if self.tx["last_date_str"] is not None:
last_date_str = self.tx["last_date_str"].decode("utf-8")
return last_profit, last_fees, last_txs, last_eatxs, last_newaddr_cnt, last_newaddr_vol, last_active_addr_cnt, last_tx_addr_cnt, last_rx_addr_cnt, last_vol_change, last_vol, last_avol, last_date, last_height, last_date_str
def set_last_tx(self, last_profit, last_fees, last_txs, last_eatxs, newaddr_cnt, newaddr_vol, active_addr_cnt, tx_addr_cnt, rx_addr_cnt, vol_change, vol, avol, dt, height, dtstr):
self.tx["last_profit"] = last_profit
self.tx["last_fees"] = last_fees
self.tx["last_txs"] = last_txs
self.tx["last_eatxs"] = last_eatxs
self.tx["last_newaddr_cnt"] = newaddr_cnt
self.tx["last_newaddr_vol"] = newaddr_vol
self.tx["last_active_addr_cnt"] = active_addr_cnt
self.tx["last_tx_addr_cnt"] = tx_addr_cnt
self.tx["last_rx_addr_cnt"] = rx_addr_cnt
self.tx["last_vol_change"] = vol_change
self.tx["last_vol"] = vol
self.tx["last_avol"] = avol
self.tx["last_date"] = dt
self.tx["last_height"] = height
self.tx["last_date_str"] = dtstr
'''
'''
def get_last_addr(self):
last_daily_cnt = None
last_date = None
last_height = None
last_date_str = None
if self.addr["last_daily_cnt"] is not None:
last_daily_cnt = int(self.addr["last_daily_cnt"].decode("utf-8"))
if self.addr["last_date"] is not None:
last_date = int(self.addr["last_date"].decode("utf-8"))
if self.addr["last_height"] is not None:
last_height = int(self.addr["last_height"].decode("utf-8"))
if self.addr["last_date_str"] is not None:
last_date_str = self.addr["last_date_str"].decode("utf-8")
return last_daily_cnt, last_date, last_height, last_date_str
def set_last_addr(self, daily_cnt, dt, height, dtstr):
self.addr["last_daily_cnt"] = daily_cnt
self.addr["last_date"] = dt
self.addr["last_height"] = height
self.addr["last_date_str"] = dtstr
'''
def is_active_address(self, address):
result = address in self.active_address
if not result:
self.active_address.add(address)
return result
def reset_active_address(self):
self.active_address.clear()
def get_active_address_cnt(self):
return len(self.active_address)
def is_send_address(self, address):
result = address in self.send_address
if not result:
self.send_address.add(address)
return result
def reset_send_address(self):
self.send_address.clear()
def get_send_address_cnt(self):
return len(self.send_address)
def is_receive_address(self, address):
result = address in self.receive_address
if not result:
self.receive_address.add(address)
return result
def reset_receive_address(self):
self.receive_address.clear()
def get_receive_address_cnt(self):
return len(self.receive_address)
def save_addr(self, address, balance):
new_balance = balance
if address in self.zbalance:
new_balance = self.zbalance.score(address) + balance
# print("update", self.zbalance.score(address), balance, new_balance)
# time.sleep(10)
if new_balance < 0.01:
del self.zbalance[address]
# print("check exist", address, address in self.zbalance)
# time.sleep(10)
return
self.zbalance.add({address: new_balance})
'''
def delete_addr(self, config):
self.addr.clear()
self.zbalance.clear()
'''
def is_in_addr(self, address):
return address in self.zbalance
def get_addr_cnt(self):
return len(self.zbalance)
'''
def delete_rv(self, config):
self.rv.clear()
def get_last_rv(self):
last_rv = None
last_date = None
last_height = None
last_date_str = None
if self.rv["last_rv"] is not None:
last_rv = float(self.rv["last_rv"].decode("utf-8"))
if self.rv["last_date"] is not None:
last_date = int(self.rv["last_date"].decode("utf-8"))
if self.rv["last_height"] is not None:
last_height = int(self.rv["last_height"].decode("utf-8"))
if self.rv["last_date_str"] is not None:
last_date_str = self.rv["last_date_str"].decode("utf-8")
return last_rv, last_date, last_height, last_date_str
def set_last_rv(self, rv, dt, height, dtstr):
self.rv["last_rv"] = rv
self.rv["last_date"] = dt
self.rv["last_height"] = height
self.rv["last_date_str"] = dtstr
'''
def get_all_address(self):
return self.zbalance.keys()
def delete_address_data(self, config):
self.zbalance.clear()
'''
def query_from_address(self, start_balance=0, end_balance=0, address="", limit=0):
if len(address) > 0:
results = []
result = {}
result["address"] = address
balance = self.zbalance.score(address)
print(balance)
if balance is not None:
result["balance"] = balance
results.append(result)
return results
match_result = None
if start_balance > 0:
if end_balance > 0:
match_result = self.zbalance.range_by_score(start_balance, end_balance, 0, -1, True, False)
else:
match_result = self.zbalance.range_by_score(0, start_balance, 0, -1, True, False)
else:
if end_balance > 0:
match_result = self.zbalance.range_by_score(end_balance, 21000000, 0, -1, True, False)
results = []
if match_result is not None:
#print(match_result)
for addr, balance2 in match_result:
address = addr.decode('utf-8')
result = {}
result["address"] = address
result["balance"] = balance2
results.append(result)
if limit > 0 and len(results) >= limit:
break
return results
'''

1110
coinbus/btc24h_stats.py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,85 @@
import time
import requests
import pymysql
from datetime import datetime
# MySQL配置
DB_CONFIG = {
"host": "127.0.0.1",
"user": "root",
"password": "2GS@bPYcgiMyL14A",
"database": "btcdb",
"port": 4423
}
# 获取当前时间戳
def get_current_timestamp():
return int(time.time())
# 获取API1的BTC价格示例币安
def get_binance_price():
url = "https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT"
resp = requests.get(url, timeout=5)
resp.raise_for_status()
data = resp.json()
return float(data["price"])
# 获取API2的BTC价格示例Coinbase
def get_coinbase_price():
url = "https://api.coinbase.com/v2/prices/spot?currency=USD"
resp = requests.get(url, timeout=5)
resp.raise_for_status()
data = resp.json()
return float(data["data"]["amount"])
# 更新或插入价格
def upsert_price(source, price, timestamp):
connection = pymysql.connect(**DB_CONFIG)
try:
with connection.cursor() as cursor:
# 先判断该 source 是否已存在
sql_check = "SELECT id FROM btc_realtime_prices WHERE source = %s"
cursor.execute(sql_check, (source,))
result = cursor.fetchone()
if result:
# 已存在,执行更新
sql_update = """
UPDATE btc_realtime_prices
SET price = %s, timestamp = %s
WHERE source = %s
"""
cursor.execute(sql_update, (price, timestamp, source))
else:
# 不存在,执行插入
sql_insert = """
INSERT INTO btc_realtime_prices (timestamp, source, price)
VALUES (%s, %s, %s)
"""
cursor.execute(sql_insert, (timestamp, source, price))
connection.commit()
finally:
connection.close()
def main():
while True:
now_ts = get_current_timestamp()
try:
binance_price = get_binance_price()
print(f"Binance BTC Price: {binance_price}")
upsert_price("binance", binance_price, now_ts)
except Exception as e:
print(f"获取Binance价格失败: {e}")
try:
coinbase_price = get_coinbase_price()
print(f"Coinbase BTC Price: {coinbase_price}")
upsert_price("coinbase", coinbase_price, now_ts)
except Exception as e:
print(f"获取Coinbase价格失败: {e}")
time.sleep(60) # 每分钟执行一次
if __name__ == "__main__":
main()

141
coinbus/btc_prices.py Normal file
View File

@ -0,0 +1,141 @@
import time
import requests
import pymysql
import ujson
from datetime import datetime, timedelta
# MySQL 连接信息
DB_CONFIG = {
"host": "127.0.0.1",
"user": "root",
"password": "2GS@bPYcgiMyL14A",
"database": "btcdb",
"port": 4423
}
# Nasdaq API Key
NASDAQ_API_KEY = "FZqXog4sR-b7cYnXcRVV"
# 获取已存在的时间戳
def get_existing_timestamps():
connection = pymysql.connect(**DB_CONFIG)
existing_timestamps = set()
try:
with connection.cursor() as cursor:
cursor.execute("SELECT timestamp, source FROM btc_prices")
for row in cursor.fetchall():
existing_timestamps.add((row[0], row[1]))
finally:
connection.close()
return existing_timestamps
# 工具函数:将任意时间戳调整为北京时间当日 08:00 的时间戳
def adjust_to_beijing_08am(timestamp):
dt = datetime.utcfromtimestamp(timestamp) + timedelta(hours=8)
dt_08am = datetime(dt.year, dt.month, dt.day, 8, 0, 0)
return int((dt_08am - timedelta(hours=8)).timestamp()) # 转回 UTC 存储
# Nasdaq 获取历史 BTC 美元价格
def get_nasdaq_price():
prices = {}
url = f'https://data.nasdaq.com/api/v3/datatables/QDL/BCHAIN?code=MKPRU&api_key={NASDAQ_API_KEY}'
response = requests.get(url)
if response.status_code == 200:
data = ujson.loads(response.content)
if "datatable" in data and "data" in data["datatable"]:
for item in data["datatable"]["data"]:
daystr = item[1]
price = item[2]
dt = datetime.strptime(daystr, "%Y-%m-%d")
dt_08am_bj = datetime(dt.year, dt.month, dt.day, 8, 0, 0)
dt_08am_utc = dt_08am_bj - timedelta(hours=8)
prices[int(dt_08am_utc.timestamp())] = float(price)
print(f"Nasdaq 获取数据量: {len(prices)}")
return prices
# CryptoCompare 获取 BTC 历史每日收盘价(时间强制统一为北京时间 08:00
def get_cryptocompare_price():
url = "https://min-api.cryptocompare.com/data/v2/histoday"
limit = 2000
to_ts = int(time.time())
prices = {}
while True:
params = {
"fsym": "BTC",
"tsym": "USD",
"limit": limit,
"toTs": to_ts
}
print(f"请求 CryptoCompare: {params}")
response = requests.get(url, params=params)
if response.status_code != 200:
print("请求失败:", response.status_code)
break
data = ujson.loads(response.content)
if data["Response"] != "Success":
print("API 返回错误:", data.get("Message"))
break
entries = data["Data"]["Data"]
if not entries:
break
for entry in entries:
raw_ts = entry["time"]
price = entry["close"]
adjusted_ts = adjust_to_beijing_08am(raw_ts)
prices[adjusted_ts] = price
earliest = entries[0]["time"]
if earliest <= 1279300000: # 大约2010年7月
break
to_ts = earliest - 1
time.sleep(1)
print(f"CryptoCompare 获取数据量: {len(prices)}")
return prices
# 保存数据到数据库
def save_to_database(data, source):
existing_timestamps = get_existing_timestamps()
connection = pymysql.connect(**DB_CONFIG)
new_data_count = 0
try:
with connection.cursor() as cursor:
sql = """
INSERT INTO btc_prices (timestamp, price, source)
VALUES (%s, %s, %s)
"""
for timestamp, price in data.items():
if (timestamp, source) not in existing_timestamps:
try:
cursor.execute(sql, (timestamp, price, source))
new_data_count += 1
except pymysql.MySQLError as e:
print(f"插入错误: {e}")
continue
connection.commit()
print(f"成功存入 {new_data_count} 条新数据({source}")
finally:
connection.close()
# 定时任务
def fetch_and_store_data():
print("========== 开始获取比特币价格数据 ==========")
# Nasdaq
nasdaq_prices = get_nasdaq_price()
save_to_database(nasdaq_prices, "Nasdaq")
# CryptoCompare
cc_prices = get_cryptocompare_price()
save_to_database(cc_prices, "CryptoCompare")
print("========== 数据存储完成 ==========")
if __name__ == "__main__":
while True:
fetch_and_store_data()
time.sleep(14400) # 每 4 小时执行一次

1219
coinbus/btc_stats_qt.py Normal file

File diff suppressed because it is too large Load Diff

562
coinbus/db_if_qt.py Normal file
View File

@ -0,0 +1,562 @@
# coding=utf-8
import datetime
import pymysql
from loguru import logger
import time
class DbIf:
def __init__(self, host="172.17.0.1", port=4419, user="root", password="IeQcJNnagkaFP1Or", dbname="btcdb"):
self.conn = pymysql.connect(host=host, port=port, user=user, password=password, database=dbname,cursorclass=pymysql.cursors.DictCursor)
def update_to_dailyindsv2(self, dt_utc, height_begin, height_end, lth_volume, frm, cvdd, realized_price, transferred_price, balanced_price, nvt_ratio, velocity):
with self.conn.cursor() as cursor:
print(dt_utc, height_begin, height_end, lth_volume, frm, cvdd, realized_price, transferred_price, balanced_price, nvt_ratio, velocity)
sql_insert = "REPLACE INTO dailyindsv3e2 (unixdt, height_begin, height_end, lth_volume, frm, cvdd, realized_price, transferred_price, balanced_price, nvt_ratio, velocity"
sql_insert = sql_insert + ") VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
cursor.execute(sql_insert, (
dt_utc, height_begin, height_end, lth_volume, frm, cvdd, realized_price, transferred_price, balanced_price, nvt_ratio, velocity))
'''
def update_to_realtimeindsv2(self, dt_utc, mempool_volume, mempool_fees):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO realtimeindsv2b (unixdt, mempool_volume, mempool_fees)"
cursor.execute(sql_insert, (dt_utc, mempool_volume, mempool_fees))
'''
def update_to_dailyinds(self, dt_utc, height_begin, height_end, profitrate, fees, txs, new_address, total_address, new_address_volume, active_address,
send_address, receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr,
asol, eaasol, dormancy, adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60,
day90, day180, day365, day730, csupply, mintusd, sumcsupply, sumcdd, sumeacdd,
liveliness, ealiveliness, rprofit, rloss, rplrate, price, marketcap, rcap, earcap, mvrv,
nupl,vdd):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO dailyindsv3e1 (unixdt, height_begin, height_end, profitrate, fees, txs, new_address, total_address, new_address_volume, active_address, send_address, receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr,"
sql_insert = sql_insert + " asol, eaasol, dormancy, adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60, day90, day180, day365, day730, csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, "
sql_insert = sql_insert + " ealiveliness, rprofit, rloss, rplrate, price, marketcap, rcap, earcap, mvrv, nupl,vdd"
sql_insert = sql_insert + ") VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (
dt_utc, height_begin, height_end, profitrate, fees, txs, new_address, total_address, new_address_volume, active_address, send_address,
receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr, asol, eaasol, dormancy,
adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60, day90, day180, day365, day730,
csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, ealiveliness, rprofit, rloss, rplrate,
price, marketcap, rcap, earcap, mvrv,
nupl,vdd))
self.conn.commit()
'''
def update_to_dailyinds(self, dt_utc, height_begin, height_end, profitrate, fees, txs, new_address, new_address_volume, active_address,
send_address, receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr,
asol, eaasol, dormancy, adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60,
day90, day180, day365, day730, csupply, mintusd, sumcsupply, sumcdd, sumeacdd,
liveliness, ealiveliness, rprofit, rloss, rplrate, price, marketcap, rcap, earcap, mvrv,
lthmarketcap, lthrcap, sthmarketcap, sthrcap, lthmvrv, sthmvrv, nupl):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO dailyindsv1 (unixdt, height_begin, height_end, profitrate, fees, txs, new_address, new_address_volume, active_address, send_address, receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr,"
sql_insert = sql_insert + " asol, eaasol, dormancy, adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60, day90, day180, day365, day730, csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, "
sql_insert = sql_insert + " ealiveliness, rprofit, rloss, rplrate, price, marketcap, rcap, earcap, mvrv, lthmarketcap, lthrcap, sthmarketcap, sthrcap, lthmvrv, sthmvrv, nupl"
sql_insert = sql_insert + ") VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (
dt_utc, height_begin, height_end, profitrate, fees, txs, new_address, new_address_volume, active_address, send_address,
receive_address, volume, eavolume, sopr, asopr, easopr, lthsopr, sthsopr, asol, eaasol, dormancy,
adormancy, eadormancy, cdd, sacdd, eacdd, day1, day7, day30, day60, day90, day180, day365, day730,
csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, ealiveliness, rprofit, rloss, rplrate,
price, marketcap, rcap, earcap, mvrv, lthmarketcap, lthrcap, sthmarketcap, sthrcap, lthmvrv, sthmvrv,
nupl))
self.conn.commit()
'''
'''
# daily daily on-chain volume
def query_from_dailyvolume(self, start_id=0, end_id=0, start_time="", end_time="", limit=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `dailyvolume`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
print(sql_query)
cursor.execute(sql_query)
return cursor.fetchall()
'''
# newaddrs
'''
def update_to_newaddr(self, dayutc, last_profit_rate, last_fees, last_txs, last_eatxs, last_newaddr_cnt,
last_newaddr_vol, last_active_addr_cnt, last_tx_addr_cnt, last_rx_addr_cnt, last_vol_change,
last_vol):
with self.conn.cursor() as cursor:
sql_query = "SELECT COUNT(id) FROM `newaddrs` WHERE unixdt=FROM_UNIXTIME(%s)"
cursor.execute(sql_query, {dayutc, })
result = cursor.fetchone()
# print(dt_utc)
# print(result)
if result is not None:
if "COUNT(id)" in result:
if result["COUNT(id)"] > 0:
print("update")
sql_update = 'UPDATE newaddrs SET `total`=%s, `amount`=%s, `active`=%s, `tx`=%s, `rx`=%s, `volume_change`=%s, `volume=%s`,`txs`=%s, `eatxs`=%s, `fees`=%s, `last_profit_rate`=%s WHERE unixdt=FROM_UNIXTIME(%s)'
cursor.execute(sql_update, (
last_newaddr_cnt, last_newaddr_vol, last_active_addr_cnt, last_tx_addr_cnt,
last_rx_addr_cnt,
last_vol_change, last_vol, last_txs, last_eatxs, last_fees, last_profit_rate, dayutc))
else:
print("insert")
sql_insert = "INSERT INTO `newaddrs` (`unixdt`, `total`, `amount`, `active`, `tx`, `rx`, `volume_change`, `volume`, `txs`, `eatxs`, `fees`, `last_profit_rate`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (
dayutc, last_newaddr_cnt, last_newaddr_vol, last_active_addr_cnt, last_tx_addr_cnt,
last_rx_addr_cnt, last_vol_change, last_vol, last_txs, last_eatxs, last_fees,
last_profit_rate))
self.conn.commit()
'''
'''
def update_to_sellprofit(self, dayutc, current_price, block_buy_volume, block_sell_volume, block_sell_profit, last_height):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailybuysell` (`unixdt`, `price`, `buyvolume`, `sellvolume`, `sellprofit`, `height`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s)"
#print(sql_insert)
#print(datetime, txid, vout, voutalias, amount, height)
cursor.execute(sql_insert, (dayutc, current_price, block_buy_volume, block_sell_volume, block_sell_profit, last_height))
self.conn.commit()
'''
'''
def update_to_bigsellprofit(self, dayutc, current_price, tx_sell_average, tx_sell_amount, tx_sell_profit,
days_earliest, days_latest, days_largest, days_current, tx_buy_address, txid,
block_height):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `bigsell` (`unixdt`, `buyprice`, `sellprice`, `amount`, `profit`, `days_earliest`, `days_latest`, `days_largest`, `days_current`, `address`, `txid`, `height`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
# print(datetime, txid, vout, voutalias, amount, height)
cursor.execute(sql_insert, (
dayutc, current_price, tx_sell_average, tx_sell_amount, tx_sell_profit, days_earliest, days_latest,
days_largest, days_current, tx_buy_address, txid, block_height))
self.conn.commit()
'''
'''
def update_to_dailycdd(self, dt_utc, cdd):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `dailycdd` (`unixdt`, `cdd`) VALUES (FROM_UNIXTIME(%s), %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, cdd))
self.conn.commit()
'''
'''
def update_to_dailycdddays(self, dt_utc, dormancy, adormancy, eadormancy, cdd, acdd, eacdd, day1, day7, day30,
day60, day90, day180, day365, day730):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `dailycdddays` (`unixdt`, dormancy, adormancy, eadormancy, cdd, acdd, eacdd, `day1`, day7, day30, day60, day90, day180, day365, day730) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (
dt_utc, dormancy, adormancy, eadormancy, cdd, acdd, eacdd, day1, day7, day30, day60, day90, day180,
day365,
day730))
self.conn.commit()
'''
'''
def update_to_dailysopr(self, dt_utc, last_sopr, last_asopr, last_easopr, last_lth_sopr, last_sth_sopr):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `dailysopr` (`unixdt`, `sopr`, asopr, easopr, lth_sopr, sth_sopr) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, last_sopr, last_asopr, last_easopr, last_lth_sopr, last_sth_sopr))
self.conn.commit()
'''
'''
def update_to_inds(self, dt_utc, csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, ealiveliness, rprofit,
rloss, rplrate, price, marketcap, rcap, earcap, mvrv):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `inds` (`unixdt`, csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, ealiveliness, rprofit, rloss, rplrate, price, marketcap, rcap, earcap, mvrv) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (
dt_utc, csupply, mintusd, sumcsupply, sumcdd, sumeacdd, liveliness, ealiveliness, rprofit, rloss,
rplrate,
price, marketcap, rcap, earcap, mvrv))
self.conn.commit()
'''
# daily volume
'''
def update_to_dailyvolume(self, dt_utc, volume):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `dailyvolume` (`unixdt`, `volume`) VALUES (FROM_UNIXTIME(%s), %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, volume))
self.conn.commit()
'''
'''with self.conn.cursor() as cursor:
sql_query = "SELECT COUNT(id) FROM `dailyvolume` WHERE unixdt=FROM_UNIXTIME(%s)"
cursor.execute(sql_query, {dt_utc,})
result = cursor.fetchone()
#print(dt_utc)
#print(result)
if result is not None:
if "COUNT(id)" in result:
if result["COUNT(id)"] > 0:
print("update")
sql_update = 'UPDATE dailyvolume SET `volume`=%s WHERE unixdt=FROM_UNIXTIME(%s)'
cursor.execute(sql_update, (volume, dt_utc))
else:
print("insert")
sql_insert = "INSERT INTO `dailyvolume` (`unixdt`, `volume`) VALUES (FROM_UNIXTIME(%s), %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, volume))
self.conn.commit()'''
'''
def update_to_dailyfees(self, dt_utc, fees):
with self.conn.cursor() as cursor:
sql_insert = "REPLACE INTO `dailyfees` (`unixdt`, `fees`) VALUES (FROM_UNIXTIME(%s), %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, fees))
self.conn.commit()
'''
'''
def import_to_dailyvolume2(self, dt_utc, volume):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailyvolume` (`unixdt`, `volume`) VALUES (FROM_UNIXTIME(%s), %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, volume))
self.conn.commit()
def delete_dailyvolume_data(self, config):
with self.conn.cursor() as cursor:
sql_query = "DELETE FROM `dailyvolume`"
cursor.execute(sql_query)
self.conn.commit()
# daily market cap
def query_from_marketcap(self, start_id=0, end_id=0, start_time="", end_time="", limit=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `dailyprice`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
print(sql_query)
cursor.execute(sql_query)
return cursor.fetchall()
#daily price
def import_to_dailyprice(self, dt_utc, price, volume, marketcap, csupply):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailyprice` (`unixdt`, `price`, `volume`, `marketcap`, `csupply`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s)"
#print(sql_insert)
cursor.execute(sql_insert, (dt_utc, price, volume, marketcap, csupply))
self.conn.commit()
def update_to_dailyprice(self, dt_utc, price, volume, change):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailyprice` (`unixdt`, `price`, `volume`, `change`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s)"
#print(sql_insert)
cursor.execute(sql_insert, (dt_utc, price, volume, change))
self.conn.commit()
def update_to_dailyprice2(self, dt_utc, price, volume, change, marketcap, csupply):
with self.conn.cursor() as cursor:
sql_query = "SELECT COUNT(id) FROM `dailyprice` WHERE unixdt=FROM_UNIXTIME(%s)"
cursor.execute(sql_query, {dt_utc,})
result = cursor.fetchone()
#print(dt_utc)
#print(result)
if result is not None:
if "COUNT(id)" in result:
if result["COUNT(id)"] > 0:
print("update")
sql_update = 'UPDATE dailyprice SET `price`=%s, `marketcap`=%s, `csupply`=%s, `volume`=%s, `change`=%s WHERE unixdt=FROM_UNIXTIME(%s)'
cursor.execute(sql_update, (price, marketcap, csupply, volume, change, dt_utc))
else:
print("insert")
sql_insert = "INSERT INTO `dailyprice` (`unixdt`, `price`, `volume`, `change`, `marketcap`, `csupply`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s)"
# print(sql_insert)
cursor.execute(sql_insert, (dt_utc, price, volume, change, marketcap, csupply))
self.conn.commit()
def update_dailypricechange(self):
with self.conn.cursor() as cursor:
sql_query = "SELECT unixdt,price FROM `dailyprice` order by unixdt"
cursor.execute(sql_query)
results = cursor.fetchall()
prevprice = -1
for result in results:
if prevprice < 0:
prevprice = result["price"]
else:
#print(result["unixdt"], result["price"], result["marketcap"])
try:
change = (result["price"]/prevprice - 1)*100
except:
change = 0
#print(csupply)
datestr = result["unixdt"]
logger.debug(datestr.__format__('%Y-%m-%d') + " " + str(change))
sql_update = 'UPDATE dailyprice SET `change`=%s WHERE unixdt=%s'
cursor.execute(sql_update, (str(change), result["unixdt"]))
prevprice = result["price"]
self.conn.commit()
def delete_dailyprice_data(self, config):
with self.conn.cursor() as cursor:
sql_query = "DELETE FROM `dailyprice`"
cursor.execute(sql_query)
self.conn.commit()
def delete_failed_blockvolume(self, height):
with self.conn.cursor() as cursor:
sql_insert = "DELETE FROM `bigamountvout` WHERE height=%s"
cursor.execute(sql_insert, (height,))
sql_insert = "DELETE FROM `bigamounttx` WHERE height=%s"
cursor.execute(sql_insert, (height,))
sql_insert = "DELETE FROM `blockamount` WHERE height=%s"
cursor.execute(sql_insert, (height,))
self.conn.commit()
#block check --- big amount for vout
def query_from_bigamountvout(self, start_id=0, end_id=0, start_time="", end_time="", address="", limit=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `bigamountvout`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
print(sql_query)
cursor.execute(sql_query)
return cursor.fetchall()
'''
def update_to_bigamountvout(self, datetime, txid, vout, voutn, vouttype, amount, height, days, buyin, sellout,
profit):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `bigamountvoutv3e` (`unixdt`, `vout`, `voutn`, `vouttype`, `amount`, `height`, `txid`, days, buyprice, sellprice, profit) VALUES (FROM_UNIXTIME(%s), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# print(sql_insert)
# print(datetime, txid, vout, voutalias, amount, height)
cursor.execute(sql_insert,
(datetime, vout, voutn, vouttype, amount, height, txid, days, buyin, sellout, profit))
self.conn.commit()
'''
# block check --- big amount tx
def query_from_bigamounttx(self, start_id=0, end_id=0, start_time="", end_time="", address="", limit=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `bigamounttx`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
print(sql_query)
cursor.execute(sql_query)
return cursor.fetchall()
def update_to_bigamounttx(self, datetime, txid, amount, height):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `bigamounttx` (`unixdt`, `amount`, `height`, `txid`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s)"
#print(sql_insert)
#print(datetime, txid, amount, height)
cursor.execute(sql_insert, (datetime, amount, height, txid))
self.conn.commit()
# block check --- per block amount
def query_from_blockamount(self, start_id=0, end_id=0, start_time="", end_time="", limit=0, amount=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `blockamount`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
if amount > 0:
sql_query = sql_query + " AND amount > " + str(amount)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if amount > 0:
sql_query = sql_query + " AND amount > " + str(amount)
else:
if amount > 0:
sql_query = sql_query + "WHERE amount > " + str(amount)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
if amount > 0:
sql_query = sql_query + " AND amount > " + str(amount)
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
if amount > 0:
sql_query = sql_query + " AND amount > " + str(amount)
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
cursor.execute(sql_query)
return cursor.fetchall()
def update_to_blockamount(self, datetime, blockid, amount, height):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `blockamount` (`unixdt`, `amount`, `height`, `blockid`) VALUES (FROM_UNIXTIME(%s), %s, %s, %s)"
#print(sql_insert)
#print(datetime, blockid, amount, height)
cursor.execute(sql_insert, (datetime, amount, height, blockid))
self.conn.commit()
def delete_node_data(self, config):
with self.conn.cursor() as cursor:
sql_query = "DELETE FROM `blockamount`"
cursor.execute(sql_query)
sql_query = "DELETE FROM `bigamountvout`"
cursor.execute(sql_query)
sql_query = "DELETE FROM `bigamounttx`"
cursor.execute(sql_query)
self.conn.commit()
def update_realize_cap(self, dayutc, last_rv):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailyrcap` (`unixdt`, `rcap`) VALUES (FROM_UNIXTIME(%s), %s)"
#print(sql_insert)
#print(datetime, blockid, amount, height)
cursor.execute(sql_insert, (dayutc, last_rv))
self.conn.commit()
# daily realize cap
def query_from_realizecap(self, start_id=0, end_id=0, start_time="", end_time="", limit=0):
with self.conn.cursor() as cursor:
sql_query = "SELECT * from `dailyrcap`"
if start_id > 0:
sql_query = sql_query + " WHERE id > " + str(start_id)
if end_id > 0:
sql_query = sql_query + " AND id < " + str(end_id)
else:
if end_id > 0:
sql_query = sql_query + " WHERE id < " + str(end_id)
if len(start_time) > 0:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(\'" + end_time + "\')"
else:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(\'" + start_time + "\') AND UNIX_TIMESTAMP(NOW())"
else:
if len(end_time) > 0:
sql_query = sql_query + " WHERE UNIX_TIMESTAMP(unixdt) BETWEEN \
UNIX_TIMESTAMP(NOW()) AND UNIX_TIMESTAMP(\'" + end_time + "\')"
sql_query = sql_query + " order by `unixdt` desc"
if limit > 0:
sql_query = sql_query + " LIMIT " + str(limit)
print(sql_query)
cursor.execute(sql_query)
return cursor.fetchall()
def update_daily_addr(self, dayutc, last_add_cnt):
with self.conn.cursor() as cursor:
sql_insert = "INSERT INTO `dailyaddradd` (`unixdt`, `addcnt`) VALUES (FROM_UNIXTIME(%s), %s)"
#print(sql_insert)
#print(datetime, blockid, amount, height)
cursor.execute(sql_insert, (dayutc, last_add_cnt))
self.conn.commit()
def delete_daily_addr(self, config):
with self.conn.cursor() as cursor:
sql_query = "DELETE FROM `dailyaddradd`"
cursor.execute(sql_query)
self.conn.commit()
def delete_daily_rv(self, config):
with self.conn.cursor() as cursor:
sql_query = "DELETE FROM `dailyrcap`"
cursor.execute(sql_query)
self.conn.commit()
'''
def __del__(self):
self.conn.close()

610
coinbus/redis_if_qt.py Normal file
View File

@ -0,0 +1,610 @@
import time
from walrus import *
from loguru import logger
class RedisIf:
def __init__(self, host="127.0.0.1", port=6379, password="", db=0):
self.db = Database(host=host, port=port, db=db)
self.zbalance = self.db.ZSet("balancev2d")
'''
#realize cap progress
self.rv = self.db.Hash("rv")
#address and balance progress
self.addr = self.db.Hash("addr")
#block volume progress
self.bv = self.db.Hash("bv")
#daily volume progress
self.dv = self.db.Hash("dv")
'''
'''
#stat tx progress
self.tx = self.db.Hash("tx")
#ETH daily contract progress
self.eth_dc = self.db.Hash("ethdc")
#btc stats fee
self.btc_stats = self.db.Hash("btcstats")
#btc stats volume
self.btc_volume = self.db.Hash("btcvolume")
# btc stats cdd
self.btc_cdd = self.db.Hash("btccdd")
# btc stats cdd days
self.btc_cdd_days = self.db.Hash("btccdddays")
'''
self.btc_block_time = self.db.Hash("btcblocktimev2d")
'''
self.btc_sopr = self.db.Hash("btcsopr")
'''
self.btc_data = self.db.Hash("btc_datav2d")
self.active_address = self.db.Set("active_addressv2d")
self.send_address = self.db.Set("send_addressv2d")
self.receive_address = self.db.Set("receive_addressv2d")
def get_btc_data(self, key):
value = None
if self.btc_data[key] is not None:
value = self.btc_data[key]
return value
def set_btc_data(self, key, value):
self.btc_data[key] = value
def reset_btc_data(self):
self.btc_data.clear()
self.zbalance.clear()
self.btc_block_time.clear()
'''
def get_last_btc_sopr(self):
last_sopr_buy = None
last_asopr_buy = None
last_easopr_buy = None
last_lth_sopr_buy = None
last_sth_sopr_buy = None
last_asol = None
last_eaasol = None
if self.btc_sopr["last_asol"] is not None:
last_asol = self.btc_sopr["last_asol"]
#last_asol = float(self.btc_sopr["last_asol"].decode("utf-8"))
if self.btc_sopr["last_eaasol"] is not None:
last_eaasol = self.btc_sopr["last_eaasol"]
#last_eaasol = float(self.btc_sopr["last_eaasol"].decode("utf-8"))
if self.btc_sopr["last_sopr_buy"] is not None:
last_sopr_buy = self.btc_sopr["last_sopr_buy"]
#last_sopr_buy = float(self.btc_sopr["last_sopr_buy"].decode("utf-8"))
if self.btc_sopr["last_asopr_buy"] is not None:
last_asopr_buy = self.btc_sopr["last_asopr_buy"]
#last_asopr_buy = float(self.btc_sopr["last_asopr_buy"].decode("utf-8"))
if self.btc_sopr["last_easopr_buy"] is not None:
last_easopr_buy = self.btc_sopr["last_easopr_buy"]
#last_easopr_buy = float(self.btc_sopr["last_easopr_buy"].decode("utf-8"))
if self.btc_sopr["last_lth_sopr_buy"] is not None:
last_lth_sopr_buy = self.btc_sopr["last_lth_sopr_buy"]
#last_lth_sopr_buy = float(self.btc_sopr["last_lth_sopr_buy"].decode("utf-8"))
if self.btc_sopr["last_sth_sopr_buy"] is not None:
last_sth_sopr_buy = self.btc_sopr["last_sth_sopr_buy"]
#last_sth_sopr_buy = float(self.btc_sopr["last_sth_sopr_buy"].decode("utf-8"))
last_sopr_sell = None
last_asopr_sell = None
last_easopr_sell = None
last_lth_sopr_sell = None
last_sth_sopr_sell = None
if self.btc_sopr["last_sopr_sell"] is not None:
last_sopr_sell = self.btc_sopr["last_sopr_sell"]
# last_sopr_sell = float(self.btc_sopr["last_sopr_sell"].decode("utf-8"))
if self.btc_sopr["last_asopr_sell"] is not None:
last_asopr_sell = self.btc_sopr["last_asopr_sell"]
# last_asopr = float(self.btc_sopr["last_asopr"].decode("utf-8"))
if self.btc_sopr["last_easopr_sell"] is not None:
last_easopr_sell = self.btc_sopr["last_easopr_sell"]
# last_easopr_sell = float(self.btc_sopr["last_easopr_sell"].decode("utf-8"))
if self.btc_sopr["last_lth_sopr_sell"] is not None:
last_lth_sopr_sell = self.btc_sopr["last_lth_sopr_sell"]
# last_lth_sopr_sell = float(self.btc_sopr["last_lth_sopr_sell"].decode("utf-8"))
if self.btc_sopr["last_sth_sopr_sell"] is not None:
last_sth_sopr_sell = self.btc_sopr["last_sth_sopr_sell"]
# last_sth_sopr_sell = float(self.btc_sopr["last_sth_sopr_sell"].decode("utf-8"))
return last_asol, last_eaasol, last_sopr_buy, last_asopr_buy, last_easopr_buy, last_lth_sopr_buy, last_sth_sopr_buy, last_sopr_sell, last_asopr_sell, last_easopr_sell, last_lth_sopr_sell, last_sth_sopr_sell
def set_last_btc_sopr(self, last_asol, last_eaasol, last_sopr_buy, last_asopr_buy, last_easopr_buy, last_lth_sopr_buy, last_sth_sopr_buy, last_sopr_sell, last_asopr_sell, last_easopr_sell, last_lth_sopr_sell, last_sth_sopr_sell):
self.btc_sopr["last_asol"] = last_asol
self.btc_sopr["last_eaasol"] = last_eaasol
self.btc_sopr["last_sopr_buy"] = last_sopr_buy
self.btc_sopr["last_asopr_buy"] = last_asopr_buy
self.btc_sopr["last_easopr_buy"] = last_easopr_buy
self.btc_sopr["last_lth_sopr_buy"] = last_lth_sopr_buy
self.btc_sopr["last_sth_sopr_buy"] = last_sth_sopr_buy
self.btc_sopr["last_sopr_sell"] = last_sopr_sell
self.btc_sopr["last_asopr_sell"] = last_asopr_sell
self.btc_sopr["last_easopr_sell"] = last_easopr_sell
self.btc_sopr["last_lth_sopr_sell"] = last_lth_sopr_sell
self.btc_sopr["last_sth_sopr_sell"] = last_sth_sopr_sell
'''
def get_block_time(self, height):
block_time = None
height_str = str(height)
if self.btc_block_time[height_str] is not None:
block_time = int(self.btc_block_time[height_str].decode("utf-8"))
#block_time = int(self.btc_block_time[height_str].decode("utf-8"))
return block_time
def set_block_time(self, height, ts):
height_str = str(height)
self.btc_block_time[height_str] = ts
'''
def get_last_btc_cdd_days(self):
last_cdd = None
last_acdd = None
last_eacdd = None
last_cdd_day1= None
last_cdd_day7 = None
last_cdd_day30 = None
last_cdd_day60 = None
last_cdd_day90 = None
last_cdd_day180 = None
last_cdd_day365 = None
last_cdd_day730 = None
last_date = None
last_height = None
last_date_str = None
if self.btc_cdd["last_cdd"] is not None:
last_cdd = float(self.btc_cdd["last_cdd"].decode("utf-8"))
if self.btc_cdd["last_acdd"] is not None:
last_acdd = float(self.btc_cdd["last_acdd"].decode("utf-8"))
if self.btc_cdd["last_eacdd"] is not None:
last_eacdd = float(self.btc_cdd["last_eacdd"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day1"] is not None:
last_cdd_day1 = float(self.btc_cdd_days["last_cdd_day1"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day7"] is not None:
last_cdd_day7 = float(self.btc_cdd_days["last_cdd_day7"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day30"] is not None:
last_cdd_day30 = float(self.btc_cdd_days["last_cdd_day30"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day60"] is not None:
last_cdd_day60 = float(self.btc_cdd_days["last_cdd_day60"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day90"] is not None:
last_cdd_day90 = float(self.btc_cdd_days["last_cdd_day90"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day180"] is not None:
last_cdd_day180 = float(self.btc_cdd_days["last_cdd_day180"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day365"] is not None:
last_cdd_day365 = float(self.btc_cdd_days["last_cdd_day365"].decode("utf-8"))
if self.btc_cdd_days["last_cdd_day730"] is not None:
last_cdd_day730 = float(self.btc_cdd_days["last_cdd_day730"].decode("utf-8"))
if self.btc_cdd_days["last_date"] is not None:
last_date = int(self.btc_cdd_days["last_date"].decode("utf-8"))
if self.btc_cdd_days["last_height"] is not None:
last_height = int(self.btc_cdd_days["last_height"].decode("utf-8"))
if self.btc_cdd_days["last_date_str"] is not None:
last_date_str = self.btc_cdd_days["last_date_str"].decode("utf-8")
return last_cdd, last_acdd, last_eacdd, last_cdd_day1, last_cdd_day7, last_cdd_day30, last_cdd_day60, last_cdd_day90, last_cdd_day180, last_cdd_day365, last_cdd_day730, last_date, last_height, last_date_str
def set_last_btc_cdd_days(self, cdd, acdd, eacdd, day1, day7, day30, day60, day90, day180, day365, day730, dt, height, dtstr):
self.btc_cdd["last_cdd"] = cdd
self.btc_cdd["last_acdd"] = acdd
self.btc_cdd["last_eacdd"] = eacdd
self.btc_cdd_days["last_cdd_day1"] = day1
self.btc_cdd_days["last_cdd_day7"] = day7
self.btc_cdd_days["last_cdd_day30"] = day30
self.btc_cdd_days["last_cdd_day60"] = day60
self.btc_cdd_days["last_cdd_day90"] = day90
self.btc_cdd_days["last_cdd_day180"] = day180
self.btc_cdd_days["last_cdd_day365"] = day365
self.btc_cdd_days["last_cdd_day730"] = day730
self.btc_cdd_days["last_date"] = dt
self.btc_cdd_days["last_height"] = height
self.btc_cdd_days["last_date_str"] = dtstr
'''
'''
def get_last_btc_cdd(self):
last_cdd = None
last_date = None
last_height = None
last_date_str = None
if self.btc_cdd["last_cdd"] is not None:
last_cdd = float(self.btc_cdd["last_cdd"].decode("utf-8"))
if self.btc_cdd["last_date"] is not None:
last_date = int(self.btc_cdd["last_date"].decode("utf-8"))
if self.btc_cdd["last_height"] is not None:
last_height = int(self.btc_cdd["last_height"].decode("utf-8"))
if self.btc_cdd["last_date_str"] is not None:
last_date_str = self.btc_cdd["last_date_str"].decode("utf-8")
return last_cdd, last_date, last_height, last_date_str
def set_last_btc_cdd(self, cdd, dt, height, dtstr):
self.btc_cdd["last_cdd"] = cdd
self.btc_cdd["last_date"] = dt
self.btc_cdd["last_height"] = height
self.btc_cdd["last_date_str"] = dtstr
def get_last_btc_volume(self):
last_volume = None
last_date = None
last_height = None
last_date_str = None
if self.btc_volume["last_volume"] is not None:
last_volume = float(self.btc_volume["last_volume"].decode("utf-8"))
if self.btc_volume["last_date"] is not None:
last_date = int(self.btc_volume["last_date"].decode("utf-8"))
if self.btc_volume["last_height"] is not None:
last_height = int(self.btc_volume["last_height"].decode("utf-8"))
if self.btc_volume["last_date_str"] is not None:
last_date_str = self.btc_volume["last_date_str"].decode("utf-8")
return last_volume, last_date, last_height, last_date_str
def set_last_btc_volume(self, volume, dt, height, dtstr):
self.btc_volume["last_volume"] = volume
self.btc_volume["last_date"] = dt
self.btc_volume["last_height"] = height
self.btc_volume["last_date_str"] = dtstr
'''
'''
def get_last_btc_stats(self):
last_fees = None
last_date = None
last_height = None
last_date_str = None
last_volume = None
if self.btc_stats["last_fees"] is not None:
last_fees = float(self.btc_stats["last_fees"].decode("utf-8"))
if self.btc_volume["last_volume"] is not None:
last_volume = float(self.btc_volume["last_volume"].decode("utf-8"))
if self.btc_stats["last_date"] is not None:
last_date = int(self.btc_stats["last_date"].decode("utf-8"))
if self.btc_stats["last_height"] is not None:
last_height = int(self.btc_stats["last_height"].decode("utf-8"))
if self.btc_stats["last_date_str"] is not None:
last_date_str = self.btc_stats["last_date_str"].decode("utf-8")
return last_fees, last_volume, last_date, last_height, last_date_str
def set_last_btc_stats(self, fees, volume, dt, height, dtstr):
self.btc_stats["last_fees"] = fees
self.btc_volume["last_volume"] = volume
self.btc_stats["last_date"] = dt
self.btc_stats["last_height"] = height
self.btc_stats["last_date_str"] = dtstr
def get_last_eth_dc(self):
last_date = None
last_height = None
last_date_str = None
if self.eth_dc["last_date"] is not None:
last_date = int(self.eth_dc["last_date"].decode("utf-8"))
if self.eth_dc["last_height"] is not None:
last_height = int(self.eth_dc["last_height"].decode("utf-8"))
if self.eth_dc["last_date_str"] is not None:
last_date_str = self.eth_dc["last_date_str"].decode("utf-8")
return last_date, last_height, last_date_str
def set_last_eth_dc(self, dt, height, dtstr):
self.eth_dc["last_date"] = dt
self.eth_dc["last_height"] = height
self.eth_dc["last_date_str"] = dtstr
'''
'''
def get_last_dv(self):
last_dv = None
last_date = None
last_height = None
last_date_str = None
if self.dv["last_dv"] is not None:
last_dv = float(self.dv["last_dv"].decode("utf-8"))
if self.dv["last_date"] is not None:
last_date = int(self.dv["last_date"].decode("utf-8"))
if self.dv["last_height"] is not None:
last_height = int(self.dv["last_height"].decode("utf-8"))
if self.dv["last_date_str"] is not None:
last_date_str = self.dv["last_date_str"].decode("utf-8")
return last_dv, last_date, last_height, last_date_str
def set_last_dv(self, dv, dt, height, dtstr):
self.dv["last_dv"] = dv
self.dv["last_date"] = dt
self.dv["last_height"] = height
self.dv["last_date_str"] = dtstr
def get_last_bv(self):
last_height = None
if self.bv["last_height"] is not None:
last_height = int(self.bv["last_height"].decode("utf-8"))
return last_height
def set_last_bv(self, height):
self.bv["last_height"] = height
'''
'''
def get_last_ind(self):
last_csupply = None
last_mintusd = None
last_sumcsupply = None
last_sumcdd = None
last_sumeacdd = None
last_rprofit = None
last_rloss = None
last_marketcap = None
last_rcap = None
last_mvrv = None
last_earcap = None
if self.tx["last_csupply"] is not None:
last_csupply = float(self.tx["last_csupply"].decode("utf-8"))
if self.tx["last_mintusd"] is not None:
last_mintusd = float(self.tx["last_mintusd"].decode("utf-8"))
if self.tx["last_sumcsupply"] is not None:
last_sumcsupply = float(self.tx["last_sumcsupply"].decode("utf-8"))
if self.tx["last_sumcdd"] is not None:
last_sumcdd = float(self.tx["last_sumcdd"].decode("utf-8"))
if self.tx["last_sumeacdd"] is not None:
last_sumeacdd = float(self.tx["last_sumeacdd"].decode("utf-8"))
if self.tx["last_rprofit"] is not None:
last_rprofit = float(self.tx["last_rprofit"].decode("utf-8"))
if self.tx["last_rloss"] is not None:
last_rloss = float(self.tx["last_rloss"].decode("utf-8"))
if self.tx["last_marketcap"] is not None:
last_marketcap = float(self.tx["last_marketcap"].decode("utf-8"))
if self.tx["last_rcap"] is not None:
last_rcap = float(self.tx["last_rcap"].decode("utf-8"))
if self.tx["last_earcap"] is not None:
last_earcap = float(self.tx["last_earcap"].decode("utf-8"))
if self.tx["last_mvrv"] is not None:
last_mvrv = float(self.tx["last_mvrv"].decode("utf-8"))
return last_csupply, last_mintusd, last_sumcsupply, last_sumcdd, last_sumeacdd, last_rprofit, last_rloss, last_marketcap, last_rcap, last_earcap, last_mvrv
def set_last_ind(self, last_csupply, last_mintusd, last_sumcsupply, last_sumcdd, last_sumeacdd, last_rprofit, last_rloss, last_marketcap, last_rcap, last_earcap, last_mvrv):
self.tx["last_csupply"] = last_csupply
self.tx["last_mintusd"] = last_mintusd
self.tx["last_sumcsupply"] = last_sumcsupply
self.tx["last_sumcdd"] = last_sumcdd
self.tx["last_sumeacdd"] = last_sumeacdd
self.tx["last_rprofit"] = last_rprofit
self.tx["last_rloss"] = last_rloss
self.tx["last_marketcap"] = last_marketcap
self.tx["last_rcap"] = last_rcap
self.tx["last_earcap"] = last_earcap
self.tx["last_mvrv"] = last_mvrv
def get_last_tx(self):
last_profit = None
last_fees = None
last_newaddr_cnt = None
last_newaddr_vol = None
last_active_addr_cnt = None
last_tx_addr_cnt = None
last_rx_addr_cnt = None
last_vol_change = None
last_vol = None
last_avol = None
last_date = None
last_height = None
last_date_str = None
last_txs = None
last_eatxs = None
if self.tx["last_profit_rate"] is not None:
last_profit = int(self.tx["last_profit"].decode("utf-8"))
if self.tx["last_fees"] is not None:
last_fees = int(self.tx["last_fees"].decode("utf-8"))
if self.tx["last_txs"] is not None:
last_txs = int(self.tx["last_txs"].decode("utf-8"))
if self.tx["last_eatxs"] is not None:
last_eatxs = int(self.tx["last_eatxs"].decode("utf-8"))
if self.tx["last_newaddr_cnt"] is not None:
last_newaddr_cnt = int(self.tx["last_newaddr_cnt"].decode("utf-8"))
if self.tx["last_newaddr_vol"] is not None:
last_newaddr_vol = float(self.tx["last_newaddr_vol"].decode("utf-8"))
if self.tx["last_active_addr_cnt"] is not None:
last_active_addr_cnt = int(self.tx["last_active_addr_cnt"].decode("utf-8"))
if self.tx["last_tx_addr_cnt"] is not None:
last_tx_addr_cnt = int(self.tx["last_tx_addr_cnt"].decode("utf-8"))
if self.tx["last_rx_addr_cnt"] is not None:
last_rx_addr_cnt = int(self.tx["last_rx_addr_cnt"].decode("utf-8"))
if self.tx["last_vol_change"] is not None:
last_vol_change = float(self.tx["last_vol_change"].decode("utf-8"))
if self.tx["last_vol"] is not None:
last_vol = float(self.tx["last_vol"].decode("utf-8"))
if self.tx["last_avol"] is not None:
last_avol = float(self.tx["last_avol"].decode("utf-8"))
if self.tx["last_date"] is not None:
last_date = int(self.tx["last_date"].decode("utf-8"))
if self.tx["last_height"] is not None:
last_height = int(self.tx["last_height"].decode("utf-8"))
if self.tx["last_date_str"] is not None:
last_date_str = self.tx["last_date_str"].decode("utf-8")
return last_profit, last_fees, last_txs, last_eatxs, last_newaddr_cnt, last_newaddr_vol, last_active_addr_cnt, last_tx_addr_cnt, last_rx_addr_cnt, last_vol_change, last_vol, last_avol, last_date, last_height, last_date_str
def set_last_tx(self, last_profit, last_fees, last_txs, last_eatxs, newaddr_cnt, newaddr_vol, active_addr_cnt, tx_addr_cnt, rx_addr_cnt, vol_change, vol, avol, dt, height, dtstr):
self.tx["last_profit"] = last_profit
self.tx["last_fees"] = last_fees
self.tx["last_txs"] = last_txs
self.tx["last_eatxs"] = last_eatxs
self.tx["last_newaddr_cnt"] = newaddr_cnt
self.tx["last_newaddr_vol"] = newaddr_vol
self.tx["last_active_addr_cnt"] = active_addr_cnt
self.tx["last_tx_addr_cnt"] = tx_addr_cnt
self.tx["last_rx_addr_cnt"] = rx_addr_cnt
self.tx["last_vol_change"] = vol_change
self.tx["last_vol"] = vol
self.tx["last_avol"] = avol
self.tx["last_date"] = dt
self.tx["last_height"] = height
self.tx["last_date_str"] = dtstr
'''
'''
def get_last_addr(self):
last_daily_cnt = None
last_date = None
last_height = None
last_date_str = None
if self.addr["last_daily_cnt"] is not None:
last_daily_cnt = int(self.addr["last_daily_cnt"].decode("utf-8"))
if self.addr["last_date"] is not None:
last_date = int(self.addr["last_date"].decode("utf-8"))
if self.addr["last_height"] is not None:
last_height = int(self.addr["last_height"].decode("utf-8"))
if self.addr["last_date_str"] is not None:
last_date_str = self.addr["last_date_str"].decode("utf-8")
return last_daily_cnt, last_date, last_height, last_date_str
def set_last_addr(self, daily_cnt, dt, height, dtstr):
self.addr["last_daily_cnt"] = daily_cnt
self.addr["last_date"] = dt
self.addr["last_height"] = height
self.addr["last_date_str"] = dtstr
'''
def is_active_address(self, address):
result = address in self.active_address
if not result:
self.active_address.add(address)
return result
def reset_active_address(self):
self.active_address.clear()
def get_active_address_cnt(self):
return len(self.active_address)
def is_send_address(self, address):
result = address in self.send_address
if not result:
self.send_address.add(address)
return result
def reset_send_address(self):
self.send_address.clear()
def get_send_address_cnt(self):
return len(self.send_address)
def is_receive_address(self, address):
result = address in self.receive_address
if not result:
self.receive_address.add(address)
return result
def reset_receive_address(self):
self.receive_address.clear()
def get_receive_address_cnt(self):
return len(self.receive_address)
def save_addr(self, address, balance):
new_balance = balance
if address in self.zbalance:
new_balance = self.zbalance.score(address) + balance
#print("update", self.zbalance.score(address), balance, new_balance)
#time.sleep(10)
if new_balance < 0.01:
del self.zbalance[address]
#print("check exist", address, address in self.zbalance)
#time.sleep(10)
return
self.zbalance.add({address: new_balance})
'''
def delete_addr(self, config):
self.addr.clear()
self.zbalance.clear()
'''
def is_in_addr(self, address):
return address in self.zbalance
def get_addr_cnt(self):
return len(self.zbalance)
'''
def delete_rv(self, config):
self.rv.clear()
def get_last_rv(self):
last_rv = None
last_date = None
last_height = None
last_date_str = None
if self.rv["last_rv"] is not None:
last_rv = float(self.rv["last_rv"].decode("utf-8"))
if self.rv["last_date"] is not None:
last_date = int(self.rv["last_date"].decode("utf-8"))
if self.rv["last_height"] is not None:
last_height = int(self.rv["last_height"].decode("utf-8"))
if self.rv["last_date_str"] is not None:
last_date_str = self.rv["last_date_str"].decode("utf-8")
return last_rv, last_date, last_height, last_date_str
def set_last_rv(self, rv, dt, height, dtstr):
self.rv["last_rv"] = rv
self.rv["last_date"] = dt
self.rv["last_height"] = height
self.rv["last_date_str"] = dtstr
'''
def get_all_address(self):
return self.zbalance.keys()
def delete_address_data(self, config):
self.zbalance.clear()
'''
def query_from_address(self, start_balance=0, end_balance=0, address="", limit=0):
if len(address) > 0:
results = []
result = {}
result["address"] = address
balance = self.zbalance.score(address)
print(balance)
if balance is not None:
result["balance"] = balance
results.append(result)
return results
match_result = None
if start_balance > 0:
if end_balance > 0:
match_result = self.zbalance.range_by_score(start_balance, end_balance, 0, -1, True, False)
else:
match_result = self.zbalance.range_by_score(0, start_balance, 0, -1, True, False)
else:
if end_balance > 0:
match_result = self.zbalance.range_by_score(end_balance, 21000000, 0, -1, True, False)
results = []
if match_result is not None:
#print(match_result)
for addr, balance2 in match_result:
address = addr.decode('utf-8')
result = {}
result["address"] = address
result["balance"] = balance2
results.append(result)
if limit > 0 and len(results) >= limit:
break
return results
'''