최소 거래

마지막 업데이트: 2022년 4월 17일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기

그림 6-1 계정 관리 메뉴

“현금 거래 종료하는 가상자산 거래소, 늦어도 17일까지 공지해야”

고객의 실명확인 계좌를 제공받지 못해 현금 입출금 거래 영업을 종료하는 가상자산(암호화폐) 거래소는 늦어도 17일까지 고객에게 공지하고, 24일까지 현금 거래 서비스를 종료해야 한다. 영업종료 뒤에도 한 달 이상 시간을 두고 기존 자산을 고객에게 돌려줘 소비자 피해를 최소화해야 한다.

금융위원회는 6일 가상자산 사업자 신고를 준비중인 업체를 대상으로 설명회를 열었다고 밝혔다. 금융위는 최소 거래 신고 요건을 갖추기 힘들어 거래소 영업을 종료하는 경우 영업종료일 최소 일주일 전에 고객에게 공지·개별통지하라고 했다. 영업종료 공지 이후부터는 이용자 입금을 중단하고, 기존 자산 출금은 영업종료일 이후 최소 30일 이상 시간을 두고 처리해 고객의 피해가 없도록 해야 한다고 강조했다. 영업 종료 뒤에는 이용자들의 개인정보는 파기해야 한다고 했다.

25일부터는 가상자산 사업자 신고제도가 시행되면서 금융정보분석원(FIU)에 신고된 거래소에서만 현금 입출금 거래를 할 수 있다. 신고수리 요건은 은행으로부터 고객의 실명계좌를 제공받는 것이다. 현재 업비트가 신고 수리 절차를 밟는 중이고, 빗썸·코인원·코빗도 수일 안에 신고를 할 것으로 예상된다.

은행 실명계좌를 받지 못한 거래소는 코인 간 거래를 중개하는 영업만 가능하다. 코인 중개만 한다고 금융당국에 신고할 경우 현금 거래 서비스 종료 사실을 확인할 수 있는 서류를 함께 제출해야 한다. 금융당국은 예치금 반환 여부 등을 검증할 계획이다.

금융위는 “가상자산 사업자 신고기한이 약 3주밖에 남지 않아 이용자들의 각별히 주의해야 한다”며 “금융정보분석원에 신고하지 않은 사업자는 폐업·영업중단을 할 수 밖에 없으므로 사전에 예치금·가상자산을 인출하는 등 선제적인 조처를 할 필요가 있다”고 당부했다.

토스증권, ‘리얼타임’ 실시간 해외주식 소수점 거래 시작

토스증권(대표 박재민)이 미국 우량 주식 및 ETF에 1,000원부터 투자할 수 있는 실시간 해외주식 소수점 거래 서비스를 시작한다.

국내에선 유일하게, 투자자의 소수점 주문을 1주 단위로 묶지 않고 즉시 체결하는 방식으로, 지체없는 실시간 거래가 가능하다. 투자 가능 종목도 총 3,070개로, 해외주식 소수점 거래 서비스 중 가장 많은 종목에 투자할 수 있다.

토스증권의 실시간 해외주식 소수점 거래는 1주 단위의 기존 해외주식 거래 방식과 주문 체결시간, 투자 가능 종목, 거래 수수료 등이 대부분 동일하다. 미국 정규장이 열리는 밤 10시 30분부터 다음 날 새벽 4시까지(서머타임 적용 기준) 시장가로 주문되며, 그 외 시간대에는 예약 주문이 가능하다. 프리마켓과 애프터마켓 소수점 거래도 순차적으로 선보일 계획이다.

토스증권에서 제공하는 미국 주식과 ETP, 리츠 등 전 종목이 거래 가능하다. 대표적인 고가 주식인 버크셔 해서웨이 클래스 A, 아마존 및 파생 ETF도 포함된다.

소수점 거래는 기존의 1주 단위 구매하기와 동일하게 각 종목 구매 화면에서 ‘금액 주문’을 선택해 투자금액을 입력하면 된다. 최소 1,000원부터 입력된 금액에 맞춰 주문 가능한 수량이 표시된다. 예를 들어, 한화 기준 약 120만원의 테슬라 주식을 1,000원만큼 주문하면 0.000833주가 구매되는 식이다.

토스증권 관계자는 “고객이 원하는 미국의 우량 종목을 가장 폭넓게 제공하면서도 가장 빠르게 소수점 단위로 거래할 수 있는 해외주식 서비스는 토스증권이 유일하다”며, “앞으로도 고객 중심적인 사고로 만족을 높일 수 있는 압도적인 투자 서비스를 만들어 나갈 것”이라고 말했다.

전 고객 대상의 ‘소수점 주식 받기’ 이벤트도 진행한다. 고객이 원하는 미국주식을 선택하고 최소 1,000원부터 최대 1,000만원까지의 당첨금을 뽑으면, 토스증권이 당첨된 금액만큼 주식을 구매해 지급하는 형식이다. 고객에게 소수점 투자 기회를 제공하기 위해 마련된 이번 이벤트는 이달 말까지 진행되며, 조기 종료될 수 있다.

토스증권은 지난 해 12월 해외주식 서비스를 시작하고, 이후 프리/애프터마켓 확대, 거래종목 확대 등 고객 니즈에 최소 거래 맞춰 서비스를 지속적으로 개선해 나가고 있다. 4월 현재 해외주식 투자 고객 110만을 유치하며 빠르게 성장하고 있다. 국내주식 투자 고객도 420만명에 달한다.

[더구루=홍성일 기자] 삼성전자의 투자를 유치한 바 있는 글로벌 암호화폐(가상화폐, 가상자산) 거래소 FTX가 주식 중개 기술을 보유한 스타트업 인수에 나선 것으로 알려졌다.

미국의 경제전문매체 CNBC 등 23일 정통한 소식통을 인용해 FTX가 최소 3곳 이상의 주식 중개 스타트업과 협상을 진행했다고 보도했다. CNBC는 FTX가 관련된 사안에 대해서 별도의 코멘트를 하지 않았다고 덧붙였다.

CNBC는 FTX가 접촉한 스타트업으로 웹불, 에이팩스 클리어링, 퍼블릭닷컴 등을 거론했으며 이들 업체들도 답변을 거부했다고 밝혔다.

FTX가 주식 중개 스타트업을 인수하려는 것은 FTX가 가상자산 거래는 물론 최소 거래 주식 거래도 한꺼번에 가능한 슈퍼앱을 구상하고 있기 때문이다. 이런 FTX의 계획이 본격적으로 나타난 것은 미국 최대 주식 거래 플랫폼인 로빈후드의 지분을 인수하면서다.

미국증권거래위원회(SEC)는 12일(현지시간) 샘 뱅크먼 프라이드가 로빈후드의 지분 7.6%를 보유하고 있다고 밝혔다. SEC가 공개한 문서에 따르면 샘 뱅크먼 프라이드는 약 5600만 주 가량의 주식을 보유하고 있으며 가치는 4억8200만 달러(약 6200억원)에 달한다.

지난 19일(현지시간)에는 주식 거래 플랫폼인 'FTX 스톡스(FTX Stocks)'를 출시한다고 발표했다. 해당 플랫폼은 미국 내 유저들을 대상으로 서비스하는 미국 증시 거래 서비스로 FTX US는 FTX 스톡스 출시에 맞춰 참여를 원한 유저들 중 일부를 추첨해 비공개 베타 최소 거래 테스트를 진행할 계획이다.

FTX 스톡스는 기존 FTX 암호화폐 거래앱에 통합된 형태로 일반 주식은 물론 ETF 등도 거래할 수 있으며 투명한 거래와 공정한 가격 책정을 보장하기 위해 모든 주문을 나스닥을 통해 진행한다. FTX는 무엇보다 주식 거래 수수료를 받지 않고 서비스하며 최근 로빈후드 등에서 문제가 된 투자자 주식 주문 정보 판매(payment for order flow, PFOF)도 도입하지 않는다. 또한 FTX US는 USDC와 같은 법정화폐 기반 스테이블 코인을 통해 자금을 조달, 주식 거래를 할 수 있는 서비스도 제공한다.

FTX 관계자는 CNBC와의 인터뷰를 통해 "미국에서 두 개의 자산을 거래하기 위해 두 개의 앱을 서비스하고 싶지 않다"며 "이는 수익 창출 모델이라고 보기보다는 사용자 확보 전략에 가깝다"고 설명했다.

TRUE ELW

유동성공급자(LP, Liquidity Provider)란 금융상품에 대한 매매가 원활하게 이루어질 수 있도록 매도∙매수 호가를 지속적으로 제시하는 시장참가자를 말합니다. ELW 또한 유가증권시장 상장 규정에 따라 제도를 채택하도록 되어있으며 한국투자증권이 발행한 TRUE ELW의 LP는 한국투자증권입니다.

ELW의 LP는 시장의 매도∙매수 스프레드 비율이 사전에 신고한 최대 호가스프레드 비율(15%)을 초과할 경우 LP호가를 제시함으로써 투자자들의 매매 요구에 응하고 거래 활성화에 기여합니다. 단, LP가 제시한 호가가 투자자가 매매하고자 하는 가격과 크게 차이가 날 수 있으며 기초자산의 시장 상황에 따라 매매 가능한 물량도 제한적이거나 일시적으로 당해 증권의 유동성을 확보하지 못하여 거래가 이루어지지 않을 수도 있습니다.

Home trading system의 ELW 현재가 화면에서 LP호가를 확인하실 수 있습니다. 매도/매수 호가의 가장 바깥쪽에 표시되는 수량이 LP수량입니다.

Home trading system의 ELW 현재가 화면에서 LP호가를 확인하실 수 있습니다. 매도/매수 호가의 가장 바깥쪽에 표시되는 수량이 LP수량입니다.

LP호가제도

LP호가제도의 의무시점, 스프레드, 최소수량, 제공기간 설명으로 구성된 표입니다.
LP호가
의무시점
정규시장의 매매거래시간 중 최우선호가를 기준으로 한 호가스프레드 비율이 신고비율(15%)을 초과하는 경우 (매도호가 또는 매수호가의 어느 일방 또는 양방에 호가가 없는 경우 포함) 그로부터 5분 이내 LP호가 제출 의무 발생
LP호가
스프레드
호가스프레드 비율이 8%이상 ~ 15%이하가 되도록 제출
LP호가
최소수량
매도 : 100증권, 매수 : 100증권 혹은 5000원 이상에 해당하는 수량 중 큰 쪽
LP호가
제공기간
상장일~최종거래일 (유동성공급계약기간),(단, 주식ELW는 최종거래일 전 5 영업일까지)

호가스프레드 비율 = (최우선매도호가 – 최우선매수호가) / 최우선매수호가 X 100
호가스프레드 비율은 최우선호가 기준이며 이미 제출된 LP호가 및 비LP호가 모두 포함하여 산출합니다.

LP의 제출가능 호가범위 예시

LP의 매도∙매수 호가간 스프레드 비율이 8% 이상 ~ 15% 이하가 되도록 제출합니다.

LP의 호가제출의 일반적인 경우의 LP의 매수호가별 LP매도호가의 최저와 최고 금액이 기재한 표입니다. 최소 거래 최소 거래
LP매수호가 LP매도 최저 LP매도 최고 스프레드(틱)
75 85 좌동 2
.
95 105 좌동 2
100 110 115 2~3
.
125 135 140 2~3
130 145 좌동 3
135 150 155 3~4
.
165 180 185 3~4
170 185 195 3~5
.
185 200 2103~5
190 210 215 4~5
195 215 220 4~5
200 220 230 4~6
.
230 250 260 4~6
235 255 270 4~7
.

LP호가스프레드 예외사항

(예외 1) 최소 호가가격 단위에 해당하는 경우: LP 매수 호가가 30원 미만인 경우

LP가 호가스프레드(매도 가격-매수 가격)를 최소 호가단위인 5원으로 줄여도 스프레드 비율이 15%를 초과하는 경우, 최소 호가단위 5원 간격으로 LP호가 제출을 허용합니다.

(예외 2) 매도에 대응하는 매수 가격이 없는 경우: LP 매수 호가가 65, 70원인 경우

LP 매도 호가 가격의 불연속 방지를 위해 매수호가가 65, 70원인 경우 각각 70원 75원에 LP호가 제출을 허용합니다.

LP의 호가제출의 예외적인 경우의 LP의 매수호가별 LP매도호가의 최저와 최고 금액을 기재한 표입니다.
LP매수호가 LP매도호가 스프레드비율(%) 해당사항
최저 최고
5 10 좌동 100.0 (예외1)에 해당
10 15 좌동 50.0
15 20 좌동 33.3
20 25 좌동 25.0
25 30 좌동 20.0
30 35 좌동 16.7
35 40 좌동 14.3
40 45 좌동 12.5
45 50 좌동 11.1
50 55 좌동 10.0
55 60 좌동 9.1
60 65 좌동 8.3
65 70 좌동 7.7 (예외2)에 해당
70 75 80 7.1

LP호가 제출이 면제되는 경우

  • 최우선호가를 기준으로 한 호가스프레드가 1호가 가격 단위(5원)에 해당되어 신고비율(15%)이내로 축소할 수 없는 경우 LP호가 제출이 면제됩니다.
  • 기초자산인 주권의 직전 가격이 상한가 또는 하한가인 경우 면제됩니다.
  • 기초자산이 단일 가격에 의한 개별경쟁매매(단일가 매매) 상태이거나 단일가 매매 종료 후 5분이 경과하지 않은 경우 면제됩니다.
  • ELW 가격이 크게 하락하여 최소단위(5원) 이상의 가격으로 유동성 공급 호가를 제출하는 것이 곤란하다고 인정되는 경우 LP호가 제출이 면제됩니다.
  • 호가 최소 거래 상황 또는 거래 상황(기초자산의 호가 상황 또는 거래 상황 포함)의 급격한 변동 혹은 그 밖의 사유로 거래소가 시장관리상 필요하다고 인정하는 경우도 LP호가 제출은 면제됩니다.

LP호가 제출이 제한되는 경우

  • 정규시장 거래시간 중 최우선호가스프레드 비율이 신고비율(15%) 이내여서 LP호가 제출 의무가 없는 경우 LP는 호가를 제출할 수 없습니다.

단, LP호가 부재로 인한 시세 조정 가능성을 최소화하기 위해 최우선 매도 호가 미만으로 매도 호가 제출은 허용됩니다.

    이용약관 및 고객유의사항
  • 고객센터 1544-5000

Copyright 2020 korea investment & securities co. ltd.
all rights reserved.

06-1 빗썸 Private API

빗썸 거래소에서 Private API를 사용하기 위해서는 회원가입뿐만 아니라 API 사용신청을 해야 합니다. 회원가입과 관련된 내용은 본 도서에서 설명하지 않기 때문에 빗썸 홈페이지의 이용 안내(https://www.bithumb.com/u1/US129)를 참고해서 진행해 주시기 바랍니다. API 신청을 위해 그림 6-1과 같이 빗썸 로그인 후 오른쪽 위의 이메일 주소를 선택하고 ‘계정관리’ 메뉴를 선택합니다.


그림 6-1 계정 관리 메뉴

이어서 그림 6-2와 같이 왼쪽 아래의 API 관리 메뉴를 선택하세요.


그림 6-2 API 관리 페이지

그림 6-3의 API 관리 페이지의 ‘API 활성화 항목 접근’ 메뉴에서는 파이썬으로 제어하려는 빗썸 API 기능을 선택합니다. 본 도서에서는 지갑 정보, 주문내역, 매수주문, 매도주문, 거래 취소, 회원 거래내역을 사용합니다. 참고로 API를 이용한 KRW 출금, 코인 출금은 보안상의 이유로 사용하지 않았습니다.

최소 거래
그림 6-3 API 활성화 항목

그림 6-4의 보안 인증 메뉴에서 '인증요청' 버튼을 클릭하고 전송받은 인증 번호를 입력합니다. ‘보안 비밀번호’는 로그인할 때, 계정 비밀번호 다음으로 입력하는 이차 비밀번호입니다. 값을 모두 입력하고 API KEY 생성 버튼을 클릭하세요.


그림 6-4 보안 인증

그림 6-5와 같이 팝업창이 뜨면 확인 버튼을 누르고 계속 진행합니다. 보안과 관련된 주의 사항은 자세히 읽어 봐야 합니다. API Key와 Secret Key의 유출은 금전적 손실로 직결될 최소 거래 수 있으니 보안 관리에 항상 주의하세요. 참고로 API Key와 Secret Key가 유출될 때를 대비해서 그림 6-3에서 KRW/코인 출금 기능을 활성화하지 않은 겁니다.


그림 6-5 주의사항 창

아래로 스크롤을 내리면 그림 6-6과 같이 API Connect Key와 Secret Key 두 개를 확인할 수 있습니다. 키를 활성화한 이후에는 Secret Key는 더 이상 확인할 수 없기 때문에 두 키값을 파일로 저장해두는 것이 좋습니다. 참고로 두 키값이 모두 있어야 파이썬에서 Private API를 사용할 수 있습니다. 키값을 저장했다면 '활성화' 버튼을 클릭합니다.


그림 6-6 사용 중인 API 리스트

그림 6-7의 팝업창에서 ‘승인하기’ 버튼을 클릭하면 API 키가 활성화됩니다. 지금이 Secret Key를 확인할 수 최소 거래 있는 마지막 기회입니다. 아직 저장하지 않았다면, 승인하기를 누르기에 앞서 키를 저장하세요. 추후에 Secret Key가 기억나지 않는다면 기존 API Key를 삭제하고 새롭게 만들어야 하는 번거로움을 감수해야 합니다.


그림 6-7 API Key 활성화 승인 창

그림 6-8과 같이 빗썸 가입 시 사용한 이메일 주소로 활성화 요청 메일이 옵니다. 메일의 'Click' 링크를 누르면 최종적으로 API 키가 활성화됩니다.


그림 6-8 API 신청 승인 메일

Bithumb 클래스 객체 생성하기

여러분은 빗썸 홈페이지에서 아이디와 암호를 사용해 로그인한 후 매수/매도 거래를 진행할 수 있습니다. 이와 유사하게 pybithumb 모듈은 Connect Key와 Secret Key로 사용자를 인증한 이후에 private API를 제어할 수 있습니다. pybithumb 모듈에는 Bithumb이라는 클래스가 구현되어 있는데 여기에 빗썸 거래소의 private API를 위한 메서드들이 구현되어 있습니다. 따라서 여러분은 pybithumb 모듈을 사용해서 private API를 사용하려면 가장 먼저 Bithumb 클래스의 객체를 생성해야 합니다. Bithumb 클래스의 초기화자를 호출할 때 Connect Key와 Secret Key를 넘겨주면 됩니다.

라인 3: API 신청 페이지에서 발급받은 본인의 Connect Key를 입력합니다.
라인 4: API 신청 페이지에서 발급받은 본인의 Secret Key를 입력합니다.
라인 6: Bithumb 클래스 객체를 생성하는데 초기화자( __init__ )로 두 키값을 전달합니다.

두 키값을 문자열로 정의한 것을 눈여겨보세요. Ch06/ch06_01.py에서 con_key와 sec_key 변수에 바인딩된 키값은 사용자 인증에 사용되기 때문에 반드시 여러분의 키로 변경해야 합니다. 올바르게 두 키를 입력했다면 bithumb 변수를 최소 거래 사용해서 Bithumb 클래스에 구현되어 있는 매수/매도 주문 등의 private API를 사용할 수 있겠죠? Bithumb 클래스에 어떤 메서드가 정의돼 있는지 하나씩 알아보도록 하겠습니다.

잔고 조회

Bithumb 클래스의 get_balance() 메서드는 보유하고 있는 가상화폐의 잔고를 조회합니다. 조회할 가상화폐의 티커(ticker)를 get_balance() 메서드의 파라미터로 전달해주면 됩니다. Ch06/06_02.py는 비트코인(BTC)의 잔고를 조회하고 그 결과를 화면에 출력합니다.

get_balance() 메서드는 하나의 튜플을 반환합니다. 튜플 안에는 네 개의 값이 저장되어 있는데 앞에서부터 순서대로 비트코인의 총 잔고, 거래 중인 비트코인의 수량, 보유 중인 총원화, 주문에 사용된 원화를 의미합니다. 혹시 ‘Invalid Apikey’ 에러가 출력됐다면 con_key와 sec_key 변수에 입력한 본인의 키를 다시 확인해 보세요.

위 출력에서 첫 번째 값은 비트코인의 총잔고인데 값이 조금 이상해 보입니다. 이는 매우 크거나 작은 수를 효과적으로 표현하기 위해서 파이썬이 지수승 형태로 출력해서 그렇습니다. 사람이 읽기 좋은 실수로 값을 출력하려면 다음과 같이 format() 함수를 사용하세요.

5장에서 배웠던 public API와 private API를 함께 사용하면 모든 가상화폐의 잔고를 조회할 수 있습니다. Ch06/06_03.py 코드를 실행하면 1초에 10개씩 모든 가상화폐의 잔고를 화면에 출력합니다.

라인 9: public API인 get_tickers() 함수는 모든 가상화폐의 티커를 리스트로 반환합니다. 반복문의 ticker 변수에는 가상화폐의 티커가 차례로 바인딩됩니다.
라인 10: ticker에 바인딩된 가상화폐를 private API인 get_balance() 메서드로 조회합니다. 결과 값은 balance 변수에 바인딩합니다.
라인 11: balance 변수에 저장된 잔고를 화면에 출력합니다.

이번에는 pybithumb 모듈을 사용해서 매수 API를 사용해 봅시다. 빗썸은 지정가 매수(limit order)와 시장가 매수(market order)라는 두 가지 타입의 API를 지원합니다. 지정가 매수는 말 그대로 정해진 가격에 매수 주문을 하는 것입니다. 예를 들어 비트코인의 시가가 400만 원일 때 이보다 더 싸게 사고 싶어서 300만 원에 10개를 사겠다고 주문을 내는 것이 지정가 주문입니다. 이와 달리 시장가 매수는 현재 매도호가 중 가장 낮은 최소 거래 가격으로 즉시 매수 체결이 됩니다. 예를 들어 호가가 그림 6-9와 같다면 3,982,000원이 매도 호가 중 가장 낮은 가격이므로 이 가격으로 주문이 체결됩니다. 시장가로 비트코인 1개를 매수하면 3,982,000 원에 0.5521개, 그 위의 호가인 3,988,000원에 0.4391개, 그 위 호가인 3,990,000원에 0.0088개가 즉시 체결됩니다.


그림 6-9 비트코인의 호가창

Bithumb 클래스에서 지정가 매수는 buy_limit_order() 메서드를 사용합니다. buy_limit_order() 최소 거래 메서드의 파라미터로 구매하고자 하는 가상화폐의 티커, 지정가, 매수 수량을 순서대로 입력합니다. 예를 들어 3,900,000원에 비트코인 0.001개를 매수하려면 ch06/06_04.py와 같이 주문 코드를 작성합니다.

buy_limit_order() 메서드의 결괏값으로 주문 종류, 티커, 주문 번호가 튜플로 반환됩니다. 아래 결괏값을 보면 매수(‘bid’) 주문으로 비트코인(‘BTC’)을 주문했음을 알 수 있습니다. 주문 번호는 주문을 구별하기 위한 고윳값으로 주문 조회/취소/정정에 사용됩니다.

주문이 실행된 결과는 그림 6-10과 같이 빗썸 홈페이지에서 확인할 수 있습니다. 비트코인의 현재가는 400만 원으로 390만 원에 주문을 했기 때문에 미체결 주문으로 남아있습니다.


그림 6-10 미체결 주문의 조회

지정가 매수를 하는 경우 다음 세 가지에 유의해서 주문을 넣어야 합니다.

첫 번째로 최소 수량 제약에 맞춰 주문을 해야 합니다. 그림 6-11을 참조하면 비트코인은 최소 0.001개를 주문해야 함을 알 수 있습니다. 또한 비트코인의 최소 주문 수량이 0.001개라고 해서 0.00123개는 주문할 수 없습니다. 빗썸은 소수점 넷째 자리까지의 주문만 가능하기 때문에 주문의 유효 자릿수를 맞춰야 합니다. 참고로 pybithumb 모듈은 소수점 네 자리 이하는 버림 후에 주문을 발행합니다. 마지막으로 가상화폐 또한 주식과 같이 '호가 단위'가 존재합니다. 그림 6-9의 호가창을 보면 1,000원 단위로 비트코인의 가격이 결정되는 것을 확인할 수 있습니다. 호가 단위에 맞는 매수 가격을 입력해야 합니다.


그림 6-11 빗썸 최소 거래 수량

주문 제약 사항을 지키지 않을 경우 주문이 정상적으로 실행되지 않을 수 있습니다. 비트코인은 1,000원 단위로 호가를 지정해야 하는데, 100원 단위로 주문을 해 보겠습니다.

코드의 실행 결과 다음과 같은 에러 메시지가 출력됩니다. 또한 buy_limit_order() 메서드의 실행결과 None이라는 값이 반환됩니다.

최우선 매도호가에 거래되는 시장가 매수는 buy_market_order() 메서드를 사용합니다. 매물에 따라 가격이 정해지기 때문에 메서드의 파라미터로 사고자 하는 가상화폐의 티커와 매수 수량만을 입력받습니다. 예를 들어 시장가로 비트코인 1개를 매수하려면 ch06/06_05.py와 같이 코딩하면 됩니다.

시장가 주문은 가격을 지정하지 않기 때문에 최소 주문 수량과 유효 자릿수 두 가지를 주의해야 합니다. 예를 들어, 원화로 100,000원이 있고 현재 최우선 매도 호가 4,000,000원에 매물이 충분하다면 0.025(100000/4000000) 개만큼의 비트코인을 매수할 수 있습니다. 이때 0.025는 최소 주문 수량과 유효 자릿수를 만족하기 때문에 매수 주문이 정상 실행됩니다.

이번에는 본인 계좌의 보유 원화를 조회하고, 최우선 매도 호가 금액을 얻어와 매수할 수 있는 비트코인 개수를 계산해 봅시다. 5장에서 배운 get_orderbook() 함수를 사용하면 됩니다.

라인 8: get_balance() 메서드는 튜플을 리턴하는데 그중 2번 인덱스에 ‘원화 잔고’가 저장됩니다.
라인 9~11: get_orderbook() 함수는 딕셔너리를 리턴하는데 'asks'라는 키를 통해 매수 호가 내역을 리스트로 얻어올 수 있습니다.
라인 12: 매도 호가 리스트에서 인덱싱을 통해 호가 정보 하나를 얻어오면 딕셔너리 타입입니다. 따라서 다시 'price'라는 키값을 사용해서 매도 금액을 얻을 수 있습니다.
라인 13: 원화 잔고를 최우선 매도 호가 금액으로 나누면 매수 수량을 구할 수 있습니다.

호가창을 조회해서 예상 체결 가격에 매수 가능한 비트코인의 수량을 계산했더라도 예상 가격보다 높게 매수될 수 있습니다. 호가창에 매도 수량이 매수 수량보다 적거나 여러분이 주문하기 전에 다른 사람이 매수를 해서 매도 호가가 올라갈 수 있다는 점을 주의해야 합니다. ch06/06_07.py는 주문할 비트코인의 개수를 계산 후 시장가 주문을 발행하는 코드입니다. 실행하면 주문이 즉시 체결되니 주의하세요.

정상적으로 주문이 실행됐다면 buy_marker_order() 메서드는 주문 ID를 리턴합니다. 코드의 실행 결과 큰 숫자가 출력되는데, 이 값이 바로 주문 ID입니다.

그림 6-12는 빗썸 홈페이지에서 확인한 비트코인 거래 내역입니다. 시장가 매수 주문이 정상적으로 실행된 것을 확인할 수 있습니다.


그림 6-12 시장가 매수 체결 내역

빗썸은 체결 수수료가 0.15%입니다. 매수 주문 시에는 주문 체결 수량을 기준으로 수수료가 계산되고 수수료를 제외한 수량이 입금됩니다. 비트코인 최소 거래 0.0015개의 시장가 매수 주문을 실행한 결과 수수료를 제외하고 0.00149775개의 비트코인이 입금됐습니다.

빗썸의 매도 API 또한 지정가 매도와 시장가 매도가 존재합니다. pybithumb 모듈에서 지정가 매도는 sell_limit_order() 메서드를 사용합니다. Ch06/06_08.py과 같이 비트코인 1개를 4,000,000원에 지정가 매도해 봅시다. 현재 시가는 약 3,800,000원 수준인데 매도되지 않도록 매도 금액을 높게 책정했습니다.

코드를 실행해보면 보유하고 있는 비트코인의 잔고 (0.0014) 보다 많은 수량을 최소 거래 매도하려고 했기 때문에 에러가 발생합니다. 에러가 발생하면 화면에 에러 로그가 출력되고 sell_limit_order() 메서드는 None을 리턴합니다.

이번에는 잔고를 조회해서 보유 중인 비트코인 수량만큼 지정가 매도 주문을 해보겠습니다.

라인 8: get_balance() 메서드는 튜플로 값을 리턴하는데, 0번 인덱스에는 보유 중인 비트코인의 잔고가 저장돼 있습니다. 비트코인의 보유 수량을 unit 변수에 바인딩합니다.
라인 10: sell_limit_order() 메서드로 보유 중인 비트코인의 수만큼 지정가 매수 주문을 발행합니다.

출력 결과를 살펴보면 0.00149775 개수의 비트코인을 보유 중이었던 것을 알 수 있습니다. 또한 지정가 매도(ask) 주문을 실행한 것을 알 수 있습니다. 튜플의 마지막 숫자는 주문 번호입니다.

그림 6-13의 체결 내역을 살펴보면 비트코인 총 보유 수량은 0.00149775개이지만 실제 주문은 0.0014개만 입력된 것을 확인할 수 있습니다. pybithumb의 sell_limit_order() 메서드가 빗썸 거래소의 주문 규칙에 따라 소수점 넷째 자리 이하는 버리고 주문했기 때문입니다.


그림 6-13 지정가 매도 미체결 내역

지정가 매도를 하는 경우에도 '호가 가격 단위'를 지켜야 합니다. 다음과 같이 4,000,100원으로는 거래할 수 없습니다.

이번에는 pybithumb 모듈의 시장가 매도를 사용해 보겠습니다. pybithumb에서 시장가 매도는 sell_market_order() 메서드를 사용합니다. sell_market_order() 메서드의 첫 번째 인자로 티커를 입력하고 두 번째 인자로 매도하고자 하는 가상화폐의 수량을 입력합니다.

라인 8: 보유 중인 비트코인(‘BTC’)의 잔고를 얻어옵니다.
라인 9: 보유 중인 비트코인을 모두 시장가 매도합니다.

코드가 정상적으로 실행되면 다음과 같이 주문 번호가 출력됩니다.

빗썸은 매도 주문에 0.15%의 수수료를 부과합니다. 매수 시에는 매수 코인 수량의 0.15%를 제외한 코인이 입금됐지요? 매도 시에는 체결 금액의 0.15%가 수수료로 제외된 후 나머지 원화가 입금됩니다. 보유하고 있던 비트코인 0.0014975개의 매도 주문한 경우를 예로 들어 보겠습니다. 소수점 네 자리까지만 주문이 가능하기 때문에 실제 주문은 0.0014개만 체결되겠지요? 그림 6-15를 보면 7,375,000원에 비트코인 0.0014개가 매도됐으니 거래 금액은 1원 단위가 절사 된 10,300 원이라는 것을 알 수 있습니다. 여기에 수수료 0.15%를 뺀 후 실제로 입금된 원화는 10,285원입니다.


그림 6-14 시장가 매도 거래내역

주문 취소

시장 상황이 변해 기존에 발행한 주문을 취소해야 하는 일이 생길 수 있습니다. pybithumb의 cancel_order() 메서드는 발행한 주문을 취소합니다. 메서드의 파라미터로 매수/매도 주문의 반환값(주문 ID가 포함된 튜플)을 넣어줘야 합니다. Ch06/06_11.py은 지정가 매수를 주문을 넣은 후 10초 후에 주문을 취소하는 코드입니다.

라인 9: 비트코인을 3,000,000원에 0.001개 지정가 주문합니다.
라인 10: buy_limit_order() 메서드의 리턴 값을 출력합니다.
라인 12: 10초 동안 멈춥니다.
라인 13: buy_limit_order() 함수의 리턴 값(튜플)을 cancel_order 메서드의 입력으로 넣어 주문 취소 메서드를 호출합니다.

Ch06/06_11.py 코드의 실행 결과는 다음과 같습니다. 주문 함수는 ('bid', 'BTC', '1530000309557335')와 같이 튜플을 리턴하는데 이 값은 주문 취소를 할 때 사용됩니다. 주문 취소 메서드인 cancel_order()는 매수, 매도 주문에 상관없이 미 체결된 주문이라면 모두 취소할 수 있습니다. 정상적으로 주문이 취소된 경우 True가 출력되고 주문 취소가 실패한 경우 None이 출력됩니다.


0 개 댓글

답장을 남겨주세요