반응형

파이썬 암호화폐 / 빗썸 API를 이용하여 매수, 매도하기

 

빗썸 API를 이용하여 매수와 매도를 해보겠습니다. 

API key, Secret Key를 얻는 방법은 아래 링크에서 확인하시면 됩니다. 

 

zidarn87.tistory.com/153

 

파이썬 암호화폐 / 빗썸 API를 이용하여 잔고 조회하기

파이썬 암호화폐 / 빗썸 API를 이용하여 잔고 조회하기 빗썸에서 제공하는 API를 사용하여, 잔고 조회를 해보도록 하겠습니다. 우선 빗썸에 로그인하여 계정 관리 페이지에 들어갑니다. www.bi

zidarn87.tistory.com

 

매도하기

매도는 sell_limit_order 함수를 이용하시면 됩니다. 

첫번째 전달인자는 ticker이며, 

두번째 전달인자는 매도하려는 가격, 

세번째 전달인자는 매도하려는 수량입니다. 

order = bithumb.sell_limit_order("BTC", 13100000, 1)
print(order)

잔여 보유량은 0.044 정도인데, 1을 판매하려고 할 때, 아래와 같이 에러 메시지가 출력됩니다. 

 

sell_limit_order 함수의 세번째 전달인자인 매도하려는 수량을 현재 가지고 있는 수량의 일부분을 넣어보도록 하겠습니다. 그럼 아래와 같이 지정가 매도주문(ask), 주문번호(C0101000000191021689)를 확인할 수 있습니다. 

빗썸에서도 매도된 것을 확인할 수 있습니다. 

print("팔려는 금액: ", btc_price * 0.004)

order = bithumb.sell_limit_order("BTC", 13100000, 0.004)
print(order)

거래내역

 

 

매수하기

매수는 buy_limit_order 함수를 이용합니다. 

첫번째 전달인자는 ticker이며,

두번째 전달인자는 매수하려는 가격, => (int형으로 지정해야 합니다)

세번째 전달인자는 매수하려는 수량입니다. 

print("현재 비트코인 시세: ", btc_price)
print("사려는 금액: ", btc_price * 0.0001)

order = bithumb.buy_limit_order("BTC", int(btc_price), 0.0001)
print(order)

빗썸에서 아래 거래 내역을 확인하실 수 있습니다. 

 

주문량이 현재 잔여 원화보다 크다면 아래와 같이 에러 메시지를 출력합니다. 

 

참고로 빗썸은 체결 수수료가 0.15%입니다. 매수 주문 시에는 주문 체결 수량을 기준으로 수수료가 계산되고 수수료를 제외한 수량이 입금됩니다.

 

반응형
반응형

파이썬 암호화폐 / 빗썸 API를 이용하여 잔고 조회하기

 

빗썸에서 제공하는 API를 사용하여, 잔고 조회를 해보도록 하겠습니다. 

우선 빗썸에 로그인하여 계정 관리 페이지에 들어갑니다. 

 

www.bithumb.com/

 

No.1 가상자산 플랫폼, 빗썸

가상자산 거래소, 렌딩, 스테이킹, 예치, 비트코인, 이더리움, 리플, 비트코인캐시, 라이트코인, 비트코인 골드, 이오스, 이더리움클래식, 퀀텀, 체인링크, 실시간 시세, 쉽고 안전한 거래

www.bithumb.com

 

계정관리 페이지에 API 관리 기능으로 들어갑니다. 

API 설정을 추가하여, API Key와 Secret Key를 가져오도록 하겠습니다. 

API 활성화 시 그 API로 어떠한 기능을 할지에 대한 설정을 합니다. 

아래 기능에 대해 사용할 설정에 체크를 합니다. 

 

IP 주소와 출금 기능 주소를 설정합니다. 

이 설정은 하지 않아도 API Key와 Secret Key를 가져올 수 있습니다. 

 

마지막으로 비밀번호와 ARS 인증을 하면 API KEY 생성을 할 수 있습니다. 

그러면 아래와 같이 API Key와 Secret Key가 생성되는 것을 확인할 수 있습니다. 

그리고 활성화 버튼을 누르면 됩니다.

생성된 API Key와 Secret Key를 아래 Bithumb 함수에 넣어주면 연결됩니다. 

import pybithumb

connect_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
secret_key  = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

bithumb = pybithumb.Bithumb(connect_key, secret_key)

 

모든 티겟중에 보유한 잔고를 출력해 보도록 하겠습니다. 

get_banlance에 ticker를 넣어주면, 그 ticker에 대한 잔고를 출력하게 됩니다. 

튜플 안에는 네 개의 값이 저장되어 있는데 앞에서부터 순서대로 비트코인의 총 잔고, 거래 중인 비트코인의 수량, 보유 중인 총원화, 주문에 사용된 원화를 의미합니다. 

for ticker in pybithumb.get_tickers() :
    balance = bithumb.get_balance(ticker)
    print(ticker, " : ", balance)
    time.sleep(0.1)

 

보유중인 잔여 BTC의 원화가치로 환산해보겠습니다. 

get_current_price 함수는 현재 원화가치를 가져올 수 있습니다. 

보유중인 BTC의 잔여 수량과 현재 원화가치를 곱하면 BTC의 원화가치를 구할 수 있습니다. 

btc_price = pybithumb.get_current_price("BTC")
btc_balance = bithumb.get_balance("BTC")
print(type(btc_price))
print(type(btc_balance[0]))
print("BTC price : ", float(btc_price) * float(btc_balance[0]))

 

전체코드

import pybithumb
import time

connect_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
secret_key  = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

bithumb = pybithumb.Bithumb(connect_key, secret_key)


for ticker in pybithumb.get_tickers() :
    balance = bithumb.get_balance(ticker)
    print(ticker, " : ", balance)
    time.sleep(0.1)


btc_price = pybithumb.get_current_price("BTC")
btc_balance = bithumb.get_balance("BTC")
print(type(btc_price))
print(type(btc_balance[0]))
print("BTC price : ", float(btc_price) * float(btc_balance[0]))
반응형
반응형

파이썬 암호화폐  / pybithumb 모듈로 빗썸 비트코인 정보 가져오기

 

빗썸에 가입하지 않고, 빗썸에서 제공하는 API를 통해 가상화폐의 현재가와 거래량 등의 정보를 가져올 수 있습니다. 

이 API를 사용하는 방법에 대해서 살펴보겠습니다. 

 

먼저 pybithumb 모듈을 설치합니다. 

pip install pybithumb 

 

pybithumb를 import하고, 가상화폐 티커 목록과 총 갯수 정보를 가져오겠습니다. 

간단하게 pybithumb 모듈의 get_tickers() 함수로 티커 목록을 가져옵니다. 

tickers = pybithumb.get_tickers()
print(tickers)
print("total : " , len(tickers))

 

그리고 get_current_price() 함수로 원하는 티커의 현재가를 가져올 수 있습니다. 

BTC(비트코인)이 가장 유명하니, 해당 현재가를 가져오도록 하겠습니다.

price = pybithumb.get_current_price("BTC")
print("BTC price : ", price)

get_market_detail() 함수는 24시간 동안의 저가/고가/거래금액/거래량 정보를 가져옵니다.

detail = pybithumb.get_market_detail("BTC")
print(detail)

get_orderbook() 함수로는 원하는 티커의 호가 정보를 가져옵니다. 

timestamp, payment_currency, order_currency, bids, asks 정보를 표시하는데, 

bids는 매수 호가이며, asks는 매도 호가 정보입니다.

orderbook = pybithumb.get_orderbook("BTC")
print(orderbook)

 

전체 코드

import pybithumb

tickers = pybithumb.get_tickers()
print(tickers)
print("total : " , len(tickers))

price = pybithumb.get_current_price("BTC")
print("BTC price : ", price)

detail = pybithumb.get_market_detail("BTC")
print(detail)

orderbook = pybithumb.get_orderbook("BTC")
print(orderbook)
반응형
반응형

파이썬 주식 / pandas로 상장법인 목록을 읽어와 Listview로 출력하기

 

 

1) read_html() 함수로 파일 읽기

한국거래소 기업공시채널(kind.krx.co.kr) 상장법인상세정보 > 상장법인목록에서 excel을 다운받아 read_html() 함수로 상장법인 목록을 읽습니다. 

column명이 한글로 되어 있어서 영문으로 변경하였고, 업종코드는 총 6자리로 표시하도록 하였습니다. (26이면 000026으로)

#df = pd.read_html('https://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13')[0]
df = pd.read_html('D:\\test.xls')
dfs = df[0]
print(dfs.columns)

dfs.rename(columns={"회사명":"name"}, inplace=True)
dfs.rename(columns={"종목코드":"code"}, inplace=True)
dfs['code'] = dfs['code'].map('{:06d}'.format)
dfs.rename(columns={"업종":"type"}, inplace=True)
dfs.rename(columns={"주요제품":"major"}, inplace=True)
dfs.rename(columns={"상장일":"start_date"}, inplace=True)
dfs.rename(columns={"결산월":"settlement"}, inplace=True)
dfs.rename(columns={"대표자명":"representative"}, inplace=True)
dfs.rename(columns={"홈페이지":"homepage"}, inplace=True)
dfs.rename(columns={"지역":"region"}, inplace=True)
print(dfs.columns)

2) 가져온 상장법인목록을 Listbox 및 Label로 정보 표시하기

이 내용은 아래 링크를 참조합니다. 

https://zidarn87.tistory.com/70?category=415247

파이썬 GUI tkinter / dataframe의 내용을 Listbox, Label로 표시

파이썬 GUI tkinter / dataframe의 내용을 Listbox, Label로 표시 1) numpy 배열로 data frame 생성 Listbox에 넣을 이름과 Label에 정보를 표시할 성별과 태어난 해 정보를 가지고 배열을 만듭니다. 배..

zidarn87.tistory.com

 

전체 코드

import numpy as np
import pandas as pd
from tkinter import *

#df = pd.read_html('https://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13')[0]
df = pd.read_html('D:\\test.xls')
dfs = df[0]
print(dfs.columns)

dfs.rename(columns={"회사명":"name"}, inplace=True)
dfs.rename(columns={"종목코드":"code"}, inplace=True)
dfs['code'] = dfs['code'].map('{:06d}'.format)
dfs.rename(columns={"업종":"type"}, inplace=True)
dfs.rename(columns={"주요제품":"major"}, inplace=True)
dfs.rename(columns={"상장일":"start_date"}, inplace=True)
dfs.rename(columns={"결산월":"settlement"}, inplace=True)
dfs.rename(columns={"대표자명":"representative"}, inplace=True)
dfs.rename(columns={"홈페이지":"homepage"}, inplace=True)
dfs.rename(columns={"지역":"region"}, inplace=True)
print(dfs.columns)

def CurSelect(evt):
    value = str((lb.get(lb.curselection())))
    index = str((lb.index(lb.curselection())))
    print(value)
    print(index)

    count = lb.index(lb.curselection())
    name_w['text'] = dfs.loc[count, 'name']
    code_w['text'] = dfs.loc[count, 'code']
    type_w['text'] = dfs.loc[count, 'type']
    major_w['text'] = dfs.loc[count, 'major']
    start_date_w['text'] = dfs.loc[count, 'start_date']
    settlement_w['text'] = dfs.loc[count, 'settlement']
    representative_w['text'] = dfs.loc[count, 'representative']
    homepage_w['text'] = dfs.loc[count, 'homepage']
    region_w['text'] = dfs.loc[count, 'region']


window = Tk()
window.geometry("700x400")

lb = Listbox(window, height=5, selectmode=SINGLE)

lb.bind('<<ListboxSelect>>',CurSelect)
lb.pack()
for i in dfs.index:
    val = dfs.loc[i, 'name']
    lb.insert(END, val)

name_l = Label(window, text="회사명 : ")
name_l.pack()
name_l.place(x=0, y=120, anchor='sw')

name_w = Label(window, text="N/A")
name_w.pack()
name_w.place(x=50, y=120, anchor='sw')

code_l = Label(window, text="종목코드 : ")
code_l.pack()
code_l.place(x=0, y=120+30, anchor='sw')

code_w = Label(window, text="N/A")
code_w.pack()
code_w.place(x=65, y=120+30, anchor='sw')

type_l = Label(window, text="업종 : ")
type_l.pack()
type_l.place(x=0, y=120+30+30, anchor='sw')

type_w = Label(window, text="N/A")
type_w.pack()
type_w.place(x=40, y=120+30+30, anchor='sw')

major_l = Label(window, text="주요제품 : ")
major_l.pack()
major_l.place(x=0, y=120+30+30+30, anchor='sw')

major_w = Label(window, text="N/A")
major_w.pack()
major_w.place(x=65, y=120+30+30+30, anchor='sw')

start_date_l = Label(window, text="상장일 : ")
start_date_l.pack()
start_date_l.place(x=0, y=120+30+30+30+30, anchor='sw')

start_date_w = Label(window, text="N/A")
start_date_w.pack()
start_date_w.place(x=50, y=120+30+30+30+30, anchor='sw')

settlement_l = Label(window, text="결산월 : ")
settlement_l.pack()
settlement_l.place(x=0, y=120+30+30+30+30+30, anchor='sw')

settlement_w = Label(window, text="N/A")
settlement_w.pack()
settlement_w.place(x=50, y=120+30+30+30+30+30, anchor='sw')

representative_l = Label(window, text="대표자명 : ")
representative_l.pack()
representative_l.place(x=0, y=120+30+30+30+30+30+30, anchor='sw')

representative_w = Label(window, text="N/A")
representative_w.pack()
representative_w.place(x=65, y=120+30+30+30+30+30+30, anchor='sw')

homepage_l = Label(window, text="홈페이지 : ")
homepage_l.pack()
homepage_l.place(x=0, y=120+30+30+30+30+30+30+30, anchor='sw')

homepage_w = Label(window, text="N/A")
homepage_w.pack()
homepage_w.place(x=65, y=120+30+30+30+30+30+30+30, anchor='sw')

region_l = Label(window, text="지역 : ")
region_l.pack()
region_l.place(x=0, y=120+30+30+30+30+30+30+30+30, anchor='sw')

region_w = Label(window, text="N/A")
region_w.pack()
region_w.place(x=40, y=120+30+30+30+30+30+30+30+30, anchor='sw')


window.mainloop()
반응형

+ Recent posts