안녕하세요!! 코딩을 취미로 하고있는 코딩 소년입니다.

요즘 너무 재미가 들려서 코딩 공부를 열심히 하고 있는데요.

그 와중에 파이썬 selenium(셀레니엄) 공부를 해서 웹에서 할 수 있는 많은 업무들을 자동화 할 수 있다는 것을 느꼈습니다... 그리하여 파이썬 주식 및 비트코인 자동매매 봇에 이어서 새로운 프로젝트 도전을 시작하였습니다. 

유튜브를 보면서 다시 감을 잡으며 코딩을 해나가던 와중에....

로그인부터 막혀버린 다는 사실을 깨달았습니다..윽

 

- 일단 네이버 같은 경우에는 셀레니엄으로 로그인 시도 시 자동입력방지 텍스트가 추가되더라구요. 

- 구글의 경우는 안티봇시스템.. 그 그림 찍는거 아시죠..?

오래 된 구글 아이디는 원클릭으로 지메일이 통과 된다고는 하더라구요.

- 그리고 마지막 제가 이번에 도전한 나이키의 경우에는 로그인 시도하니까 냅다 막아버리더라구요... 자동입력방지 문구나 그림으로 봇을 가려내는 것이 아니라 그냥 로그인이 진행이 안되게끔 해놨습니다.

이런 화면에서 진행이 안되게끔 되어 있더라구요.. 개인적으로 기대를 많이했는데 아쉬웠습니다.

 

+ 추가로 그렇다면 자동매매봇들은 어떻게 이런 것들을 뚫어낼까? 그런 봇들이 있다면 나도 코딩할 수 있지 않을까?라는 생각을 해보고 정보를 찾아봤는데요. 시중에 많은 봇들이 판매되고 있고, 비용도 비쌀뿐더러 운영하는데 알아야 하는 지식도 많더라구요. 저도 대충 알고 있다가 직접 찾아서 보니깐 상당히 신세계더군요...허허 일단 아직은 이런 봇을 만들기에는 실력이나 지식이 부족하지 않나 싶습니다. 만약에 다음에 다시 도전하게 된다면, 파이썬 셀레늄을 활용하는 방법 말고 다른 방법으로 접근하겠지요... 좀더 복잡한 방식으로... 다가가야할 듯 합니다. 프록시(proxy)같은 기술도 이용해야 할 것이구요..

이상으로 글 마칩니다. 

 

문제 1.

A + B - 5 

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

(입력) : 입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

입력의 마지막에는 0 두 개가 들어온다.

while True:
    A,B = map(int,input().split())
    if A == 0 and B == 0:
        break
    print(A+B)

- 핵심 : while 기본 형태를 파악할 것. True, False ,Break. 입력의 마지막에는 0이 들어와야 하므로 if a==0 and b ==0이면 멈추고 print(a+b)로 마무리. Python에서 break는 멈춘다, 빠져나온다라는 의미로 보면 되겠다. 그리고 마지막으로 a+b를 출력하라.

문제 2.

A + B - 4 

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

while True:
    try:
        a,b = map(int,input().split())
    except:
        break
    print(a+b)

- 핵심 : try, except, break. 기본적으로 while의 조건이 True일 동안 try 내의 함수들을 실행시켜라. 그리고 오류가 발생시에 except 아래 함수를 실행해라. 그리고 마지막으로 a+b를 출력하라.

문제 3.

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.

26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.

위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

input_num = int(input())

num = input_num  # num 변수에 input_num을 지정
cnt = 0
while True:
    sum_num = (num // 10) + (num % 10)  # 각 자릿수를 더한수
    new_num = ((num % 10) * 10) + (sum_num % 10)  # 새로 만들어지는 수
    cnt += 1  # 사이클 카운트
    if new_num == input_num :
        break
    num = new_num  # num 변수에 last_num을 지정 
print(cnt)

핵심 - 문제를 잘 읽고 그대로 구현해내는 것이 중요. 그리고 가장 핵심은 사이클넘버수를 구해야한다. 처음 숫자 26부터 시작하여 다시 26이 되는 순간 프로그래밍이 종료되고 사이클 숫자가 알맞게 출력되는 것이 핵심이다. 

계산을 해보자면 sum_num = (26/10) + (26 % 10)  -> 2 + 6 = 8(sum_num) 

new_num = ((26%10)*10) + (8(sum_num) % 10) -> new_num = 68이 되고 이 과정이 반복되다가 

처음숫자 26과 새로생성되는 숫자가 같아지면 break하고 

싸이클 횟수를 프린트하며 마무리 한다.

조코딩 유튜브를 보고 크레온 API를 이용한 주식 자동매매와 업비트 API를 이용한 비트코인 자동매매 봇을 완성했다. 완성하는 도중에 생긴 오류들과 그 문제들을 해결하는 과정에 대한 글을 적으려고 한다.

 

1. 주식 자동 매매 봇 (대신증권 크레온 API 이용)

1) 첫 번째 에러사항 - 종목선정 이슈

 

- 개인적으로 비트코인 자동매매 봇을 만드는 것보다 파이썬 주식 자동매매 봇을 돌리는 과정이 더 어려웠다. 이유는 ETF가 수수료가 낮아서 종목코드를 ETF 종목들을 배치하였는데, ETF 거래를 하려면 2021년 1월부터 법이 개정되어서, 레버리지와 x2 관련 종목들은 기본 예탁금도 있어야하고, ETP 레버리지 교육 이수를 받아야 한다. (인버스는 제외) 거래량 순으로 정렬하면 무조건 레버리지와 인버스 종목이 포함되어 있었기에, 다른 종목으로 변경하였다. 사실 일반주식 종목을 거래하기도 싶긴 한데 수수료가 ETF에 비해서 10배정도 차이난다. (ETF가 수수료 0.015%이고, 일반종목이 0.25%인걸로 알고 있다.) 

 

2) 두 번째 에러사항 - Slack을 이용한 메세지 전송. 

 

- Slack을 이용해서 메세지를 전송하는 과정에서 에러가 발생하였다. slack invalid_auth 에러가 발생하였는데, 슬랙의 정책 업데이트가 있었다고 한다. 마침 조코딩님의 티스토리에 블로그에 수정된 코드를 포스팅하여서 오류를 해결했다.  

 

-> 오류 해결 하는데 3일 정도 걸린 것 같다. 하지만, 전전긍긍하며 마침내 코드가 작동할 때의 쾌감이란....!!!

2. 비트코인 자동매매 봇 (업비트 API 이용)

- 업비트 아이디가 없어서 빗썸 API를 이용해서 만들려고 했는데, 업비트가 거래 수수료가 가장 저렴했다. 그렇기 때문에 그냥 다시 업비트를 이용하기로 하였다. 코드가 주식 자동매매 코드보다는 짧고 단순하여서 괜찮았다. 하지만 역시 한 번에 작동되지는 않더라....

 

1) 첫 번째 에러사항 - '>' not supported between instances of 'NoneType' and 'float'

 

- 처음에 코드를 작동시켰는데, 작동이 안 되더라... 이유가 뭐였더라 '>' not supported between instances of 'NoneType' and 'float'이라고 떴었다. 코딩을 한 지 얼마 안 된터라, 오류 내용이 정확하게 무엇을 의미하는지 감이 안 와서, 구글링해서 이게 무슨 소린지 찾아보려고 했으나 적당한 해답을 찾지 못 했다. 그래서 그냥 다시 코드를 작성해서 올렸더니 잘 돌아 가더라...!! 사소한 실수가 있었는 듯 하다.

 

-> 비트코인 자동매매 봇은 주식 자동매매 봇을 작동시키는 과정보다 비교적 쉽게 느껴졌다. 그것도 그럴 것이, 코인 자동매매봇은 종목 하나만을 노리고 작성 된  코드라서 비교적 코드가 짧았다. 

 

3. 최종 결론

- 사실 시간을 두고 천천히 디버깅해도 되는 문제였는데, 조금 조급해하며 오류를 해결하려고 했던 것 같다. 코드를 작성하다 보면 코드를 잘 못 작성하였다기 보다는 외부적인 연결의 문제로 오류가 나는 경우가 많은 것 같다. 이번에도 가장 시간을 많이 소모한 것이 코드의 문제가 아니라 2021년 1월부터 법 개정으로 인해 ETF 거래에 제한이 있었기 때문이었으니깐.... 

'Tech Blog > Debugging Note' 카테고리의 다른 글

Debugging Note - Swift, YoutubeApp  (0) 2021.04.21
DebuggingNote - Swift, Learning App Error  (0) 2021.04.21

+ Recent posts