const WebSocket = require('ws');
const pd = require("node-pandas");
var symbol_list = ['btcusdt',"xrpusdt"]
var dic_list = []
for (var i = 0 ; i < symbol_list.length; i++) {
dic_list[i] = {'symbol':symbol_list[i].toLocaleUpperCase(), 'TIME':NaN, 'bid_p':NaN, 'bid_q':NaN,'ask_p':NaN,'ask_q':NaN}
}
var url_bin = "wss://stream.binance.com:9443/ws"
for (var i = 0 ; i < symbol_list.length; i++){
url_bin = url_bin + "/"+symbol_list[i] +"@bookTicker"
}
let socket = new WebSocket(url_bin);
var dic = {}
socket.onmessage = function(event){
var data_1 = JSON.parse(event.data);
for (var i = 0 ; i < dic_list.length; i++){
if (dic_list[i]['symbol'] == data_1["s"]){ //심볼명이 같다면.
dic_list[i]["TIME"] = data_1["u"];
dic_list[i]["bid_p"] = data_1["b"];
dic_list[i]["bid_q"] = data_1["B"];
dic_list[i]["ask_p"] = data_1["a"];
dic_list[i]["ask_q"] = data_1["A"];
}
}
pd.DataFrame(dic_list).toCsv("E:/ATZ/price_data.csv",index = false);
console.log(dic_list);
};
# 모든 심볼 (개별 지정 )티커 스트림.
# 심볼 한개 깊이 를 준 호가창. 심볼명이 없네.
import websocket, json
import pandas as pd
from IPython.display import display, clear_output
url = f'wss://stream.binance.com:9443/ws'
symbol_list = ['btcusdt',"xrpusdt"]
###########
dic_list = [{'symbol':symbol_list[i].upper(), 'TIME':None,
'bid_p':None, 'bid_q':None,'ask_p':None,'ask_q':None}
for i in range(len(symbol_list))]
###########
for i in range(len(symbol_list)):
url = url + f'/{symbol_list[i]}@bookTicker'
def on_message(ws, message):
data = json.loads(message)
# print(data)
# dic = {
# "symbol": data["s"],
# "TIME": data["E"],
# "bid_p": data["b"][0][0],
# "bid_q": data["b"][0][1],
# "ask_p": data["a"][0][0],
# "ask_q": data["a"][0][1]
# }
###############
for i in range(len(dic_list)):
if dic_list[i]['symbol'] == data["s"]:
dic_list[i]['TIME'] = data["u"]
dic_list[i]["bid_p"] = data["b"]
dic_list[i]["bid_q"] = data["B"]
dic_list[i]["ask_p"] = data["a"]
dic_list[i]["ask_q"] = data["A"]
##
pd.DataFrame(dic_list).to_csv("price_data.csv",index = False)
statuses = (dic_list)
if (len(statuses) != 0):
clear_output(wait=True)
display(statuses)
################
def on_close(ws):
print("close")
ws = websocket.WebSocketApp(url, on_message=on_message, on_close=on_close)
ws.run_forever()
# 심볼명 받을 갯수에 따라서 딕셔너리를 만들어 데이터 프레임으로 바로 계속 저장하는 형식.
booktiker로 원하는 심볼명 소문자로 추가만 하면 100ms마다 orderbook(호가창 상단)값의 데이터를 가공해서 csv에 저장한다.
'IT - 코딩 > 유용한 코드' 카테고리의 다른 글
파이썬 exe 파일 만들기 (0) | 2023.04.23 |
---|---|
주피터 노트북 테마 바꾸기 (0) | 2022.08.12 |
한 폴더 내 파일들 전부 불러오기(with python)(for 머신러닝) (0) | 2022.08.12 |
인베스트 데이터 전처리(with python)+예스 트레이더, 데이터 가이드포함 (0) | 2022.07.22 |