자동 거래하기

마지막 업데이트: 2022년 4월 1일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
암호화폐 자동매매 시스템 만들기 with 파이썬

자동 거래하기

어떻게 하면 싸게 사서 비싸게 팔까를 고민하는 게 시장이다. 특히 암호화폐의 장기적 가치는 제쳐두고 단기적 시세 변동에 따른 수익 창출만을 대다수의 투자자들은 바라고 있다. 옳고 그름은 없다. 주식 시장에서도 가치 투자냐 모멘텀 투자냐를 두고 설왕설래가 오고 가지 않는가. 전업 투자자들이야 그게 업이라 매일 앉아서 오더북만 바라보며 거래를 진행할 수 있겠지만, 일반 투자자들은 현생을 살아야 하니 잦은 거래를 통한 수익 극대화를 노리기도 어렵다.

개인 투자자들은 어떻게 하면 전업 투자자들과 같이 수익을 극대화할 수 있을까. 이러한 요구를 충족시키기 위해 다음과 같은 다양한 자동(프로그램) 매매 서비스들이 현재 많이 운영되고 있다.

  • 3Commas
  • Cryptohopper
  • Quadency
  • Kucoin Trading Bots (Classic Grid, DCA, Futures Grid, Smart Rebalance)
  • TradeSanta
  • Pionex Trading Bots

간단히 말하면 프로그램들은 거래소가 제공하는 API를 통해 주문, 매수, 매도 등의 요청을 주어진 전략에 맞춰 전달, 수행한다. 간단하지 않은가? 물론 이것뿐이라면 직접 개발해서 프로그램을 돌리고자 하겠지만, 사용자들의 다양한 욕구를 충족시키기엔 이것만으론 부족하다.

예를 들어, 볼린저 밴드 (Bollinger Bands), RSI (Relative Strength Index), EMA (Exponential Moving Average) Crossovers 등 다양한 보조 지표의 활용 및 혼합 활용을 꾀한다고 해보자. 또한, 내가 수립한 전략을 과거에 대입해보기 위해 백테스팅(Backtesting)도 진행하고 싶을 것이다.

따라서, 직접 개발하는 비용보다는 이러한 사항을 이미 갖춘 알려진 서비스를 이용하는 편이 훨씬 낫다.

해당 프로그램들의 기능은 다음 글에서 알아보기로 하고, 먼저 대표적인 전략들부터 알아보자.

Grid Trading

빗썸이 제공하는 (주)크롬이노베이션의 오토 트레이딩 서비스. 출처: Bithumb

Grid Trading은 간단히 말해 구간 반복 매매 전략이다. 빗썸의 오토 트레이딩 자동 거래하기 서비스를 기준으로 쉽게 설명해보면,

  • 최고가
  • 최저가
  • 주문수
  • 매매 자동 종료 가격 (Stop-loss)

등이 있는데, 이 전략은 최저가와 최고가 사이에서 주문수만큼 사고팔기를 반복해 수익을 노리는 전략이다.
예를 들어, 비트코인이 3000만 원에서 4000만 원의 가격대에서 등락을 반복할 것으로 예상한다고 해보자. 가장 좋은 전략은 물론 3000만 원에 사서 4000만원에 파는 것이겠지만 (수익률 33%), Grid 전략은 해당 구간에서 지정한 횟수만큼 매매를 반복하는 것이다. 구체적으로 다음과 같은 설정을 넣었다고 가정해보자.

  • 최고가: 4000만원
  • 최저가: 3000만원
  • 주문수: 10

현재 비트코인의 가격이 3500만 원이라면 자동 거래하기 3400, 3300, 3200, 3100, 3000만 원에 각각 매수 주문을 3600, 3700, 3800, 3900, 4000만 원에 각각 매도 주문을 설정, 매매하는 전략이다. 만약, 예상대로 해당 구간에서 가격대의 급락이 반복된다면 예상되는 거래당 수익률은 구간별로 약 2.5%~3%가 될 것이다 (3900만원에 사서 4000만원에 판 수익률 2.5% ~ 3000만 원에 사서 3100만 원에 판 수익률 3%.) 해당 구간에서의 거래가 20번 반복 시 수익 중앙값 기준으로 55%의 수익률이 발생하는 것이다.

주문수를 많이 넣으면 구간별 수익률은 낮아지지만 수익의 안정성을 꾀할 수 있고, 반대로 주문수를 적게 넣으면 구간별 수익률은 높아지지만 원하는 결과를 얻지 못할 수 있다.

알려진 서비스들은 지난 데이터를 토대로 자동으로 설정값을 설정해주기도 하지만, 어디까지나 최종 판단은 본인의 몫이다.

예상과 다르게 지정한 최저가 이하로 가격이 낮아졌다면?
매매 자동 종료 가격 (Stop-loss) 지정은 기대하는 최대 손실 값을 넘어서는 것을 방지하기 위해 설정하는 것으로, 설정 여부는 선택 사항이다.

DCA (Dollar-Cost Averarging)

DCA (Dollar-Cost Averaging). 출처: Google

Grid Trading과 비슷하지만 DCA는 구간 설정이 아닌 분할 투자 전략이다. 벤저민 그레이엄의 현명한 투자자에서 인용하자면 "주어진 기간에 고정 금액을 반복 투자"하는 전략이라고 볼 수 있겠다.

가장 간단하면서도 대중적인 전략인데, 투자 대상이 오를 것 혹은 내릴 것이라고 확신해 맞춘다면 확실한 수익을 가져다줄 수 있기 때문이다. 일반적으로 다음과 같은 설정이 있다.

  • 방향성 (상승 또는 하락, Long or Short)
  • 고정 주문 금액
  • 기대 수익률
  • 예상 가격 변동폭
  • 최대 주문 횟수

예를 들어, 비트코인의 현재 가격이 3500만 원인데 상승할 것이라고 본다고 하자. 그럼 다음과 같이 설정해본다.

  • 방향성 - Long
  • 고정 주문 금액 - 10만 원
  • 기대 수익률 - 10%
  • 예상 가격 변동폭 - 5%
  • 최대 주문 횟수 - 3회

해당 설정에 따라 최초에 비트코인을 3500만 원에 10만 원어치를 매수한다. 만약 이후 비트코인 가격이 5% 하락하면 3325만 원에 10만 원어치를 또 매수한다. 비트코인 가격이 다시 하락한다면 반복해 3159만 원에 10만 원을 매수한다. 최초에 비트코인 가격 3500만 원일 때 기대 수익률 10%를 달성하기 위해서는 매수 후 3850만 원이 되어야 하지만, DCA를 통해서는 약 3660만 원이 되면 달성이 가능해진다.

DCA는 단기 매수 매도에 적합한 전략은 아니다. 투자 대상의 지속적인 하락에도 꾸준한 투자가 같이 지속되어야 빛을 보는 전략이기 때문이다. 프로그램들은 다양한 보조 지표를 활용해 매수, 매도 신호를 획득하기도 하므로 (예를 들어, RSI 14가 20 이하일 때 저점이라고 판단 후 매수, 80 이상일 때 고점이라고 판단 후 매도) 꾸준한 투자를 선호하는 투자자에게 DCA는 적합한 전략이다.

Rebalancing

리밸런싱 (Rebalancing). 출처: Coinmonks

Rebalancing은 가장 잘 알려진 분산 투자 전략이다. 개별 투자 대상의 가격 변동성에 대응하기 위해, 비교적 상관관계가 낮은 (혹은 반대인) 다른 투자 대상과의 복합 포트폴리오 구성으로 자산 안정성을 높이는 전략이다.

암호화폐 상관계수 (Crypto Correlations). 출처: https://cryptowat.ch/correlations

위에서 보는 것과 같이 현재 웨이브(WAVES)와 다른 코인들의 상관 계수는 .48 ~ .58로 다른 코인들에 비해 낮은 상관관계를 가지고 있으므로, 비트코인과 웨이브를 분산 투자한다면 변동성을 줄일 수 있을 것으로 판단된다. 다만, 암호화폐 시장은 지나치게 비트코인의 가치에 의존하고 있으므로 (2021년 7월 글을 쓰는 현재 BTC 도미넌스 (Dominance) 45.2%) 가치 하락 시 포트폴리오 상의 모든 암호화폐의 가치 동반 하락이 불가피하다.

리밸런싱은 상관관계가 많이 다른 자산의 집합으로 포트폴리오를 구성하는 것이 일반적이므로 (예: 주식, 채권, 금, 원자재 등의 조합) 암호화폐 시장 내에서 코인 간의 리밸런싱 구성은 추천하기 어려운게 사실이다. 이 경우 Liquidity Mining / Yield Farming과 같은 방법이 더욱 효과적인 전략이라고 할 수 있다.

자동 거래하기

01-5. 비트코인 자동 매매 트레이딩 봇 만들기

지난 포스팅 #01-4. 비트코인 자동 매매 트레이딩 봇: 샘플 코드 분석을 해보아요! 에서
조코딩님의 비트코인 자동 매매 샘플 코드 분석을 통해 전체적인 자동 매매 프로그램의 구성과 흐름을 알아보았습니다.

01-4. 비트코인 자동 매매 트레이딩 봇: 샘플 코드 분석을 해보아요!

자동 매매 샘플 코드 분석하기 비트코인 자동매매 트레이딩 봇 시리즈의 4번째 포스팅입니다! 이번에는 실제 매매에 사용할 샘플 코드를 자세히 살펴보고, 내가 원하는 조건으로 어떻게 수정하

이를 바탕으로 저만의 전략을 구성하고 적용하기 위해 실전 테스트와 코드 수정을 반복하였습니다.

뼈대가 될 샘플 코드 테스트를 위해, 코인 자동 매매에 적용할 코인 A를 선정하고
백테스트(BackTest)를 통해 k 값을 정의한 후 샘플 코드 테스트 진행한 결과 몇 가지 수정 사항을 발견하였습니다.

이번 포스팅에서는 백테스트로 알아본 k값샘플 코드 테스트에서 보인 문제점에 대해 이야기해 보도록 하겠습니다.
마지막으로 원하는 방법으로 자동 매매를 하기 위해 수정한 코드를 공유하고자 합니다.

  • 변동성 돌파 전략의 K값 정하기
  • 샘플 코드 문제점
  • 자동 매매 전략 및 자동 거래하기 코드 수정
  • 자동 매매 테스트 후기
  • 비트코인 자동 매매 코드 공유

Step 1. K값 정의

변동성 돌파 전략의 K값을 정의하기 위해, 코인 A 가격 데이터를 이용하여 백테스트를 진행했습니다.
1일 기준으로 7일, 14일, 30일, 90일 동안의 백테스트 결과는 다음 그래프와 같습니다.

K값이 0.1~0.15 및 0.2 부근에서, 그리고 2달 이상 장기 투자를 진행하였을 때 가장 좋은 수익률이 나타납니다.
K값이 약 0.5 일 때는 오히려 마이너스가 되기도 하며, 0.5 이상의 높은 K 값에서는
투자 기간에 따라 플러스와 마이너스 수익을 기록합니다.

위 결과는 5월 초, 비트코인의 상승장에서 테스트하였기 때문에
낮은 K값에서 더 좋은 수익률을 보인 것으로 판단됩니다.

테스트 당시 비트코인이 상승장이었고, 자동 매매 코드가 생각한 것처럼 작동하는지
그리고 수정해야 할 부분은 어디 인지 알아보기 위한 테스트 목적이었으므로
0.12의 낮은 K값을 선택했습니다.

Step 2. 샘플 코드 문제점 파악

샘플 코드에 특별한 수정 없이, 최소한의 정보(API key, Ticker, K 값)만 변경한 뒤
실행 해 본 결과 개인의 상황과 맞지 않는 몇 가지 문제점이 발견되었습니다.

01-4. 비트코인 자동 매매 트레이딩 봇: 샘플 코드 분석을 해보아요!

자동 매매 샘플 코드 분석하기 비트코인 자동매매 트레이딩 봇 시리즈의 4번째 포스팅입니다! 이번에는 실제 매매에 사용할 샘플 코드를 자세히 살펴보고, 내가 원하는 조건으로 어떻게 수정하

문제점 1) 조건 만족 시 잔고에 남아 있는 원화를 전량 매수한다.

  • 원화 보유가 안됨
  • 다른 코인에 대한 대응이 안됨
  • 원치 않는 불타기 발생

매수를 위해 가져오는 원화(krw)는 get_balance 함수를 통해 개인 잔고에 있는 원화("KRW")의 총액입니다.
매수 금액의 제한이 없기 때문에 1일 동안 매수 조건 만족 시, 잔고에 남아있는 원화 전액을 매수합니다.
만약, 투자를 진행하고 있는 코인이 1개라면 1일 중 첫 번째 매수에서 모든 원화를 소진했으므로 문제 되지 않습니다.

하지만, 2개 이상의 코인을 투자 중인 상태에서 기존의 다른 코인 매도하면 원화가 잔고에 충전되고,
이때 자동 매매의 모든 조건이 충족되는 순간 다시 한번 모든 원화로 코인을 매수합니다.
즉, 잔여 현금이 0인 상태가 발생하게 되어 다른 코인에 대해 대응할 수 없는 상황이 발생할 수 있습니다.
특히, target_price < current_price 조건이 참인 상황에는 아무리 코인을 매도하더라고
곧바로 다시 모든 금액을 매수해버립니다. 따라서 현금 보유를 위해서는 프로그램을 꺼야 하는 경우가 발생하게 됩니다.

이렇게 되면, 보유하고 있는 원화가 없으므로 투자를 진행 중인 코인에 대한 개별적 대응이 불가능합니다.
또한 target_price < current_price 조건에 의해 현재가가 목표가 이상이면
무조건 매수를 진행하게 되어 원치 않는 불타기가 발생합니다.

문제점 2) 평균 매수가 이하로 하락 시 아무것도 하지 않는다.

샘플 코드 상에서의 매매 전략은 '변동성 돌파 전략' 1개 만을 수행하도록 만들어져 있습니다.
목표 매수가 도달 시 원화 전량 매수 이후, 매도 전(다음날 오전 8시 59분 자동 거래하기 50초)까지는 아무것도 하지 않습니다.

'변동성 돌파 전략'은 확실한 상승세에 매수/매도하여 수익을 얻는 방법이므로,

사실상 상대적으로 높은 가격에 매수가 이루어집니다.

하지만 변동성이 높은 암호화폐 시장에서 1일 중 ±5~10%는 충분히 오르락내리락 가능함을 감안할 때,
변동성 돌파 전략에 따라 상승세로 판단하였더라도 장중에 현재가가 평균 매수가 이하로 낮아질 가능성이 높습니다.

초기 매수 이후 매도 전까지 가격 하락이 발생할 때, 추가 매수하여 평균 단가를 낮춘다면,

다시 수익권에 도달하는 시간을 줄일 수 있습니다. 이 경우, 결과적으로 3가지 시나리오가 예상됩니다.

  • 첫째, 마이너스 발생 → 추가 매수 → 원금 회복 → 수익 → 매도
  • 둘째, 마이너스 발생 → 추가 매수 → 원금 회복 → 매도
  • 셋째, 마이너스 발생 → 추가 매수 → 매도

첫 번째 경우, 추가 매수로 인해 낮아진 단가와 늘어난 시드로 인해 기존 방법보다 높은 수익률을 얻을 수 있습니다.
두 번째 경우, 추가 매수를 하지 않았을 경우 마이너스 상태에서 매도가 발생하여 손해를 보았을 것이지만,
추가 매수를 함으로 인해 원금 보호가 가능합니다.
세 번째는 첫 번째와 유사한 상황이며, 늘어난 시드로 인해 큰 손해가 발생할 수 있지만
최소한 손실률(%)이 낮아질 수는 있습니다.

문제점 3) 조건 변경 시 코드 전체의 파라미터를 수정해야 한다.

샘플 코드에는 따로 변수로 지정되어 있는 조건이 없습니다.
따라서 시장 상황 및 개인 상황에 따라 매매 기준 시간, 코인 종류, K값 등을 수정하기 위해서는
전체 코드에 있는 모든 파라미터를 정확히 변경해 주어야 합니다.

사실.. 아주 복잡한 코드가 아니므로 수정하는데 오랜 시간이 걸리거나 아주 어려운 사항은 아니지만,
역시나 굳이 필요 없는 작업을 여러 번 하는 것은 너무나 귀찮습니다. 하하항

자동 매매의 기본적인 조건들 (매매 시간 간격, 코인 종류(ticker), K 값 등)을 while 함수 이전에 변수로 지정하고,
while 내부에서는 지정한 변수를 이용함으로써 상위 변수만 한번 바꾸어 주면 모든 수정이 끝나도록 만들면 좋겠습니다.

Step 3. 코드 수정!

위에서 정리한 문제점을 바탕으로 코드를 수정하였고,
수정한 코드의 기본 구성은 "로그인 → 변수 설정 → 1, 2, 3차 분할 매수 실행→ 매도 실행"으로 만들었습니다.

변수 설정

변수에는 매수에 사용할 총 원화 금액분할 매수를 위한 비율 을 적어줍니다.

시간 간격은 매매 시작 ~ 매도까지 1세트의 시간 간격을 의미하며,

1일 단위는 "day" , 분단위는 "minute240, minute60, minute 30" 등을 지정할 수 있습니다.

ticker와 currency는 본인이 원하는 코인의 이름 을 입력하고, k는 백테스팅 결과 가장 적절한 값 으로 지정합니다.

# interval 변수의 자세한 설정은 01-4 포스팅의 매수 가격 설정하기 표를 참고해주세요.

# ticker, currnecy 찾는 법은 01-3 포스팅의 Step 2, 3을 참고해주세요.

시간 설정

interval 설정이 바뀔 수 있음에 따라, get_start_time 함수에 interval 파라미터를 추가하여 수정합니다.

위에서 지정한 변수 ticker와 interval에 따라 start_time을 정의하고

end_time은 start_time에서 interval 만큼의 시간을 더하고 5초를 빼주었습니다.

start_time부터 end_time까지 매수를 진행하는 시간이며, end_time 이후 5초 동안 매도를 진행합니다.

만약 intertval을 4시간 간격(minute240)으로 변경하면,자동 거래하기

start_time은 "09:00:00, 13:00:00, 17:00:00, 21:00:00, 01:00:00, 05:00:00"가 되고

end_time은 "08:59:55, 12:59:55, 16:59:55, 20:59:55, 12:59:55, 04:59:55"로 설정됩니다.

매매 시작

전체 매매가 자동으로 이루어 지기 위해 while True: 로 시작하여 무한 루프를 만들어주고,

매매 시작/종료 그리고 현재 시간을 설정합니다. 시간 설정이 끝나면, 본격적으로 코인 자동매매를 시작합니다.

  • 현재 시간이 start_time과 end_time 사이자동 거래하기 있을 때 매매를 시작합니다.
  • get_target_price( ) 함수를 이용하여 코인 매수를 위한 목표 가격을 설정합니다.
    • interval 설정이 바뀔 수 있음으로, get_target_price 함수에 interval 파라미터를 추가, 수정합니다.

    분할 매수

    매매 시작 이후 3회 분할 매수를 할 수 있도록 코드를 자동 거래하기 작성하였습니다.

    1차와 2차총 매수 금액의 30%, 3차 매수는 총 매수 금액의 40%를 매수하도록 설정했으며,

    매수 평균가에서 5% 하락마다 추가 매수 진행합니다. 이때, "평균 매수가"를 조회하고 가져와야 하므로

    이를 실행할 get_buy_average( ) 함수를 만들어 주었습니다.

    총 매수 금액과 분할 매수의 비율을 변경하고 싶으면 가장 상위의 "변수 설정" 부분에서 필요한 변수만 수정하시면 됩니다.

    초기 1차 매수 시, 현재 시장 가격(current_price)이 급하게 올라가더라도

    매수 목표가(target_price)를 크게 벗어나지 않게 하기 위해 가격 범위를 지정해줍니다.

    매수 목표가 보다 약 500~1000원 이상까지 비싼 가격에 매수가 체결되는 현상이 발생하여 이를 방지하기 위함입니다.

    • 매수 진행 횟수 카운트를 위한 i를 설정하고, 총 3회 분할 매수를 할 수 있도록 while i < 3:으로 시작합니다.
      • 이때, 3번의 분할 매수 횟수를 채우지 못하더라도매매 종료 시간이 되면 while 반복문을 종료해야 합니다.
      • 따라서 break 를 사용해서 현재 시간이 종료 시간을 벗어나면 while문을 빠져나올 수 있도록 합니다.
      • upbit.buy_market_order(ticker, total*rate30)
      • upbit.buy_market_order(ticker, total*rate40)
      • buy_average = get_buy_average(currency)
      • time.sleep 없으면 자꾸 매수 평균가(buy_average)를 "None"으로 가져와서 에러가 발생합니다.

      매도

      분할 매수 while문이 종료되면 end_time 이후 5초간 전량 매도를 진행합니다.

      분할 매수의 while 반복을 종료하는 조건은 2가지이고 매도 조건은 오직 '시간'이므로

      else가 아닌 elif 를 사용합니다.

      • 현재 시간(now)매매 종료 시간(end_time)을 넘어가면elif 코드가 실행됩니다.
      • get_balance( ) 함수를 이용해서 매매 종료 시간 직전까지 매수했던 코인을 가져옵니다.
      • 그리고 모든 코인을 5초 동안 현재 시장 가격으로 전량 매도합니다.
        • 매도 시간을 조절하기 위해서는 상위의 "시간 설정" 부분에서 수정 가능합니다.
        • 시간 설정 ~ 매도까지 무한히 반복 진행하며, 가장 상위(while True: 이전)에 지정한 변수를 그대로 사용합니다.

        Step 4. 비트코인 자동 매매 트레이딩 봇 테스트 후기

        4시간 간격으로 약 7일 테스트해본 결과, 설정한 조건들에 맞게 분할 매수부터 원하는 시점에 매도까지

        문제없이 잘 실행됩니다. 최대 매수 금액과 분할 매수 금액을 지정 해 놓으니 투자 중인 다른 코인들과

        자동 매매를 하는 코인을 구분할 수 있어 효과적입니다. 또한 분할 매수를 함으로써 리스크 관리가 가능하고,

        변수들을(k값과 시간 간격 그리고 매수 비율) 시장 상황에 따라 수정하며 실행함으로써 안정적 매매할 수 있었습니다.

        작성한 코드로 자동 매매 진행 중, 상황에 따라 급히 수동으로 매수/매도를 하더라도

        if문에서 설정한 조건들로 인해 원치 않는 시점에 자동 거래하기 매수는 발생하지 않았습니다.

        직접 작성한 코드로 계획했던 데로 동작하고 실제로 수익까지 발생하니 그저 신기하네요^^

        현재 작성한 코드는 매수와 매도 시점이 기본적으로 "시간"이지만, 꼭 시간이 기준이 되어야 하는 것은 아닙니다.

        추후에는 매수가 기준으로 x% 수익이면 무조건 매도하도록 코드를 수정하여

        리스크를 더욱 줄일 수 있지 않을까 생각합니다:)

        그리고 개인 노트북으로 프로그램을 실행하면 노트북을 너무 오래 켜 두어야 하는 문제가 있으나

        이는 추후 클라우드 서비스를 이용해서 해결할 예정입니다.

        비트코인 자동 매매 트레이딩 봇 프로그램 만들기! 완성입니다~.

        업비트 API Key 발급, 데이터 호출 및 분석 그리고 직접 원하는 방식으로 자동 매매 코드까지 작성해보았습니다!

        작성한 코드는 제 개인 깃허브에 올려놓았습니다!

        Contribute to zion08/Crypto-Autotrade development by creating an account on GitHub.

        자동 거래하기

        지금까지 트레이딩에 필요한 준비 단계 기능들을 구현하여 초기화 함수에서 호출하는 작업을 했습니다. 5.1절에서 설명한 프로세스를 토대로 현재 단계를 살펴보면 ‘유니버스 실시간 체결 정보 조회 등록’까지 마치고 본격적인 트레이딩 단계를 앞두고 있습니다.

        ▲ 그림 5-38 자동매매 프로그램의 동작 흐름도

        준비를 마쳤으니 이제부터는 그림 5-38의 ➊ ~ ➐ 단계를 순서대로 진행하겠습니다.

        먼저 유니버스에 있는 종목별로 접수한 주문이 있는지 확인하고, 접수한 주문이 있다면 체결되기를 기다립니다. 여기서 이미 접수한 주문이 있는지 여부는 ‘주문 정보 확인하기’ 단계에서 얻어 온 주문 정보를 바탕으로 확인합니다. 접수한 주문이 없다면 이미 보유한 종목인지 확인합니다. 보유한 종목인지 여부는 ‘잔고 확인하기’ 단계에서 얻어 온 잔고 정보를 바탕으로 확인합니다. 보유 중인 종목이면서 매도 조건에 부합한다면 매도 주문을 접수하고, 보유 종목이 아니라면 매수 조건에 부합하는지 확인하고 매수 주문을 접수합니다.

        이 프로세스에서 이미 구현된 것과 만들어야 하는 것을 구분해서 자동 거래하기 정리해 보겠습니다.

        ➊ 주문 접수 여부 확인 : 초기화 단계에서 Kiwoom 클래스의 get_order 함수로 주문 정보를 확인할 수 있기에 이미 구현되어 있습니다.

        ➋ 체결 대기 : 체결 여부는 따로 처리할 것이 없으므로 구현해야 할 대상은 아닙니다.

        ➌ 보유 종목 여부 확인 : 초기화 단계에서 Kiwoom 클래스의 get_balance 함수로 잔고 정보를 확인할 수 있기에 이미 구현되어 있습니다.

        ➍ , ➏ 매수/매도 대상 : 매매 조건에 해당하는지 확인하는 부분은 아직 구현되지 않았습니다.

        ➎ , ➐ 주문 접수 : 주문을 접수하는 함수는 이미 구현했기에 매수, 매도에 맞게 필요한 값만 전달하면 바로 사용할 수 있습니다. 이미 구현되었다고 볼 수 있습니다.

        이제 남은 작업은 구현된 기능들을 적절히 호출하는 것과 매수/매도 조건에 해당하는지 확인하고 주문을 접수하는 코드를 만드는 것입니다. 하나씩 천천히 만들겠습니다.

        파이썬 코인 자동매매 봇 만들기#8 - 빗썸 API 신청 및 잔고조회 하기

        들어가며 2021.08.19 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#1 - pybitumb 모듈 설치하기 2021.08.21 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#2 - 24시간 변동률 정렬하기 2021.08.24 - [IT/..

        이번 포스팅은 이전 글에 대해서 크게 이어지는 내용은 아니긴합니다만, 이전글을 못 보고 오신분들은 순차적으로 글을 보시고 오시는것을 추천드립니다.

        목표

        어제 오늘 비트코인 장세가 급락을 하면서, 추후 장세가 어떻게 될 지 의문이 드는 시기이네요. 자동매매가 잘 성공을 거두어서 하락장일때는 매매하지 않도록 하도록해서 손해를 입지 않게끔 해야 할 텐데요.

        오늘은 하락장세여서 매수가 많이 이뤄지지 않아, 지난번 처럼의 시뮬레이션 결과를 따로 내지 않겠습니다.

        이때까지는 빗썸 Pubilc API 만을 사용하여, 계정 정보가 없더라도 빗썸에서 제공하고 있는 코인 시세 정보를 이용하여 가상으로 매수/매도를 진행했었는데요.

        이제 실질적으로 빗썸 Private API 를 이용하여, 계정 정보와 연동하여 실질적으로 잔고조회, 매수, 매도를 하는것을 시도해 볼까합니다.

        이번 포스팅에서는 빗썸 Private API 소개, 계정 연동, 잔고조회 까지 진행하도록 하겠습니다.

        Private API

        우선, 빗썸 API 를 모아둔 링크 주소를 공유드립니다.

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

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

        빗썸 API 는 크게 Rest API / WebSoket API 로 나뉘고, Rest API는 또 Public API 와 Prviate API로 나눠진다고 보시면 됩니다. Rest / WebSocket 에 대한 내용은 추후에 WebSocket 관련 내용을 포스팅할때 또 언급드릴 기회가 있을거 같습니다.

        1~7번까지의 포스팅에서는 Public API 만 사용했었고, 이제부터는 Private API를 사용해 볼까합니다. 두종류의 API의 가장큰 차이점은 "계정연동" 에 있습니다.

        Public API는 누구나 동일하게 얻을 수 있는 정보이며, Private API는 실질적으로 매수/매도/잔고조회를 할려면 개인의 계정에 연동되어야 얻을 수 있는 정보를 구분 해둔거라고 보시면 됩니다.

        빗썸 Private API 신청하기

        먼저 빗썸을 로그인한뒤, 자신의 계정으로 Private API를 활성화를 해야 합니다.

        상세한 공식 가이드는 아래 링크를 참조해주십시오.

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

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

        공식 가이드에 맞추어 하나씩 진행해보도록 하겠습니다.

        1) 로그인 후 상단 메일 주소 선택 -> 계정 관리 -> 거래 관리 -> API 관리로 이동합니다.

        2) API 활성화 항목 접근 (접근 허용) 항목에서 KRW출금, 가상자산 출금은 비활성화 하고, 나머지를 활성화 합니다.

        3) 보안 비밀 번호를 똭 입력하고, 아래 보안 인증에서 ARS 인증을 진행합니다.

        ( 빗썸 공식 ARS 번호가 KT 후후에 스팸 등록이 되어있네요?? - 전화를 받아줍니다. )

        4) API KEY 생성 버튼을 누르면, 아래와 같이 유의사항을 한번 읽고, 확인 버튼을 누릅니다.

        자주 사용하지 않으면 자동 비활성화 처리도 되나 보네요.

        5) Connect Key와 Secret Key 가 발급이 되었습니다.

        앞의 유의사항에 있듯이, Secret Key 를 꼭 다른곳에 저장 해놓으시기 바랍니다.

        6) 활성화를 선택하면, 한번더 유의 팝업이 뜹니다. 승인하기를 누르겠습니다.

        7) 그러면 웹페이지 상에서 Secret key 가 안보이게 됩니다.!

        꼭 5) 6) 순번에서 Secret Key 를 다른곳에 저장해야 하는 이유가 여기에 있습니다.

        8) 활성화 인증을 메일 인증으로 한 단계 더 수행합니다.

        계정 정보에 메일으로 API KEY 활성화 메일이 수신되며, 해당 메일에서 다시 API 활성화를 진행합니다.

        9) 드디어 빗썸 Private API 가 활성화가 되었습니다.

        활성화/비활성화 버튼이 비활성화로 변경되었음을 확인하실 수 있습니다.

        잔고 조회

        이제 API도 발급 받았으니, 잔고를 조회 해볼 순서입니다.

        우선, 코드 부터 공유드립니다. con_key 와 sec_key 는 위에서 발급 받은 개인 계정을 사용해야 합니다.

        아래 코드가 잔고를 조회 할 수 있는 API입니다. 발급 받은 키 값을 이용하여, bithumb 객체를 생성하고, 이에 해당 객체를 통해서 원하는 종목의 잔고를 조회할 수 있습니다.

        balance 변수는 4개의 값을 가지고 있는 튜플 형태로 리턴되며,

        [0] : 가지고 있는 코인 종목의 보유 수량

        [1] : 가지고 있는 코인 종목의 현재 거래 중인 수량 ( 매도 신청을 했다 던지..)

        [3] : 주문에 사용된 원화 ( 현재 원화로 매수 주문 중인 원화 ) 를 의미합니다.

        ticker 를 통해서 현재 모든 종목을 순차적으로 검색을 해서, 코인 잔고 수량이 0 이상이 것에 대해서 코인 종목, 보유 수량, 원화 평가 금액을 출력하고, 원화 평가 금액을 총합을 하여 마지막에 보유 원화가 얼마인지 출력하는 코드입니다.

        자동 거래하기

        비트코인 트레이딩을 위해 파이썬으로 암호화폐 자동매매 프로그램 smtm을 만들었다. 요구사항 도출부터 설계, 테스트 작성, 개발, 최적화에 이르는 모든 과정을 책으로 엮어서 출간하게 되었다. 내가 쓴 책을 독후감으로 소개하려니 영 기분이 이상하지만, 간단하게 책 소개를 해보려 한다.

        암호화폐 자동매매 시스템 만들기 with 파이썬

        책이 도움이 될 사람, 책을 낸 이유

        smtm 프로젝트를 시작할 때 출판에 대한 계획은 없었다. 단지, 개발이 너무 진행이 안되어서, 개발 일기처럼 블로그에 글을 쓰기 시작했는데 그것이 계기가 되었다. 블로그에 글을 쓰는 일은 사실 나 자신을 위한 일이기도 하다. 누군가에게 설명하기 위해서는 내용을 잘 알아야 하고, 그 과정에서 해당 지식에 대한 메타 인지적인 지식을 얻을 수 있다. 내가 알고 있는 것과 모르는 것의 범위를 알고, 그 범위 내에서 설명해야 할 내용을 정리하는 과정이 중요하기 때문이다. 파이썬으로 암호화폐 트레이딩 프로그램을 만들어 가는 과정을 처음부터 끝까지 정리하면서 좋은 아키텍쳐를 갖는 파이썬 프로그램에 대해서 고민하고 잘 만들어진 프로젝트를 완성해보겠다는 마음으로 개발일기를 시작하게 된 것이다.

        김지윤 박사님의 H.R.맥마스터 인터뷰 영상 https://www.youtube.com/watch?v=yq_KLiE9UvE

        내가 유명 석학도 아니고, 소프트웨어 공학의 권위자도 아니지만, 이 책은 파이썬을 공부하는 사람, 좋은 소프트웨어 개발에 대한 고민이 있는 사람, 프로젝트를 직접 만들어 보면서 프로그래밍을 개발해보고 싶은 사람에게 도움이 될 것이다. 짧지 않은 시간 동안의 나의 경험과 고민을 고스란히 담았기에 정답은 아닐지라도 그 자체로 충분히 의미있는 내용일 것이라 자부한다.

        파이썬은 소프트웨어를 처음 접하는 사람에게 매우 유용한 언어이며, 프로그래밍은 언어를 자동 거래하기 배우는 것처럼 직접 실습을 통해 배우는 것이 좋다. 파이썬을 사용해서 각각의 모듈을 직접 만들면서 학습할 수 있도록 구성하였기에 많은 도움이 될 것이다.

        책에는 여러가지 모듈이 나오지만 각 모듈의 의존성은 잘 관리되고 있다. 의존성이 잘 관리되고 있기에, 하나의 모듈을 자동 거래하기 다룬 장을 별도로 학습하기에도 좋다. 각 모듈은 단위 테스트와 통합 테스트를 통해서 검증되고 있는데, 그 구성을 살펴보고 구조에 대한 고민을 더한다면 초급 개발자의 문턱을 넘을 수 있을 것이다. 간단한 프로그램이지만, 좋은 아키텍처에 대한 모델이 될 수 있도록 신경썼다.

        책의 구성과 활용 방법

        '1장 파이썬과 암호화폐 트레이딩의 만남'에서는 왜 암호화폐 트레이딩과 파이썬이 찰떡궁합인지에 대해서 소개하고 있다.

        '2장 파이썬 시작하기'에서는 파이썬에 대해서 간단하게 알아본다. 파이썬은 이것만 알아도 당장 쓸 수 있는 언어다.

        '자동 거래하기 3장 시뮬레이터부터 시작하자'는 상당히 양이 많지만 가장 핵심적인 모듈의 구성과 구현에 대해서 설명하고 있다. 프로젝트 구성부터 단위 테스트와 통합테스트를 구성하는 방법, 테스트 주도 개발TDD까지 소개하고 있어서 더욱 양이 많아졌다.

        '4장 컨트롤러'는 사용자 인터페이스 모듈인 컨트롤러에 대한 이야기다. 사용자 인터페이스는 자유롭고 다양하게 추가 확장될 수 있음을 염두해두고 개발하는 과정을 소개하고 있다.

        '5장 시각화'는 파이썬의 큰 장점 중 하나인 통계와 그래프 라이브러리를 맛보게 해준다.

        '6장 업비트 Trader'와 '7장 빗썸 Trader'는 Trader 자동 거래하기 인터페이스의 구현체로 각각 업비트, 빗썸 거래소를 담당하는 Trader 모듈을 만드는 과정을 소개하고 있다. 구현체에 의존하는 것이 아니라 인터페이스에 의존하기에 구현체가 전체 시스템에 영향을 주지 않는 것을 확인할 수 있다.

        '8장 실전 거래'는 말그대로 실전에 대한 이야기다. 사실 실전 거래에서 발견된 추가 요구사항은 이미 각 모듈에 적용되었는데, 이 부분은 프로젝트 개발 흐름과 책에서 목차와 시간 순서가 일치하지 않는 유일한 부분이다. 이러한 추가 요구사항은 현실적인 이슈이며, 반복적인 추가 개발을 통해 대응할 수 있어야 한다.

        '9장 원격 컨트롤'은 만들어 놓은 프로그램을 보다 쉽게 사용하기 위해서 고안된 별도의 쥬피터 노트북 컨트롤러에 대한 이야기다. 말그대로 원격에서 쉽게 사용할 수 있는 기능이지만, 텔레그램보다는 사용성이 조금 떨어지는 것이 사실이다. 하지만 외부 시스템인 텔레그램에 의존하지 않고 사용하기에는 좋은 접근이라고 생각한다.

        '10장 텔레그램 Controller'은 최종 사용자 입장에서 가장 선호할 만한 컨트롤러를 개발하는 과정이었다. 폰으로 간단하게 뚝딱! 해보면 안다. 얼마나 편리한지.ㅎ

        '11장 전략 최적화'는 만들어진 프로그램을 어떻게 활용해야 할지에 대한 고민이 담긴 과정이다. 멀티 프로세스 대량 시뮬레이션을 통해 전략을 최적화하는 과정을 소개한다.

        각 장에서는 하나 이상의 모듈을 함께 만드는 과정을 진행한다. 모듈의 요구사항을 정의하고 테스트와 함께 구현하는 과정을 통해 모듈을 이해할 수 있으며, 각 모듈이 모여서 하나의 프로그램이 완성되는 과정을 살펴 볼 수 있다. 이 과정을 통해서 전체 프로그램을 이해할 수 있고 모듈을 정의하고 설계하여 만드는 능력을 갖게된다.

        그 모듈 개발 능력으로 프로그램 전체를 새로 개발 할 것이 아니라 전략을 구현하면 된다. 새로운 전략을 잘 만들어서 시스템을 구성하고 실전에서 사용하면 된다.


0 개 댓글

답장을 남겨주세요