시스템 01호2017. 12. 4. 17:00

 

 

 

 

 

Posted by 투자의神
증권사 API2017. 12. 4. 01:00

 

 

지난 5편에서 조회TR을 이용하는 것에 대해 알아보았고 금번 6편에서는 실시간TR을 다루는것에 대해 알아보겠습니다.

 

 

 

 

4편에서는 위 이미지중 1~4번의 과정까지 알아봤고 5편에서는 5~10번의 과정을 조회TR을 이용하여 알아봤습니다.

 

6편인 본편에서는 위 이미지중 5~10번의 과정을 실시간TR을 이용하여 알아보겠습니다.

 

 

 

조회TR을 이용하는 것은 증권사 서버에 저장되어 있는 데이터를 조회 하는 것이며 이러한 데이터들은 대체로 용량이 크지 않고 데이터의 수량이 많지 않기 때문에 일정기간 동안의 데이터는 증권사 서버에 저장되어 있습니다.

 

 

실시간TR을 이용하여 접근하는 데이터들은 대체로 용량이 크고 수량이 많기 때문에 증권사 서버에 저장되지 않는 경우가 대부분입니다.

 

 

두 TR의 특성중 또 다른점은 조회TR은 원하는 데이터를 형식에 맞게 조회 요청하면 원하는 데이터가 1회 전송됨으로써 모든 처리가 끝나지만 실시간TR은 데이터 전송 요청을 하면 요청 시점 이후에 주가가 바뀌었거나 거래량이 바뀌는등 데이터가 변경되면 변경된 데이터를 증권사 서버가 알아서 전송해주게 되며 사용자가 별도로 "데이터 전송 요청의 해제"를 하기 전까지는 증권사 서버가 계속 데이터를 보내줍니다.

 

 

조회TR은 과거의 특정 데이터를 수신받는데 유리한 구조이고 실시간TR은 언제 어떻게 바뀔지 모르는 데이터를 사용자가 매번 증권사 서버에게 "데이터 바뀌었니? 바뀌었으면 보내줘!"라고 요청하지 않아도 증권사 서버가 알아서 처리 해주므로 실시간 데이터 처리에 유리한 구조일 수 밖에 없습니다.

 

 

다만 실시간TR은 "요청 시점 이후"에 데이터가 변경되면 전송해 주기 때문에 요청 시점의 데이터는 전송해주지 않고 변경된 데이터가 없으면 전송해주는 데이터도 없습니다.

 

 

한 예로 필자가 개발해서 배포중인 뉴스 검색기 우측 현재가 조회 화면을 구성함에 있어 조회TR을 이용하면 TR조회제한(증권사 서버는 서버 부하를 낮추기 위해 조회TR의 단위 시간당 이용 가능 빈도를 회원 등급별로 차등 적용하고 있음)이 적용되기 때문에 실시간TR을 이용하여 실시간 시세를 받아서 처리하고 뉴스 본문은 실시간TR이 없고 조회TR을 이용해서 정보를 취할 수 있는 구조이기 때문에 각 사용자별 등급이 다름을 고려하여 1초당 1회에 한해 본문을 조회 하도록 설정하고 있습니다.

(사용자 등급이 높다면 VIP서버에 접속하여 무제한 또는 무제한에 가까운 TR조회제한을 적용받을 수 있음)

 

 

본격적으로 오늘 다룰 내용으로 넘어가겠습니다.

 

 

로그인은 XASession 객체를, 조회TR은 XAQuery 객체를 사용했었는데 실시간TR은 XAReal 객체를 사용하며 사용 방법은 XAQuery 객체의 사용 방법과 유사하기에 어렵지 않습니다.

 

 

S3_ 라는 실시간TR을 이용하여 예제를 보여드릴텐데 이 실시간TR을 이용하면 코스피 체결 데이터를 수신 받을 수 있습니다.

 

 

S3_의 구조를 한번 살펴보겠습니다.

 

 

 

▲ 메모장 등의 에디터로 S3_.res 파일을 열어보면 위와 같이 세부적인 내용을 보여줍니다.

 

 

 

▲ DevCenter를 통해 S3_를 보면 위와 같이 좀 더 보기 쉽게 표현되어 있습니다.

 

 

사용자인 독자분들이 하셔야 할 것은 XAReal 객체를 만들고 S3_.res 가 어디에 있는지 찾아주고 InBlock.shcode에 값을 입력하여 증권사 서버로 전달한 후 서버에서 데이터를 보내주면 받는게 전부입니다.

 

 

참 쉽지요?

 

 

코드부로 넘어 가보겠습니다.

 

 

 

  Dim WithEvents XAReal_S3_As XAReal Set XAReal_S3_

  = CreateObject("XA_DataSet.XAReal")

 

 

▲ S3_는 코스피 체결 데이터를 수신 받을 수 있는 실시간TR의 명칭입니다.

 

▲ XAReal 선언 및 생성하는 코드입니다.

 

▲ 두 줄이 아니라 한줄로 구성되어 있으며 블로그 화면 너비가 좁은 관계로 '=' 부분에서 개행처리 하였습니다.

 

 

 

 

  XAReal_S3_.ResFileName = "S3_.res")

 

 

▲ S3_.res 등록하는 코드입니다.

 

 

 

 

  XAReal_S3_.SetFieldData("InBlock","shcode", "005930") 

 

 

▲ S3_ 형식에 맞게 입력하는 코드이며 005930은 삼성전자의 종목코드로써 예를 위해 임의로 입력한 값입니다.

 

 

 

 

  XAReal_S3_.AdviseRealData()

 

 

▲ 조회TR에서는 Request 함수를 이용하여 서버에 전달하였는데 실시간TR은 AdviseRealData 함수를 이용합니다.

 

▲ 만약 여러 종목의 데이터를 동시에 받고 싶다면 하나의 종목의 값을 입력하고 서버에 전송한 뒤 동일 과정을 반복하면 됩니다.

  

 

 

 

  Sub XAReal_S3_ReceiveRealData(ByVal szTrCode)

      XAReal_S3_.GetFieldData("OutBlock","price")

  End Sub

 

 

▲ 서버로부터 새로운 데이터를 수신 받는 부분입니다.조회TR에서는 Request 함수를 이용하여 서버에 전달하였는데 실시간TR은 AdviseRealData 함수를 이용합니다.

 

▲ 만약 여러 종목의 데이터를 동시에 받고 싶다면 하나의 종목의 값을 입력하고 서버에 전송한 뒤 동일 과정을 반복하면 됩니다.

 

 

 

 

  XAReal_S3_.UnadviseRealData()

 

 

▲ 더 이상 실시간 데이터를 받고 싶지 않을때 서버에 등록한 "실시간 데이터 전송 요청"을 해제하기 위한 코드입니다.

 

 

 

 

  XAReal_S3_.UnadviseRealDataWithKey("005930")

 

 

▲ 더 이상 실시간 데이터를 받고 싶지 않은 종목을 특정할 경우에는 UnadviseRealDataWithKey 함수를 이용합니다.

 

 

 

 

  Dim WithEvents XAReal_S3_As XAReal Set XAReal_S3_
  = CreateObject("XA_DataSet.XAReal")

 

  XAReal_S3_.ResFileName = "S3_.res")

 

  XAReal_S3_.SetFieldData("InBlock","shcode", "005930")

 

  XAReal_S3_.AdviseRealData()

 

  Sub XAReal_S3_ReceiveRealData(ByVal szTrCode)

      XAReal_S3_.GetFieldData("OutBlock","price")

  End Sub

 

 

▲ 전체 코드를 정리 해보면 위와 같습니다.

 

 

이로써 독자분들은 이베스트 투자증권 서버에 로그인하고 과거 데이터를 조회하거나 새로 발생할 데이터를 조회하는 방법까지 VBA 예제 코드와 함께 모두 알아 보았습니다.

 

 

얼마나 빠르고 정확한 처리를 할 것인가는 사용자별로 필요로 하는 정도에 따라 다를 것이고 그에 맞게 VBA를 사용하거나 C계열 혹은 JAVA, Python 등의 여러 프로그래밍 언어를 선택하면 됩니다.

 

 

겨우 몇편으로 알아본게 전부이고 코드가 몇줄 되지 않지만 VBA만 이용하더라도 증권사 서버에 로그인하여 계좌 정보를 조회하고 현재가 정보 등을 수신하여 주문을 넣고 실시간 데이터를 기반으로 차트를 그리거나 연산을 하는 등 자동매매 프로그램을 구현 해볼 수 있습니다.

 

 

처음부터 고급의 프로그래밍 언어를 선택하여 이해하기도 어렵고 진도는 안나가는 상황을 맞이하지 말고 우선은 개념을 조금 더 잡고 다양한 시도들을 손쉽고 빠르게 해볼 수 있도록 VBA로 시작하고 한계가 느껴지고 더욱 빠른 처리가 필요할 때에만 상위의 프로그래밍 언어로 넘어가는편이 좋습니다.

(필자도 동일한 과정을 거쳤습니다.)

 

 

이해가 안되는 부분은 Comment 남겨 주세요.

 

 

 

Posted by 투자의神
뉴스 검색기2017. 12. 3. 12:00

 

 

필자가 뉴스 검색기 프로그램을 개발하고 테스트하는 모든 과정은 Microsoft Windows 7 환경에서 이루어졌기 때문에 Windows 7 에서는 정상 작동이 가능합니다.

 

 

만약 이외 버전에서 사용하고자 하는분은 실행시 화면이 어떻게 될지 궁금할텐데 조금전 한 독자분의 컴퓨터에 관련 설정을 하다보니 Windows 10 이었고 이때 실행한 뉴스 검색기 화면을 캡쳐했으니 혹시 Windows 10 환경에서 사용하고자 하는분은 참고 하기 바랍니다.

 

 

 

 

▲ Windows 7 에서 실행한 뉴스 검색기 화면입니다.

 

 

 

 

▲ Windows 10 에서 실행한 뉴스 검색기 화면입니다.

 

 

 

두 운영체제(OS)간의 화면 비율 등이 다르기 때문에 Windows 10 에서는 우측과 하단 일부가 잘려 보이지만 사용하지 못할 수준은 아닌것 같습니다.

 

 

필자가 개발하고 테스트 하는 환경이 Windows 10이 아니므로 향후에도 개선되기 어려운 부분입니다.

 

만약 개발 환경이 Windows 10으로 변경된다면 기준이 Windows 10이 되겠지요.

 

 

약간의 추가 업데이트를 하면 공개 배포 할 예정이니 뉴스 검색기가 필요한 분은 Comment 남겨주세요.

 

오류점이나 개선점을 찾아내기 위해 충분한 테스트 인원이 채워지기 전까지는 필드 테스터를 모집할 예정이고 현재 5~6명이 사용중입니다.

 

 

이상입니다.

 

 

 

 

Posted by 투자의神
시뮬레이션2017. 12. 3. 04:30

 

 

독자 여러분의 머릿속에 어떠한 아이디어가 떠올랐습니다.

 

 

그것이 갑자기 번뜩이는 아이디어이든 혹은 오랜 시간동안 정리되고 다듬어진 것이든 말입니다.

 

 

아이디어 대로 거래를 하면 수익이 날까? 궁금하시죠?

 

 

아이디어 검증을 위한 시뮬레이션에 필요한 것들을 정리 해보는 시간을 가져보겠습니다.

 

 

필요한 것들은 아래와 같습니다.

 

▶ 아이디어의 요약 정리 (어떤 상황에서 거래를 할 것이며 거래 판단에 참고 할 추가 대상이 있는지 등의 정리)

 

▶ 아이디어 검증을 위한 과거 시세 데이터 (예, 특정 종목 또는 전체 종목의 체결이나 호가 데이터, 거래원 데이터 등)

    시세데이터는 파일 형태로 보유해도 되고 데이터베이스의 형태로 보유해도 되지만 개인적으로 데이터베이스 추천

 

▶ 시뮬레이션 프로그램

 

▶ 컴퓨터 (데이터베이스에 저장된 데이터를 포함하며 시뮬레이션 프로그램이 실질적으로 구동되는 컴퓨터)

 

 

생각보다 간단합니다.

 

 

아주 간단합니다.

 

 

그러나 이 모든것은 생각외로 상당한 비용이 소요되는데요.

 

 

대체로 아이디어는 번뜩이는 아이디어보다는 오랜 시간 경험이 축적되며 올바른 방향의 거래를 하려는 습관의 보정이 된 상태에서 정리가 잘 되는 편이므로 시간 = 비용이라는 관점에서 상당한 비용이 소요되며 이론적 학습만이 아닌 실전적 거래를 하면서 습관의 보정이 이뤄지는 단계까지 감안한다면 매우 큰 비용이 소요 되는 셈입니다.

 

 

과거 시세 데이터는 보통 KOSKOM을 통해 구매하려면 1종목 1일분 체결 데이터가 약 2~3천원쯤 합니다.

 

 

전종목(약 2천여 종목) 1일분 체결 데이터라면 대략 400~600만원쯤 되겠네요.

 

 

물론 전종목의 범위내에서 등락이 별로 없는것도 있고 거래가 거의 없는것도 포함되어 있습니다.

 

 

1년치(약 250거래일) 데이터라면 대략 10억~15억원쯤 되겠네요.

 

 

만약 호가 데이터도 참조해야 한다면 대략 곱절만큼의 추가 비용이 발생합니다.

 

 

시세 데이터를 받아둔게 없다면 데이터 구매를 위해 상당한 비용이 발생되겠지요?

(개인간의 거래에서는 몇백~몇천만원선에서 거래되는 편입니다.)

 

 

체결이나 호가 데이터와 같은 실시간 데이터는 해당 데이터가 생성되고 전달될 수 있는 시점이 아니면 증권사를 통해 전송 받을 방법이 전혀 없기에 가격이 비싼편이고 월, 주, 일, 분 데이터는 어느정도의 기간동안 데이터는 증권사 서버에서 자체 보관하고 있기 때문에 가격이 상대적으로 저렴한편입니다.

 

 

시세 데이터를 직접 증권사로부터 받아서 처리 하려면 시세 데이터 받는 프로그램을 직접 개발하거나 외주 개발을 통해 만들고 1년을 기다리면 1년치 데이터가 만들어지게 되는데 이 경우 앞서 언급한대로 수십억원의 비용만큼은 아니지만 개발 비용과 더불어 프로그램이 오류없이 안정적으로 작동하여 시세 데이터를 잘 저장할 수 있는 단계까지 안정화 기간 동안의 시간 비용 그리고 1년을 기다려야 되는 시간 비용이 추가 됩니다.

 

 

시뮬레이션 프로그램은 자체 개발하더라도 프로그램 실행상의 오류가 없는지와 시뮬레이션 처리 과정에서 로직상의 오류가 없는지 검증하는 시간이 필요하고 외주 개발시에는 그 만큼의 비용이 추가 발생하는데 통상 몇백만원의 비용이 소요 됩니다.

(필자는 복잡한 구조가 아닐 경우에 한정하여 시뮬레이션 프로그램을 무료로 제작 해드리고 있습니다.)

 

 

시세 데이터를 데이터베이스에 저장 하고 시뮬레이션 프로그램이 구동될 컴퓨터는 독자분들이 흔히 사용하는 일반적인 PC부터 속도가 더 빠른 PC나 WorkStation, Server 등 어떤것을 선택해도 무방합니다.

 

 

단, 느린 컴퓨터를 사용하게 되면 시뮬레이션 수행 속도가 느리므로 최종 결과를 보기 위해서는 인내의 시간(=비용)이 필요하고 빠른 처리를 위해서는 장비 도입(구매) 비용이 필요한데 적게는 200~400만원에서 많게는 1천만원을 넘는 비용이 필요로 합니다.

 

 

 

컴퓨터를 이용해 가상의 주식시장을 개설하고 과거 데이터를 기반으로 시뮬레이션 해보는것이 얼마나 효율적인지에 대해 의구심을 가지는분도 계실텐데요.

 

 

한 사람을 소개 해봅니다.

이름 : 제임스 사이먼스 (짐 사이먼스)

직업 : 前 수학자, 現 르네상스 테크놀로지 회장

연봉 : 2~3조 (억이 아니라 조)

기타 : 르네상스 테크놀로지는 설립된지 약 35년쯤 되었는데 직원수는 약 200명이며 경영관련 직원을 제외하고는 대부분 수학, 물리학, 통계학 박사급이며 운용 자산은 수십조 이상인데 과거 데이터를 기반으로 수리적 모델을 설계하여 수익 모델을 창출하는 퀀트(=필자도 같은 방식을 채용)를 통해 컴퓨터 프로그램에 의해서만 자산을 운용

 

 

이 정도면 과거 데이터 기반의 시뮬레이션이 왜 중요한지 모두 설명이 충분할 것이라 생각합니다.

 

 

물론 어떤 아이디어를 기준으로 시뮬레이션 했느냐도 중요하지만 우선은 컴퓨터를 이요한 시뮬레이션만 두고 보면 당연히 필요할 수 밖에 없습니다.

 

 

우리가 다루고 처리 해야 할 데이터와 경우의 수는 너무나도 많기 때문에 일일이 사람의 손을 빌려 처리 할 수 없습니다.

 

 

먹지도 않고 자지도 않고 평생 수동으로(손으로) 계산해봐야 컴퓨터가 몇시간 처리 할 양에도 못 미칠것입니다.

 

 

필자처럼 전문적으로 하기 위해서는 이 분야에 대한 이해도도 충분히 높아야 하겠지만 전반적인 처리(아이디어 구상 > 시뮬레이션 > 채택 여부 결정)가 빨라야 하기 때문에 장기적으로 본다면 어느정도 비용을 들여 관련 시스템을 구축하는것을 권합니다.

 

 

물론 아이디어가 아주 간단하고 분, 일, 주, 월의 체결 데이터만을 참고하는 아이디어라면 위에 언급한 여러 비용들을 거의 들이지 않고도 시뮬레이션을 할 수 있습니다.

 

 

필자가 시뮬레이터를 무료로 제작 해드리는 이유는 지금껏 20년 가까이 시장에 몸담고 있는 필자가 이제는 무언가 돌려주고 물려줄 때가 되었다고 생각하기에 시간이 허락하는 범위 내에서 소소한 봉사를 하고자 함이며 이는 뉴스 검색기 제작 및 배포와 맥을 같이 합니다.

 

 

시뮬레이터 제작 도움이 필요한 분은 비용을 전혀 받지 않으니 상담이나 시뮬레이터 관련해서 언제든 Comment 남겨주세요. (내용이 외부에 공개되는것이 싫은분은 비밀댓글로 남겨주셔도 됩니다.)

 

 

 

Posted by 투자의神
시세데이터2017. 10. 19. 14:36

 

 

안녕하세요.

 

 

이곳은 시세데이터 카테고리입니다.

 

 

본래 필자가 가진 데이터를 주기적으로 백업하는 공간으로 삼기 위해 만든 카테고리인데 업로드 가능한 용량에 상당한

제한이 있는것을 뒤늦게 발견했습니다. (제한 용량 10MB)

 

 

제가 가진 데이터는 수십TB(테라바이트) 규모를 넘어서기 때문에 분할해서 올리더라도 무리가 있을 것 같습니다.

 

 

카테고리를 제거할까 하다가 문득 든 생각이 아이디어도 있고 로직도 있는데 테스트 해 볼 적당한 데이터를 구하기

어려운 경우가 많기에 공유의 목적으로 존치하기로 결정했습니다.

 

 

보유하고 있는 데이터는 다음과 같습니다.

 

@. 코스피 종목 마스터 데이터

 

@. 코스피 체결 틱 데이터

@. 코스피 호가 틱 데이터

@. 코스피 체결 1분 데이터

@. 코스피 체결 3분 데이터

@. 코스피 체결 5분 데이터

@. 코스피 체결 10분 데이터

@. 코스피 체결 30분 데이터

@. 코스피 체결 60분 데이터

@. 코스피 체결 일 데이터

 

@. 코스닥 종목 마스터 데이터

 

@. 코스닥 체결 틱 데이터

@. 코스닥 호가 틱 데이터

@. 코스닥 체결 1분 데이터

@. 코스닥 체결 3분 데이터

@. 코스닥 체결 5분 데이터

@. 코스닥 체결 10분 데이터

@. 코스닥 체결 30분 데이터

@. 코스닥 체결 60분 데이터

@. 코스닥 체결 일 데이터

 

@. 실시간 지수 틱 데이터

 

@. 코스피200 지수 일 데이터

@. 코스피200 지수 틱 데이터

 

@. 실시간 프로그램 매매 틱 데이터

 

@. 실시간 거래원 틱 데이터

 

@. 실시간 투자자별 매매 동향 틱 데이터

 

@. 거래일별 개장 폐장시각 데이터

 

@. 거래일별 주식 상한가 데이터

 

@. 거래일별 VI(동적/정적완화장치발동) 틱 데이터

 

@. 월물별 주야간 선물 종목 마스터 데이터

 

@. 주간 선물 체결 틱 데이터

@. 주간 선물 체결 분 데이터

@. 주간 선물 호가 틱 데이터

 

@. 주간 옵션 체결 틱 데이터

@. 주간 옵션 호가 틱 데이터

 

@. 월물별 주야간 옵션 종목 마스터 데이터

 

@. 야간 선물 체결 틱 데이터

@. 야간 선물 체결 분 데이터

@. 야간 선물 호가 틱 데이터

 

@. 야간 옵션 체결 틱 데이터

@. 야간 옵션 호가 틱 데이터

 

 

목록에 누락된 내역이 있거나 신규로 추가되는 데이터가 있을시 추가 하겠습니다.

 

 

필요한 시세데이터가 있다면 필요한 데이터의 명칭과 기간, 연락처(휴대전화 또는 이메일)를 비밀댓글로 남겨 주시면

연락드리겠습니다.

 

 

감사합니다.

 

 

덧1)

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

 

 

Posted by 투자의神