시스템 성과 합산2017. 12. 4. 18:30

 

 

 

 

2018년도 러시아 월드컵이 다가오면서 조추첨 결과나 양팀간의 승패 결과를 맞힌 '문어'가 생각나는 결과입니다.

 

 

약손실을 예상했을때도 그랬고, 약수익후 큰 손실을 예상했을때도 마찬가지로 적중했습니다.

 

 

손익이야 늘 왔다 갔다 하는것이니 별로 개의치는 않습니다.

 

 

지난주 토요일까지 바쁜 일상을 보내다가 바쁜일이 어느정도 정리되어 가고 있고 구동중인 시뮬레이터는 아직 구동중이므로 결과 분석까지는 열흘 가량의 시간이 남아 있어서 오늘은 사무실에 출근하지 않고 조용히 새로운 아이디어 구상만 하고 블로그에 포스팅 될 내용들을 작성하여 "예약 등록" 해두기도 했고 그외 시간에는 쉬었습니다.

 

 

개인적으로 제일 걱정하는 것은 손익이 아니라 더 이상 쥐어짜도 아이디어가 나오지 않는 상황이 닥치거나 어떤 아이디어를 접목하더라도 개선됨이 없는 상황인데 수 많은 인공지능 시스템들이 본격적으로 시장에 참여하게 될 것으로 예상되는 2020년 이후가 걱정입니다.

 

 

더 많은 시스템들을 연구 개발하고 또 그로 인해 많은 수익을 창출하여 미래를 준비해야겠습니다.

 

 

독자분들도 미래 혹은 노후 준비를 잘 하고 계시리라 믿습니다.

 

 

언제나 화이팅입니다.

 

 

읽던 책을 마저 읽기 위해 그만 적겠습니다.

 

 

 

Posted by 투자의神
시스템 03호2017. 12. 4. 18:00

 

 

 

 

 

Posted by 투자의神
시스템 02호2017. 12. 4. 17:30

 

 

 

 

 

Posted by 투자의神
시스템 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 투자의神
증권사 API2017. 12. 3. 00:30

 

 

아래는 xingAPI를 이용하는 전체 처리 과정입니다.

 

 

 

 

 

지난 4편에서 이베스트투자증권(이하 이베스트) HTS 서버에 로그인(위 이미지의 4번에 해당하는 )하는 부분까지 진행을 했었습니다.

 

 

바쁜 일정속에 후속편 진행이 더뎌지고 있다고 느껴질 즈음 잠시 시간을 내어 5편을 작성합니다.

 

 

무궁무진한 정보가 잔뜩 쌓여 있을것만 같은 이베스트 서버에 로그인 했으니 필요한 정보에 대해서 조회를 요청 해보겠습니다.

 

 

우선 독자분들이 조회 해보고 싶은 데이터가 이베스트 서버에 저장되어 있는지 알아야 합니다.

 

 

실시간 정보(호가 데이터, 체결 (틱) 데이터)는 그 갯수와 용량이 엄청나게 많기 때문에 증권사 서버에서도 모두 저장하지 못하고 흘러가는 데이터라 과거 데이터는 구할 수 없습니다.

 

 

여담이지만 이러한 속성 때문에 필자는 과거의 체결 데이터, 호가 데이터를 모두 수집하여 서버 컴퓨터의 데이터베이스에 차곡차곡 모아두고 있고 이는 언제든 새로운 아이디어가 떠 올랐을때 시뮬레이터를 구성하여 결과값을 볼 수 있습니다.

 

 

다시 본론으로 돌아와 이러한 실시간 데이터를 제외하고는 어지간한 데이터들이 많이 저장되어 있습니다.

 

 

독자분들이 가장 많이 보는 데이터가 무엇일까요?

 

 

필자가 밤낮없이 주식 공부를 하던 시절에는 주식 일봉 차트와 주식 분봉 차트를 가장 많이 봤던것 같은데요.

 

 

주식 일 데이터와 분 데이터를 조회 할 수 있는 TR이 DevCenter 목록에 포함되어 있는지 알아야 합니다.

 

 

결과적으로 해당 TR은 이베스트에서 기본 제공하고 있긴하지만 독자분들이 조회 해보고자 하는 데이터를 증권사에서 TR의 형태로 제공해주지 않는다면 정보를 조회 할 수 없습니다.

 

 

TR이란 Transaction (트랜잭션 혹은 트랜스액션)의 줄임말이고 "서버로부터 데이터를 주고 받는 행위"라고 이베스트 가이드에서 정의하고 있습니다.

 

 

다시 말해 데이터를 주고 받는데 한국어로 주고 받을것이냐 영어로 주고 받을 것이냐 중국어로 주고 받을것이냐 최대 몇글자까지 주고 받을것이냐 어떤 정보들을 주고 받을것이냐 이런것들에 대해 정의 되어 있는 것을 기반으로 데이터를 주고 받는 행위라고 보면 됩니다.

 

 

주식을 기준으로 보면 종목코드를 입력하여 현재가를 받아오거나 계좌번호와 비밀번호를 입력하여 손익 내역을 포함한 잔고를 받아오는 것도 TR을 통해서 가능합니다.

 

 

컴퓨터는 전혀 감각이라는 것이 없기 때문에 만약 독자분들이 종목코드 값만 넘겨주면 이베스트 서버는 아마도 이렇게 생각할 겁니다.

 

"이걸 왜 준거지?"

"이걸로 뭘 해달라는거야?"
"주문을 하겠다는거야?"
"현재가 조회를 하겠다는거야?"

"뉴스를 조회 하겠다는거야?"

"차트 데이터를 보고 싶다는거야?"

물론 실제로 이베스트 서버가 이렇게 생각하는것은 아니지만 무엇을 위해 넘겨진 값인지 알수 없다는 것이죠.

 

 

때문에 각 각의 통신 규약을 만들어두었으니 데이터 조회시 필요로 하는 TR을 이용하여 "규격에 맞게" 통신을 해야 합니다.

 

 

 

 

 

위 그림처럼 이베스트 서버에 "이거줘" 라고 말을 하면 전혀 알아 들을 수 없습니다.

 

 

삼성전자라는 종목의 2017년 01월 01일부터 2017년 12월 31일까지 데이터를 줘. 그리고 데이터의 시각 기준은 '일(daily)'야. 라고 알려줘야 이해를 하고 해당 데이터를 독자분들의 컴퓨터로 보내줍니다.

 

 

주고 받을 데이터의 종류에 따라 그 형식이 다양하며 이러한 형식을 통칭하여 TR Layout (Transaction Layout) 이라고 하며 여러 형식들을 각 각 정의 해둔 파일이 *.RES 파일이며 조금 더 구체적으로 말하면 RES는 TR Layout을 COM 버전에서 인식할 수 있는 형식으로 변경한 구조를 뜻하고 COM 버전은 RES를 입력해줘야 동작이 가능합니다.

 

 

형식이 어떻게 정의 되어 있는지 확인하려면 *.RES 파일을 메모장 등으로 열어 봐도 되고 DevCenter 를 통해 확인 할 수도 있습니다.

 

 

 

▲ 메모장 등의 프로그램을 이용해 주식종목조회를 할 수 있는 t8430.res 파일을 열어봤습니다.

 

▲ t8430InBlock 은 gubun 필드에 0,1,2 중에서 선택적으로 입력할 수 있게 되어 있으며 독자분들이 채워 넣어야 할 부분입니다.

 

▲ t8430OutBlock 은 종목명, 단축코드, 확장코드, ETF구분, 상한가, 하한가, 전일가, 주문수량단위, 기준가, 구분 등 다양한 값을 가지는데 이것은 이베스트 서버가 이러한 형식을 가지는 데이터를 내려주겠다는 뜻입니다.

 

▲ 모든 조회 TR은 독자분들이 입력해야 할 InBlock과 이베스트에서 데이터를 내려주는 형식을 뜻하는 OutBlock 으로 구성되어 있습니다.

 

 

 

 

 

▲ DevCenter를 통해 t8430을 확인한 모습입니다.

 

▲ 직접적으로 t8430.res를 열어본 것보다 보기에 쉽게 되어 있는데 과거에는 API를 제공하는 증권사가 많지도 않았고 그나마 제공하는 곳도 거의 대부분이 아주 간단한 메뉴얼과 *.res 파일만 제공했었는데 요즘은 보조 도구(DevCenter 등)를 잘 제공해주기 때문에 개발 환경이 아주 좋아졌습니다.

 

 

위에서 예로 든 주식종목조회 (t8430)을 이용해서 데이터를 가져오는 연습을 해볼텐데 우선 여러 데이터를 다 받지 않고 종목명 정보만 받아 보겠고 이를 위해서는 우선 XAQuery 를 선언하고 생성해줘야 합니다.

 

방법은 XASession 의 그것과 비슷합니다.

 

 

 

 

  Dim With Events XAQuery_t8403 As XAQuery

 

   Set XASession_t8430 = CreateObject("XA_DataSet.XAQuery")

 

 

 

어때요 쉽지요?

 

 

로그인을 할 때는 XASession 을 이용하고 데이터 조회시에는 XAQuery를 이용한다고 지난편에서 말씀드렸는데 기억하고 계실겁니다.

(혹 잊어버렸어도 괜찮습니다. 여러번 반복 작업 하다보면 자연스레 알게 되는 내용입니다.)

 

 

t8430에 대한 XAQuery의 선언과 생성이 완료 되었으면 t8430.res 파일이 어디에 있는지 프로그램에게 알려줘야 합니다.

 

 

 

  XAQuery_t8430.ResFileName = "t8430.res" 

 

 

 

 

InBlock.gubun 에서 어떤 범위의 데이터를 조회 할 것인지를 이베스트 서버에 알려줘야 합니다.

 

여기에서는 코스피 + 코스닥 전종목 데이터를 조회 하기 위해 gubun 필드의 값을 0으로 입력 하겠습니다.

 

 

 

  XAQuery_t8430.SetFieldData("t8430InBlock","gubun",0,"0") 

 

 

 

 

SetFieldData라는 함수를 이용하여 t8430InBlock의 gubun 필드에 0 값을 입력했고 그 다음줄에서는 위에 입력한 값을 이베스트 서버로 전송하라는 의미라고 이해하면 됩니다.

 

 

이로써 데이터 조회를 위해 독자분들이 해야 할 일의 1단계가 끝났습니다.

 

 

이베스트 서버에서는 독자분이 보낸 정보를 보고 "아! 이 정보가 필요하다고 하는구나. 보내줘야지"라고 인식하여 요청한 데이터에 대해 값을 내려줍니다.

 

 

요청한 데이터에 대해 서버가 값을 내려주는데 어디에서 어떻게 받을지 미리 정해둬야 합니다.

 

 

  XAQuery_t8430_ReceiveData(ByVal szTrCode As String)

 

 

 

 

이렇게 해두면 서버로부터 t8430에 대한 데이터가 도착하면 프로그램이 이런 이벤트를 알아차리고 데이터를 받을 수 있습니다.

 

 

이벤트를 받았으면 서버가 건너준 데이터를 실질적으로 프로그램에 불러오거나 저장해야 되는데 이 때는 XAQuery 객체의 GetFieldData라는 함수를 이용합니다.

(아까 데이터 입력시에는 XAQuery 객체의 SetFieldData 함수를 이용했었죠?)

 

 

  sName = XAQuery_t8430_GetFieldData("t8430","t8430OutBlock","hname",0)

 

 

 

 

t8430 TR을 통해 받은 이벤트를 알아차리고 t8430OutBlock의 hname 필드에서 첫번째(0) 값을 sName에 저장하는 코드입니다.

 

우리가 흔히 숫자를 셀 때 1부터 세지만 컴퓨터는 0부터이므로 0 값을 입력한 것이고 만약 10번째의 데이터를 알고 싶으면 10이 아니라 0부터 시작했으므로 9를 입력해야 합니다.

 

컴퓨터 상에서 데이터들의 순서에 대한 색인을 index (인덱스)라고 합니다.

 

 

이로써 데이터 조회를 위해 독자분들이 해야 할 일의 2단계이자 마지막 단계가 끝났습니다.

 

 

 

 

 

 

지금까지 "5번 XAQuery 객체 선언 및 생성"부터 "10번 Output 값 얻기"까지의 과정에 대해 t8430 TR을 이용하여 데이터를 조회하고 확인하는 과정까지 진행 해봤는데 뭔가 많이 한것 같지만 실제 프로그램 코드를 정리 해보면 아래와 같이 아주 간단합니다.

 

 

  Dim WithEvents XAQuery_t8430 As XAQuery

 

  Set XASession_t8430 = CreateObject("XA_DataSet.XAQuery")

 

  XAQuery_t8430.ResFileName = "t8430.res"

 

  XAQuery_t8430.SetFieldData("t8430InBlock","gubun",0,"0")

 

  XAQuery_t8430.Request(False)

 

  XAQuery_t8430_ReceiveData(ByVal szTrCode As String)

 

  sName = XAQuery_t8430_GetFieldData("t8430","t8430OutBlock","hname", 0)

 

 

 

 

 

각 코드마다 설명도 드렸으므로 생각보다 어렵지 않을것입니다.

 

 

금번에는 조회TR을 이용하는 예제로 설명 드렸는데 다음번에는 실시간TR을 이용하여 장중에 살아 움직이듯 쏟아지는 실시간 데이터를 조회 해보는 것으로 진행할 예정임을 알려 드리며 마칩니다.

 

 

Posted by 투자의神
뉴스 검색기2017. 12. 2. 09:33

 

 

아주 급한 용무는 일단락 되었고 잠시 짬을 내어 그동안 접수된 의견들에 대해 뉴스 검색기 업데이트 작업을 진행할 예정입니다.

 

 

빠르면 오늘중, 늦어도 내일중으로 배포 예정임을 알려드리며, 버전 업데이트가 되면 기존 버전은 사용할 수 없으니 업데이트 공지를 반드시 확인하고 업데이트 되어 배포 된 프로그램으로 교체 사용 하세요.

 

 

v0.985 변경 내용 (배포 완료) - 전달받지 못한 필드 테스터분이 계시면 Comment 남겨주세요.

 

- 뉴스 본문에 대한 검색 정확도 상향 되도록 수정.

 

- 제목, 키워드 뉴스 수신시 등록된 키워드의 내용이 아닐 경우 본문 조회가 안되는 구조적인 문제 수정.

 

- 수신된 뉴스가 키워드를 포함하고 있어도 소리 알람이 되지 않는 경우 수정.

 

- 제목, 제목 + 내용과 키워드 뉴스 제거 동시 선택시 등록된 키워드에 대해 정상적으로 제거되지 않는 문제가 수정.

 

- 공백 키워드 삽입 방지 기능 추가.

 

- 띄어쓰기가 포함된 키워드 삽입 방지 기능 추가.

 

- 좌측 폴딩시 창 크기의 최대 크기가 수정.

 

- 최소화 버튼 또는 최소화 버튼을 대체할 기능 추가.

좌측 상단의 시계 출력부를 클릭하면 TrayIcon으로 최소화 되도록 변경하였고 TrayIcon을 클릭하면 다시 활성화.

 

- 뉴스 내용 출력시 내용 첫줄에 제목을 출력하거나 제목 선택시 색상을 변경하는 등 제목과 내용의 연계성을 시각적으로 인지하기 쉽게 수정.

 

- 뉴스 제목 수신시 우측 현재가 출력은 제목 클릭시 조회하도록 수정.

(한분의 단독 의견이기에 자동조회가 필요하면 추후 업데이트시 자동/수동 선택 옵션을 추가 할 예정.)

 

- 등록된 키워드 더블 클릭시 삭제 기능 추가.

 

- 등록된 제목 더블 클릭시 삭제 기능 추가.

 

- 개장일 장중일때만 우측 현재가 화면 확장/축소 가능하게 변경.

 

 

작업을 위해 메모 된 것은 위 내용이 전부이며 누락된 부분이 있으면 Comment 남겨주세요.

 

 

추후 업데이트 계획중 하나로 본문 내용중 html tag가 포함된 경우에는 일부 tag에 대해 제거하여 가독성을 높이도록 할 예정입니다만 작업 시간 할애 여건에 따라 차기 업데이트가 될지 그 이후가 될지 장담할 수 없습니다.

(예, 이미지 링크-img src, 바로가기 하이퍼링크-a href)

 

 

필요성이 인정되나 현재 처리하기에는 시간적 여유가 부족하니 정리하였다가 추후 전달을 부탁드린 내용들도 본문 아래에 Comment 남겨주세요.

 

 

여러 채널을 통해 의견을 접수받다보니 누가 어떤 의견을 주셨는지 구분이 안되는 경우가 있어서 v.0.985 배포 이후 차기 업데이트시까지 모든 의견은 본문 아래에 Comment 남겨주세요.

 

 

여러 필드테스터 분들의 의견을 상호간에 비교, 공유 할 수 있도록 소통 채널을 한정할 필요가 있다고 생각됩니다.

 

 

글로써 표현하기 힘든 경우에는 그림이나 영상을 카카오톡이나 이메일로 전달 해주시고 필요시 필자에게 전화 연락 주세요.

 

 

 

필드 테스터 분들께서 다양한 의견을 주고 계시지만 보다 많은 사용 환경에서 문제점을 조기에 발견할 수 있도록 필드 테스터 추가 모집하겠습니다.

 

참여 희망자는 비밀댓글로 휴대전화 번호 남겨주세요. (꼭! 비밀댓글로 남겨주세요.)

 

 

본 프로그램은 Windows 7 에서 개발 및 테스트가 되었기에 해당 환경이 아닐시 정상 이용이 불가능할 수 있습니다.

 

 

 

Posted by 투자의神
시스템 성과 합산2017. 12. 1. 18:30

 

 

 

 

예상된 시나리오중 적은 수익의 경우가 나왔으니 다음 거래일에는 큰 손실을 맞을 차례인가 궁금하네요.

 

 

당분간은 바쁜 관계로 오늘도 짧게 적고 조만간 다시 시간적 여유를 가지게 되면 시장 이야기도 적겠습니다.

 

 

Posted by 투자의神