본문 바로가기
개인 프로젝트/자동 매매 프로그램

비트코인 자동매매 프로그램 제작

by 황밤 2023. 7. 6.
728x90
반응형

2023/0706

 

https://chat.openai.com/

chatGPT 사이트

 

 

 

 

 

 

오늘은 ChatGPT에게 제가 필요로 하는 코드를 달라고 해보았어요.

그랬더니 다음과 같은 코드를 주었습니다.

 

앞으로 이 코드를 기반으로 실제로 비트코인 자동매매 프로그램을 만들어 볼까합니다!

 

import pandas as pd

import ccxt

from ta import add_all_ta_features

from ta.utils import dropna

import numpy as np

Binance API 설정

exchange = ccxt.binance({ 'apiKey': 'your_api_key', 'secret': 'your_secret_key', })

거래할 암호화폐 종목과 시간 간격 설정

symbol = 'BTC/USDT' timeframe = '1m' limit = 1000

데이터 수집 및 전처리

ohlcv = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=limit) df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume']) df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms') df.set_index('timestamp', inplace=True)

df = dropna(df) df = add_all_ta_features(df, 'open', 'high', 'low', 'close', 'volume')

자동 매매 알고리즘 구현

rsi_period = 14 rsi_buy_threshold = 30 rsi_sell_threshold = 70

df['rsi'] = ta.momentum.RSIIndicator(df['close'], rsi_period).rsi()

df['position'] = np.nan

for i in range(1, len(df)): if df['rsi'].iloc[i-1] < rsi_buy_threshold and df['rsi'].iloc[i] >= rsi_buy_threshold: df['position'].iloc[i] = 1 elif df['rsi'].iloc[i-1] > rsi_sell_threshold and df['rsi'].iloc[i] <= rsi_sell_threshold: df['position'].iloc[i] = -1

df['position'].fillna(method='ffill', inplace=True) df['position'].fillna(0, inplace=True)

df['return'] = df['close'].pct_change() * df['position'].shift(1) df['cum_return'] = (1 + df['return']).cumprod()

결과 출력

print(df[['close', 'position', 'return', 'cum_return']])

 
import requests

# 업비트 API 엔드포인트 URL
url = 'https://api.upbit.com/v1/ticker'
# 원하는 암호화폐의 마켓 코드 (예: 비트코인)
market = 'KRW-BTC'

# API 요청 보내기
response = requests.get(url, params={'markets': market})
data = response.json()

# API 응답에서 원하는 데이터 추출
if data:
    btc_price = data[0]['trade_price']  # 비트코인의 현재 거래 가격
    print(f'비트코인 가격 (KRW): {btc_price}')
else:
    print('데이터를 가져오지 못했습니다.')
import requests
import pandas as pd

# 업비트 API 엔드포인트 URL
url = 'https://api.upbit.com/v1/candles/minutes/30'
# 원하는 암호화폐의 마켓 코드 (예: 비트코인)
market = 'KRW-BTC'
# 데이터 조회 기간 설정 (최근 200분 데이터)
querystring = {'market': market, 'count': '200'}
response = requests.request('GET', url, params=querystring)
data = response.json()

# API 응답을 DataFrame으로 변환
df = pd.DataFrame(data)

# DataFrame을 시간 역순으로 정렬
df = df.iloc[::-1]

# 이동평균 계산 (단기 이동평균과 장기 이동평균)
short_window = 10
long_window = 50
df['Short_MA'] = df['trade_price'].rolling(window=short_window).mean()
df['Long_MA'] = df['trade_price'].rolling(window=long_window).mean()

# 매매 신호 계산
df['Signal'] = 0  # 0: 매매 없음, 1: 매수 신호, -1: 매도 신호

for i in range(long_window, len(df)):
    if df['Short_MA'][i] > df['Long_MA'][i] and df['Short_MA'][i - 1] <= df['Long_MA'][i - 1]:
        df['Signal'][i] = 1  # 단기 이동평균이 장기 이동평균을 상향 돌파하면 매수 신호
    elif df['Short_MA'][i] < df['Long_MA'][i] and df['Short_MA'][i - 1] >= df['Long_MA'][i - 1]:
        df['Signal'][i] = -1  # 단기 이동평균이 장기 이동평균을 하향 돌파하면 매도 신호

# 매매 신호 및 이동평균 데이터 출력
print(df[['candle_date_time_utc', 'trade_price', 'Short_MA', 'Long_MA', 'Signal']])

# 매매 신호를 기반으로 실제 매매를 추가로 구현해야 합니다.

이 코드는 30분봉 데이터를 사용하여 이동평균 크로스오버 전략을 시뮬레이션하는 간단한 예제입니다. 특정 전략에 따라 매매를 수행하는 부분은 아직 구현되어 있지 않으므로, 이 부분을 해당 전략에 맞게 확장하고 실제 매매로 연결해야 합니다.

 

import ccxt  # ccxt 라이브러리를 사용하여 거래소 API에 연결
import time

# 거래소 API 설정
exchange = ccxt.upbit({
    'apiKey': 'YOUR_API_KEY',          # 업비트 API 키
    'secret': 'YOUR_API_SECRET',      # 업비트 API 비밀키
})

# 매매 관련 설정
symbol = 'BTC/KRW'  # 매매할 암호화폐 페어
buy_price_threshold = 50000000  # 매수 임계값 (예: 50,000,000 KRW)
sell_price_threshold = 55000000  # 매도 임계값 (예: 55,000,000 KRW)

while True:
    try:
        # 현재 시장 가격 가져오기
        ticker = exchange.fetch_ticker(symbol)
        current_price = ticker['last']

        print(f'현재 가격: {current_price}')

        # 매수 조건 확인
        if current_price < buy_price_threshold:
            # 매수 주문 실행
            order = exchange.create_limit_buy_order(symbol, 0.001, current_price)
            print('매수 주문이 실행되었습니다.')

        # 매도 조건 확인
        elif current_price > sell_price_threshold:
            # 매도 주문 실행
            order = exchange.create_limit_sell_order(symbol, 0.001, current_price)
            print('매도 주문이 실행되었습니다.')

        # 10초마다 가격 체크
        time.sleep(10)

    except Exception as e:
        print(f'에러 발생: {str(e)}')

 

이 코드는 자동으로 매매를 해줄 프로그램에 대한 간단한 코드 예시 입니다.

 

이 코드들을 모아서 비트코인 가격 예측 및 자동 매매 프로그램을 구현해볼 수 있을것입니다.

 

 

-- 업비트 연동 코드

업비트와 연동하는 코드를 작성하려면 업비트 API를 사용하여 요청을 보내고 응답을 처리하는 Python 코드를 작성해야 합니다. 다음은 업비트 API를 사용하여 계정 정보를 가져오는 간단한 예제 코드입니다.

먼저, `ccxt` 라이브러리를 설치해야 합니다. 아래의 명령을 사용하여 설치할 수 있습니다.

pip install ccxt


#다음은 업비트 API를 사용하여 계정 정보를 가져오는 코드입니다.


import ccxt

# 업비트 API 키 설정
api_key = 'YOUR_API_KEY'
api_secret = 'YOUR_API_SECRET'

# 업비트 거래소 객체 생성
exchange = ccxt.upbit({
    'apiKey': api_key,
    'secret': api_secret,
})

try:
    # 계정 정보 가져오기
    account_info = exchange.fetch_balance()
    
    # 보유한 자산 출력
    for asset in account_info['total']:
        if account_info['total'][asset] > 0:
            print(f'자산: {asset}, 잔고: {account_info["total"][asset]}')
except Exception as e:
    print(f'에러 발생: {str(e)}')



이 코드는 업비트 API를 사용하여 보유한 자산 및 잔고를 가져와 출력합니다. 다른 업비트 API 엔드포인트를 사용하여 주문을 생성하고 거래를 실행할 수도 있습니다. 단, API를 사용할 때는 보안을 유지하고 API 키 및 비밀키를 안전하게 보호해야 합니다.

더 복잡한 거래 및 전략을 구현하려면 업비트 API 문서를 참고하고, 원하는 작업을 수행하기 위해 API를 호출하는 코드를 작성하세요. 또한, 자금 관리 및 리스크 관리에 주의해야 합니다.

반응형
LIST