코인API 자동매매일지 - 2021.04.05 21:00

카테고리 없음|2021. 4. 5. 21:37
반응형

안녕하세요? 

 

4월 5일 코인 자동매매일지 올립니다.

오늘은 어제 76만원대비 약 8% 증가된 82만원입니다.

 

전체 가상화폐의 거래량과 가격이 많이 오른 영향도 큰것으로 보입니다.

오늘은, 어제 19:00부터 오늘 19:00시까지 25시간 거래내역을 빗썸으로부터 다운받아서

코인의 매수단가 대비 매도단가 차이를 보고, 현재 몇%의 마진을 남기는지 확인을 해봤습니다.

물론, 여기에는 수수료 매수, 매도 각 0.25%인 0.5% 수수료가 포함되어 있음을 감안하셔야 합니다.

 

보통 1%에서 3%까지의 차액 이윤을 남기고 있음을 알 수 있습니다만,

더마이다스터치골드의 경우에는 -7.9%에 손절한 Case도 확인이 됩니다.

매수매도 대상: 일일거래금액 300억 이상

1회 매수 한도금액: 20만원

매도시 최소마진율: 최소 1% ~ 최대 10%

                          (비트코인 가격 증가 및 감소에 따라 자동으로 변환)

오늘 거래가 가장 많이 발생한 아모코인(AMO)의 6시간봉 및 5분봉 차트입니다.

5분봉차트는 최근 12시간만 표시하고 있는데, 최근 12시간이내에는 거래가 없었네요.. 

 

두번째로 오늘 최근 거래가 있었던 비트코인을 보겠습니다.

"B"로 표시된 부분이 buy(매수)부분입니다.

 

확대를 해 볼게요. 7,477만원부근에서 Buy했다는것을 그림으로 확인 가능합니다.

빗썸에서 이 부분을 크게 다시 봐 보겠습니다.

18:20분에 5분봉기준 macd가 0선이하에서 signal선을 교차하면서 상승할때 매수가 되었음을 알수 있죠..

제가 원하던 매수 싯점입니다. 프로그램이 잘 수행되고 있음을 확인할 수 있습니다. ^^

오늘은 여기까지 하겠습니다.

반응형

댓글()

코인API 자동매매일지-2021.04.04

가상화폐|2021. 4. 4. 21:58
반응형

안녕하세요?

3일차 코인 자동매매일지 올립니다.

 

오늘을 현재 추정자산금액은 756000원입니다.

어제와 거의 같습니다.

어제밤 12시경부터 최근 급등에 대한 우려때문인지, 대부분의 가상화폐들이 

하락을 했습니다.

 

저도 오늘 아침에는 8% 이상이 빠졌다가,

오후부터 회복되기 시작하여, 현재는 어제 금액만큼 겨우 회복을 한것 같습니다.

 

자동매매프로그램 화면

 

 

빗썸자산현황 매뉴

.

반응형

댓글()

코인API 자동매매일지-2021.04.03

가상화폐|2021. 4. 3. 09:20
반응형

안녕하세요?

두번째 코인자동매매일지입니다.

요즘 코인거래량이 상당히 증가하면서, 비트코인이 연일 최고가를 경신하고 있습니다.

일부 코인은 하루 만에 가격이 두배가 되기도 하는것 같습니다.

하지만, 저의 프로그램은 이런 폭증과 무관하게 일정수익만을 내면서

천천히 금액이 증가되도록 거래가 조정되는 것 같습니다.

 

오늘은 어제 오후3시경 시점 기준보다 4.56%증가 된것 같습니다.

자동매매프로그램 화면
빗썸 자산현황 메뉴화면

 

반응형

댓글()

코인API 자동매매일지-2021.04.02

가상화폐|2021. 4. 2. 14:13
반응형

안녕하세요?
오늘부터 제가 운영중인 코인 자동매매시스템의 일일 모니터링 결과를 올리도록하겠습니다.

자동매매프로그램 운영환경
1. 사용 API: Bithumb API
2. 사용언어: 파이썬 3.7 32bit
3. 개발환경: Pycharm 최신버젼
4. UI 환경: PYQT5
5. DB: Sqlite
6. 모니터링 환경:
    1) Slack 앱 API를 통한 메세지 송신


    2) 빗썸 모바일앱

7. UI 화면

반응형

댓글()

ufunc 'add' did not contain a loop with signature matching types (dtype('<U170'), dtype('<U170')) -> dtype('<U170')

반응형

안녕하세요?

 

이 에러 메세지 원인을 못찾아서 거의 한시간을 헤멨습니다.

혹시, 이 에러 원인을 찾는 분이 계시다면 도움되시길 바랍니다.

 

다른 분들은 어떤 부분에서 에러나는지 모르겠지만,

저는 하기 sqlCode Text 문장을 만들어서 

 

try: 

    sqlCode = "select date, low from '" + ticker + "' t1 where t1.date <= (select max(t2.date) from '" + ticker + "' t2

    where t2.date < ( select date(max(t3.date), '-1 day') from '" + ticker + "' t3) and t2.low < " + current_price + ")"

 

    chart_data_low = pd.read_sql(sqlCode, con, index_col=None) # 추가로 인덱스 칼럼이 생성되지 않도록 한다.

except Exception as e:
    self.logging.logger.debug("(%s) retrieve_db_chart_data_low Exception발생: %s" % (ticker, e))
    print("chart_intervals: %s" % chart_intervals)

 

이렇게 하는 과정에서 Exception Error가 발생했습니다.

 

sqlCode 문자열을 생성할때, 문자열들만의 문자열 합하기가 되도록 중간중간의 인자값을 잘 확인하시기 바랍니다.

 

그럼, 즐(거운)파(이썬) 하시길 바랍니다.

반응형

댓글()

python exe 파일 실행시 failed to execute script 오류 해결하기

가상화폐|2021. 3. 7. 10:36
반응형

일단, pyinstaller를 삭제하고 다시 설치해 보겠습니다.

pip uninstall pyinstaller

다시 설치하기

pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip

다시 auto-py-to-exe 를 실행합니다.

하지만. 동일한 오류가 발생합니다. pyinstaller 버젼이나 설치오류와는 아무 관련이 없었습니다.

다시.. 여기 사이트를 참조하여 다시 해 보겠습니다.

In PyInstaller, Why Won't NumPy.Random.Common Load as a Module?

 

import pandas as pd 앞부분에 붉은색 부분 추가합니다.

# 추가한 부분
import numpy.random.common 
import numpy.random.bounded_integers 
import
 numpy.random.entropy

import pandas as pd

다음과 같이 다시 pyinstaller를 실행해 봅니다.

pyinstaller --icon=test.ico --onefile --noconsole -F -n goldcoin.exe -c --clean main.py
-F: 한 개의 파일로 만들기. 용량은 당연히 조금더 커진다. (없을 시 dll 파일들과 분리되어 폴더로 생성됨)
-n: 이름짓기. 이름은 바로 오른쪽에 기입 (없을 시 소스파일명과 동일한 파일이 생성됨)
--noconsole: exe파일 실행시 콘솔창 띄우지 않기
--onefile: import 된 라이브러리를 따로 생성하지 않고 exe 파일 안에 다 넣고 싶은 경우
--icon=test.ico: 실행파일의 아이콘을 바꾸고 싶다면 추가


D:\PycharmProject\BithumAPI\dist 여기에 goldcoin.exe파일이 잘 만들어져 있네요.

하지만.. 실행시에 다음과 같은 오류가 또... 

 

GUI 라이브러리를 사용할 때는 pyinstaller 후 생성된 .spec 파일을 수정해야 된다고 하네요.

(1) .spec 파일에서 라이브러리를 추가하고, coll 부분을 수정

(2) pyinstaller .spec

(3) .exe 파일 실행

 

함 해 보죠.. 

m.blog.naver.com/PostView.nhn?blogId=qbxlvnf11&logNo=221791248065&proxyReferer=https:%2F%2Fwww.google.com%2F

 

상세내용은 여기를 참조하라고 하네요..

kivy.org/doc/stable/guide/packaging-windows.html

 

다음은 main.spec의 내용입니다.

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None



a = Analysis(['main.py'],
             pathex=['D:\\PycharmProject\\BithumAPI'],
             binaries=[],
             datas=[('./TA_Lib-0.4.19-cp37-cp37m-win32.whl', '.')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='goldcoin.exe',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )

 

이번에는 수정한 spec파일을 pyinstaller 실행합니다.

pyinstaller --icon=.\image\goldcoin_1.ico --onefile --noconsole -F -n goldcoin.exe -c --clean main.spec

여전히 talib.stream 모듈을 찾을수 없다는 에러가 떠서,

python 소스에 추가해 주었습니다.

import talib
import talib.stream

 

이제 talib.stream오류는 해결되었나 봅니다.

다른 오류가 뜹니다.

KeyError: 'formatters'

 

원인을 보니, log config파일을 실행단계에서  logging.conf파일을 가져오지 못하는 오류인것으로 보입니다.

일반적으로 py파일을 실행할때는 아무 문제가 없던 부분입니다.

 

하기 붉은 색 부분을 os.path함수를 이용해서 명시적으로 path를 지정해 줍니다.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import logging.config
from datetime import datetime
import os

class Logging():
    def __init__(self, config_path='config/logging.conf', log_path='log'):
        folderPath3 = os.path.abspath(os.getcwd()) + '/config'
        if not os.path.isdir(os.path.abspath(os.getcwd()) + '/config'):

           os.makedirs(os.path.abspath(os.getcwd()) + '/config')
        folderPath3 = str(folderPath3)
        config_path = os.path.abspath(folderPath3 + str("\\logging.conf"))

        folderPath3 = os.path.abspath(os.getcwd()) + '/log'
        if not os.path.isdir(os.path.abspath(os.getcwd()) + '/log'):

           os.makedirs(os.path.abspath(os.getcwd()) + '/log')
        log_path = str(folderPath3)
   
        self.config_path = config_path
        self.log_path = log_path

하지만, 소용이 없어 보입니다.

결국, pyinstaller에서 exe 실행파일 만들때는 log용 formater는 사용할 수가 없을 것 같습니다.

결국 모든 log 파일용 format 설정정보와 함수는 모두 지운후에 다시 실행해 보니, 정상적으로 exe파일이 실행됩니다.

pyinstaller --icon=.\image\goldcoin_1.ico --onefile --noconsole -F -n goldcoin.exe -c --clean main.spec

추가로, goldcoin.exe가 죽으면 계속해서 끊임없이 다시 실행시켜줄 ParentTrader.exe파일도 만들었습니다.

pyinstaller --onefile --noconsole -F -n ParentTrader.exe -c --clean ParentTrader.py

ParentTrader.exe를 실행하니, 다음과 같은 command창이 뜨면서 main창이 뜹니다.

여기서 "빗썸코인거래 시작"버튼을 누르면, 빗썸으로 자동접속되면서 매수추천 및 자동매매가 시작됩니다.

폴더내의 전체 파일 및 하위폴더 구조입니다.

반응형

댓글()

auto-py-to-exe로 python exe 파일 만들기

카테고리 없음|2021. 3. 7. 09:19
반응형

python 코드를 exe 배포파일 만들때는 pyinstaller를 사용합니다만,

옵션들을 직접 알고 타이핑해야 하는 불편함이 있었습니다.

 

그런데, 오늘..

출처: https://iamaman.tistory.com/3289 [남성의 MATLAB LOG]

님의 덕분에 좋은 방법을 찾게 되었습니다.

 

아래와 같이 anaconda prompt에서 pip install을 통해서 auto-py-to-exe를 설치해 줍니다.

그다음, auto-py-to-exe를 실행시키면 됩니다.

그러면, 다음과 같이 팝업 윈도우 창에서 실행파일 만드는 명령을 줄 수 있습니다.

약 10분 후에 정상적으로 완료되었다는 메세지가 보입니다.

이번에는 exe파일이 정상적으로 실행될 수 있을까요? 

지금까지 계속 실패하고 있거든요. exe파일 실행해도 에러 메세지도 없이 실행이 안되었거든요...

 

OPEN OUTPUT FOLDER를 눌러서 가니,

main.exe파일이 정상적으로 만들어져 있습니다. 실행을 해 볼까요?

에고.. 역시 또 실패입니다. numpy.random.common 모듈을 못찾았다네요.. 흠..

이거 오류 찾아서 결과 다시 올리겠습니다.

반응형

댓글()

파이썬에서 Slack API를 통한 주식매매정보 보내기

반응형

안녕하세요?

 

오늘은 주식자동매매 구현시 자동매매 도중에 발생되는 정보나

Status, 추천종목정보, 자동매수 매도 결과를 자신의 Slack 메신저로 보내주기 위해

필요한 Slack API 설정 및 그 설정을 이용한 파이썬 코드, 

그리고, 그 결과 메세지가 전송된 결과 화면을 공유해 보고자 합니다.

 

1. slack API 설정화면

   하기 화면 메뉴에서 Bot User OAuth Access Token 값을 Copy합니다.

   여기서 token생성하는 과정은 다른 전문가님들의 가이드 메뉴 참조하시기 바랍니다.

   여기서는 생략하겠습니다. 

 

추가로, Scope도 추가 정의해 줘야 합니다.

slack bot에 access하는 application python에서 slack bot에 어떠어떠한 권한까지

가질수 있는지를 지정한다고 보시면 됩니다.

저는 channel읽기, chat에 글 올리기, 파일읽기 등 총 5가지 모두를 부여해 봤습니다.

 

2. Python slack.py 소스 코드

   우선 slack.py로 파이썬 코드를 분리했습니다.

   나중에 main 파이썬에서 from slack import *

   로 포함시키도록 하면 됩니다.

from slacker import Slacker

class Slack():
   def __init__(self):
       ############################################################
       # Slack API에서 "auto Traders" 
       # Installed App Settings
에서의 "OAuth Tokens for Your Team"
       #  >"Bot User OAuth Access Token"(Access Level: Workspace)
       ############################################################
       self.token = 'xoxb-1251878735248-1513295792086-k4wHoOdyjaWUsjXtVQL6JQeZ'

   def notification(self, pretext=None, title=None, fallback=None, text=None):
       attachments_dict = dict()
       attachments_dict['pretext'] = pretext
       attachments_dict['title'] = title
       attachments_dict['fallback'] = fallback
       attachments_dict['text'] = text

       attachments = [attachments_dict]

       slack = Slacker(self.token)
       slack.chat.post_message(channel='#gold-stock', text=None, attachments=attachments, as_user=None)

   Slack class내에 1번에서 copy한 token 값을 self.token에 저장하고,

   다른 class에서 notification 함수를 통해 호출할 수 있도록 정의합니다.

   

   다음은 main.py의 코드 일부입니다.

   매수 추천주를 골라서 slack으로 알려주는 기능입니다. 

from config.slack import *
...

class MyWindow(QWidget, metaclass=Singleton):
   def __init__(self, parent=None, **kwargs):
       super().__init__(parent, **kwargs)

      self.slack = Slack() # 슬랙 동작
   
  def ai_recommend_click(self):
      # 매수 추천주 확인
      market_status = self.get_recommend_items(stockCode, self.recommInterval, self.click_row)

      # 실제 매수 매도처리
      if market_status == "매수":
        self.slack.notification(pretext="(%s(%s)) 매수 추천종목" % (name, stockCode),
                                   t
itle="%s 자동매매 List에 추가했습니다. 로직No.(%s)" % (datetime.now().strftime("%Y-%m-%d %H:%M:%S"), str_decision_list),
                                   text="https://www.bithumb.com/trade/chart/" + stockCode + "_KRW")
      .
      .

 

이 부분이 slace에서 메세지로 받아보면 아래와 같은 메세지를 slack에서 자동으로 

받아볼 수 있습니다.

여기서 맨 마지막 URL Link를 누르면, 다음 화면으로 연결도 됩니다. ^^

 

이상으로 띄엄띄엄이긴 하지만, slack bot을 통해서

파이썬 자동매매 프로그램에서 종목을 추천한 결과를 slace 메세지로 보내고,

slack 에서 해당 메세지를 보고, 첨부된  url링크를 눌러서 

추가 상세정보도 확인할 수 있다는 걸 

간단한 예로 보여드렸습니다.

 

이상입니다.

반응형

댓글()