반응형
나는 파이썬으로 바이낸스 데이터를 스트리밍하고 있지만 내 mariadbdb에 삽입하면 가격이 반올림됩니다.
데이터를 잘 스트리밍할 수 있고 원하는 결과를 반환하지만 데이터베이스에 삽입하면 소수점 이하 몇 자리가 지나면 데이터가 반올림됩니다.
아래의 데이터 조각입니다.
{
"stream_type":"btcusdt@kline_1m",
"event_type":"kline",
"event_time":1686983029769,
"symbol":"BTCUSDT",
"kline":{
"kline_start_time":1686982980000,
"kline_close_time":1686983039999,
"symbol":"BTCUSDT",
"interval":"1m",
"first_trade_id":false,
"last_trade_id":false,
"open_price":"26738.94000000",
"close_price":"26777.99000000",
"high_price":"26778.00000000",
"low_price":"26738.94000000",
"base_volume":"52.18289000",
"number_of_trades":1613,
"is_closed":false,
"quote":"1396485.64284410",
"taker_by_base_asset_volume":"37.43018000",
"taker_by_quote_asset_volume":"1001618.64984080",
"ignore":"0"
},
"unicorn_fied":[
"binance.com",
"0.12.2"
]
}
위의 내용을 검색할 수 있는 코드가 있습니다.
위의 내용을 검색할 수 있는 코드가 있습니다.
#import
from unicorn_binance_websocket_api.manager import BinanceWebSocketApiManager
import time
import pandas as pd
import sqlalchemy
from sqlalchemy import create_engine
#create engine to connect to DB
engine = sqlalchemy.create_engine("mariadb+mariadbconnector://test_user:StrongPassword@127.0.0.1:3306/test_db")
#define coins to collect data from and start stream
symbols = ['BTC','COMBO']
symbols = [symbol+'usdt' for symbol in symbols]
ubwa = BinanceWebSocketApiManager(exchange="binance.com", output_default="UnicornFy")
ubwa.create_stream(['kline_1m'], symbols, output="UnicornFy")
#sort data from stream into dataframes and insert into db
def SQLimport(data):
time = data['event_time']
coin = data['symbol']
open_price = data['kline']['open_price']
close_price = data['kline']['close_price']
low_price = data['kline']['low_price']
high_price = data['kline']['high_price']
volume = data['kline']['taker_by_base_asset_volume']
frame = pd.DataFrame([[time,open_price,close_price,low_price,high_price,volume]], columns = ['time','open_price','close_price','low_price','high_price','volume'])
frame.time = pd.to_datetime(frame.time, unit='ms')
frame.open_price = frame.open_price.astype(float)
frame.close_price = frame.close_price.astype(float)
frame.low_price = frame.low_price.astype(float)
frame.high_price = frame.high_price.astype(float)
frame.volume = frame.volume.astype(float)
frame['amplitude'] = (frame.high_price - frame.low_price) / (frame.high_price + frame.low_price) /2
frame.to_sql(coin, engine, index=False, if_exists='append')
while True:
data = ubwa.pop_stream_data_from_stream_buffer()
if data:
if len(data) > 3:
SQLimport(data)
print(data)
이렇게 하면 데이터를 DB로 가져와서 화면에 출력할 수 있지만, 인쇄된 값은 전체 가격(26738.94000000)을 나타냅니다. 여기서 이 레코드가 DB에서 반환되면 26738.94를 반환받으면 가격을 반올림하거나 완전히 삽입하지 않은 것 같습니다.수동으로 데이터를 삽입했는데 이를 수락할 수 있지만 스크립트를 통해 열린 열, 닫힌 열, 높은 열, 낮은 열이 소수점 두 자리로 반올림됩니다.
저도 sqlite db를 설정하고 거기에 데이터를 삽입했는데 결과는 똑같았습니다.
저는 밤새 구글 검색을 했고, 판다 문서를 최대한 읽었고, 당황했습니다.
제가 뭔가 명백한 것을 놓치고 있나요?
안내해 주셔서 감사합니다.
언급URL : https://stackoverflow.com/questions/76495173/i-am-streaming-binance-data-in-python-but-the-prices-are-rounded-down-when-inser
반응형
'source' 카테고리의 다른 글
숫자만 포함할 문자열 제약 조건을 확인합니다. (Oracle SQL) (0) | 2023.08.17 |
---|---|
jQuery를 사용하여 URL 변경 및 리디렉션 (0) | 2023.08.17 |
약속 함수에 매개 변수를 전달하는 방법 (0) | 2023.08.17 |
투명 배경의 신속한 모달 뷰 컨트롤러 (0) | 2023.08.17 |
어느 것이 더 빠릅니까?SELECT * 또는 SELECT column1, column2, column3 등 (0) | 2023.08.17 |