Giter Club home page Giter Club logo

ghts's Introduction

GHTS

자동 주식 매매 시스템 구현에 유용한 라이브러리.

  • 국내 주식 매매 기능은 이베스트증권 API를 통해 구현되어서 실거래 적용 중.
  • 해외 주식 매매 기능은 한국투자증권 API를 통해 개발할 계획.
  • 향후 대대적인 구조 변경 가능성 있음. (증권사 API 모듈 분리, nanomsg -> gRPC 등등)

현재 Go언어 1.18에서 에러가 발생합니다. 당분간 Go언어 1.16, 1.17을 사용하는 것을 추천합니다.


사전준비물

Xing API 관련 기능은 개발 편의성을 위해서
Go언어, Xing API가 기본 위치에 설치된 것을 상정하고 있습니다.

  • Go언어 : C:\Program Files\Go
  • Xing API : C:\eBEST\xingAPI

GHTS 라이브러리 설치 (명령 프롬프트 창에서 아래 명령을 실행.)

go get -u github.com/ghts/ghts

Go언어

  • 복수의 매매 전략을 간편하게 동시 운용.
  • DLL호출은 잘 지원되지만, COM/OLE/OCX에 대한 지원은 빈약한 편.

이베스트투자증권 Xing API

  • DLL 호출과 COM/OLE 호출을 모두 지원. (Go언어와 호환성 우수.)
  • API 문서가 비교적 충실함.
  • 이베스트 증권사 홈페이지의 질답 게시판에서 비교적 원활한 기술 지원 진행.

증권사 API 호출 기능은 별도의 프로세스로 분리됨.

  • '매매 전략 실행'은 64비트에서 실행해야 할 필요성 제기됨.
  • '증권사 API 호출'은 32비트에서'만' 호출할 수 있음. (국내 모든 증권사 API 공통)
  • '매매 전략 실행'과 '증권사 API 호출'을 독립된 프로세스로 분리 후 RPC로 상호 연동.
  • 자세한 기술적 사항은 https://ghts.tistory.com/48 참조

디렉토리별 설명

  • lib : 공용 기능.
  • xing/base : Xing API 32비트/64비트 공용 자료형.
  • xing/go : Xing API를 간접적으로 호출하는 순수 Go언어 모듈. (64비트 가능)
  • xing/dll32 : Xing API DLL을 직접 호출하는 모듈. (32비트 전용)

API 사용 관련 파일

  • xing/go/func_TR.go : TR호출 함수.
  • xing/go/tr_<TR코드>_test.go : 개별 TR코드 함수 사용법.

Xing API 사용 전 준비 (초기화)

import (
    xt "github.com/ghts/ghts/xing/base"
    xing "github.com/ghts/ghts/xing/go"
    
    <... 기타 의존성 라이브러리 ...>
)

func main() {
    // "..." 자리에 계좌 정보 문자열 상수 설정.    
    // 'xt.P서버_실거래' 대신 'xt.P서버_모의투자' 사용 가능.    
    xing.F초기화(xt.P서버_실거래, "로그인_ID", "로그인_암호", "인증서_암호", "계좌_비밀번호")  
    defer xing.F종료()

    // 위 예시는 처음 테스트 할 때 간편하게 초기화 하는 예제이며,
    // 본격적으로 개발할 때는 소스코드에 각종 로그인 정보가 들어가는 것은 보안에 불리하므로, 
    // xt.F로그인_설정_화일_경로_설정(), xt.F로그인_설정_화일_읽기() 을 활용해서
    // 로그인 정보를 별도의 설정 화일에 분리해서 저장하고, 
    // 해당 설정 화일은 소스코드 관리 시스템에서 제외시켜서 공유되지 않도록 하는 게 좋다.
       
    <... 이하 Xing API 호출 코드 ...>
}

TR이란

  • 트랜잭션(TRansaction)의 약자.
  • 증권사 서버와 사용자 컴퓨터 간의 상호 작용을 의미.
  • 사용자가 증권사 서버에게 시킬 작업을 의미하게 됨.

TR코드

  • 증권사 서버가 수행할 작업(TR)을 나타내는 코드.

주식 매매에 자주 사용되는 TR코드

  • 현재가 : t1101/t8407
  • 호가 : t1102
  • 주문 : CSPAT00600/CSPAT00700/CSPAT00800 (정상/정정/취소)
  • 계좌 평가액 : CSPAQ12200
  • 보유 현황 : CSPAQ12300
  • 주문 가능 금액 : CSPAQ22200
  • 일일 가격 정보 : t1305/t8413
  • 전체 종목 코드 : t8436
  • 현재 서버 시각 : t0167

TR코드에 대한 더 자세한 내용은 이베스트 Xing API 패키지를 설치하면 함께 설치되는 DevCenter를 참고.
주의 : GHTS에는 일부 TR만 구현되어 있습니다.


악성코드로 오진되는 경우.

'매매 전략 실행'과 '증권사 API 호출'이 별도의 프로세스로 분리되고,
상호 간에 RPC 호출을 통해서 상호 연동하는 과정에서
TCP/IP 네트워크 호출이 발생하는 데
'안랩 세이프 트랜잭션'(AST : Ahnlab Safe Transaction)에서
이를 멀웨어(MDP.Connect.M1924)로 오진하는 문제가 발생합니다.
AST에서 '위협 행위 차단'을 해제해야 정상 작동합니다.
윈도우 기본 백신인 '윈도우 디펜더'에서는 이런 문제가 발생하지 않습니다.


개발에는 C언어 컴파일러 추가 설치 필요

일반적인 GHTS 사용에는 굳이 필요하지 않지만,
GHTS의 소스코드를 수정하는 개발 과정에서
이베스트 API 자료형과 동기화가 필요한 경우에는
C언어 컴파일러가 추가로 필요합니다.

MSYS2에서 C 컴파일러 설치 ('MSYS2 -> MSYS' 터미널에서 아래 명령을 실행.)

pacman -Syuu 
pacman -S base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain

해결되지 못한 문제점

  • 실시간 정보 TR 지원이 미흡합니다.
    (개발자가 중장기 매매 전략만 실행하다보니
    실시간 정보를 전혀 사용하지 않는 관계로 개발 우선 순위에서 밀립니다.
    다만, 실제 사용하시는 분 말씀에 따르면 그럭저럭 작동한다고 합니다.)

  • 멀웨어 오진 문제.
    (오진을 피하기 위해서 RPC 호출을 HTTP 방식으로 바꿔봤으나
    TR을 20회 이상 실행하면 작동이 멈추는 문제가 발견되어서 롤백 했습니다.
    멀웨어 오진을 피하기 위해서 RPC 호출을 nanomsg에서 gRPC로 변경하는 방안을 연구 중입니다.)


<주의>

저작권자, 개발자, 개발에 참여한 기여자들은 이 소프트웨어에 대한 어떠한 보증도 하지 않습니다.
이 소프트웨어를 사용하면서 발생하는 그 어떠한 손실 및 손상에 대해서 책임지지 않습니다.
소스코드 파일에 별도의 언급이 없는 한, 모든 소스코드는 GNU LGPL V2.1 라이센스를 따릅니다.
저작권에 대한 자세한 사항은 'LICENSE' 파일을 참고하십시오.

ghts's People

Contributors

ghts avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.