시스템 01호2017. 11. 22. 15:30

 

 

 

 

Posted by 투자의神
뉴스 검색기2017. 11. 22. 15:30

 

 

현재까지는 뉴스 검색기 v.0.97 필드테스터에 선정된분께만 해당되는 사항이며 향후 뉴스 검색기를 사용하게 될 분도 동일하게 적용될 내용입니다. (정식버전 배포시 수정 예정)

 

 

1. 이베스트투자증권 홈페이지 회원가입 (http://www.ebestsec.co.kr/)

 

 

2. 이베스트투자증권 홈페이지 상단 메뉴 : 고객센터  >  매매시스템  >  API  > 사용등록/해지

 

 

3. xingAPI 최신버전 다운로드 및 설치 (v20170803)

 

 

4. 사용자 컴퓨터의 C:/eBEST/xingAPI/reg.bat 실행

 

 

5. 사용자 컴퓨터의 C:/eBEST/xingAPI/DevCenter.exe 실행 및 로그인 (서버는 모의서버 선택)

 

 

6. DevCenter 실행후 좌측 상단 메뉴중 "Res 파일을 모두 다운로드" 클릭

 

 

 

위 내용이 뉴스 검색기를 사용하기 위한 준비 과정의 전부이며 위 항목중 6번을 진행하다가 오류가 발생하더라도 상관없으니 "확인"버튼을 누르면 알아서 다운로드가 재개 됩니다.

 

 

모든 준비가 완료된분께서는 http://systemtraders.tistory.com/172?category=725349 링크의 본문을 잘 읽고 Comment 남겨 주시면 별도로 연락 드리겠습니다.

 

 

 

Posted by 투자의神
이런저런2017. 11. 22. 05:00

 

 

 

얼마전 포항 지진 사태로 인해 일주일 연기되었던 2018학년도 대학수학능력 평가 시험 실시에 따른 시장 운영시간 변경 안내문이니 참고하세요.

 

 

 

Posted by 투자의神
이런저런2017. 11. 22. 04:30

 

 

 

 

 

예전 같이 손매매를 했더라면 변경되는 시장 제도의 변경 공시 등에 민감했을텐데 시세데이터를 받는것부터 자동으로 거래를하고 데이터베이스 서버에 저장하고 시뮬레이션 하는것까지 컴퓨터 프로그램이 알아서 다 처리하니까 둔감해지네요.

 

 

간혹 큰 이슈를 발생시킬 수 있는 시장 제도의 변경은 시스템 트레이더라 하더라도 반드시 확인하고 프로그램의 수정이 필요하면 적절한 조치를 취해야 프로그램 실행에 오류가 없습니다.

 

 

Posted by 투자의神
시스템 성과 합산2017. 11. 21. 11:00

 

 

 

 

오늘은 다른날보다 성과표가 빨리 포스팅 되어서 놀란분도 계실텐데요.

 

 

시스템에 대해서 더 말씀드리기 위해 일찍 예약 포스팅 해두었고 물론 금일도 매매가 없기도 했습니다.

 

 

7-72 시스템은 역대 최장 관망일이 14일이고 현재 8일 연속 거래가 없습니다.

14일이면 거래일 기준으로 약 3주에서 하루 빠진날이니 상당하죠?

10-72 시스템도 7-72 시스템과 마찬가지로 역대 최장일은 14일이며 현재 8일 연속 관망중입니다.

 

 

13-64 시스템은 역대 최장 관망일이 9일이고 오늘로써 10일 관망을 기록하며 역대 최장 관망일 기록을 갱신했습니다.

10일이면 정확히 2주간 거래가 없었다는 뜻입니다.

 

 

필자의 여러 시스템중 V2 시스템의 특장점 들을 이전에 말씀드린적이 있고 또 말씀드리지 않은것도 있었는데 비공개 내용의 경우에는 매매 로직에 중요한 부분이기도 해서 공개하지 않았는데 이 부분중 한가지 더 공개하고자 합니다.

 

 

센스가 있는 독자분들이라면 오늘 공개된 부분을 가지고 시장을 어떻게 봐야 하는지 감을 조금 더 잡을 수 있으리라 생각합니다.

 

 

옵션은 만기일까지의 잔존 일수와 방향성의 강한 추세 흐름에 아주 많은 영향을 받습니다.

 

 

잔존 일수와 관련해서는 월물초에는 별로 거래가 없고 만기일이 다가올수록 거래가 증가하는것은 말씀 드렸는데요.

 

 

강한 추세(시세)와 관련해서는 (구체적으로 말씀드리기는 어렵고 좀 많이 두리뭉실하게 말씀드릴테니 각자의 역량에 맞게 판단하면 됩니다.) 가격이 비쌀수록 KOSPI200 지수나 KOSPI200 지수선물의 등락 영향을 덜 받는편이고 또 (자꾸 공개하면 안되는데 손가락은 이미 타이핑을 하고 있으니 큰일입니다.) 앞서 말씀드린 내용들을 기초로 다음날 시세흐름이 어떠할지 어느정도는 유추할 수 있습니다.

 

 

때문에 오늘 시스템이 거래없이 관망할 것이라는 것을 어제 장 마감하고 미리 알 수 있다는 뜻이지요.

물론 여러 조건들이 있기 때문에 그중 어떤 조건에 따라 관망하게 될지 모든 것을 미리 다 알 수는 없고 일부 조건들에 한해서는 미리 알 수 있습니다.

 

 

이는 필자가 시세의 흐름을 모두 예측할 수 있다는 뜻이 결코 아니니 오해할 필요 없습니다.

 

 

단지 지금까지 여러 시뮬레이션과 분석 그리고 최적화를 거치면서 어떤 특성을 가진 시세는 다음날 거래를 하더라도 성과가 좋지 않을 수 있다는 의미이며, 이는 승률의 관점이 아니라 손익의 합에 관한 내용입니다.

 

 

100번중 30번 손실이 나고 70번 수익이 날 수도 있고 손실과 수익의 수가 뒤바뀐 경우일 수도 있기 때문에 승률의 문제가 아니라 (시스템은 승률이 결코 중요하지 않습니다. 실제 생존한 그리고 꾸준히 누적 수익을 기록하는 시스템 중에서는 승률 30%대의 것도 있습니다.) 100번중 몇번의 수익과 손실인지에 상관없이 수익의 합과 손실의 합을 모두 더해보니 특정 시세 이후에 거래를 했을 때는 합산 손실이므로 통계상 거래를 하지 않는편이 낫다는 결론이기 때문입니다.

 

 

거래를 하지 않고 관망한 거래일중에는 크게 시세가 분출하여 수익의 기회를 놓친 경우도 분명 존재합니다.

그러나 앞서 말씀드린대로 합산해보면 누적 손실이므로 전체 거래를 대상으로 필터링 조건이 추가 된 셈이라고 이해하면 됩니다.

 

 

오늘까지는 본업에 충실하고 뉴스 검색기는 아마 내일부터 작업 재개 될 것으로 기대하고 있으며 금주중 배포가 될 수 있도록 노력 해보겠습니다.

 

 

일전에 4분의 필드테스터를 선정했었는데 필자와 원활한 커뮤니케이션을 위해 본문에 비밀글로써 연락처(이메일 또는 카카오톡 또는 휴대전화 번호 등) 정보를 남겨주시면 좋을것 같습니다.

 

 

원하지 않을경우 남기지 않아도 되며 (의무사항 아님) 연락처를 남기게 되면 반드시 "비밀글"로 작성 해주세요.

 

 

호가창에서 뵙겠습니다.

 

 

Posted by 투자의神
아이디어, 알고리즘2017. 11. 13. 15:30

 

 

무엇이 인공지능이고 퀀트이며 시스템인지 개념을 잡기 위해 정리 해봅니다.

 

 

각 용어들은 무엇이 다르고 또 무엇이 같은지 어떻게 구분해야 하는지 설명 들어갑니다.

 

 

 

퀀트 (Quant)

수량을 뜻 하는 영어 단어인 Quantity, 계측을 뜻하는 영어 단어인 Quantiative 와 분석가 Analyst (애널리스트)의 합성어이며 컴퓨터 공학부터 수학, 물리학, 통계학 등의 지식을 바탕으로 주식시장 혹은 종목의 주가를 예측하는 사람을 뜻합니다.

 

 

어떠한 모델에 대해 입력값을 주면 연산을 통해 결과값이 나오게 되는데 입력값으로는 시장종류, 시가총액, 환율, 금리, 경제성장률, ROE, POE, PBR, 당기순이익, 영업이익, 주가, 매출액, 거래량 등 종류가 다양합니다.

 

 

이러한 값들을 넣은뒤 어떤 결과가 나오는지에 따라 투자 여부를 결정하는것이지요.

 

 

인공지능 (Artificial Intelligence)

사람과 같이 지능을 가졌으나 사람의 인체처럼 실제하지 않고 가상의 공간에서 존재하는 것을 뜻하며

최근에는 알파고와 이세돌의 바둑 대결에서 유명해졌지만 퀀트도 인공지능도 금융 시장을 대상으로 연구, 분석, 적용에 있어서 수십년 이상의 역사를 가지고 있습니다.

 

 

 

 

 

 

 

알고리즘 (Algorithm) 이하 위키백과 발췌

어떠한 문제를 해결하기 위한 여러 동작들의 모임이다.

유한성을 가지며, 언젠가는 끝나야 하는 속성을 가지고 있다.

수학과 컴퓨터 과학에서 알고리즘이란 작동이 일어나게 내재하는 단계적 집합이다.

알고리즘은 연산, 데이터 진행 또는 자동화된 추론을 수행한다.

알고리즘이라는 단어는 페르시아의 수학자이던 알콰리즈미의 이름에서 따온 것이다.

 

 

퀀트든 인공지능이든 어떤 문제를 풀기 위한 각자의 방법이 있을텐데 그 방법들을 알고리즘이라고 표현합니다.

 

 

둘의 공통점은 컴퓨터 하드웨어 이외에는 실물이 존재하지 않는다는 것이며 모든 연산을 컴퓨터나 서버 등을 이용하기 때문에 빠르고 정확하다는 것입니다.

 

또한 컴퓨터를 이용하며 내부적으로 알고리즘이라는 처리 체계를 가지기 때문에 이를 시스템이라는 단어를 붙여 퀀트 시스템, 인공지능 시스템이라고 표현하기도 합니다.

 

 

업계에서 로보 트레이더라던지 로보 어드바이저라고 하는것들도 퀀트나 인공지능의 범위에 포함됩니다.

 

 

필자의 경우에는 퀀트의 방법대로 입력값의 경우의 수와 상황을 달리하여 철저하게 계량 분석한 결과 데이터를 두고 성과가 좋은 것을 사용하는 퀀트라고도 할 수 있고 또 운용중인 여러 시스템중 일부는 각각 계량 분석한 결과에 기반하지만 그것들의 집단을 가지며 때에 따라 가장 최적화의 길을 선택하도록 퀀트와 인공지능의 조합으로 운용하기도 하는데 대표적인것이 본 블로그에 공개하고 있는 V2 로직입니다.

 

 

이렇게 글을 남기지만 필자도 그렇고 독자분들도 그렇고 심지어 제도권에서 근무하는 사람도 대체적으로는 시스템 트레이딩, 알고리즘 시스템 트레이딩, 알고리즘 트레이딩, 인공지능 시스템, 인공지능 알고리즘 시스템 등으로 각기 다른 용어를 혼용해서 사용하는게 일반적일 것입니다.

 

 

아무래도 외래어이고 또 경우에 따라서는 비슷한 영역도 있기 때문인데요.

 

 

사실 용어야 어떻든 사람 대신 알아서 최적의 거래를 하고 성과를 안겨준다면 최고 아닐까요?

 

 

이 부분에 대해 심도있게 연구 관찰하고 논문을 쓴 박사(Ph.D) 급이 아니라면 어떤 용어를 사용하더라도 크게 문제 없을 것 같습니다.

 

 

 

Posted by 투자의神
아이디어, 알고리즘2017. 11. 5. 11:32

 

 

미래학자인 Ray Kurzweil은 인류와 문명 그리고 산업 전반에 걸쳐 갈수록 발전의 속도가 높아지는 Law of Accelerating Returns에 대해 얘기 했습니다.

 

 

인간은 발달된 문명을 보존함과 동시에 지속 발전할 수 있는 능력이 강하기 때문입니다.

 

 

발전할 수 있는 능력이 강한것은 더욱 진화된 상태이기도 합니다.

 

 

2천년전의 사람들이 찾아낸 수학의 법칙과 정의 그리고 풀어낸 수학 문제를 보고 있노라면 깜짝 놀랄법도 하지만 발전이라는 것은 단순히 수학문제를 잘 푼다고 가능한것이 아니라 수학, 과학, 물리학, 화학 등의 여러 분야가 골고루 발전하고 또 그것이 유기적으로 잘 결합되어야만 가능하기에 오래전 시대를 살았던 사람들이 일부분에 특화되어 더 지식이 많거나 똑똑 했던 경우가 있더라도 발전된 사회를 살아갈 수 없는 이유입니다.

 

 

물론 과거를 살던 사람들이 무언가를 계속 연구하고 발전 시켜왔기 때문에 그 후대의 사람들이 바통을 이어받아 진화시킬 수 있던점도 있습니다.

 

 

필자가 여기에서 얘기 하고자 하는 것은 시간이 가면 갈수록 발전의 속도에 가속도가 붙어 점점 더 빨라지게 된다는 것인데요.

 

 

왜 이런 이야기를 하느냐하면,

현재에 머무르고 있기만 한다면 HTS나 MTS를 통한 수동 매매는 갈수록 승산이 줄어들 수 밖에 없다고 생각하기 때문입니다.

 

 

2016년 AlphaGo(Lee Version)와 이세돌 9단에 의해 펼쳐진 세기의 바둑 대결은 인간과 인공지능이 바둑판을 앞에 두고 대결하는 모습을 봤습니다.

이때 사용된 알파고를 두고 후에 AlphaGo Lee Version 이라고 부르는데요.

 

 

이세돌 9단이 최선을 다해 싸웠지만 결국 AlphaGo 앞에 무릎을 꿇을 수 밖에 없었습니다.

 

 

최종 스코어는 4승 1패로 AlphaGo의 압승이라고 표현되기도 했고 각종 매체에서는 로봇을 이긴 마지막 인간으로 표현하기도 했으며 다가올 가까운 미래에는 인간이 로봇에 의해 지배 당하게 될 것이라는 표현까지 등장했습니다.

 

 

이후 불과 몇달도 채 경과하지 않은 시점에서 엄청난 성능으로 무장한 AlphaGo Zero Version이 등장했고 구글 딥마인드에서 자체적으로 AlphaGo Zero  VS  AlphaGo Lee 대결을 치뤘는데요.

 

 

결과는 100대 0으로 AlphaGo Zero의 압승이었습니다.

 

 

AlphaGo Lee가 만들어지기까지 수 많은 시간이 소요되었지만 이를 이긴 AlphaGo Zero는 그리 오랜 시간이 걸리지 않았습니다.

 

 

10년전에도 손매매로, 현재도 손매매로, 10년후에도 손매매로?

 

 

갈수록 점점 승산이 없는 게임이라고 생각합니다.

 

 

필자가 알고리즘 자동매매 시스템에 집중할 수 밖에 없는 이유이자 동기부여이며 생존을 위한 선택입니다.

 

 

지금 열심히 노력해서 삼각 피라미드 구조의 먹이사슬 상층부에 오르지 못하면 다시는 오를 수 있는 기회가 없을테니 말입니다.

 

 

최근 1~2년 사이 "로봇 어드바이저"라는 서비스를 각 증권사마다 개발하고 있고 중국, 미국, 영국, 일본 등 전세계 각지에서 인공지능(AI) 자동매매 시스템을 개발에 박차를 가하고 있기 때문에 머지않아 시장의 여러 흐름들이 과거와 제법 많이 달라져 있을것으로 생각됩니다.

 

 

게중에는 시장 평균 수익률 대비 성과가 아주 떨어지는 인공지능 모델도 있겠지만 포기하지 않고 끊임없이 발전에 발전을 거듭한다면 성과는 확연히 개선될 수 있을것입니다.

 

 

실제 국제 연구진이 개발한 인공지능 모델의 경우에 과거 23년간의 데이터에 시뮬레이션을 해보니 연간 수익률이 73%에 이릅니다.

 

 

실제 주식투자 대회에서 약 2~3개월동안 수백%의 수익을 내는 사람들이 있기도 하고 또 아무리 손매매라 하더라도 개인의 경우에는 가능할 수 있는 수치이지만 큰 집단이나 기관급에서는 시장 평균 수익률(약 9%)이 평가 기준일 정도로 낮은 정도의 기대 수익을 8배나 초과하는 수익을 인공지능을 통해 거둘 수 있다는것입니다.

 

 

인공지능 알고리즘 자동매매 시스템을 이해하고 개발하는 것을 더 이상 늦춰서는 이 분야에 대해서 만큼은 개인 투자자들에게 암울한 미래만을 보여줄지도 모르겠습니다.

 

 

필자는 이미 인공지능 알고리즘 자동매매를 하고 있으니 한편으로는 다행이긴 합니다만 열심히 연구하고 업그레이드 하지 않으면 안되겠지요.

 

Posted by 투자의神
프로그래밍 with C#2017. 11. 5. 09:02

 

 

제목에 시장 재구현과 시뮬레이션을 동의어인 것으로 표현했습니다.

 

 

시뮬레이션을 조금 더 자세히 알아보기 위해 시장 재구현이라는 말을 제 임의로 만든 말입니다.

 

 

우선, 시뮬레이션에 대해 알아 보겠습니다.

 

 

(구글 검색 키워드로 "simulation 뜻' 이라고 입력한 결과)

 

물리적 또는 추상적인 시스템을 모델로 표현하고, 그 모델을 사용해서 실험을 하는 일.

실제로 모형을 만들어 하는 물리적 시뮬레이션과, 수학적 모델을 컴퓨터상에서 다루는 논리적 시뮬레이션이 있음.

공학상의 설계 및 사회 현상 분석 등에 쓰이는데, 방대한 수치 계산을 고속으로 처리하는 실시간(實時間)의 시뮬레이션은 컴퓨터의 이용으로 비로소 가능해졌음.

 

 

물리적인 구현과 논리적인 구현이 있다고 되어 있는데 필자가 하고 있고 또한 독자분들도 하고 계신것이 논리적인 구현입니다.

 

 

투자를 하기에 앞서 수립한 가상의 조건값(예. A하면 B한다. 그러나 C하면 D한다.)이 얼마만큼의 효용성이 있는지

즉, 성과를 낼 수 있는 것인지 검증 해보기 위한 방법인데 물리적인 시간을 거스를 수 없으므로 당시의 상황을 가정하여 생성하는 논리적 프로세서라고 이해 하시면 조금 더 쉽습니다.

 

 

HTS, MTS 등으로 차트를 보고 복기 해보는 과정,

검색식 등을 이용하여 종목들을 찾아보거나 동일한 수익 모델을 기준으로 각각의 투자 성과가 어떠했으리라 추정 해보는 모든 과정이 논리적 시뮬레이션입니다.

 

 

어때요?

참 쉽죠?

 

 

이 시뮬레이션을 저는 시장 재구현이라고 정의 합니다.

 

 

시장을 재 구현하기 위해서 우리가 고려해야 될 요소들이 생각보다 상당히 복잡 다양한데요.

 

 

그러기 위해서는 당시의 모든 시장 데이터들을 확보하고 있어야 하며 시계열 형태로 배치되어 있어야 합니다.

 

 

제가 시장에서 수신받은 데이터를 데이터베이스 서버에 실시간으로 저장하며 데이터들을 수집하고 있는데 그것은 시장 전부의 데이터는 아니고 관심이 있는 특정 부분 위주의 데이터들이고 그 양이 1거래일간 약 2천만건에 이릅니다.

 

 

그리고 확보된 데이터가 수십억건이 넘는데요.

 

 

 

이 데이터들을 안전하게 보관하고 데이터의 이중화, 백업의 이중화가 반드시 필요하며 또 이러한 데이터들을 시장 재구현이 필요할 때마다 빠르게 불러오고 처리할 수 있는 컴퓨팅 머신(Computing Machine)이 필요하기 때문에 일반적인 경우에는 비용 등의 문제로 사실상 불가능합니다.

 

 

소수의 사람만 가능합니다.

 

 

물론 데이터들이 날아가도 크게 신경쓰지 않고 속도도 고려치 않는다면 아마도 몇십만원짜리 PC로도 가능하겠지만 소실되고 나면 다시는 절대!! 구할 수 없는 데이터들을 그렇게 보관한다는게 말이 안되는것이죠.

 

 

일반적인 접근성이 떨어지는 "전문(specialty) 데이터"이기 때문에 그에 맞는 취급을 해줘야 할 필요성이 있습니다.

 

 

시계열 데이터 기반으로 시뮬레이션 하고자 하는 대상에 맞는 데이터를 확보하고 코딩을 시작해야 합니다.

 

 

시계열 데이터를 기본으로 두고 하나씩 순서대로 살펴보며 가상의 조건값에 대한 이벤트를 감지하여 처리 하는게 필요한데 이 부분에서 수행시간을 고려하지 않을 수 없습니다.

 

 

시뮬레이션 하려는 데이터의 갯수가 10000개이고 하나의 데이터를 처리 하는데 1초가 소요된다면 단순하게 보면 10000초만에 끝날 것 같지만 각자가 살펴보려는 매매 로직의 처리 특성이 O(N 3 )이라면 어떻게 될까요?

 

 

무작위로 코딩 해버리면 O(N 3 )은 1억을 초과 해버리기에 처참한 결과에 좌절하게 될지도 모릅니다.

(10000의 제곱은 1억이고, 세제곱은 1조입니다)

 

 

O(N 2)도 상당히 많은 양이죠.

 

 

O(N log N)에 10000을 대입하면 1억에 훨씬 미치지 못합니다.

 

 

매매 로직도 중요하지만 시장 재구현을 위해 시계열 데이터를 처리하고 매매 로직을 대입하는 과정의 수행 속도가 더뎌질수록 그 만큼 기회 비용의 상실됩니다.

시간은 곧 돈이니까요.

 

 

이제 갓 입문한 분들이 이처럼 주먹구구식으로 코딩하여 시장 재구현을 시도 하지만 시간이 제법 많이 소요되더라도 보유한 데이터가 적기 때문에 주먹구구식으로 대충 처리하려고 하는데 필자와 같이 셀 수 없을 정도의 양을 보유하고 있는 시점에 이르게 되면 주먹구구식으로는 평생이 걸려도 하나의 시뮬레이션이 끝나지 않을수도 있습니다.

 

 

시계열 데이터의 수행 횟수의 예측치가 기준에 가까운 O(N 2) 알고리즘의 경우 시간 복잡도 외에도 다른 요소들을 참조해 적당한 시간내에 시뮬레이션이 완료될 수 있을지 판단해야 하는데 이 때 참고 할 수 있는 요소들은 다음과 같습니다.

 

 

1. 시간 복잡도가 시뮬레이션 프로그램의 실행 속도를 제대로 반영하지 못하는 경우

: 시간 복잡도를 계산할 때 상수나 최고차항 이외의 항들은 모두 소거가 되므로 이때 계산된 값과 실제의 수행 시간이 다를 수 있는데 애초에 예상했던 시간의 100배가 소요될 수도 있고 1/100밖에 소요되지 않을수도 있습니다.

 

 

2. 컴퓨터 메모리(RAM) 사용 패턴이 복잡 다양한 경우

 

 

3. 시뮬레이션 프로그램을 코딩한 프로그래밍 언어와 컴파일러의 차이

: 각 언어마다의 특장점이 있겠지만 대체로 C계열의 언어가 다른 언어에 비해 충분히 빠른데도 불구하고 편하다는 이유만으로 굳이 Python이나 Java같은 언어로 수행하거나 최적화 옵션이 꺼져 있으면 시뮬레이션 실행해두고 한 세월 기다려야 할지도 모릅니다.

 

 

4. 구형 PC나 서버를 사용하는 경우

: 일반적인 컴퓨팅 환경에서는 시간 복잡도가 높은 작업을 거의 하지 않으므로 가장 최신의 것과 몇년쯤 전의 것 사이에서는 시간 차이가 거의 없습니다.

예를들어, Internet Explorer 를 실행하여 여러분이 설정해둔 Main Web Page가 완전히 로드되는데까지 차이가 많이 나봐야 1~2초쯤이겠죠.

하지만 시간 복잡도가 높으면 높을수록 시뮬레이션의 수행 속도 차이는 기하급수적으로 벌어질 수 있습니다.

 

 

5. 시계열 데이터의 처리 내부 반복문이 복잡하고 상호호출 등이 발생하는 경우

: 반복문을 통해 보유하고 있는 데이터의 횟수만큼 루프(loop)를 돌아야 하는데 그 반복문 안에서 복잡한 처리와 연산을 해야 한다면 시간은 당연히 많이 소요될 수 밖에 없습니다.

 

 

6. 시계열 데이터의 재배치가 되지 않은 경우

: 데이터는 시간순으로 배치되어 있을수록 유리하며, 실수 계산은 시간이 많이 소요되므로 시간 복잡도가 높아질수록 정수로 변환한 뒤 처리하는것이 유리할 수 있습니다.

 

 

시뮬레이션에서 같은 것을 대상으로 문제 풀이 하더라도 어떤 시간 복잡도를 가지는 알고리즘이냐에 따라 누구는 1시간만에 누구는 100시간만에 누구는 10000시간이 걸려야 풀 수 있으므로 이러한 부분들을 최대한 고려하여 시뮬레이터를 구현하는 노력도 필요하다는 점을 강조 드립니다.

 

 

 

추가내용 :

필자의 경우 시뮬레이션에는 크게 2가지로 나눕니다.

 

 

첫번째,

과연 현재의 아이디어가 성과를 낼 수 있을까?를 확인하기 위한 시뮬레이션

 

 

두번째,

두번째는 첫번째에서 파생되어 범위가 넓은 시뮬레이션인데요.

과연 여러 조건값들중 어떤 값이 최고의 성과를 낼 수 있을까?를 확인하기 위한 시뮬레이션

 

 

첫번째의 경우처럼 단순한 경우의 수와 조건값의 아이디어를 시뮬레이션 해보는 경우라면 아마도 어지간한 컴퓨터에서라도 초 단위 길어야 분 단위에서 시뮬레이션이 끝날 수 있습니다.

 

 

필자의 경우에는 우선 첫번째 시뮬레이션을 한 다음 어느정도 가능성이 보이면 두번째 시뮬레이션을 하는데 위 본문에서 말씀드리는 것은 두번째의 복잡 다양한 경우의 수의 나열 중에서 어떤것이 가장 최고의 성과를 낼 수 있는지 조건값들을 다양화 한 시뮬레이션을 말씀 드린 것입니다.

 

 

개인적으로 첫번째의 경우에는 이미 많은 시뮬레이션을 해보았기 때문에 현재는 조금 더 세밀한 조건값을 찾기 위해 두번째 시뮬레이션을 하고 있다고 이해하시면 되고 아이디어가 어느 정도 정형화가 되어 있는 첫번째 간단한 시뮬레이션을 해본 다음 가능성 여부를 따지고 두번째 시뮬레이션을 진행하시면 됩니다.

 

 

아이디어를 구체화하는 과정이나 첫번째이든 두번째이든 시뮬레이션을 만드는 과정에서 어려움을 겪고 계신 독자분이 계시면 글 남겨 주세요.

 

 

시간이 허락하는 한 최대한 도와 드리겠습니다.

 

 

 

Posted by 투자의神
증권사 API2017. 10. 25. 08:11

 

 

DevCenter를 통하면 이베스트투자증권 xing API에서 얼마나 많은 정보들을 제공하고 있는지 알 수 있으며 지난 시간에는 조회TR과 RealTR 목록을 보여드렸습니다.

 

 

이번에는 조금 더 들어가보겠습니다.

 

 

 

 

DevCenter를 우선 실행하고 좌측 하단의 TR목록 선택 탭에서 RealTR을 선택하고 S3_ 라는 TR을 클릭 해보겠습니다.

 

 

S3_는 코스피에 속한 종목의 체결 정보를 수신할 수 있는 TR입니다.

 

 

 

 

위 이미지처럼 하나의 TR안에서도 상당히 많은 데이터들이 제공되고 있습니다.

 

 

종목코드를 입력하면 체결시간, 전일대비구분, 전일대비, 등락율, 현재가, 시가시간, 시가, 고가시간, 고가, 저가시간, 저가, 체결구분, 체결량, 누적거래량, 누적거래대금, 매도누적체결량, 매도누적체결건수, 매수누적체결량, 매수누적체결건수, 체결강도, 가중평균가, 매도호가, 매수호가, 장정보, 전이동시간대거래량, 단축코드 등의 정보를 수신받을 수 있습니다.

 

 

이중 체결구분 필드를 선택해보면 아래와 같이 나옵니다.

 

 

 

체결구분의 필드 속성에서 수신되는 값이 +로 나오면 매수체결, -로 나오면 매도체결임을 알 수 있게 됩니다.

 

 

 

 

status (장정보) 필드를 선택 해보았습니다.

 

 

0이 수신되면 장중 체결로 수신된 데이터임을 구분할 수 있고 4는 장후 시간외, 10은 장전시간외로 구분할 수 있습니다.

 

 

필드 속성값을 별도로 가지지 않는 필드들도 있는데요.

 

 

S3_ 에서는 chetime (체결시간), price (현재가) 등은 별도의 필드 속성값을 가지지 않고 수신된 값 그 자체만 보아도 됩니다.

 

 

필드 속성값을 가지는 이유는 처리 용량과 시간등을 위해 일종의 정형화된 압축이라고 보면 됩니다.

 

 

이번에는 다른 TR을 선택 해볼까요?

SC0 주식주문접수 RealTR을 선택 해보겠습니다.

SC0은 사용자 본인이 주문한 주문에 대해서만 응답이 내려오는 RealTR입니다.

 

 

 

 

SC0은 앞서 소개한 S3_ 보다 훨씬 더 많은 데이터를 수신할 수 있네요.

 

 

위 TR은 알고리즘 자동매매 프로그램을 통해 주문한 내용이 증권사 서버에 정상적으로 접수 되었는지 확인하기 위한 Real TR입니다.

 

 

만약 삼성전자(005930)를 100만원에 10주 매수하겠다고 주문 넣었는데 엉뚱한 값이 수신된다면 99.99%는 사용자가 개발한 프로그램의 오류로 잘못된 주문이 접수 된 것이겠고 아주 미약한 확률은 증권사 서버의 문제일수도 있습니다.

 

 

다만 증권사의 주문처리 서버는 아주 오랜시간동안 검증이 되어왔고 전문 인력이 관리하고 있기 때문에 시스템 장애 등의 경우가 아니라면 이런 일은 거의 없습니다.

 

 

 

 

SC0 에서는 gmhogagb (공매도호가구분) 등의 필드가 속성값을 가지며 나머지 대부분의 TR은 필드의 값 그 자체로 보고 이해하면 됩니다.

 

 

 

 

 

이번에는 OK_ (코스닥거래원) TR입니다.

 

 

독자분들이 HTS를 통해 조회해볼 수 있는 "종목별거래원" 등의 데이터가 API에서는 이런식으로 수신됩니다.

 

 

어떤 증권사에서 어떤 종목을 얼만큼 사고 팔았는지 그 증권사가 국내 증권사인지 외국계증권사인지 실시간으로 알 수 있기 때문에 투자 주체별 매매 규모가 매매 로직에 있어서 중요한 분들께는 아주 유용한 데이터가 되겠죠.

 

 

 

 

위 이미지를 보면 무엇이 먼저 떠오르시나요?

 

 

전 편인 " DevCenter에서 제공하는 데이터의 종류 "에서 언급한 북한 미사일 관련 예시가 먼저 떠오른다면 정독하고 계시다고 보여집니다.

 

 

NWS 는 RealTR로써 시장에 뉴스가 발생하면 실시간으로 데이터를 내려줍니다.

 

 

 

 

NWS 에서 id 필드를 보면 각 신문사 등이 나오고 중간에 15:공시가 나오죠?

 

 

실시간 뉴스와 실시간 공시가 바로 수신됨을 알 수 있으며 뉴스만 보겠다는 분도 계실테고 나는 공시만 빨리 보면된다는 분도 계시고 둘다 볼 수도 있겠죠?

 

 

선택적으로 각종 뉴스와 공시를 수신할 수 있습니다.

 

 

단 NWS에서 수신한 데이터는 뉴스 또는 공시의 제목만 보여줍니다.

 

 

제목만 봐도 되면 여기까지만 봐도 되고 자세한 내용을 모두 보고 싶으면 realkey 필드의 값을 이용할 수 있습니다.

 

 

조금 더 나아가서는 code 필드에서 수신한 종목코드가 내가 모니터링하는 종목에 포함될 때만 본문을 볼 수도 있고요.

 

 

 

 

실시간으로 수신한 뉴스의 키값 (NWS TR의 realkey 필드)을 t3102에 넣으면 뉴스 본문 전문을 조회할 수 있습니다.

 

 

제목과 본문을 분리하는 이유는 한꺼번에 모든 데이터를 송수신하면 이베스트 투자증권 서버도 부담을 받고 독자분들의 서버나 PC도 부담이 될 수 있기 때문에 필요에 따라 선택적으로 송수신이 용이하게 하는 목적으로 분리 서비스 하고 있습니다.

 

 

NWS로 수신받은 종목코드와 realkey 값으로 t3102을 수신하는 테스트 프로그램을 만들어서 작동시켜 보니 0.018초만에 뉴스 본문까지 모두 수신이 되었습니다.

 

 

이 과정을 조금 더 풀어보면,

 

 

1. 제 서버의 테스트 프로그램에서 NWS 데이터 패킷 수신

2. t3102에 원하는 realkey 값을 넣고 데이터 조회 요청

3. 이베스트 서버에서 데이터 조회 요청을 접수

4. 이베스트 서버에서 제 서버로 데이터 송신

5. 제 서버에서 데이터 수신

 

 

이 정도로 축약해볼 수 있습니다.

 

 

이 모든 과정이 0.018초 만에 이뤄진다니 놀랍지 않으십니까?

 

 

뉴스에 따라 반응하는 알고리즘 자동매매 프로그램의 경우에도 NWS 데이터 패킷을 수신받고 실제 주문을 넣기까지 약 0.1초가 채 걸리지 않았습니다.

 

 

21세기 정보화 시대라는 말은 많이 들어봤어도 이 정도일줄은 상상도 못한분이 다수 일텐데요.

 

 

필자의 알고리즘 자동매매 프로그램과 독자분이 HTS 호가창에서 만나면 독자분들은 백전백패 할 수 밖에 없습니다.

 

 

손매매는 빨리 버릴수록 좋습니다.

 

 

그럼 호가창에서 뵙겠습니다.^^

 

 

 

Posted by 투자의神
개발의뢰2017. 10. 23. 15:30

 

 

안녕하세요.

 

 

이곳은 개발의뢰 카테고리입니다.

 

 

제가 전문 개발자도 아니거니와 취미 생활인 목공과 낚시에 푹 빠져 지낼 예정이므로 시간적 여유가 많지는 않습니다만 여유 시간들을 보다 알차게 보내고 또 뜻깊은 일을 하고 싶은 마음에 직접적으로 자동매매 시뮬레이터 또는 실거래 자동매매 프로그램을 개발하기 어려운 분들을 위해 도움을 드리고자 합니다.

 

 

아주 간단한것은 금방 진행이 될 수도 있고 무상(FREE)으로 개발 해드리겠습니다.

 

 

필요한 시뮬레이터나 자동매매 프로그램이 있다면 우선 기본적인 상담을 위해 연락처(휴대전화 또는 이메일)를 비밀댓글로 남겨 주시면 연락드리겠습니다.

 

 

감사합니다.

 

 

덧1)

시세데이터, 개발의뢰 카테고리 관련 안내
http://systemtraders.tistory.com/notice/989

 

 

Posted by 투자의神