[암호화폐] [파이썬] 암호화폐 자동매매(1): 변동성 전략 +상승장

'머신러닝 기반 투자 모델 만들기'를 목표로 자동매매 프로그램을 공부해나가려고 합니다.

오늘은 '누구나 할 수 있다. 비트코인 자동매매' 서적에 깃허브 소스 중 변동성 돌파 전략 + 상승장 투자 전략에 대해 팔로잉 했습니다. 원본 소스는 윈도우이고, 저는 약간의 소스 수정으로 우분투 16.04 / python3.5 에서 실행했습니다.

변동성 돌파 전략은 다음과 같이 사용합니다.

- 매수 조건: 전일 고가에서 전일 저가의 가격 변동폭을 구하고, 아래 조건을 만족할 때 매수합니다.

현재 가격 > 당일 시가 + 가격 변동폭 * 0.5

-매도 조건: 당일 종가에 매도합니다.

또한 상승장 판단 기준은 전일 종가를 기준으로 아래 조건을 만족할 때입니다.

-현재 가격 > 5일 이동평균

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

변동성 돌파 전략과 상승장 판단 기준을 결합한 소스코드는 아래와 같습니다. 아래의 예제에서는 BTC(비트코인)을 사용했으며, 이더리움과 이오스 등 빗썸에서 취급하는 다른 코인으로 변경가능합니다.

여기서는 거래소에서 직접 매수/매도를 위해 빗썸 private API 를 활용해 구현했습니다.

 

 

import time
# 빗썸 모듈 (pip install -U pybithumb)
import pybithumb
from datetime import datetime, timedelta

# 키 유출 방지를 위해, 매수/매도를 위한 공개키/암호키를 파일로 저장 후 불러옴
with open("bithumb.txt") as f:
    lines = f.readlines()
    # 좌우 공백을 제거한 문자열 제거
    key = lines[0].strip()
    secret = lines[1].strip()
    bithumb = pybithumb.Bithumb(key, secret)

# 전일 5일 이동평균
def get_yesterday_ma5(ticker):
    df = pybithumb.get_ohlcv(ticker)
    close = df['close']
    ma = close.rolling(window=5).mean()
    return ma[-2]

# 목표 가격을 얻어옴
def get_target_price(ticker):
    #일봉 데이터 얻어옴
    df = pybithumb.get_ohlcv(ticker)
    #뒤에서 부터 마지막 일봉값. 예) df.iloc[-1] 는 today
    yesterday = df.iloc[-2]

    today_open = yesterday['close']
    yesterday_high = yesterday['high']
    yesterday_low = yesterday['low']
    #가격 변동폭 : 전일 고가 - 전일 저가
    #매수 기준 :당일 시간에서 (변동폭 * 0.5) 이상 상승하면 매수
    #매도 기준: 당일 종가에 매도
    target = today_open + (yesterday_high - yesterday_low) * 0.5
    return target


def buy_crypto_currency(ticker):
    # 잔고조회
    krw = bithumb.get_balance(ticker)[2]
    # 호가창 조회
    orderbook = pybithumb.get_orderbook(ticker)
    # 최우선 매도 호가 조회
    sell_price = orderbook['asks'][0]['price']
    # 원화잔고를 최우선 매도가로 나눠서 구매 가능한 수량 계산
    unit = krw / float(sell_price)
    # 시장가 주문으로 비트코인 매수
    bithumb.buy_market_order(ticker, unit)


def sell_cryto_currency(ticker):
    unit = bithumb.get_balance(ticker)[0]
    #시장가 주문으로 비트코인 매도
    bithumb.sell_makret_order(ticker,unit)


now = datetime.now()
# timedelta는 1일 더하여 다음날 자정으로 만듬
mid = datetime(now.year, now.month, now.day) + timedelta(1)

#비트코인의 목표 매수 가격
target_price = get_target_price("BTC")

while True:
    try:
        now = datetime.now()
        # 10초 마진으로 자정이 되면 전량 매도
        if mid < now < mid + datetime.delta(seconds=10):
            target_price = get_target_price("BTC")
            mid = datetime(now.year, now.month, now.day) + timedelta(1)
            # 다음날 시초가에 전량 매도
            sell_cryto_currency("BTC")

        #비트코인의 현재 가격
        current_price = pybithumb.get_current_price("BTC")
        print(current_price)

        # 목표가 이상이면서 상승장일 때 매수 ( 전일 5일의 이동평균값보다 클 때)
        if current_price > target_price and (current_price > ma5):
            buy_crypto_currency("BTC")
    except:
        print("에러 발생")
    time.sleep(1)


 

 

다음 포스팅에서는 백테스팅을 통해 투자 전략에 대한 수익률를 확인해보겠습니다.

[출처] https://blog.naver.com/PostView.nhn?blogId=kyy0810&logNo=221498289772

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86034
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78561
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95291
27 [java dbms][database] [컴] Apache Derby 사용하기 - 4 - in-memory DB 졸리운_곰 2021.04.15 1559
26 [java dbms][database] [컴] Apache Derby 사용하기 - 3 - Apache Derby Network Server 졸리운_곰 2021.04.15 1634
25 [java dbms][database] [컴] Apache Derby 사용하기 - 2 - sql script tool ij 사용하기 졸리운_곰 2021.04.15 1823
24 [java dbms][database] [컴] Apache Derby 사용하기 - 1 - Derby 설치 file 졸리운_곰 2021.04.15 1152
23 실습 2 - GROUP 졸리운_곰 2020.09.30 1550
22 [SQL 가이드] 데이터베이스 모델의 이해 (Understanding Database model) file 졸리운_곰 2020.06.13 2480
21 [SQL 가이드] 식별자(Identification)의 개념 file 졸리운_곰 2020.06.13 2058
20 [SQL 가이드] 관계(relationship)의 개념 file 졸리운_곰 2020.06.13 1555
19 [SQL 가이드] 속성(attribute)의 개념 file 졸리운_곰 2020.06.13 1703
18 [SQL 가이드] 엔티티의 개념 file 졸리운_곰 2020.06.13 2198
17 [SQL] join의 on절과 where절 차이 졸리운_곰 2020.05.16 1303
16 JOIN*(3개 테이블) and GROUP BY*(보이지않더라도 key칼럼으로) and ORDER BY 졸리운_곰 2020.05.16 1224
15 다중 테이블에서 데이터 검색 - JOIN file 졸리운_곰 2020.05.16 1594
14 IFNULL(MYSQL), ISNULL(MSSQL), NVL(ORACLE) 졸리운_곰 2018.07.24 1778
13 4 Ways to Join Only The First Row in SQL file 졸리운_곰 2018.07.03 1637
12 DBMS별 기존테이블 SELECT해서 새 테이블에 INSERT하여 데이터 ... file 졸리운_곰 2018.01.22 1592
11 SOL 개발자의 현주소 : 개발자가 SQL 작성시 고쳐야 하는 태도 file 졸리운_곰 2018.01.01 2158
10 오라클 운반 최소 단위 BLOCK file 졸리운_곰 2017.07.15 2035
9 재미있는 DB 이야기 ‘놀라운 마방진의 세계’ file 졸리운_곰 2017.07.15 2393
8 재미있는 DB 이야기 ‘사라진 날짜를 찾아라’ file 졸리운_곰 2017.07.15 2222
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED