使用幣安期貨總交易流 (websocket),我試圖計算每方(做市商/接受者)每分鐘所有交易的總價值。我正在努力解決的部分是試圖找到一種有效的方法來確定一分鐘何時結束和新一分鐘何時開始。到目前為止,我的解決方案是將 unix 值轉換為日期時間值,僅保留日期時間值的“分鐘”部分,將其存盤為變數(名為“分鐘”),并檢查每條新訊息的最新情況分鐘”值與之前的“分鐘”值進行比較。
當我運行腳本時,只要新的一分鐘開始,'minute' 變數就會更新,但最終elif陳述句下的先前步驟似乎都不起作用。
elif unixmin != minute:
sumprodmkr = sum(x*y for x, y in list(zip(qtymkr, pricemkr)))
sumprodtkr = sum(x*y for x, y in list(zip(qtytkr, pricetkr)))
print (sumprodmkr)
print (sumprodtkr)
qtymkr.clear()
pricemkr.clear()
qtytkr.clear()
pricetkr.clear()
minute = unixmin
我確信有一種更有效的方法可以做到這一點,如果有人能指出我正確的方向,我將不勝感激。
完整腳本如下:
import websocket
import json
from datetime import datetime
socket = 'wss://stream.binance.com:9443/ws/btcusdt@trade'
ws = websocket.WebSocketApp(socket, on_message=on_message, on_error=on_error, on_close=on_close)
qtymkr = []
pricemkr = []
qtytkr = []
pricetkr = []
def on_message(ws, message):
content = json.loads(message)
ismaker = content['m']
price = content['p']
qty = content['q']
unix = content['T']
unix2 = int(content['T'])/1000
unixmin = datetime.utcfromtimestamp(unix2).strftime('%M')
if ismaker == 'True':
qtymkr.append(float(qty))
pricemkr.append(float(price))
else:
qtytkr.append(float(qty))
pricetkr.append(float(price))
global minute
minute = 0
if minute == 0:
minute = unixmin
elif unixmin == minute:
pass
elif unixmin != minute:
sumprodmkr = sum(x*y for x, y in list(zip(qtymkr, pricemkr)))
sumprodtkr = sum(x*y for x, y in list(zip(qtytkr, pricetkr)))
print (sumprodmkr)
print (sumprodtkr)
qtymkr.clear()
pricemkr.clear()
qtytkr.clear()
pricetkr.clear()
minute = unixmin
def on_error(ws, error):
print(error)
def on_close(ws, close_status_code, close_msg):
print('Socket closed')
ws.run_forever()
uj5u.com熱心網友回復:
怎么樣Cron?
APScheduler - 很棒的 Python 包。享受! https://apscheduler.readthedocs.io/en/3.x/
uj5u.com熱心網友回復:
代碼肯定需要一些作業,但它是功能性的并且實作了我想要的。
import websocket
import json
from datetime import datetime
socket = 'wss://stream.binance.com:9443/ws/btcusdt@trade'
qtymkr = []
pricemkr = []
qtytkr = []
pricetkr = []
minute = 0
unixmin = 0
sumprodmkr = 0
sumprodtkr = 0
def minflag():
global minute
global unixmin
global sumprodmkr
global sumprodtkr
if minute == 0:
minute = unixmin
elif unixmin == minute:
break
elif unixmin != minute:
sumprodmkr = sum(x*y for x, y in list(zip(qtymkr, pricemkr)))
sumprodtkr = sum(x*y for x, y in list(zip(qtytkr, pricetkr)))
print (sumprodmkr)
print (sumprodtkr)
qtymkr.clear()
pricemkr.clear()
qtytkr.clear()
pricetkr.clear()
minute = unixmin
def on_message(ws, message):
global minute
global unixmin
global sumprodmkr
global sumprodtkr
content = json.loads(message)
ismaker = content['m']
price = content['p']
qty = content['q']
unix = content['T']
unix2 = int(content['T'])/1000
unixmin = datetime.utcfromtimestamp(unix2).strftime('%M')
if ismaker == True:
qtymkr.append(float(qty))
pricemkr.append(float(price))
else:
qtytkr.append(float(qty))
pricetkr.append(float(price))
minflag()
def on_error(ws, error):
print(error)
def on_close(ws, close_status_code, close_msg):
print('Socket closed')
ws = websocket.WebSocketApp(socket, on_message=on_message, on_error=on_error, on_close=on_close)
ws.run_forever()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341399.html
