파이썬 개발을 도와주는 유용한 도구 IDE(Integrated Development Environment)

반응형
반응형

사실 파이썬 코딩에 사용할 수 있는 IDE는 정말 많습니다.

아래의 블로그에는 8가지 정도의 IDE를 간략히 소개했는데, 궁금하신 분들은 한 번 보시는 것도 좋을 것 같아요.

 

파이썬 IDE 사용 순위

그림 1 : 가장 인기있는 Python IDE, 2020 년 대비 사용량 점유율 2018

개인적으로 Pycharm을 활용하여 개발합니다만, 

cos pro등 pychon시험을 볼때는 jupyter나  google colab방식도 알려계시면 좋습니다. 

PyCharm: the Python IDE for Professional Developers by JetBrains

 

PyCharm: the Python IDE for Professional Developers by JetBrains

The Python & Django IDE with intelligent code completion, on-the-fly error checking, quick-fixes, and much more...

www.jetbrains.com

Project Jupyter | Home

 

Project Jupyter

The Jupyter Notebook is a web-based interactive computing platform. The notebook combines live code, equations, narrative text, visualizations, interactive dashboards and other media.

jupyter.org

Colaboratory에 오신 것을 환영합니다 - Colaboratory (google.com)

 

Google Colaboratory

 

colab.research.google.com

Wing Python IDE - Designed for Python (wingware.com)

 

Wing Python IDE - Designed for Python

Full-featured Python IDE with intelligent editor, powerful debugger, remote development error checking, refactoring, and much more. Wing was designed from the ground up for interactive Python development.

wingware.com

 

반응형

댓글()

미국주식 자동매매 시작하기-3

AI주식자동매매|2021. 12. 25. 07:20
반응형

오늘은 미국주식 자동매매 실제 구동되는 모습을 영상으로 담아서 유튜브에 올렸습니다.

 

12월 21일 미국시간 09:30분부터 약 30분간 구동되는 모습입니다.

 

아직 수정하고 보완해야 할 부분은 많지만, 

매수, 매도는 되는 버젼이라 올려봤습니다.

보시고, 많은 개선의견 부탁드리겠습니다~^^;;

 

https://youtu.be/pgR1zqPqU0g

 

반응형

댓글()

미국주식 자동매매 시작하기-2

AI주식자동매매|2021. 11. 17. 22:21
반응형

안녕하세요?

 

오늘은 제가 한국투자증권에서 제공하는 API를 이용하여 미국주식을 매수하는 소스를 공유하고자 합니다.

한국투자증권을 통해서 쉽게 미국주식도 자동매매가 가능합니다.

 

다음은 지정가로 지정한 수량 및 단가로 매수 주문하는 Python 소스입니다.

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QAxContainer import *

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("한국투자증권-API")
        self.setGeometry(300, 300, 800, 500)

        self.text_edit = QTextEdit(self)
        self.text_edit.setGeometry(10, 20, 780, 450)
        # self.text_edit.setEnabled(False)

        # 주문 입력 및 전송
        self.tran_os_us_buy = QAxWidget("ITGExpertCtl.ITGExpertCtlCtrl.1")
        self.tran_os_us_buy.SetSingleData(0, "00000000") #계좌일련번호[8], GetAccount() 함수 이용(앞 8자리)
        self.tran_os_us_buy.SetSingleData(1, "00") #계좌 상품코드, GetAccount() 함수 이용(뒤 2자리)
        self.tran_os_us_buy.SetSingleData(2, self.tran_os_us_buy.GetEncryptPassword("0000")) #계좌비밀번호(반드시 암호화 처리 필요)
        self.tran_os_us_buy.SetSingleData(3, "NASD") #거래소코드
        self.tran_os_us_buy.SetSingleData(4, "VMD") #종목코드
        self.tran_os_us_buy.SetSingleData(5, "1") #주문수량
        self.tran_os_us_buy.SetSingleData(6, "6.11") #주문가격
        self.tran_os_us_buy.SetSingleData(7, "") #전화번호
        self.tran_os_us_buy.SetSingleData(8, "") #운용사지정주문번호
        self.tran_os_us_buy.SetSingleData(9, "0") #주문서버구분코드
        self.tran_os_us_buy.SetSingleData(10, "00") # 주문구분, 00: 지정가, 01: 시장가

        self.tran_os_us_buy.RequestData("OS_US_BUY")
        self.text_edit.append("미국 매수주문 전송 [" + str(self.tran_os_us_buy.GetSendRqID()) + "] ")
        self.tran_os_us_buy.ReceiveData.connect(self.tran_os_us_buy_receivedata) #이벤트 연결

    def tran_os_us_buy_receivedata(self):
        # 주문응답 이벤트
        self.text_edit.append("미국 매수주문 응답 [" + str(self.tran_os_us_buy.GetSendRqID()) + "] ")

        #결과 메세지
        self.text_edit.append("[" + str(
        self.tran_os_us_buy.GetSendRqID()) + "] " + self.tran_os_us_buy.GetReqMsgCode() + " " + self.tran_os_us_buy.GetReqMessage())

        self.text_edit.append("주문번호 : " + self.tran_os_us_buy.GetSingleData(1, 0))
        self.text_edit.append("주문시간 : " + self.tran_os_us_buy.GetSingleData(2, 0))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = MyWindow()
    myWindow.show()
    app.exec_()

참조하셔서 사용하시기 바랍니다.

반응형

댓글()

미국주식 자동매매 시작하기-1

AI주식자동매매|2021. 11. 4. 07:37
반응형

안녕하세요?

최근에 한국투자중권 API를 이용해서 미국주식거래를 자동화 하기 위해서 테스트 중입니다.

 

기존 키움증권API 자동매매프로그램을 이용해서 화면구성은 동일하게 했고,

미국 USD 금액처리를 위한 소숫점 처리, 그다음 중요한 미국시간기준으로 내부 시간처리했고,

Invensting.com의 주식차트를 웹크롤링하여 월봉, 일봉, 5분봉정보를 실시간으로 가져와서

화면에 띄우고, 매수매도 싯점을 잡는데까지 처리를 했습니다.

 

아직 자동매수매도 처리까지는 못했고, 

화면에 보이는 미국주식은 eFriend Export API를 통해서 현재계좌 잔고를 보여주는 부분입니다.

 

자동매수매도까지 처리하면 포스팅 올리겠습니다.

반응형

댓글()

파이썬 주석 단축키가 먹히지 않을때

반응형

https://dev-jinee.tistory.com/3

 

파이썬(python) 주석 단축키가 작동되지 않을 때

Windows 10 파이참 Pycharm 사용 시 주석 처리를 할 때의 단축키는 [ Ctrl + / ]이다. 간혹 위 단축키가 먹히지 않을 때가 있는데 그럴 때는 [ Ctrl + Shift ] 를 눌러 Microsoft 입력기로 바꿔주면 된다.

dev-jinee.tistory.com

여기서 답을 찾았네요. 감사합니다.

반응형

댓글()

고지혈증에 좋은음식 10가지

생활정보|2021. 9. 30. 12:06
반응형

반응형

댓글()

asyncio로 비동기 처리하여 병렬처리 속도 높이기

반응형

파이썬은 기본적으로 동기 방식으로 동작하는 언어이지만, 파이썬 3.4에서 asyncio가 표준 라이브러리로 추가되고,

파이썬 3.5에서부터는 async/await 키워드가 문법으로 채택이 되면서, 파이썬도 이제 언어 자체적으로 비동기 프로그래밍이 가능해 졌다.

 

예를 들어, 다음과 같이 선언된 함수는 동기 함수입니다.

def do_sync(): 
     pass

기존 def 키워드 앞에 async 키워드까지 붙이면 이 함수는 비동기 처리되며, 이러한 비동기 함수를 파이썬에서는 코루틴(coroutine)이라고도 부릅니다.

async def do_async(): 
      pass

이러한 비동기 함수는 일반 동기 함수가 호출하듯이 호출하면 coroutine 객체가 리턴됩니다.

do_async() # <coroutine object do_async at 0x1038de710>

따라서 비동기 함수는 일반적으로 async로 선언된 다른 비동기 함수 내에서 await 키워드를 붙여서 호출해야 합니다.

async def main_async(): 
     await do_async()

async로 선언되지 않은 일반 동기 함수 내에서 비동기 함수를 호출하려면 asyncio 라이브러리의 이벤트 루프를 이용해야합니다.

loop = asyncio.get_event_loop() 
loop.run_until_complete(main_async()) 
loop.close()

파이썬 3.7 이상에서는 다음과 같이 한 줄로 간단히 비동기 함수를 호출 할 수도 있습니다.

asyncio.run(main_async())

 

실제 저의 프로그램에 구현하기(goldstock 프로그램 일부 발췌)

import asyncio

class Kiwoom(QAxWidget):
     def __init__(self):
          super().__init__()
          self.ui = SetupUI()
          self.realType = RealType()

          self.logging = Logging()
          self.slack = Slack() # 슬랙 동작

          #중간생략...

    def auto_AI_recommend_clicked(self):
          now = datetime.now()
          if self.ui.btnCdtResult_buy.isChecked():
               self.ai_recommend_timer_start()
          else:
               self.timer_ai_recommend.stop()
          return


     def ai_recommend_timer_start(self):
          self.timer_ai_recommend = QTimer()
          self.timer_ai_recommend.start(5 * 1000) # 5초 간격으로 
          self.timer_ai_recommend.timeout.connect(self.ai_recommend_click)

     def ai_recommend_click(self):

          market_status, decision_list = self.decide_to_autoTrading(stockCode)

          if market_status == "매수" or market_status == "강력매수":
               if self.ui.btnAutotrade.isChecked():
                    asyncio.run(self.decide_to_sell(1, stockCode))
                    asyncio.run(self.decide_to_sell(2, balance_detail_stockCode))

          else:
               if (market_status == "매도" or market_status == "강력매도") and stockCode in self.account_stock_dict:

                    if self.ui.btnAutotrade.isChecked():
                         asyncio.run(self.decide_to_sell(1, stockCode))
                         asyncio.run(self.decide_to_sell(2, balance_detail_stockCode))


     async def decide_to_sell(self, num, stockCode): 
          day_chart_data = {}
          minute_chart_data = {}
          week_chart_data = {}
          month_chart_data = {}
          recommInterval = str(self.ui.cbRecommInterval.currentText().replace(' ', ''))
          minute_chart_interval = str(self.ui.spinBox_minutes.value())


          market_status, decision_list = self.decide_to_autoTrading_condtion2(stockCode=stockCode)
          if market_status in ("매도", "강력매도"):
              self.time_to_trading(order_currency=stockCode, type="매도", market_status="매도", \
                    current_price=current_price, target_time=recommInterval, date=order_date, real_flag="R", \
                    decision_list=decision_list)

          elif market_status in ("매수", "강력매수"):
              self.time_to_trading(order_currency=stockCode, type="매수", market_status="매수", \
                    current_price=current_price, target_time=recommInterval, date=order_date, real_flag="R", \
                    decision_list=decision_list)

          else: # 관망
               pass
     def time_to_trading(self, order_currency="", type="", market_status="", target_units=0, current_price=0, \
               target_time="", date="", real_flag="", decision_list=""):
          if type in ("매도", "강력매도"): # 매도
               try:
                    self.sendOrder("신규매도", order_currency, "시장가", int(possible_quantity), int(current_price))
               except (ParameterTypeError, KiwoomProcessingError) as e:
                    self.showDialog('Critical', e)
                    return
               self.slack.notification(\
                    pretext="%s(%s) 시장가 매도주문 완료(로직No:%s)" % (stockName, order_currency, str_decision_list),
                    title="%s 주문수량: %s 현재가: %s" % (self.now.strftime("%Y-%m-%d %H:%M:%S"), possible_quantity, \
                            current_price),
                    text="https://finance.daum.net/chart/A%s" % order_currency)
          else:
               #매수주문
               try:
                    self.ui.pteLog.appendPlainText("%s(%s) (신규매수,시장가)주문전송" % (stockName, order_currency))
                    self.logging.logger.debug("%s(%s) (신규매수,시장가)주문전송" % (stockName, order_currency))
                    self.sendOrder("신규매수", order_currency, "시장가", int(target_units), int(current_price))
              except (ParameterTypeError, KiwoomProcessingError) as e:
                    self.showDialog('Critical', e)
                    self.ui.pteLog.appendPlainText("%s(%s) 매수주문 오류발생" % (stockName, order_currency))
                    self.logging.logger.debug("%s(%s) 매수주문 오류발생" % (stockName, order_currency))
                    return
          # 거래내역 DB저장
          self.insert_db_transaction_infos(self.not_account_stock_dict[self.orderNo]) # result

이 프로그램에 실제 구현하여 동시성 병렬프로그램 함수 처리속도가 배가 빨라졌습니다.

 

이 기능에 대한 설명은 하기 사이트를 참조하였습니다. 감사합니다.

https://www.daleseo.com/python-asyncio/

 

[파이썬] asyncio로 비동기 처리하기

Engineering Blog by Dale Seo

www.daleseo.com

 

반응형

댓글()

자동매매 프로그램 사용현황 유튜브 공지

가상화폐|2021. 8. 29. 19:57
반응형

안녕하세요?

 

유투브에 약 3시간동안의 가상화폐 자동매매 프로그램 사용 영상을 올렸습니다.

 

하기 유튜브 영상 참조하시기 바랍니다.

 

https://youtu.be/r0y3z8b71ps

 

반응형

댓글()