ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로젝트][2021-10~2021-12] 업비트 자동매매 프로그램
    IT/프로젝트 2021. 12. 12. 13:38

    # 관련 포스팅

    ########################################################################################

    ########################################################################################

     

    # 최총 구현 모습

    ########################################################################################

    ########################################################################################

     

    # 구현 기능

    ########################################################################################

    1. EMA, SMA, RSI 지표를 이용하여 매수 및 매도 타이밍 결정 후 자동 매매

    2. 평단가 대비 클라이언트가 설정한 % 아래로 손익률이 떨어질 경우, 추가 진입 (3차까지)

    3. 보유 코인 전체 매도

    4. 클라이언트가 설정한 손익률 도달 시 자동 매도

    5. 바이너리 파일 생성 시 업비트 api key와 프로그램 만료 날짜를 입혀서 파일을 생성할 수 있도록 구현

    6. 최대 14개의 전략 구동

    ########################################################################################

     

    # 필요 라이브러리

    ########################################################################################

    python 3.9 version (32bit)

     

    pyupbut (pip install pyupbit)

    Name: pyupbit
    Version: 0.2.21
    Summary: python wrapper for Upbit API
    Home-page: https://github.com/sharebook-kr/pyupbit
    Author: Jonghun Yoo, Brayden Jo
    Author-email: brayden.jo@outlook.com, jonghun.yoo@outlook.com, pyquant@outlook.com
    License: UNKNOWN
    Location: c:\users\home\anaconda3\envs\coin3\lib\site-packages
    Requires: pandas, requests, pyjwt, websockets
    Required-by:

     

    talib (pip install TA_Lib-0.4.21-cp39-cp39-win32.whl)

    TA_Lib-0.4.21-cp39-cp39-win32.whl
    0.37MB

     

    ########################################################################################

     

    # 소감 한마디

    ########################################################################################

    1. pyqt5 테이블 위젯은 쓰레기다. 웹소켓을 이용하여 현재가를 실시간으로 받아오면 뭐하나.. 펜딩현상이 너무 심해서 테이블 셀의 값들을 오버라이팅하지 못한다. 아니 했겠지만 바뀌지 않는다. 테이블 부분을 클릭해야지 그제서야 반응하고 바뀌는데, 정말 어처구니가 없었다. 결국 QLineEdit 객체를 여러개 붙여서 테이블 처럼 만들었다ㅋㅋㅋㅋ 구현하고 보니까 이 부분은 정말 잘한듯 하다. 생각보다 자연스럽다.

     

    2. setObjectName 함수를 이용하여 GUI안에 각 객체에 별명을 부여할 수 있다. 이것을 잘 활용했다. 총 14개의 똑같은 폼을 만들어야하는데 이 함수가 없었다면 GUI단의 코드가 14배 길어졌을 것이다. 다만 각 버튼에 대한 이벤트와 연결된 함수는 14개씩 만들었는데, 이 부분은 내 머리로는 도저히 해결책이 떠오르지 않았다. 무슨 방법이 있겠지?

     

    3. 코드가 문제없이 실행이 된다 하더라도 반드시 중간중간 바이너리 파일로 만들어 봐야한다. 약 3개월? 정도의 시간동안 구현을 하고 최종 마무리가 되었을 때 바이너리 파일을 처음 생성했었다. 근데 이게 무슨일인지 제대로 작동이 안되는 것이었다. 마감일은 당장 내일인데... 정말 눈앞이 캄캄해졌다. 구글링을 해도 도저히 답도 안나오고 절망 적이었다. 아직까지도 정확한 이유는 모르겠지만 웹소켓 문제였을 것이다. 그렇게 생각하는 근거는 웹소켓 부분만 따로 떼내어서 바이너리 파일로 만드니까 그게 안되더라. 결국 다시 처음으로 돌아갔다. 쓰레드를 돌면서 0.2초에 한번씩 코인의 가격을 불러오는... 미친듯이 비효율적인 방법... 한 코드에 매매로직과 리얼타임로직을 다 때려박으니까 프로그램이 바보가 되더라. 펜딩현상이 미칠듯이 심해져서 특단의 조치를 취했다. 리얼타임 프로그램을 밖으로 빼자! 좀 지저분하긴 하지만 내 실력으로는 최선이었다,,,ㅜㅜ

     

    4. 웹소켓을 바이너리 파일로 만들려고 하지마라. 근데 생각해보면 증권사 realtime 기능은 문제가 없었다. 분명 방법이 있긴 할텐데.. 흠

     

    5. talib은 정말 유용하다. 각 버전의 호환성 빼고는 ㅎㅎ

    아니 이렇게 필사적으로 파이썬 버전에 의존하는 패키지는 처음이다. 파이썬 버전이 안맞으면 이악물고 작동이 안되게끔 한 느낌이랄까나..

    ########################################################################################

     

Designed by Tistory.