미국주식 자동매매 시작하기-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

 

반응형

댓글()

분석설계모델링-ERD

카테고리 없음|2021. 7. 4. 22:49
반응형

 

DB ERD 관계선(실선, 점선)과 기호

관계선의 종류

  • 실선(Identifying): 식별관계

      부모테이블의 PK가 자식테이블의 FK/PK가 되는 경우

      부모가 있어야 자식이 생기는 경우

      ex) Issue 테이블과 IssueComment 테이블이 있을 경우, IssueComment는 Issue가 존재해야지만 있을 수 있음

  • 점선(Non-Identifying): 비식별관계

      부모테이블의 PK가 자식테이블의 일반속성이 되는 경우

      부모가 없어도 자식이 생기는 경우

      ex) User 테이블과 Process가 있을 경우, User가 담당 프로세스가 있다고 하더라도, Process는 User없이도 존재할 수 있음

 

DB ERD 관계선(실선, 점선)과 기호에 대한 설명

DBA는 아니지만, 프로그램을 잘 만들기 위해서 완성된 ERD를 이해하고, 나아가 간단한 모델링은 직접 만들줄 알야한다고 생각한다. ERD를 이해하기 위한 첫 걸음이자 가장 중요하다 할 수있는 부분

eyecandyzero.tistory.com

 

개체가 강한 개체 타입을 갖는 경우(비 식별자적 관계)에는 점선, 약한 개체 타입(식별자적 관계)을 갖는 경우에는 실선으로 표시합니다. N쪽의 관계를 표현하기 위해서는 새발을 그려줍니다. o을 그려주는 것은 최소 참여가 0인 경우 즉 최소참여이고, |을 그려주는 것은 최소 참여가 1인 경우 즉 필수 참여인 경우입니다. 

직원이 특정 부서에 소속되어 있는 경우 그리고 직원이 부양가족이 있는 경우에 대한 ER다이어그램을 IE 표기법을 나타내면 다음과 같습니다.

직원은 반드시 부서에 소속되어야 하므로 비식별자적 관계 즉, 점선으로 이어져있어야 하며

부서에 직원이 없을 수도 있으므로 부서에 대응하는 직원에 o 표시를 넣어주고, 모든 직원은 부서에 포함되어야 하므로 | 을 그려줍니다.

그리고 직원은 부양가족이 있을 수도 있고 없을 수도 있으므로 대응하는 부양가족의 표시에 o를 넣어주지만 부양가족은 자신들을 부양해주는 사람(직원)이 반드시 있어야 하므로 대응하는 직원의 표시에 |를 넣어줍니다. 또한 부양가족은 직원이 없이 부양가족의 이름만으로는 식별이 불가능하므로 (직원번호, 이름)을 식별자로 사용하며 실선으로 표기합니다.

반응형

댓글()

여주 골프연습장 추천 모음

생활정보|2021. 5. 23. 19:49
반응형

https://goo.gl/maps/Fix6cPENhmNU7SdX8

 

Google에서 제공되는 SUJIN OH (OHSSU)님의 영재 Par3 골프랜드 관련 리뷰

★★★★★ "자동시설에 휴게실 샤워실 카페 다 갖춰져있고, 비거리를 200까지 확인가능할정도로 넓고, 주차장도 넓고, 가격도 저렴하고 저는 앞으로 이곳에 자주갈예정임"

www.google.com

 

https://maps.google.com/maps/contrib/116892531990059484324 추천

 

반응형

댓글()

종목정보 파악에 유용한 사이트 모음

AI주식자동매매|2021. 5. 8. 14:07
반응형

안녕하세요?

 

주식 자동매매할때, 내가 선택한 종목이 괜찬은 투자할만한 종목인지,

기관에서는 추천하고 있는 종목인지 비교해 보기 위해서는 종목정보를 분석할 필요가 있습니다.

 

이때, 유용한 사이트를 모아봤습니다.

 

1. 컴퍼니가이드(CompanyGuide)

    http://comp.fnguide.com 

 

삼성전자(A005930) | Snapshot | 기업정보 | Company Guide

삼성전자 005930 | 홈페이지 홈페이지http://www.samsung.com/sec 전화번호 전화번호031-200-1114 | IR 담당자 02)2255-9000 주소 주소경기도 수원시 영통구 삼성로 129 (매탄동) KSE  코스피 전기,

comp.fnguide.com

경쟁사와 비교정보, 향후 2~3년 실적전망정보까지 기업투자 판단에 꼭 필요한 정보들이 모두 제공됩니다.

 

2. finviz.com/

 

FINVIZ.com - Stock Screener

× Ever heard of Finviz*Elite? Our premium service offers you real-time quotes, advanced visualizations, technical studies, and much more. Become Elite and make informed financial decisions. Find out more --> Upgrade your FINVIZ experience Join thousands o

finviz.com

해외 미국주식 정보를 종합적으로 보여줍니다. 

3. thinkpool

www.thinkpool.com/itemanal/i/tpreport/tpreport_item.jsp?code=000970

 

한국주철관(000970) > 리포트 :: 씽크풀

 

www.thinkpool.com

 

반응형

댓글()