반응형
import pyupbit
import pybacktest
import pandas as pd
import numpy as np

# 업비트 API 접속
access_key = "your_access_key"
secret_key = "your_secret_key"
upbit = pyupbit.Upbit(access_key, secret_key)

# 거래할 코인 설정
coin = "KRW-BTC"

# 트렌드를 정의하는 지표 설정 (볼린저 밴드)
def get_bbands(df):
    # 중심선: 20일 이동 평균선
    df['MA20'] = df['close'].rolling(20).mean()
    # 상단선: 중심선 + (2 * 표준편차)
    df['UB'] = df['MA20'] + (2 * df['close'].rolling(20).std())
    # 하단선: 중심선 - (2 * 표준편차)
    df['LB'] = df['MA20'] - (2 * df['close'].rolling(20).std())
    return df

# 매수/매도 전략 함수
def strategy(price, ub, lb):
    if price > ub:
        # 상승 트렌드일 경우 매수
        return 1
    elif price < lb:
        # 하락 트렌드일 경우 매도
        return -1
    else:
        return 0

# 백테스팅 함수
def backtest(ohlcv):
    # 볼린저 밴드 지표 계산
    df = get_bbands(ohlcv)

    # 매수/매도 전략 수행
    signals = pd.Series(index=df.index)
    for i in range(1, len(df)):
        signals.iloc[i] = strategy(df['close'][i], df['UB'][i-1], df['LB'][i-1])

    # 수익률 계산
    pf = pybacktest.Backtest(locals(), 'signals', commission=.0005, exclusive_orders=True)
    return pf.data

# OHLCV 데이터 가져오기
ohlcv = pyupbit.get_ohlcv(coin, interval='minute5')

# 백테스팅 실행
result = backtest(ohlcv)

# 결과 출력
print(result.head())

암호화폐 거래를 위한 퀀트 강좌

암호화폐는 전통적인 금융 시장과는 다른 특징과 규칙을 가진 새로운 자산 클래스입니다. 암호화폐 시장은 24시간 연중무휴로 운영되며, 가격 변동성이 높고, 규제가 부족하고, 정보 비대칭이 심각합니다. 이러한 특성 때문에 암호화폐 거래는 일반적인 투자 방식으로는 어려운 경우가 많습니다.

그래서 암호화폐 거래에는 퀀트(quant)라는 전문적인 기법이 필요합니다. 퀀트란 수학과 통계학을 기반으로 한 컴퓨터 프로그램을 이용하여 시장 데이터를 분석하고, 자동으로 거래 전략을 수립하고 실행하는 방식입니다. 퀀트는 인간의 감정이나 편견에 영향을 받지 않으며, 빠르고 정확하게 거래할 수 있습니다. 특히 암호화폐 시장에서는 퀀트가 큰 장점을 발휘할 수 있습니다.

이 강좌에서는 암호화폐 거래를 위한 퀀트의 기본 개념과 원리를 소개하고, 실제로 적용할 수 있는 예제와 코드를 제공합니다. 강좌의 목표는 다음과 같습니다.

- 암호화폐 시장의 특성과 동향을 이해한다.
- 퀀트의 역사와 정의를 안다.
- 퀀트의 주요 원칙과 방법론을 숙지한다.
- 퀀트에 필요한 수학과 통계학의 기초를 익힌다.
- 파이썬(python)과 판다스(pandas)와 같은 프로그래밍 언어와 라이브러리를 사용할 수 있다.
- 암호화폐 데이터를 수집하고 전처리하고 분석할 수 있다.
- 암호화폐 거래 전략을 설계하고 백테스팅(backtesting)하고 최적화할 수 있다.
- 암호화폐 거래 봇(trading bot)을 만들고 운영할 수 있다.

강좌는 총 10개의 단원으로 구성되어 있으며, 각 단원은 다음과 같은 내용을 다룹니다.

1. 암호화폐와 퀀트 소개
2. 암호화폐 거래를 위한 퀀트의 수학적 기초
3. 퀀트의 통계적 기초
4. 파이썬 프로그래밍 기초
5. 암호화폐 데이터 수집 및 전처리
6. 암호화폐 데이터 분석 및 시각화
7. 암호화폐 거래 전략 설계
8. 암호화폐 거래 전략 백테스팅
9. 암호화폐 거래 전략 최적화
10. 암호화폐 거래 봇 개발 및 운영

강좌를 수강하기 위해서는 다음과 같은 사전 지식이 필요합니다.

- 암호화폐에 대한 기본적인 이해: 암호화폐의 정의와 종류, 작동 원리와 장단점, 주요 용어와 개념 등을 알아야 합니다.
- 수학과 통계학에 대한 기본적인 이해: 대수학, 미적분학, 선형대수학, 확률론, 회귀분석, 시계열 분석 등의 개념과 공식을 이해하고 적용할 수 있어야 합니다.
- 컴퓨터 과학에 대한 기본적인 이해: 프로그래밍 언어(파이썬, R 등), 데이터베이스(SQL 등), 웹 스크래핑, API 사용법 등을 알아야 합니다.
- 금융 시장에 대한 기본적인 이해: 주식, 채권, 파생상품 등의 금융 상품의 특징과 가격 결정 요인, 시장의 구조와 참여자,

 

 

2. 암호화폐 거래를 위한 퀀트의 수학적 기초

- 암호화폐는 전자적인 방식으로 생성되고 전송되는 디지털 화폐이다. 암호화폐는 특정한 알고리즘에 의해 공급이 제한되고, 거래 내역은 분산된 네트워크에 기록되어 변조가 어렵다.
- 퀀트는 수학과 통계학, 컴퓨터 과학 등의 지식을 활용하여 금융 시장에서의 투자 전략을 개발하고 실행하는 전문가이다. 퀀트는 시장의 패턴과 규칙을 찾아내고, 미래의 가격 변동을 예측하고, 최적의 거래 타이밍과 포트폴리오를 결정한다.
- 암호화폐 거래를 위한 퀀트의 수학적 기초는 다음과 같은 주제들을 포함한다.

  - 확률론: 암호화폐의 가격은 불확실한 요인들에 의해 결정되므로, 확률론은 암호화폐의 미래 가격 분포를 모델링하고, 거래에 관련된 위험과 수익을 측정하는 데 필수적이다. 예를 들어, 베이즈 정리, 마르코프 체인, 브라운 운동 등의 개념들이 확률론의 중요한 도구들이다.
  - 선형대수학: 선형대수학은 다차원 공간에서의 벡터와 행렬 연산을 다루는 수학 분야이다. 선형대수학은 암호화폐 거래 데이터를 효율적으로 저장하고 처리하고, 다변량 데이터 간의 관계와 상관성을 분석하고, 차원 축소와 특징 추출 등의 기법을 적용하는 데 유용하다. 예를 들어, 고유값 분해, 특이값 분해, 주성분 분석 등의 방법들이 선형대수학의 핵심적인 알고리즘들이다.
  - 최적화: 최적화는 주어진 조건과 제약 하에서 목적 함수를 최대화하거나 최소화하는 문제를 해결하는 수학 분야이다. 최적화는 암호화폐 거래에서 최적의 포트폴리오 구성과 자산 배분을 결정하고, 거래 비용과 리스크를 최소화하고, 수익률을 극대화하는 데 필수적이다. 예를 들어, 라그랑주 승수법, 그래디언트 디센트, 콘벡스 최적화 등의 방법들이 최적화의 중요한 이론과 기법들이다.

 

3. 암호화폐 거래를 위한 퀀트의 통계적 기초

- 암호화폐 거래에서 통계적 기초를 이루는 요소는 다음과 같다.
  - 시계열 분석: 암호화폐 가격은 시간에 따라 변동하는 시계열 데이터이므로, 시계열 분석을 통해 가격의 추세, 계절성, 주기성 등을 파악하고 예측할 수 있다. 시계열 분석에는 ARIMA, GARCH, LSTM 등의 모델이 사용된다.
  - 기계학습: 암호화폐 가격은 다양한 요인에 영향을 받으므로, 기계학습을 통해 가격에 영향을 미치는 변수들을 찾고 가중치를 부여할 수 있다. 기계학습에는 회귀분석, 분류분석, 군집분석 등의 방법이 사용된다.
  - 최적화: 암호화폐 거래에서 퀀트는 수익을 극대화하고 위험을 최소화하는 최적의 포트폴리오를 구성해야 한다. 최적화에는 목적함수와 제약조건을 정의하고 수학적인 알고리즘을 적용하는 방법이 사용된다. 최적화에는 선형계획법, 동적계획법, 유전알고리즘 등이 사용된다.

 

암호화폐 거래에서 통계적 기초를 이루는 요소는 다음과 같습니다.

- 가격: 암호화폐의 시장에서의 교환 비율입니다. 가격은 수요와 공급에 따라 변동하며, 다른 암호화폐나 법정화폐와의 환율을 나타냅니다.
- 거래량: 일정 기간 동안 암호화폐가 거래된 총량입니다. 거래량은 암호화폐의 인기와 활동도를 반영하며, 가격 변동에 영향을 줄 수 있습니다.
- 시가총액: 암호화폐의 총 발행량과 현재 가격의 곱입니다. 시가총액은 암호화폐의 시장 점유율과 비중을 나타냅니다.
- 변동성: 암호화폐의 가격이 얼마나 빠르고 크게 변동하는지를 측정하는 지표입니다. 변동성이 높은 암호화폐는 위험도가 높지만 수익률도 높을 수 있습니다.
- 상관계수: 두 개 이상의 암호화폐의 가격 변동이 얼마나 비슷하게 움직이는지를 나타내는 수치입니다. 상관계수가 1에 가까우면 두 암호화폐는 같은 방향으로 움직이고, -1에 가까우면 반대 방향으로 움직이며, 0에 가까우면 서로 관련이 없습니다. 상관계수는 포트폴리오 구성과 리스크 관리에 유용합니다.

 

7. 암호화폐 거래 전략 설계

 

암호화폐 거래 전략 설계를 구체적으로 알아보자

암호화폐는 전통적인 금융 시장과는 다른 특징과 규칙을 가진 새로운 자산 클래스입니다. 따라서 암호화폐 거래에 성공하기 위해서는 적절한 전략을 설계하고 실행하는 것이 매우 중요합니다. 이번 글에서는 암호화폐 거래 전략을 설계하는 과정에 대해 구체적으로 알아보겠습니다.

암호화폐 거래 전략을 설계하는 데에는 다음과 같은 단계가 필요합니다.

1. 목표와 기대수익률 설정하기
2. 거래할 암호화폐와 시장 선택하기
3. 거래 방식과 스타일 결정하기
4. 거래 신호와 규칙 정의하기
5. 리스크 관리와 자금 관리 계획 수립하기
6. 백테스팅과 포워드 테스팅 실시하기
7. 실제 거래에 적용하고 성과 평가하기

각 단계에 대해 자세히 살펴보겠습니다.

1. 목표와 기대수익률 설정하기

암호화폐 거래 전략을 설계하기 전에 가장 먼저 해야 할 일은 자신의 목표와 기대수익률을 설정하는 것입니다. 목표는 단기적인 것과 장기적인 것으로 나눌 수 있으며, 기대수익률은 자신의 자본금 대비 얼마나 수익을 낼 수 있는지를 나타내는 지표입니다. 목표와 기대수익률을 설정할 때는 다음과 같은 점들을 고려해야 합니다.

- 자신의 자본금 규모와 리스크 허용도를 파악하고, 과도한 욕심을 부리지 않는다.
- 시장 상황과 변동성에 따라 목표와 기대수익률을 유연하게 조정한다.
- 목표와 기대수익률을 정량적으로 측정할 수 있는 지표로 설정한다.
- 목표와 기대수익률을 달성하기 위한 구체적인 행동 계획을 수립한다.

예를 들어, 자신의 자본금이 100만 원이고, 월 10%의 수익률을 목표로 한다면, 매월 10만 원의 수익을 내야 한다는 것입니다. 이를 위해 어떤 암호화폐를 얼마나 매수하고 매도할 것인지, 어떤 시점에서 진입하고 청산할 것인지, 어떤 리스크를 감수할 것인지 등의 구체적인 행동 계획을 세워야 합니다.

2. 거래할 암호화폐와 시장 선택하기

암호화폐 거래 전략을 설계할 때 다음으로 해야 할 일은 거래할 암호화폐와 시장을 선택하는 것입니다. 암호화폐는 비트코인, 이더리움 등의 메이저 코인부터 다양한 종류의 알트코인까지

 

-----------------

암호화폐 거래 전략 상세한 python code 예제

안녕하세요, 암호화폐 거래에 관심이 있는 분들을 위해 이번에는 암호화폐 거래 전략에 대해 상세하게 알아보고, python code 예제를 통해 실제로 구현해보는 방법을 소개하려고 합니다.

암호화폐 거래 전략이란 무엇일까요?

암호화폐 거래 전략이란, 암호화폐 시장에서 수익을 창출하기 위해 사용하는 일련의 규칙과 원칙을 말합니다. 암호화폐 시장은 매우 변동성이 높고 예측하기 어려운 시장이기 때문에, 잘 설계된 거래 전략을 갖는 것은 매우 중요합니다.

암호화폐 거래 전략은 크게 두 가지로 나눌 수 있습니다. 하나는 기술적 분석을 기반으로 하는 전략이고, 다른 하나는 기본적 분석을 기반으로 하는 전략입니다.

기술적 분석을 기반으로 하는 전략은, 과거의 가격, 거래량, 시간 등의 데이터를 차트나 그래프로 표현하고, 이를 분석하여 향후 가격 움직임을 예측하는 방법입니다. 이 방법은 시장에서 자주 발생하는 패턴, 추세, 지지선과 저항선 등을 파악하여 투자 결정을 위한 진입 및 퇴장 기회를 결정합니다.

기본적 분석을 기반으로 하는 전략은, 해당 자산이 발행된 기업이나 국가의 경제, 산업, 재무 등의 기본적인 요소를 분석하여 향후 가치를 예측하는 방법입니다. 이 방법은 기업의 재무제표, 경제지표, 산업 동향 등을 분석하여 해당 자산의 가치를 예측합니다. 이를 통해 기업이나 국가의 성장 가능성, 경쟁력, 재무 상황 등을 파악하며, 이를 바탕으로 향후 가치를 예측합니다.

기술적 분석과 기본적 분석은 서로 보완적인 관계에 있습니다. 즉, 어느 한 쪽만 사용하는 것보다 두 가지를 모두 고려하는 것이 더 좋은 결과를 가져올 수 있습니다.

암호화폐 거래 전략의 종류와 python code 예제

암호화폐 거래 전략은 다양한 종류가 있습니다. 여기서는 가장 대표적인 몇 가지를 소개하고, 각각에 대한 python code 예제를 제공하겠습니다.

1. 크립토 데이 트레이딩 (Crypto Day Trading)

크립토 데이 트레이딩은 같은 날에 포지션을 열고 닫는 단기 거래 전략입니다. 이 전략은 암호화폐 시장의 변동성을 활용하여 작은 이익을 내는 것을 목표

--------------------

암호화폐 거래 전략은 다양한 종류가 있습니다. 여기서는 가장 대표적인 몇 가지를 소개합니다.

- 트렌드 추종 전략: 이 전략은 암호화폐의 가격이 일정한 방향으로 움직이는 트렌드를 파악하고, 그 방향에 따라 매수 또는 매도하는 방식입니다. 예를 들어, 상승 트렌드에서는 저점에서 매수하고 고점에서 매도하며, 하락 트렌드에서는 고점에서 매도하고 저점에서 매수합니다. 트렌드 추종 전략은 장기적인 시각으로 시장을 분석하고, 변동성이 큰 시장에서 유리합니다.
- 반전 전략: 이 전략은 암호화폐의 가격이 트렌드의 반대 방향으로 움직일 것이라고 예상하고, 그 시점에 매수 또는 매도하는 방식입니다. 예를 들어, 상승 트렌드에서는 과매수 상태가 되면 매도하고, 하락 트렌드에서는 과매도 상태가 되면 매수합니다. 반전 전략은 단기적인 시각으로 시장을 분석하고, 변동성이 작은 시장에서 유리합니다.
- 스캘핑 전략: 이 전략은 암호화폐의 가격이 작은 범위 내에서 움직일 때, 그 범위의 상단과 하단에서 반복적으로 매수 또는 매도하는 방식입니다. 예를 들어, 가격이 10000원과 10100원 사이에서 움직인다면, 10000원에 매수하고 10100원에 매도하는 것을 반복합니다. 스캘핑 전략은 초단기적인 시각으로 시장을 분석하고, 수수료와 슬리피지에 주의해야 합니다.
- 아비트라지 전략: 이 전략은 암호화폐의 가격이 다른 거래소나 플랫폼에서 차이가 날 때, 그 차이를 이용하여 동시에 매수와 매도를 하는 방식입니다. 예를 들어, 거래소 A에서 비트코인의 가격이 10000원이고, 거래소 B에서 비트코인의 가격이 10100원이라면, 거래소 A에서 비트코인을 사고 거래소 B에서 비트코인을 팔아 100원의 이익을 얻습니다. 아비트라지 전략은 신속한 거래와 낮은 수수료가 필요합니다.

----------------------

- 암호화폐 거래 트렌드 추종 전략이란 시장의 방향성을 파악하고 그에 따라 매수 또는 매도를 결정하는 전략입니다.
- 트렌드 추종 전략은 장기적인 시장의 움직임을 반영하기 때문에 변동성이 높은 암호화폐 시장에서도 안정적인 수익을 낼 수 있습니다.
- 트렌드 추종 전략을 구현하기 위해서는 다음과 같은 요소들이 필요합니다.
  - 트렌드를 정의하는 지표: 예를 들어 이동 평균선, 볼린저 밴드, MACD 등이 있습니다.
  - 트렌드의 방향과 강도를 판단하는 규칙: 예를 들어 상승 트렌드일 때는 골든크로스, 하락 트렌드일 때는 데드크로스 등이 있습니다.
  - 진입과 청산을 결정하는 신호: 예를 들어 상승 트렌드에서는 저점에서 매수하고 고점에서 매도하며, 하락 트렌드에서는 고점에서 매도하고 저점에서 매수합니다.
  - 손절과 익절을 관리하는 방법: 예를 들어 스톱로스, 트레일링 스톱, 타겟 프라이스 등이 있습니다.
- 파이썬으로 트렌드 추종 전략을 구현하는 코드는 다음과 같습니다. (참고: )
  

 

안녕하세요. 이것은 파이썬으로 만드는 암호화폐 자동 거래 시스템에 대한 텍스트입니다. 텍스트는 다음과 같은 특징을 가집니다.

- 전문적인 어조로 작성되었습니다.
- 길이가 길어서 코드 블록 문법으로 감싸져 있습니다.
- 불릿 포인트 리스트 형식으로 구성되어 있습니다.

텍스트의 내용은 다음과 같습니다.

python
# 필요한 모듈 임포트
import pyupbit
import pandas as pd
import numpy as np
import time

# 업비트 API 접속
access_key = "your_access_key"
secret_key = "your_secret_key"
upbit = pyupbit.Upbit(access_key, secret_key)

# 거래할 코인 설정
coin = "KRW-BTC"

# 트렌드를 정의하는 지표 설정 (볼린저 밴드)
def get_bbands(df):
# 중심선: 20일 이동 평균선
df['MA20'] = df['close'].rolling(20).mean()
# 상단선: 중심선 + (2 * 표준편차)
df['UB'] = df['MA20'] + (2 * df['close'].rolling(20).std())
# 하단선: 중심선 - (2 * 표준편차)
df['LB'] = df['MA20'] - (2 * df['close'].rolling(20).std())
return df

# 트렌드의 방향과 강도를 판단하는 규칙 설정 (상승/

 

---------------------

openai 사이트에서 계속

 

코드의 일부가 누락되어 있어 완전한 동작을 확인할 수 없습니다. 그러나 제공된 코드 일부를 기반으로 일반적인 설명을 제공할 수 있습니다.

이 코드는 파이썬으로 작성된 업비트 API를 사용하여 코인 거래를 자동화하는 코드입니다.

pyupbit, pandas, numpy, time 등의 모듈이 사용되며, 업비트 API에 접속하기 위해 개인 API키가 필요합니다.

coin 변수는 거래하고자 하는 코인을 설정하는 변수이며, get_bbands 함수는 주어진 DataFrame에 대해 볼린저 밴드 지표를 계산합니다.

이 코드에서는 볼린저 밴드를 사용하여 트렌드의 방향과 강도를 판단합니다. 상승 또는 하락 트렌드를 판단하기 위해 상단선(UB)과 하단선(LB)을 계산합니다. 만약 현재 가격이 상단선을 돌파하면 상승 트렌드로 판단하고, 하락 트렌드로 판단하기 위해서는 하단선을 돌파하는지 여부를 확인합니다.

이 코드의 전체적인 동작은 다음과 같습니다.

  1. 업비트 API에 접속하여 계좌 정보 확인
  2. 설정된 코인에 대한 현재 가격 정보 확인
  3. 볼린저 밴드 지표 계산
  4. 현재 가격이 상단선을 돌파하는지, 하단선을 돌파하는지 여부 확인
  5. 상승/하락 트렌드에 따라 매수/매도 결정
  6. 일정 시간 간격으로 2~5번 과정 반복
 
 
위 코드를 매수 매도를 포함해서 완성시켜줘
 
 

코드를 완성하기 위해서는 몇 가지 추가 정보가 필요합니다. 예를 들어, 매수 및 매도 전략에 대한 규칙, 매수 및 매도 주문을 실행하는 방법, 주문 체결 상태를 모니터링하는 방법 등이 있습니다. 이러한 정보를 모두 고려하여 완전한 코드를 작성하는 것은 어렵기 때문에 대략적인 코드 예시를 제공하겠습니다.

다음은 간단한 매수/매도 전략과 주문 실행 방법을 포함한 코드 예시입니다.

import pyupbit
import time

access_key = "your_access_key"
secret_key = "your_secret_key"

# upbit 객체 생성
upbit = pyupbit.Upbit(access_key, secret_key)

# 거래할 코인 설정
coin = "KRW-BTC"

# 매수/매도 전략 설정
def strategy(df):
    # 현재 가격 정보 추출
    current_price = pyupbit.get_current_price(coin)

    # 볼린저 밴드 지표 계산
    df = get_bbands(df)

    # 상승/하락 트렌드 판단
    if current_price > df['UB'][-1]:
        # 상승 트렌드일 경우 매수
        buy_result = upbit.buy_market_order(coin, 50000)
        print("매수 주문 결과:", buy_result)
    elif current_price < df['LB'][-1]:
        # 하락 트렌드일 경우 매도
        sell_result = upbit.sell_market_order(coin, 50000)
        print("매도 주문 결과:", sell_result)

# 메인 루프
while True:
    try:
        # 가격 정보 불러오기
        df = pyupbit.get_ohlcv(coin, interval='minute5')

        # 매수/매도 전략 수행
        strategy(df)

        # 일정 시간 대기
        time.sleep(60)
    except Exception as e:
        print(e)
        time.sleep(1)

위 코드에서는 strategy 함수에서 볼린저 밴드 지표를 계산하고, 현재 가격이 상단선을 돌파하면 매수 주문을, 하단선을 돌파하면 매도 주문을 실행합니다. 매수/매도 주문에 대한 크기는 50000원으로 설정되어 있습니다. 루프에서는 일정 시간마다 가격 정보를 가져오고, 매수/매도 전략을 실행합니다. try/except 블록을 사용하여 오류가 발생할 경우 대응합니다.

 

------

 

위 코드를 백테스팅 실행하는 코드로 바꿔줘
 

위 코드를 백테스팅으로 바꾸기 위해서는, while 루프 대신에 백테스팅 라이브러리를 사용하여 백테스팅을 실행하는 함수를 작성해야 합니다.

다음은 pybacktest 라이브러리를 사용하여 간단한 백테스팅을 실행하는 코드입니다.

 
import pyupbit
import pybacktest
import pandas as pd
import numpy as np

# 업비트 API 접속
access_key = "your_access_key"
secret_key = "your_secret_key"
upbit = pyupbit.Upbit(access_key, secret_key)

# 거래할 코인 설정
coin = "KRW-BTC"

# 트렌드를 정의하는 지표 설정 (볼린저 밴드)
def get_bbands(df):
    # 중심선: 20일 이동 평균선
    df['MA20'] = df['close'].rolling(20).mean()
    # 상단선: 중심선 + (2 * 표준편차)
    df['UB'] = df['MA20'] + (2 * df['close'].rolling(20).std())
    # 하단선: 중심선 - (2 * 표준편차)
    df['LB'] = df['MA20'] - (2 * df['close'].rolling(20).std())
    return df

# 매수/매도 전략 함수
def strategy(price, ub, lb):
    if price > ub:
        # 상승 트렌드일 경우 매수
        return 1
    elif price < lb:
        # 하락 트렌드일 경우 매도
        return -1
    else:
        return 0

# 백테스팅 함수
def backtest(ohlcv):
    # 볼린저 밴드 지표 계산
    df = get_bbands(ohlcv)

    # 매수/매도 전략 수행
    signals = pd.Series(index=df.index)
    for i in range(1, len(df)):
        signals.iloc[i] = strategy(df['close'][i], df['UB'][i-1], df['LB'][i-1])

    # 수익률 계산
    pf = pybacktest.Backtest(locals(), 'signals', commission=.0005, exclusive_orders=True)
    return pf.data

# OHLCV 데이터 가져오기
ohlcv = pyupbit.get_ohlcv(coin, interval='minute5')

# 백테스팅 실행
result = backtest(ohlcv)

# 결과 출력
print(result.head())

 

위 코드에서는 backtest 함수에서 매수/매도 전략을 수행하고, 백테스팅 결과를 반환합니다. strategy 함수는 현재 가격이 상단선을 돌파하면 매수 주문을, 하락 트렌드일 경우 매도 주문을 실행합니다. 매수/매도 주문에 대한 크기는 1로 고정되어 있

 
----------------
 
google colaboratory에서 pybacktest 라이브러리 설치가 안되서...
 
다른 backtest 라이브러리를 사용하는 코드로 바꿔줘
 

다른 백테스팅 라이브러리인 bt 라이브러리를 사용하여 위 코드를 바꿔보겠습니다. bt 라이브러리는 pandas 데이터프레임과 유사한 bt.feeds.PandasData 객체를 사용하여 백테스팅 데이터를 처리하며, bt 클래스를 상속한 매매 전략 클래스를 작성하여 매매 전략을 구현합니다.

import pyupbit
import bt
import pandas as pd
import numpy as np

# 업비트 API 접속
access_key = "your_access_key"
secret_key = "your_secret_key"
upbit = pyupbit.Upbit(access_key, secret_key)

# 거래할 코인 설정
coin = "KRW-BTC"

# 트렌드를 정의하는 지표 설정 (볼린저 밴드)
def get_bbands(df):
    # 중심선: 20일 이동 평균선
    df['MA20'] = df['close'].rolling(20).mean()
    # 상단선: 중심선 + (2 * 표준편차)
    df['UB'] = df['MA20'] + (2 * df['close'].rolling(20).std())
    # 하단선: 중심선 - (2 * 표준편차)
    df['LB'] = df['MA20'] - (2 * df['close'].rolling(20).std())
    return df

# 매수/매도 전략 클래스
#class BBands(bt.Algo):
class BBands(bt.Strategy):
    def __init__(self, ub, lb):
        self.ub = ub
        self.lb = lb

    def __call__(self, target):
        if target.now > 0:
            if target.price > self.ub:
                target.order_target_percent(target=1)
            elif target.price < self.lb:
                target.order_target_percent(target=0)
        return True

# 백테스팅 함수
def backtest(ohlcv):
    # 볼린저 밴드 지표 계산
    df = get_bbands(ohlcv)

    # 데이터프레임을 bt.feeds.PandasData로 변환
    data = bt.feeds.PandasData(dataname=df)

    # 백테스팅 엔진 설정
    cerebro = bt.Cerebro()
    cerebro.adddata(data)

    # 매매 전략 설정
    cerebro.addstrategy(BBands, ub=df['UB'].iloc[-1], lb=df['LB'].iloc[-1])

    # 초기 자본금 설정
    cerebro.broker.setcash(1000000)

    # 수수료 설정
    cerebro.broker.setcommission(commission=0.0005)

    # 백테스팅 실행
    cerebro.run()

    # 결과 반환
    return cerebro

# OHLCV 데이터 가져오기
ohlcv = pyupbit.get_ohlcv(coin, interval='minute5', count=5000)

# 백테스팅 실행
result = backtest(ohlcv)

# 결과 출력
print(result.broker.getvalue())
 
 
 

 

반응형

+ Recent posts