Python 부수기/비트코인 자동매매

비트코인 자동매매 프로젝트(1)

Anul 2021. 8. 29. 13:11

오늘은 3가지 정도의 오류를 수정했다.

첫 번째로 마주한 에러는 can't compare datetime.datetime to datetime.date이다. 

말 그대로, datetime.datetime으로 얻어낸 객체를 datetime.date으로 얻어낸 객체와 비교연산할 수 없다는 뜻이다. 오늘과 내일의 날짜, 시간을 알아야 매도할 타이밍을 정할 수 있기 때문에 시간은 못해도 날짜를 꼭 알아야했다. 날짜가 바뀌는 순간에 매도를 하도록 한다면 약 자정쯤에 매도를 진행시킬 수 있기 때문이다. 

 

이 오류는 생각보다 간단하게 해결할 수 있었다. 두 객체를 모두 datetime.date으로 바꿔주면 되는 것이었다. 혹은 datetime.datetime으로 둘 다 바꿔주거나 할 수 있겠지만, 나는 시간까지 세심하게 다룰 필요는 없을 것 같아서 그냥 date로만 설정했다. 

두 번째로 마주한 에러는 'Bithumb' object has no attribute 'get_ohlcv'였다. 이 에러는 해결하는 데에 시간을 좀 많이 쏟았다. bithumb 객체가 get_ohlcv속성을 가지고 있지 않다는 오류인데,

bithumb = pybithumb.Bithumb(accessKey, secretKey)

이 문장을 통해서 이미 bithumb객체를 생성해 놓았고, 이 객체는 get_ohlcv를 무조건 속성으로 가지고 있었다. 오류는 다음 문장에서 발생했다.

df = pybithumb.get_ohlcv(ticker)

다른 ide에서도 돌려보고 여러가지를 해봤는데 다른 ide에서 연습용 페이지를 만들어서 하면 또 작동이 되는 희한한 상황이었다. 그렇게 질려가던 중 해결책을 발견했다.

 

내가 다른 곳에서 코드를 복붙하다보니 bithumb()객체를 두 개 만든 것이다. 그것도 pybithumb으로 말이다. 무슨말이냐면,

bithumb = pybithumb.Bithumb(accessKey, secretKey)
pybithumb = pybithumb.Bithumb(accessKey, secretKey)

이렇게 두 개체를 생성해버린 것이다. df = pybithumb.get_ohlcv(ticker)에서 get_ohlcv(ticker)은 내가 미리 import해놓은 pybithumb모듈에서부터 오는 함수이다. 그래서 pybithumb모듈에서부터 get_ohlcv(ticker)함수를 불러와야하는데, 내가 위에서 pybithumb이라는 객체를 생성해버렸으니 컴파일러는 저 객체에서 함수를 불러온다고 생각한 것 같다. 그래서 pybithumb객체를 지우고 실행해보니 실행이 되었다. 오늘 또 하나를 알아간다. 

<local에서 생성한 객체는, import한 모듈보다 우선순위에 선다.>

 

이렇게 실행보니 이젠 'NoneType' object has no attribute 'iloc'에러가 뜬다.

df = pybithumb.get_ohlcv(ticker)
yesterday = df.iloc[-2]

아마 이 문장에서 나오는 에러같은데...얘도 다른 ide에서 연습페이지를 만들어서 실행하면 또 잘 실행된다. df가 왜 NoneType을 갖고 있다고 하는지 모르겠다.... df는 원래 noneType으로 여겨지나...그리고 아무리 nonetype이라고 해도 다른 파일에서 따로 실행시켜보면 iloc은 작동하는 것 같은데 왜 main에서만 실행이 안되나 모르겠다. 또 찾아봐야지...

 

아 그리고 replit이 30%할인하길래 1년치를 질러버렸다. 한 달에 5달러인데 좀 아까운 것 같기도 하지만, 나는 뭐 음악을 듣는 것도 아냐 넷플릭스도 안봐 유튜브 프리미엄도 안하니 한 달 5달러 정도는 동기부여용으로 괜찮다고 생각했다. 게다가 파일을 5개나 always on으로 설정할 수 있으니 그 활용가치가 매우 클 것으로 생각되어 질렀다.