본문 바로가기
Like bot

[GPT코딩] 코인 적립식 매매 프로그램 만들기 with Colab

by skyfishb 2023. 5. 5.

GPT 대화를 하면서 구글 코랩에서 동작하는 프로그램을 만들어보겠습니다. 

첫번째 프로그램은 코인 적립식 매매 프로그램입니다. 

 

 

GPT 사이트에 접속합니다.  https://chat.openai.com/ 

 

Q1. 안녕 python programmer !  
구글 코랩에서 동작하는 코인 적립식 매매를 하는 프로그램을 만들고 싶어. 
내가 시간을 지정할 수 있어야 하고, 코인도 추가가능, 금액 설정 등이 가능해야해
적립식 매매 프로그램을 어떻게 설계하면 될까?

 

G. 안녕하세요! 적립식 매매 프로그램을 만드는 것은 흥미로운 과제입니다. 구글 코랩을 사용하여 Python 프로그램을 만들어보겠습니다.

먼저, 프로그램의 목적을 명확히 이해하고 시작해야 합니다. 적립식 매매 프로그램의 목적은 무엇인가요? 일반적으로 적립식 매매란 일정한 주기로 투자금액을 적립하여 해당 주기가 종료될 때 일정한 이자를 받는 것을 말합니다. 그러나 이번 프로그램에서는 코인을 이용하여 매매하는 방식으로 구현할 것입니다.

프로그램의 구조는 크게 두 가지로 나눌 수 있습니다. 

첫째, 사용자 입력을 받고 두번째, 입력된 정보를 이용하여 적립식 매매를 구현하는 것입니다.

먼저 사용자 입력을 받는 부분입니다. 이 프로그램에서는 시간, 코인, 금액 등이 입력될 수 있습니다. 이를 위해 Python에서는 input 함수를 이용할 수 있습니다. 사용자로부터 입력을 받은 후, 입력된 정보를 변수에 저장하여 이후 적립식 매매를 구현하는 부분에서 이용할 수 있습니다.

두 번째로, 입력된 정보를 이용하여 적립식 매매를 구현하는 부분입니다. 이 부분에서는 시간에 따라 매매를 수행하도록 구현해야 합니다. 예를 들어, 매일 정해진 시간에 적립식 매매가 이루어지도록 설정할 수 있습니다. 또한, 코인과 금액 정보를 이용하여 매매를 수행하고, 이를 위해 구현된 함수를 이용할 수 있습니다.

위와 같은 방식으로 구현된 프로그램은 다음과 같은 단계로 동작할 수 있습니다.

사용자로부터 시간, 코인, 금액 등의 정보를 입력받습니다.
입력된 정보를 이용하여 적립식 매매를 구현하는 함수를 호출합니다.
함수에서는 입력된 정보를 이용하여 코인 매매를 수행합니다.
적립식 매매가 완료된 후, 다음 매매를 위해 다시 1번 단계로 돌아갑니다.


이러한 방식으로 구현된 적립식 매매 프로그램은 사용자가 지정한 시간에 맞춰 자동으로 매매를 수행할 수 있으며, 코인과 금액 정보를 이용하여 매매를 수행하므로 효율적 적립식 매매를 수행할 때는 주의할 점이 있습니다. 코인의 가격이 계속해서 변동하기 때문에 매매 시점을 잘 결정해야 합니다. 따라서 프로그램에서는 코인 가격 정보를 실시간으로 가져올 수 있는 API를 이용하여 가격 정보를 업데이트하고, 이를 이용하여 매매 시점을 결정해야 합니다.

또한, 매매 시 수수료 등의 추가 비용이 발생할 수 있으므로 이를 고려하여 적립식 매매 프로그램을 구현해야 합니다.

마지막으로, 프로그램을 구현하기 전에는 구현할 기능들을 명확하게 정의하고, 이를 바탕으로 구현할 모듈들을 선정하여 구조화하는 것이 좋습니다. 또한, 구현 후에는 프로그램을 테스트하고 디버깅하는 과정을 거쳐 완성도 높은 적립식 매매 프로그램을 만들어야 합니다.

이러한 과정을 거쳐 구현된 적립식 매매 프로그램은 사용자가 지정한 조건에 따라 자동으로 코인 매매를 수행하여 수익을 창출할 수 있습니다. 이를 통해 프로그램을 통해 쉽고 빠르게 적립식 매매를 수행할 수 있으며, 이를 통해 투자 수익을 극대화할 수 있습니다.

Q2. 그러면, 파이썬으로 업비트 API를 받아서 적립식 매수 만 하는 코딩 프로그램 만들어줘, 
사용자가 지정시간에 가령 아침 7시, 오후 1시 구매할 수 있어야해
코인 정보는  사용자가 추가할 수 있어야해. 구글 코랩에서 동작할 수 있도록 만들어줘

 

G:

!pip install pyupbit

import time
import pyupbit
from datetime import datetime

# API Key와 Secret Key를 입력합니다.
access_key = "Input your access key here"
secret_key = "Input your secret key here"
upbit = pyupbit.Upbit(access_key, secret_key)

# 코인 리스트를 선언합니다.
coin_list = ['KRW-BTC', 'KRW-ETH', 'KRW-XRP']

# 적립식 매수 함수를 정의합니다.
def accumulate_buy(coin, amount):
    while True:
        # 현재 시간을 확인합니다.
        now = datetime.now()
        now_time = now.strftime('%H:%M:%S')

        # 매수 시간인지 확인합니다. (아침 7시, 오후 1시)
        if now_time == '07:00:00' or now_time == '13:00:00':
            try:
                # 현재 코인의 가격을 조회합니다.
                current_price = pyupbit.get_current_price(coin)

                # 적립식 매수 금액을 계산합니다.
                accumulate_amount = amount / 30

                # 매수할 코인의 수량을 계산합니다.
                buy_volume = accumulate_amount / current_price

                # 코인을 매수합니다.
                upbit.buy_market_order(coin, buy_volume)

                # 30초 대기합니다.
                time.sleep(30)
            except Exception as e:
                print(e)
                time.sleep(1)
        else:
            time.sleep(1)

# 사용자가 추가한 코인 정보를 입력받습니다.
user_coin = input("추가할 코인 정보를 입력하세요. (종료는 q) : ")

# 사용자가 입력한 코인 정보를 코인 리스트에 추가합니다.
while user_coin != 'q':
    coin_list.append(user_coin)
    user_coin = input("추가할 코인 정보를 입력하세요. (종료는 q) : ")

# 코인 리스트를 이용하여 적립식 매수를 수행합니다.
for coin in coin_list:
    accumulate_buy(coin, 100000)

 

일단 코드가 나왔으니 동작되는지 확인해봅시다. 

어째 좀 불편해서, 사용자 입력을 받아서 하라고 했습니다. 

 

Q. 사용자입력을 받는 부분을 1-5 개의 메뉴로 표현을 해볼께, 첫번째는 사용자 키 세팅 

 

G: 좋습니다. 사용자 입력을 받는 부분을 메뉴로 구성하여 표현해보겠습니다.
1. 사용자 키 세팅
업비트 API Key와 Secret Key를 입력받아 설정합니다.
2. 코인 추가
사용자가 원하는 코인을 입력하여 코인 리스트에 추가합니다.
3. 매수 금액 설정
적립식 매수를 수행할 금액을 입력받습니다.
4. 매수 시간 설정
적립식 매수를 수행할 시간대를 설정합니다.
5. 프로그램 실행
설정한 정보를 바탕으로 적립식 매수 프로그램을 실행합니다.
위와 같이 사용자 입력을 받는 메뉴를 구성하면 사용자가 프로그램을 보다 쉽게 사용할 수 있을 것입니다.

 

Q. 좋습이다. 이렇게 코딩을 변경해주세요.

 

!pip install pyupbit

import time
import pyupbit
from datetime import datetime, timedelta

# 사용자 입력을 받는 부분
print("적립식 매수 프로그램을 시작합니다.")
access_key = input("1. 업비트 API Key를 입력하세요 : ")
secret_key = input("2. 업비트 Secret Key를 입력하세요 : ")
upbit = pyupbit.Upbit(access_key, secret_key)

coin_list = []
while True:
    print("\n==== 적립식 매수 프로그램 ====")
    print("1. 코인 추가")
    print("2. 매수 금액 설정")
    print("3. 매수 시간 설정")
    print("4. 프로그램 실행")
    print("5. 종료")
    menu = input("메뉴를 선택하세요 : ")

    if menu == "1":
        user_coin = input("추가할 코인 정보를 입력하세요. (종료는 q) : ")
        while user_coin != 'q':
            coin_list.append(user_coin)
            user_coin = input("추가할 코인 정보를 입력하세요. (종료는 q) : ")
        print("코인이 추가되었습니다.")
    elif menu == "2":
        amount = int(input("적립식 매수를 수행할 금액을 입력하세요 : "))
        print("매수 금액이 설정되었습니다.")
    elif menu == "3":
        buy_time = input("적립식 매수를 수행할 시간대를 입력하세요. (예: 07:00, 13:00) : ")
        print("매수 시간이 설정되었습니다.")
    elif menu == "4":
        if not coin_list:
            print("코인 정보가 없습니다. 코인을 추가해주세요.")
        elif not amount:
            print("매수 금액이 설정되지 않았습니다. 매수 금액을 입력해주세요.")
        elif not buy_time:
            print("매수 시간이 설정되지 않았습니다. 매수 시간을 입력해주세요.")
        else:
            print("프로그램을 실행합니다.")
            break
    elif menu == "5":
        print("프로그램을 종료합니다.")
        exit()
    else:
        print("잘못된 입력입니다. 다시 입력해주세요.")
        
# 적립식 매수 함수를 정의합니다.
def accumulate_buy(coin, amount, buy_time):
    while True:
        # 현재 시간을 확인합니다.
        now = datetime.now()
        now_time = now.strftime('%H:%M')
        print(now_time)

        # 매수 시간인지 확인합니다.
        if now_time == buy_time:
            try:
                # 현재 코인의 가격을 조회합니다.
                current_price = pyupbit.get_current_price(coin)
                print(current_price)

                # 적립식 매수 금액을 계산합니다.
                accumulate_amount = amount

                # 매수할 코인의 수량을 계산합니다.
                buy_volume = accumulate_amount / current_price

                # 코인을 매수합니다.
                upbit.buy_market_order(coin, buy_volume)
                print('coin order:', buy_volume, coin)

                # 1분 대기합니다.
                time.sleep(60)
            except Exception as e:
                print(e)
                time.sleep(1)
        else:
            time.sleep(1)

# 코인 리스트를 이용하여 적립식 매수를 수행합니다.
for coin in coin_list:
    accumulate_buy(coin, amount, buy_time)

 

추가적으로 코드가 다 된건가요?  물어보니 짤린부분 있어서 끝까지 작성을 해줬습니다. 

 

제가 위에서 추가한 부분은 print (now_time) 이랑 확인용 함수들입니다. 

print (now_time)

시간이 UTC 기준으로 되어있어서 변경해보려다가, 일단 시도해봅니다 

 

업비트 계정에 접근할 수 있는 key 주소를 받아옵니다. 

관련 포스팅도 Soon 

private key 니까 잘 저장해두셔야합니다. 

 

 

코드는 실행됬습니다. 

But, 업비트 API에서 IP문제인지 구매가 안됬네요..

일단 API 잘 연결하면 코드가 돌아갈거란 기대를 갖고 여기까지 해봅니다. 

IP 이슈 때문에 Colab에서는 더이상은 못 하겠네요.

그럼 다음 포스팅부터는 vscode 로 해보겠습니다.

 

by. skyfishb

 

댓글