- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
[암호화폐] [파이썬] 암호화폐 자동매매(1): 변동성 전략 +상승장
'머신러닝 기반 투자 모델 만들기'를 목표로 자동매매 프로그램을 공부해나가려고 합니다.
오늘은 '누구나 할 수 있다. 비트코인 자동매매' 서적에 깃허브 소스 중 변동성 돌파 전략 + 상승장 투자 전략에 대해 팔로잉 했습니다. 원본 소스는 윈도우이고, 저는 약간의 소스 수정으로 우분투 16.04 / python3.5 에서 실행했습니다.
변동성 돌파 전략은 다음과 같이 사용합니다.
- 매수 조건: 전일 고가에서 전일 저가의 가격 변동폭을 구하고, 아래 조건을 만족할 때 매수합니다.
현재 가격 > 당일 시가 + 가격 변동폭 * 0.5
-매도 조건: 당일 종가에 매도합니다.
또한 상승장 판단 기준은 전일 종가를 기준으로 아래 조건을 만족할 때입니다.
-현재 가격 > 5일 이동평균
변동성 돌파 전략과 상승장 판단 기준을 결합한 소스코드는 아래와 같습니다. 아래의 예제에서는 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
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86034 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78561 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95291 |
| 5 | XML database | 졸리운_곰 | 2016.11.29 | 4389 |
| 4 |
Learn XQuery in 10 Minutes: An XQuery Tutorial
| 졸리운_곰 | 2016.11.29 | 1996 |
| 3 |
xquery-tutorial.pdf
| 졸리운_곰 | 2016.11.29 | 1727 |
| 2 | XML 문서 가져오기 및 XQuery 쿼리 예제 | 졸리운_곰 | 2016.11.29 | 1563 |
| 1 |
[SQL] XQuery로 XML Data에 접근하기
| 졸리운_곰 | 2016.11.29 | 1921 |

