안녕하세요. 코딩도 코인도 모르는 코린이입니다.
이번에 취미삼아 파이썬으로 코인 자동매매 봇을 만들어보려고 하는데요..조언이 필요합니다.
전체적인 구상은 이렇습니다.
1. 해당 항목을 일정 현재가 기준으로 일정 퍼센트 단위로 예약 매수. (아래로 매수 걸어놓기)
- 총 10개를 매수하겠다고 하면 -1%에 1개, -2%되면 1개 ... 이런식으로 주문
2. 매수가 되면 윗 단계에 예약매도
- -1%때 샀으면 0%때 매도하도록 매도주문 걸기.
3. 판매가 되면 바로 아래 단계에 예약매수
- 2번과 동일한 방식
여기서.. 1번은 여차저차 구현했는데 2,3번은 어떻게 해야할지 모르겠습니다. ㅠㅠ
질문1. 매수/매도가 된 순간을 어떻게 파악할지(주문마다 주소가 있던데 이 주소는 영원한건가요? 예를들어 297원에 주문을 걸어놨고 팔린 이후에도 주소가 같은건가요? 찾아보니 주문 확인 코드가 있더라구요..!
질문2. 매수/매도 된 순간 예약을 걸어야하는데 현재가 기준 -1%,-2%,-3% 이런 가격대에 주소를 정해줄 수 있는지..
ex) 예를들어 300원이 현재가인데 297원의 주소는 m1, 294원의 주소는 m2, 뭐 이런식으로..?
처음 프로그램 시작하면 m1~m10까지 예약매수를 걸어놓고 m1이 사지면 m0의 가격에 예약매도 걸어라. 뭐 이런식으로 하고싶습니다.
질문3. 처음 실행시 매수 10개짜리를 쭈르륵 넣으면 도중에 에러가 납니다. 그래서 딜레이를 0.5초정도 줬더니 주문이 잘 되는데 적절한 주문시간이 있을까요?
누군가 알려주셨으면 좋겠습니다 ㅠㅠ
지금까지 한 코드는 아래와 같습니다.
import pyupbit
import time
f = open("#######.txt")
lines = f.readlines()
access = lines[0].strip() # access key "\n"
secret = lines[1].strip() # secret key '\n'
f.close()
upbit = pyupbit.Upbit(access, secret) # class instance, object
balance = upbit.get_balance("KRW")
print(balance)
price_current = pyupbit.get_current_price("KRW-ETH") # 현재가격
max_price = 3000000 # 최대 금액
min_price = 1000000 # 최소 금액
investment = 60000 # 투입금
num_crossover = 10 # 교차수
price_CrossOrder = round(investment/num_crossover,0) # 교차당 투입금
profit_rate = 0.002
print("교차당 주문가격은", price_CrossOrder, "원")
funds_required = 5001*num_crossover
price_init = price_current
if (price_CrossOrder < 5001 ):
print("현재 교차당 투입금=", price_CrossOrder,"원")
print("총 투입금은", funds_required ,"원 이상이어야 합니다")
else:
print("현재 교차당 투입금=", price_CrossOrder,"원")
num_order = round(price_CrossOrder/price_current,3) # 주문 개수
ret = upbit.buy_limit_order("KRW-ETH", price_current, num_order)
print(price_current,"가격에 ", num_order, "개 매수 예약!!!")
for n in list(range(0, num_crossover)):
price_order = round(price_init-price_current*profit_rate,-3) # 주문가격
num_order = round(price_CrossOrder/price_order,3) # 주문 개수
ret = upbit.buy_limit_order("KRW-ETH", price_order, num_order)
print(price_order,"가격에 ", num_order, "개 매수 예약")
price_init = price_order # 다음 주문가격
time.sleep(0.5)
코딩을 설계하시기 전에. 매수/매도에 코인가격이 올라갈때(가정을 하면요)...는
매수를 한다하더라고 가격이 올라간다고 생각할 수 있겠지요...
하지만 코인가격이 떨어질때 대응이 될지요???
알고리즘에 대한 수학적이 고민이 필요해 보일듯 합니다.
쉽게는 고등학교 수학시간에 배운 순서도라는 것이 있습니다.
알고리즘은 이 순서도를 업그레이한 버전이 라고 생각하시면 됩니다.
코딩을 설계를 할때 기본적으로 메인이 되는 순서도가 시작이 되지만
예외적인 변수가 많기 때문에 이를 고려한 예외처리를 위한 알고리즘(순서도)가 필요합니다.
요즘 알고리즘은 머신러닝...딥러닝... 이딴것들이 있는데....
순서도를 로직이라고~~~ 들 합니다.
파이썬정도 하시는 거보니... if else문! switch문! while문! 정도의 코딩문법은 이해하고 계신듯 합니다.
화이팅입니당^^!!