본문 바로가기

파이썬을 이용한 비트코인 자동 매매 프로그램 만들기

파이썬을 이용한 바이비트 데이터 엑셀로 저장하기(이어쓰기 : pandas)

반응형

안녕하세요. 교육이입니다 ^^

 

오늘은 코인 거래 사이트에서 받아온 여러 정보들을

엑셀 파일저장하는 방법을 알려드릴게요.

(이전 글에서 이 내용을 질문하셔서 자세히 알려드리고자

글을 쓰게 되었어요 ^^)

 

먼저, 오늘 만들 엑셀의 데이터 형태예요.

파이썬의 데이터를 엑셀에 저장

엑셀에 너무 많은 데이터를 저장하면,

엑셀 열 때 시간이 오래 걸리긴 하지만...

필요 하신 분이 계신 듯 해서

그 방법을 알려드릴게요.

 

전체적인 코드의 배치본문 가장 아래에 있어요.

 

 

1. pandas, openpyxl 설치 방법

파이썬 데이터를 엑셀 파일로 저장하기 위해서

pandas와 openpyxl 모듈을 설치해야 되요.

 

설치 방법은 아나콘다 프롬프트를 실행시키고,

코인 거래를 위해서 생성한 아나콘다 환경을 활성화 시킨 다음

다음 명령어를 입력하고,

conda install pandas
conda install openpyxl

Proceed 에서 y를 눌러주면 해당 모듈이 설치가 완료 되요.

 

아나콘다 실행 및 환경 활성화 방법을 잊으셨다면,

아래 글2.1) 2.3)을 봐주세요.

아나콘다 실행 및 환경 활성화

 

주피터 노트북 설치 및 실행_윈도우 용

안녕하세요! 교육이 입니다. 파이썬을 이용해 비트코인을 자동으로 매매할 수 있는 프로그램을 만드는 방법! 같이 알아보기로 했었죠?! 오늘은 두 번째 게시글 입니다~ 웹 브라우저에서 파이썬

giftededu.tistory.com

 

 

2. 코인 데이터 등 받아오기

바이비트 데이터 받아오는 방법은 이전 글에 있어서

이전 글의 코드를 그대로 이용할게요.

USDT = float(session.get_wallet_balance(accountType = "CONTRACT", coin = "USDT")[
    'result']['list'][0]['coin'][0]['equity'])  #USDT 보유량

my_positions = session.get_positions(category = 'linear', symbol = 'BTCUSDT')[
    'result']['list']

if my_positions[0]['side'] == 'Buy':
    l_side = 0
    s_side = 1
elif my_positions[1]['side'] == 'Buy':
    l_side = 1
    s_side = 0
    
position_size_long = float(my_positions[l_side]['size'])  # BTCUSDT long size
position_size_short = float(my_positions[s_side]['size'])  # BTCUSDT short size
position_average_long = float(my_positions[l_side]['avgPrice'])  # BTCUSDT long 평균가격
position_average_short = float(my_positions[s_side]['avgPrice'])  # BTCUSDT short 평균가격
position_leverage_long = float(my_positions[l_side]['leverage'])  # BTCUSDT long 레버리지
position_leverage_short = float(my_positions[s_side]['leverage'])  # BTCUSDT short 레버리지

BTCUSDT_now = float(session.get_tickers(category = 'linear', symbol = 'BTCUSDT')[
    'result']['list'][0]['lastPrice']) #BTCUSDT 현재가

이전 글에 대한 링크예요.

 

바이비트(bybit) 자동매매 2024년 2월 최신버전 파이썬 코딩 (V5 API)

안녕하세요. 교육이입니다^^ 오늘은 바이비트 V5에서 자동거래 하는 방법을 알려드리려 해요. 교육이는 자동거래로 계속 거래를 하다가 최근 다른 전략을 적용하려 했더니.. 옛날버전에서는 지

giftededu.tistory.com

 

이 코드에서 받아온 데이터는

롱과 숏의 사이즈, 오픈 평균가, 레버리지와 BTCUSDT의 현재가 예요.

 

 

3. 파이썬 데이터를 엑셀로 저장하기(덮어쓰기, 이어쓰기)

1)모듈 불러오기

먼저, 아래의 모듈을 불러오는 코드를 이용해

새로운 모듈을 불러와야 해요.

import pandas as pd
import os.path
from datetime import datetime

이 코드는 여러분이 작성한 코드 가장 위쪽 부분에 추가하시면 되요.

(from pybit.unified_trading import HTTP 와 같이 다른 모듈을 불러오는 근처에요.)

 

2) 현재시간 불러오기 및 엑셀 형태 구성

now = datetime.today()

df = pd.DataFrame({'시간' : [now],
                   '현재가': [BTCUSDT_now],
                   '롱 사이즈': [position_size_long],
                   '롱 평균가' : [position_average_long],
                   '롱 레버리지' : [position_leverage_long]})

now 는 현재 날짜와 시간 정보를 불러오는 부분이고,

'df' ~ '롱 레버리지'로 시작하는 줄은 pandas 모듈을 이용해서

우리가 원하는 데이터들을 원하는 형태에 맞추어 구성하는 부분이예요.

 

이렇게 하면 이 포스팅의 가장 위의 엑셀 데이터의 형태가 되요.

 

3) 데이터를 엑셀 파일로 저장(이어쓰기)

구성한 데이터를 엑셀 파일로 저장하는 방법은 아래와 같아요.

def save_excel(df, excel_path, sheet_name):
    if not os.path.exists(excel_path):
        df.to_excel(excel_path, sheet_name = sheet_name, index = False)
    else:
        with pd.ExcelWriter(excel_path, engine = 'openpyxl',
                            if_sheet_exists = 'overlay', mode = 'a') as writer:
            df.to_excel(writer, sheet_name = sheet_name,
                        startrow = writer.sheets[sheet_name].max_row,
                        header = None, index = False)

이 코드는 엑셀 파일을 만들기 위해

save_excel 이라는 함수만드는 부분이예요.

 

의미는 파일이 없을 때파일을 새로 만들고,

파일이 있을 때기존 파일에 이어쓰기를 하는 거예요.

 

이 부분도 여러분의 코드 위쪽에

한번 적어주시면 되요.

 

예를 들어, API키를 입력한 다음 정도면 될 것 같아요.

 

마지막으로 엑셀파일에 데이터를 저장하는 코드예요.

save_excel(df, excel_path = 'test.xlsx', sheet_name = 'Sheet1')

위에서 만든 save_excel 이라는 함수실행시키는 부분이예요.

의미는 현재 프로그램이 실행되는 위치에서,

3.2) 에서 구성했던 형태로 test.xlsx 이라는 파일의 Sheet1저장하는 거예요.

 

 

4. 전체 구성 요약

대략적인 코딩 순서를 정리해봤어요.

from pybit.unified_trading import HTTP
import pandas as pd
import os.path
from datetime import datetime

with open("bybit.key") as f:
    lines = f.readlines()
    api_key = lines[0].strip()
    api_secret = lines[1].strip()
session = HTTP(
    testnet = False,
    api_key=api_key,
    api_secret=api_secret
)

def save_excel(df, excel_path, sheet_name):
    if not os.path.exists(excel_path):
        df.to_excel(excel_path, sheet_name = sheet_name, index = False)
    else:
        with pd.ExcelWriter(excel_path, engine = 'openpyxl',
                            if_sheet_exists = 'overlay', mode = 'a') as writer:
            df.to_excel(writer, sheet_name = sheet_name,
                        startrow = writer.sheets[sheet_name].max_row,
                        header = None, index = False)

USDT = float(session.get_wallet_balance(accountType = "CONTRACT", coin = "USDT")[
    'result']['list'][0]['coin'][0]['equity'])  #USDT 보유량

my_positions = session.get_positions(category = 'linear', symbol = 'BTCUSDT')[
    'result']['list']

if my_positions[0]['side'] == 'Buy':
    l_side = 0
    s_side = 1
elif my_positions[1]['side'] == 'Buy':
    l_side = 1
    s_side = 0
    
position_size_long = float(my_positions[l_side]['size'])  # BTCUSDT long size
position_size_short = float(my_positions[s_side]['size'])  # BTCUSDT short size
position_average_long = float(my_positions[l_side]['avgPrice'])  # BTCUSDT long 평균가격
position_average_short = float(my_positions[s_side]['avgPrice'])  # BTCUSDT short 평균가격
position_leverage_long = float(my_positions[l_side]['leverage'])  # BTCUSDT long 레버리지
position_leverage_short = float(my_positions[s_side]['leverage'])  # BTCUSDT short 레버리지

BTCUSDT_now = float(session.get_tickers(category = 'linear', symbol = 'BTCUSDT')[
    'result']['list'][0]['lastPrice']) #BTCUSDT 현재가
    
###"""실제 거래가 이루어지는 부분의 코드 시작"""###
    
    now = datetime.today()
    BTCUSDT_now = float(session.get_tickers(category = 'linear', symbol = 'BTCUSDT')[
            'result']['list'][0]['lastPrice'])
    position_size_long = float(my_positions[l_side]['size'])    
    position_average_long = float(my_positions[l_side]['avgPrice'])
    position_leverage_long = float(my_positions[l_side]['leverage'])

    df = pd.DataFrame({'시간' : [now],
                      '현재가': [BTCUSDT_now],
                      '롱 사이즈': [position_size_long],
                      '롱 평균가' : [position_average_long],
                      '롱 레버리지' : [position_leverage_long]})
                   
    save_excel(df, excel_path = 'test.xlsx', sheet_name = 'Sheet1')

시간, 현재가 등등의 데이터를 엑셀 파일로 저장하기 바로 직전에

해당 코드를 한번 실행시켜야 최신 정보로 데이터가 저장이 되기 때문에,

now, BTCUSDT_now, position_size_long, df = ~~ 등을 

save_excel 전에 실행이 되도록 배치해야되요.

 

 

오늘은 파이썬 데이터를 엑셀 파일로 저장하는 방법을 알아봤어요.

 

오늘도 즐거운 하루 되세요~

반응형