주식 자동매매 시스템

파이썬을 이용한 주식 자동매매 시스템

이미지
파이썬을 이용한 주식 자동매매 시스템 INDEX 환경구축 키움증권 API - 연결테스트 키움증권 API - 계좌정보 조회 키움증권 API - 주문 키움증권 API - 종목정보 가져오기 포트폴리오 - 종목, 업종별 자산 포트폴리오 한국투자증권 API API reference 키움 OpenAPI+ 개발가이드 한국투자증권 OpenAPI 다운로드 및 가이드 Design https://www.design-seeds.com/in-nature/succulents/cacti-color-2/ https://create.piktochart.com/dashboard

[python] 데이터 가공에 꼭 필요한 특수 문자 처리 - string.punctuation

문자열 안에 있는 모든 특수문자 제거하는 방법 1. 문자열 모듈에서 특수문자를 처리를 돕는 메소드 string punctuation string.punctuation은 모든 구두점을 문자열로 return 해주는 함수다. 데이터 전처리에서 많이 사용되며,  이 메소드를 알지 못했을 때는 특수문자 처리에 번거로운 작업이 필요했다. 함수를 print 했을 때 나오는 아래 결과를 보면 이해하기 쉽다.  from string import punctuation result = punctuation print(result) output !"#$%&'()*+, -./:;<=>?@[\]^_`{|}~ ex) @와 #을 제외한 모든 특수문자를 문자열에서 제거하고 싶은 경우, 아래와 같이 사용하면 된다. # @와 #을 제외한 특수문자로 이루어진 문자열 symbols text = "~!#@!@$%%%@12234234" symbols = punctuation.replace('@', '').replace('#', '') for symbol in symbols: text = text.replace(symbol, '') 2. 문자열 모듈에서 whitespace 처리를 돕는 메소드 string whitespace string.whitespace로 사용할 수 있으며 space, tab, linefeed, return, formfeed, and vertical tab 과 같은 공백, 줄 바꿈 관련 세트를 return해준다. punctuation/whitespace 함수를 사용해 문자열을 간단하게 처리하는 예제 넷플릭스 트위터에서, #, @ 를 제외한 문자열 처리하기 아래와 같은 트위터들을 가져와서, preprocessing 하는 방법을 실습해본다. 나 이준호 좋아하네 #이상한변호사우영우 #ExtraordinaryAttorneyWoo #강태오 #KangTa

[python] 숫자-문자 원하는 형태로 Formatting 하는 방법

숫자와 문자 자유자재로 Formatting 하는 방법 Python에서 숫자를 원하는 형태로 출력하는 다양한 방식이 있다. String format 함수 String format 함수는 유용하고, 자유로운 형태로 변형이 가능하다는 장점이 있다. 하지만 단순하게 앞뒤로 0을 붙이거나 자릿수를 맞추는 경우에는 더 편한 방법이 있다. String zfill 함수 0으로 앞을 채워 자릿수를 맞추는 데 가장 최적화된 방법인 것 같다. '0' + str 아래 예제를 보면 이해하기 쉽다. python에서 숫자를 같은 자릿수의 string으로 표현하는 방법 Format numbers in python with leading zeros and fixed decimal places number = 3 num_str = str(number).zfill(2) num_str = '{:02d}'.format(number) num_str = '0' + str(number) if number < 10 else str(number) result >> 03 16진수 string으로 나타내는 방법 Format number in python with leading zeros and fixed hexa places number = 0xc num_str = '{:02X}'.format(number) num_str = '0' + str(hex(number))[2:] if number < 0xF else str(hex(number))[2:]  result >> 0C 16진수 0x로 시작하는 string으로 나타내는 방법 Format hexa number in python with leading '0x' number = 0xc num_str = '0x{:02X}'.format(number

[English] a feeling of helplessness 무력감

  무력감과 관련된 단어들 helplessness, inertia, impotence, powerlessness 지난 주말 OPIC 시험을 보고, 오늘 다른 speaking 시험에 재도전 했는데 또 한 번 무력감을 느꼈다. 실력이 늘지 않았다는 것, IH가 목표인데, IM 조차 받기 힘들다는 것....! 이 와중에 무력감을 표현할 수 있는 방법을 찾아봤다...ㅎ0ㅎ 눈물이 좔좔 흐르지만....... 공부는 계속 해야하니까.. 꾸준히 하면 나아지겠지!? [helpless] ( 명사:  helplessness  ) 형용사  무력한, 속수무책인 형용사  (감정을) 감당하지[참지] 못하는 I felt a sense of powerlessness[helplessness]. 무력감을 느꼈다 [inertia] 1 . 명사   보통 못마땅함  무력, 타성 2 . 명사   물리  관성 Psychological inertia is the tendency to maintain the status-quo (or default option) unless compelled by a psychological motive to intervene or reject this. I can’t throw off this feeling of inertia 나는 이 무력감을 떨쳐 버릴 수가 없는 것 같다. inertia는 타성에 젖어있는, 이런 느낌의 무력인 것 같다. 

R 에러 - DataFrame 사용 시 자주 발생하는 error

R Error, DataFrame 사용 시 자주 발생하는 error > mean(df[,c('age','weight')]); Warning message: In mean.default(df) : argument is not numeric or logical: returning NA Warning message: In mean.default(df[, c("age", "weight")]) : 인자가 수치형 또는 논리형이 아니므로 NA를 반환합니다. 숫자, 논리적이지 않은 객체를 평균내려고 할 때 발생한다. dataframe 내에 문자열이나, 전체 데이터 프레임의 평균을 계산하려고 할 때 발생하므로,   아래와 같이 해결하면 된다. 해결방법  1. mean()이 아닌, colMeans()를 사용해 column을 평균내는 함수 사용 R의 data type의 Dataframe 예제를 보면 더 쉽게 이해할 수 있다. -->  R Data Type(Scala/Vector/Dataframe) 2. 숫자벡터로 이루어진 column만 평균을 낸다. mean(df$score) 3. sapply() 이용 sapply(df, mean)

[English] The power of Autosuggestion

Autosuggestion 자기암시를 뜻하는 단어로 Self suggestion이라는 단어를 사용하기도 한다. 사전적 의미는 아래와 같다.  The hypnotic or subconscious adoption of an idea that one has originated oneself, e.g. through repetition of verbal statements to oneself in order to change behavior 의식적으로 행동을 변화시키기 위해 자신에게 반복해서 최면을 거는 행동이다. 자기암시는 자기 자신을 더 좋은 방향으로 변화시킬 수 있다는 심리적인 방법이다. 자기암시를 하는 방법은 자신이 두려워하는 상황이나 원하는 것이 있을 때 그것을 이룰 수 있다고 생각하고 스스로 되뇌이면 된다. 부정적인 단어를 피하고 긍정적으로 자기암시를 하면 된다. I am a capable and positive person! I will have all the information I need to ace my exam! Phrase your suggestions positively, and avoid negatives like "not", "less", "won't", "don't" and "can't." self-improvement based on autosuggestion every day in every way I'm getting better and better autosuggestion은 아래와 같이 활용된다. give autosuggestion 자기암시를 하다  continue autosuggestion 자기암시를 계속하다  need autosuggestion 자기암시가 필요하다 autosuggest 자기암시를 하다 특히 오픽에서 높은 등급을 받을 수 있는 좋은 단어이

Refactoring 참고 사이트

Refactoring 참고 사이트 Refactoring https://refactoring.com/catalog/ Refactoring 2nd Edtion을 기반으로 한 온라인 카탈로그이다. 작가가 직접 책에 있는 내용을 공유하기 위해 쓴 글로  다양한 기법에 대한 스케치와 예제 코드(java)가 있다. (+): 스케치로 개념을 이미지화 해서, 내용을 이해하기 수월하다. (-): 기법에 대한 Description이 없고 스케치와 코드만 있다 Refactoring, Design Pattern https://refactoring.guru/  리팩토링, 디자인 패턴, SOLID 원칙 및 기타 스마트 프로그래밍 주제에 대해 알아야 할 모든 정보를 얻을 수 있으며,  java, C#, php, python, typescript 등의 언어로 예제 코드를 지원한다. 리팩토링 기법에 대해 아래와 같은 순서로 설명이 되어 있다. Problem > Solution Why Refactor Benefits When Not to Use How to Refactor (+): Refactoring을 위한 방법을 순차적으로 친절하게 설명해준다. (+): 다양한 언어의 예제코드가 지원된다.  SourceMaking https://sourcemaking.com/ 디자인 패턴, 리팩토링에 대한 정보를 얻을 수 있으며, 위 사이트와 거의 유사하다. Signs and Symptoms Reasons for the Problem Treatment Payoff Performance (+): 다양한 문제에 대한 해결 방식과 payoff (-): 예제 코드가 없다

Rserve로 Java에서 R 연동하기

Foreground 에서 실행 > Rserve::run.Rserve() -- running Rserve in this R session (pid=5448), 1 server(s) -- (This session will block until Rserve is shut down) Background 에서 실행 > Rserve::Rserve() Starting Rserve...  "C:\PROGRA~1\R\R-34~1.4\library\Rserve\libs\x64\Rserve.exe" 

ERD 설계하기 좋은 Web Site

이미지
ERD Database 설계, ERD (Entity–relationship model) 설계 및 Visualization하기 유용한 사이트 aquerytool 로그인을 하지 않고 ERD를 만들어서 사진, excel로 저장할 수 있다. MySQL 등으로 저장하기 위해서는 로그인이 필요하다. UI가 간편해서 사용하기 쉽다. table간의 연결 관계는 FK를 drag&drop 해서 설정할 수 있다. dbdiagram 로그인이 필요하다.(google, github) Diagram을 직접 만들기엔 interface가 어렵다. MySQL, PostgreSQL, rails 등 만들어 둔 database를 import해서 볼 수 있다. erdcloud 로그인이 필요하다.(google, github) 마찬가지로 database를 import해서 볼 수도 있고, 직접 만들 수도 있다.

파이썬을 이용한 주식 자동매매 시스템4 - 주문

파이썬을 이용한 주식 자동매매 시스템 - 주문 SendOrder 함수를 통해 주문을 전송하고, OnReceiveChejanData라는 이벤트핸들러에서 GetChejanData라는 메서드를 호출해 체결된 데이터를 얻어오면 된다. 주식 주문 Tr LONG SendOrder( BSTR sRQName, BSTR sScreenNo, BSTR sAccNo, LONG nOrderType, BSTR sCode, LONG nQty, LONG nPrice, BSTR sHogaGb, BSTR sOrgOrderNo) def send_order(self, rqname, screen_no, acc_no, order_type, code, quantity, price, hoga, order_no): self.dynamicCall("SendOrder(QString, QString, QString, int, QString, int, int, QString, QString)", [rqname, screen_no, acc_no, order_type, code, quantity, price, hoga, order_no]) 체결 이벤트 핸들러 OnReceiveChejanData에서는, 아래와 같은 입력값이 주어진다. sGubun – 체결구분 – 0: 주문체결통보, 1: 국내주식 잔고통보, 4: 파생상품 잔고통보 nItemCnt - 아이템갯수 sFidList – 데이터리스트 - 데이터 구분은 ‘;’ 이다. def _set_signal_slots(self): self.OnReceiveChejanData.connect(self._receive_chejan_data) def _receive_chejan_data(self, gubun, item_cnt, fid_list): print(gubun) print(self.get_chejan_data(9203))

파이썬을 이용한 주식 자동매매 시스템 3 - 계좌정보 조회

이미지
키움 API의 기본적인 통신 'CommRqData'라는 Method를 통해 데이터를 송신하고,  'OnReceiveTrData'를 통해 데이터를 받아와 처리하는 방식이다.  LONG CommRqData(BSTR sRQName, BSTR sTrCode, long nPrevNext, BSTR sScreenNo) sRQName – 사용자구분 명  sTrCode - Tran명 입력  nPrevNext - 0:조회, 2:연속  sScreenNo - 4자리의 화면번호  void OnReceiveTrData(LPCTSTR sScrNo, LPCTSTR sRQName, LPCTSTR sTrCode,LPCTSTR sRecordName, LPCTSTR sPreNext, LONG nDataLength, LPCTSTR sErrorCode, LPCTSTR sMessage, LPCTSTR sSplmMsg) sScrNo – 화면번호  sRQName – 사용자구분 명  sTrCode – Tran 명  sRecordName – Record 명  대부분의 TR 통신은 위 두개의 함수로 조회하고 받아볼 수 있다. 파이썬으로 구현하기 위해 이 전에 작성했던 KiwoomTrade class에 아래 함수들을 추가 했다. CommRqData def set_input_value(self, id, value): self.dynamicCall("SetInputValue(QString, QString)", id, value) def comm_rq_data(self, rqname, trcode, next, screen_no): self.dynamicCall("CommRqData(QString, QString, int, QString)", rqname, trcode, next, screen_no) self.tr_event_loop = QEventLoop() self.