source

나는 파이썬으로 바이낸스 데이터를 스트리밍하고 있지만 내 mariadbdb에 삽입하면 가격이 반올림됩니다.

nicesource 2023. 8. 17. 21:26
반응형

나는 파이썬으로 바이낸스 데이터를 스트리밍하고 있지만 내 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

반응형