[암호화폐] [파이썬] 암호화폐 자동매매(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
15 [표준SQL] 퀴즈로 배우는 SQL : 전기 요금 계산 file 졸리운_곰 2024.08.10 1575
14 [표준SQL] 퀴즈로 배우는 SQL : 파이프 연결하기 file 졸리운_곰 2024.08.10 1319
13 [표준SQL] 퀴즈로 배우는 SQL : 공통점이 가장 많은 친구 찾기 file 졸리운_곰 2024.08.10 2114
12 [표준 SQL] 퀴즈로 배우는 SQL : 일별 누적 접속자 통계 구하기 file 졸리운_곰 2024.08.10 1683
11 [표준 SQL] 퀴즈로 배우는 SQL : 구분자로 나누어 행,열 바꾸기 file 졸리운_곰 2024.08.10 1883
10 [표준 SQL] 퀴즈로 배우는 SQL : 신입사원 부서 배치에 따른 급여 랭킹 시뮬레이션 file 졸리운_곰 2024.08.10 1339
9 [표준 SQL] 퀴즈로 배우는 SQL : 시작일, 종료일 사이의 휴일을 제외한 일수 구하기 file 졸리운_곰 2024.08.10 1477
8 [표준 SQL] 권순용의 DB 이야기 : 함수 기반 인덱스의 개념과 생성 이해 file 졸리운_곰 2024.08.10 1373
7 [표준 SQL] 퀴즈로 배우는 SQL : 계층 쿼리를 이용해 조직도 만들기 file 졸리운_곰 2024.08.10 2063
6 [표준 SQL] SQL을 잘한다는 기준은 무엇일까 file 졸리운_곰 2024.08.10 1340
5 [SQL] CRUD 기본 사용법 file 졸리운_곰 2023.01.23 1392
4 [기본 SQL] SELECT, INSERT, UPDATE, DELETE file 졸리운_곰 2022.04.26 1209
3 Mysql Join 해부(Left, Right, Outer, Inner Join) file 졸리운_곰 2019.01.30 1577
2 Join의 모든것.(LEFT OUTER, RIGHT OUTER, INNER, FULL OUTER, CROSS) 졸리운_곰 2019.01.30 1517
1 SELECT 문법 file 졸리운_곰 2017.11.22 2313
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED