비트코인자동매매 코드 버그 수정

스마트스토어
2023년 1월, 기존에 짜두었던 코드가 작동하지 않는 것을 발견하였습니다. 좌충우돌 개발일지 약 한달 쯤 전, 새해 계획이랍시고 세운것 3가지는 전부 코딩과 관련된 것이었습니다. 목적은 돈버는 것, … m.blog.naver.com ​기존 코드에서 문제를 발생시킨 부분은아래 부분이었지요 a = 0 Bestkv = dict() for k, v in D.items(): if v[0] > a and 0 < v[3] <= D[‘KRW-BTC’][3]: a = v[0] Bestkv[k] = v[0] 위 코드는,1차 조건을 만족해서 일단 매수후보로 올라온 각 코인을 D라는 주머니에 넣은 후에, D에 있는 것들의 지난 1년간 최고점 대비 현재 하락폭(v[3])를찾아서, ​그것이 비트코인의 최고점대비 현재 하락률보다 낮을 경우,즉 비트코인보다 덜 떨어졌을 경우에 매수 대상으로 삼는 것이었습니다. ​그런데 여기서 문제가 발생한 것이었지요. 조건을 만족해서 D에 들어간 것을꺼내서 비교를 해야하는데, D안에 당연히 비트코인이 들어있을 줄 알고 비트코인 자체도 D안에서 호출을 한겁니다.그런데 비트코인 자체가 1차 조건을 만족을 못해서 D안에 들어가지 못하게되자 코드가 뻑이나버린겁니다. ​​ ㄷㄷㄷ애초에 잘못된 알고리즘으로매매를 하고있었다 와….8월에 만들어서 12월까지 카카오 업비트 먹통사태도 이겨내고매매를 시켜왔는데알고보니 그게 잘못된 알고리즘이었다니. ​그래서 저기서 고쳐주기로 합니다.근데 고치려고 보니까 내가 짠 코드인데도 다시보니 뭐가뭔지 모르겠습니다. ​전형적인,한번 짜서 돌아가면 뒤도안돌아보고 실행하고다시는 들여다보지않는 야매 코-더 의 습성상예전에 짠 코드를 다시보니 알아먹을수가 없네요 ​그래서 한줄한줄 실행시키고, 제가 예전에 작성했던 블로그 글을 다시 보면서 저게 무슨의미였는지 찾아냅니다. ​일단 코인 별로 4개의 숫자를 가지는데,첫번째숫자는 전략사용시 누적수익​두번째 숫자는 매수 후 존버시 누적수익​세번째 숫자는 첫번째와 두번째의 차이(전략의 우월성)​네번째 숫자는 앞서 말한대로 최고점대비 현재 얼마나 하락했는가. (하락률)​4번의 지표를 주목한 이유는 이렇습니다.막말로 고점대비 80%정도 하락한 코인의경우추세가 완전히 무너졌을 수도 있고, 아니 그 코인에 근본적인 문제가 있을 수 있습니다.위믹스나 루나처럼 말이지요. 그래서 비트코인의 하락률과 비교한 것입니다.알트코인의 경우,비트코인보다 덜 하락한 것이어야한다 라는것이었지요. ​머리는 굴려봤는데저 하락률을 – 비트코인의 하락률과 비교 – 전체 코인의 평균하락률과 비교 – 전체 코인 중 80%이상 하락한 것을 빼고 나머지의 평균하락률과 비교등등 방법이 있겠습니다만 ​그런데 그러려고하니 코드를 좀더 빡세게 뜯어고쳐야하는 상황이고, 오컴의 면도날 법칙을 적용하여 일단은 단순히 ‘상수’를 넣기로 했습니다. ​​ 그리고 따져보니저 부분에 문제가 또 있었는데요. a = 0 으로 지정해놓고그 a가 계속 업데이트되는 구조였는데이게 문제였습니다.​왜냐면 a가 계속 업데이트가 된다는건 일단 매수후보군 D에서첫번째 코인은 무조건 BestKV(매수대상)에들어가고,첫번째 코인의 전략사용시 수익률로 a값을변경한 후,두번째 코인의 전략사용시 수익률이첫번째 코인의 전략사용시 수익률(a)보다나을 경우 코인을 추가하고, a를 업데이트하는 식입니다.​이 경우 문제는 맨 처음 나오는 코인의 수익률이가장 압도적일 경우 그 뒤에 있는 다른 코인들은 매수 후보로 고려조차 되지못한다는 것입니다.​이렇게 말이죠. ​​​ 이렇게 하나만 나옵니다.첫번째 검토한 코인의 전략사용 수익률이 63%니까요. 그래서 저 a값이 업데이트되는 부분을 지워주면, 이렇게 여러 코인이 매수대상으로 추가됩니다. ​여기서 a값을 0.85로 바꿔주면전략 사용시 수익률이 -15%이상인 코인은일단 다 매수대상에 집어넣고,​그 다음에 해당 코인의 하락폭이 45%보다 덜할 경우 최종 매수후보군에 넣는 식으로 다음과 같은 코드를 짜면, 총 3개의 매수 후보군이 추려집니다. 서버에 올려서 돌려보니 잘 돌아가고는 있습니다.​매수가 안돼서 걱정을 했는데 코드는 돌아가고 있고, 이평선과 현재가의 가격차이 등 타겟 프라이스 조건이 만족이안되어서 매수가 안되는 것 같습니다. 그렇더라도 일단 매수가 될때까지는하루 한번씩 서버에 들어가서이놈이 일이 되고있는건지 궁금해서 열어볼 것 같네요. ​아 정말.쉽지않네. 개발자들 대단합니다. 이런걸 만들어서 돌리고 출시하는것도 대단하고,더 놀라운건 와 세상에 잘못된 알고리즘으로좋다고 매수매도 하고있던 지난날이 굉장히 무섭네요.