하나의 시스템/프로그램을 설계하는 것은 상당히 고난도의 작업이다. 

Architecture-Design에 속하는 이 작업은 Front-End의 User Interface(UI)적 편의성과 간결함, 그리고 정확성을 바탕으로 하는 사용자 친화적 경험 및 지식이 필요하며, Back-End의 Call-Flow(메시지 흐름)와 가장 중요한 Data Structure가 가능해야한다. 

 

현재 L-ATS Flex v2.0은 약 50% 정도 완성이 되었지만, 실제 게시글은 그때마다 작성하지 못했다. 이유는 위에서 '가장 중요한'이라고 말한 Data Structure가 불안정했기 때문이다. 

처음 사용해 보는 이베스트 투자증권의 xingAPI에서 얻을 수 있는 Data가 생각보다 제한적이고 API의 사용성 또한 제한적이라 프로그램이 만들어지면서 데이터 구조가 많이 변경되었다. 

 

지금 시점은 xingAPI로부터 얻을 수 있는 데이터가 모두 파악되고, 그 데이터들을 어떤 부분에 사용하고 응용할지 정리가 되었기에, 잠시 개발을 멈추고 글을 작성한다. 


1. L-ATS 화면 구성

L-ATS Flex v2.0 화면 구성

크게 총 15개의 구역으로 구분이 되며, 각 구역 마다의 설명은 아래 정리되어 있다.

L-ATS v1.0과 가장 큰 차이점은 '매수' 기능이 없어져 그에따른 '미체결' 관련 화면 구역이 없어졌다. 그리고 L-ATS v2.0의 핵심 기능인 '스탑로스 Flex' 관련 설정 및 결과 창이 생겼다. 

실은 '스탑로스 Flex'보다 '스탑로스'가 더 표시할 정보가 많이 있는데(설정 조건이 복잡해서...)...결과 창의 위치를 바꾸어야 할 수도 있을 것 같다.

 

2. L-ATS 상세 화면 구성

1~15개의 구역을 가진 L-ATS v2.0

 

① L-ATS v2.0의 주 메뉴 Bar

② L-ATS v2.0 프로그램 사용자 정보 

    : L-ATS v2.0을 사용하기 위한 사용자 가입 정보.

③ 이베스트 투자증권 HTS 서버 접속 정보

    : 접속 (초록색), 미접속 (빨간색)

④ 자동 매매 시작 버튼

    : 이 버튼이 눌리지 않는한 자동매매가 시작되지 않음.

⑤ 프로그램 알림 Bar

    : 프로그램 동작 중 사용자에게 알림이 필요한 수준의 메시지가 표시됨.

⑥ 사용자 계좌 목록

    : 사용자가 보유한 이베스트 투자증권의 계좌 목록 표시. HTS 로그인이 완료되어야 표시됨.

⑦ 실시간 지수 정보

    : 실시간으로 증권 시장의 코스피/코스닥 지수를 표시. 약 3초마다 데이터 수신. HTS 로그인이 완료되어야 표시됨.

⑧ 실시간 매매 처리 종목 현황

    : L-ATS 프로그램 상에서 처리되고 있는 종목들의 갯수를 실시간으로 표시.

     (기존 잔고건수 + 신규 매수 건수) = (거래 완료 건수 + 스탑로스 건수 + 스탑로스 Flex 건수)

⑨ 사용자 계좌의 실시간 자산 현황

⑩ 사용자 계좌의 실시간 잔고 종목 목록

    : 현재 사용자가 보유한 종목들의 목록. 이 목록에서 종목별 스탑로스 처리 여부를 정할 수 있음.

⑪ 자동 스탑로스 환경 설정

    : 자동 매매 시작 이후 적용될 스탑로스 설정 값.

⑫ 스탑로스 처리 종목 목록

    : 실시간 잔고에서 스탑로스 처리를 선택한 종목들에 대한 목록 표시.

⑬ 거래 완료 종목 목록

    : 스탑로스 또는 스탑로스 Flex에서 매도처리가 완료된 종목들에 대한 목록 표시.

⑭ 스탑로스 Flex 처리 종목 목록

    : 실시간 잔고에서 스탑로스 Flex 처리를 선택한 종목들에 대한 목록 표시.

⑮ 이베스트 투자증권 사용자 정보

    : HTS 로그인 후 표시되는 사용자의 이베스트 증권 사용자 정보.

 

3. xingAPI 사용 구역

위의 15개 구역 중 xingAPI를 통해 얻은 데이터를 표시하는 구역에 대한 설명이다.

L-ATS v2.0 화면 내의 xingAPI 사용 구역

생각보다 xingAPI를 사용하는 부분은 많지 않다. 그리고 단순하다. 

실시간으로 계속 데이터를 요청하고 수신하여 반영해야하는 '실시간 잔고' 부분을 제외하고는 단순 Request-Response 처리이기에 크게 어려운 부분은 없다. 

 

xingAPI에서 제공하는 TR처리 기능 중 한번 Binding 해두고 값의 변화가 있을 때마다 서버 측에서 데이터를 내려주는 TR 처리 방식이 있는데 실시간으로 변화되는 잔고 정보를 갱신하는 데에 매우 유용할 것 같지만, 경험상 굳이 세션 유지를 신경 쓰며 보다 세세한 예외처리를 하기 위한 노력을 기울이는 것보다 주기적으로 정보를 요청하여 처리하는 것이 더 심플할 것 같다. 프로그램의 기능은 심플한 것이 최고다. 

 

다음은 실제로 구현한 'HTS 로그인' 부분 포스팅이다.

Posted by [ 브랜든 ]
,

키움증권 API도 마찬가지지만 이베스트 XingAPI에서도 개발할 때 유용한 도구를 제공한다.

 

이베스트 XingAPI에서는 'DevCenter'라는 것인데, XingAPI에서 제공하는 다양한 TR(Transaction)들을 실제로 내가 보유한 계좌를 이용해서 시뮬레이션해볼 수 있도록 해준다. 

 

예를 들면, 계좌 조회를 하는 기능을 개발하고 싶을 경우 어떤 XingAPI TR을 사용해야 하는지, 그리고 해당 TR에 어떤 값들을 입력해서 요청을 해야하는지, 마지막으로 TR에 대한 응답들은 어떤 변수에 어떤 값들이 포함되어 오게 되는지 등이다. 

 

따라서, DevCenter와 HTS/MTS에서 실제 내 계좌의 정보를 비교해가며, 프로그램 개발하면서 내가 필요한 값들이 어떤 것들인지 확인하고 골라내가며 개발을 수월하게 도와준다. 

 


STEP 1. XingAPI 설치

 

우선 XingAPI를 사용하기 위해서는 이베스트 증권에서 제공하는 XingAPI 패키지를 설치해야 한다.

http://www.ebestsec.co.kr/

 

이베스트투자증권

 

www.ebestsec.co.kr

 

xingAPI 다운로드는 이베스트증권 회원가입이 되어있어야 한다.

 

xingAPI 선택

 

xingAPI 패키지 소개부분의 '최신 버전 설치' - 'PC'를 선택하여 설치한다.

 

 

xingAPI 패키지 다운로드

 

설치가 완료되면 바탕화면에 다음과 같은 아이콘이 생긴다. 

 

xingAPI 패키지 설치 후 사용 가능한 프로그램

 

 

STEP 2. XingAPI 실행

 

개발에 필요한 TR 테스트 프로그램으로 'DevCenter'를 사용하면 된다. 그럼 프로그램을 실행시켜 보자.

프로그램을 실행하면 다음과 같은 이베스트 증권 로그인 화면이 뜬다.

 

DevCenter 로그인 화면. 실제 본인 계정, 계좌 정보와 동일하다.

 

접속 서버는 '실서버'와 '모의투자'를 선택할 수 있는데, '모의투자'를 선택할 경우 미리 이베스트 투자증권 사이트에서 본인 계정에 대해 '모의투자' 참여 신청을 완료해야 한다.

 

'DevCenter' 첫 화면. 왼쪽에 다양한 TR 목록을 확인할 수 있다. 

 

첫 로그인 후에 로그 상세, 로그 속성, TR 속성 등이 화면에 표시되지 않을 수 있다. 이때는 메뉴의[보기]-[도구 모음 및 도킹 창]에서 필요한 화면들을 선택, 체크하면 된다.

 

그럼 이제 특정 TR 하나를 선택해 보자. 처리할 수 있는 TR의 종류로는 '단일 데이터', '연속 데이터', '반복 데이터'가 있는데 이 중에서 '단일 데이터'와 '반복 데이터'를 하나의 TR로 제공하는 '[t0424] 주식 잔고 2' TR을 살펴보자.

 

'[t0424] 주식 잔고2' TR의 상세 정보

 

왼쪽 TR 목록에서 '[t0424] 주식 잔고2' TR을 선택하면 위와 같이 해당 TR의 요청 메시지(t0424 inBlock) 그리고 응답 메시지(t0424 OutBlock)에 사용될 각 Data Field 들에 대한 정보를 볼 수 있다. 

 

간략하게 보자면 '[t0424] 주식 잔고 2' TR을 사용하려면 입력에 계좌번호, 비밀번호 등을 넣어야 하고, 수신한 응답에서는 추정 순자산, 실현손익, 매입금액 등의 값을 얻을 수 있는 것으로 되어 있다.

 

또 하나 중요한 것은 바로 'TR 속성' 창의 정보이다. 이곳에 어마어마하게 중요한! 어찌 보면 가장 중요한 것 정보 중의 하나가 있는데 바로 [ 초당 전송 수 ]이다. 

 

'[t0424] 주식 잔고2'의 TR 속성

 

분명하게 '1초당 2건'이라고 명시되어 있다. 

이것은 사용자들이 개발할 프로그램에서 '[t0424 주식 잔고2]' TR을 사용할 경우, 반드시 1초에 최대 2건만 요청할 수 있도록 개발해야 한다는 것이다. (실제로 약 0.1초간 요청을 보내게 하면... 하면 당연히 안된다... 계정 정지당함...)

 

사용자의 프로그램에서 해당 TR을 요청하는 메시지를 만들어야 하는데 그 부분이 바로 't0424InBlock'에 해당된다. 

여러 가지 잘 모르는 것들을 입력해야 하는데 어떤 값을 입력해야 할지 모를 때는 해당 Field를 클릭하면 오른쪽 'TR 속성' 화면의 'Field 정보'에 표시된다.

계좌번호는 사용자의 계좌번호를 입력하면 되고, 비밀번호는 계좌의 비밀번호 4자리... 이외 나머지 것들은 어떤 값을 입력해야 하는지... 당연히 알 수 없다. 단가 구분을 눌러보자.

 

t0424 TR의 '단가구분' Field 상세 정보

 

[TR속성]-[Field 속성] 부분에 '1@평균단가', '2@BEP단가' 라고 쓰여있다. 즉, 평균단가로 잔고를 조회하고 싶으면 '1'이란 값을, BEP단가로 잔고를 조회하고 싶으면 '2'란 값을 넣어야 한다는 것이다. 

다른 Field 들도 위와 같은 방법으로 어떤 값을 넣어야 하는지 확인하면 된다. 

 

또 하나 유심히 봐야 하는 것은 해당 TR이 '단일데이터' 처리인지 '반복데이터'처리인지 확인하는 것이다. 

't0424'를 잘 살펴보면 OutBlock, 즉, 응답 메시지가 두 가지가 존재하는 것을 확인할 수 있다. 

't0424OutBlock'이 단일데이터 응답 메시지이고, 't0424OutBlock1 - OCCURS'가 반복데이터 처리 응답 메시지이다. 

 

풀어 얘기하자면 [t0424 주식 잔고2] TR은 't0424InBlock' 메시지로 계좌번호/비밀번호/단가구분/체결구분/단일가구분/제비용포함여부/CTS_종목번호 값들을 입력받아, 't0424OutBlock'으로 계좌의 일반 정보들을 전달하고, 't0424OutBlock1'로 이 계좌에 존재하는 매수된 종목 리스트(여러개일 수 있으니 동일한 형태의 반복적 데이터들임.)를 전달한다. 는 얘기다.

 

STEP 3. xingAPI TR 실행

xingAPI는 위에서 살펴본 TR에 대해 실제로 테스트해볼 수 있는 기능을 제공한다. 

위에서처럼 사용할 TR을 선택한 다음, 메뉴바 밑의 다양한 아이콘들 중에 푸른 오른쪽 세모(재생 버튼 모양)를 클릭하면 별도의 'TR 확인 창'이 뜬다.

 

[TR 확인 창] 초기 화면

 

TR 확인 창을 실행하면 아까 보았던 InBlock과 OutBlock들의 Field 값들을 볼 수 있고, [In Block]에 해당되는 값들을 입력해서 TR을 실행해 볼 수 있다.

이제 내 계좌의 정보를 입력하고 '조회' 버튼을 클릭하여 이베스트증권 서버로부터 수신한 정보를 확인해 보자.

 

실제 t0424 TR 실행 결과

 

내 실계좌에 대한 잔고 정보 수신이 완료되었다. Out Block의 값들은 실제 내 계좌정보와 동일하니 바로 이베스트증권 HTS/MTS에 접속하여 하나하나 비교하면서 정확한지 확인해보면 된다. 자동매매 프로그램을 만들면서 이 작업이 중요한 이유는... 아무래도 Field의 이름들이 모두 한눈에 어떤 것을 의미하는지 알아보기 힘들고, TR 정보창의 Field 설명이 나와있지만 그 또한 내가 생각한 이름과 다른 게 쓰여있는 것들이 있어 값을 비교해보고 내가 필요한 값과 동일한 값을 가진 Field를 적어 두었다가 사용하면 꽤 효율적이다. 

 

이제 개발을 시작해 보자.

Posted by [ 브랜든 ]
,

모든 프로그램들은 Call Flow가 존재하며, 사용자 지향적인 프로그램일수록 사용자가 어떻게 프로그램을 사용해 나갈지, 예를 들면, 로그인부터 해서 특정 기능을 사용하기 위해 어떤 것들을 설정해야 하며, 얻어낸 결과를 어떻게 저장하고 프로그램을 종료하는지까지의 시나리오가 존재한다. 

 

프로그램 제작 전에 완성된 내용이지만, 나중에 사용자 매뉴얼 작성 시에 도움이 될 수 있도록 지금 기록을 해놓는 게 좋을 것 같다. 물론 Flow Chart 기반의 시나리오 정리이며, 필요할 경우 지속적으로 업데이트될 것이다.

 


L-ATS 사용자 시나리오

 

L-ATS 사용자 관점 시나리오

 

 

실은 어떤 프로그램이든 사용자 관점에서 정의하는 시나리오는 복잡하지 않다. 

사용자는 프로그램의 기능이 직관적이며 단순해야(단순하다는 어감이 조금 좋지 않은데 Simple하다가 의도하는 바와 가까운 단어다.) 잘 사용하게 된다. 

 

개발자라면 잘 알겠지만 단순해 보이는 하나하나의 과정마다 수가지의 예외처리와 백그라운드 프로세스 작업이 존재한다는 것을 알 것이다. 

사용자의 시선에서는 당연히 신경 쓸 필요 없다. 모든 기능이 오류 없이 정상적으로 처리되어야 하니 말이다.

즉, 위의 시나리오는 프로그램의 모든 기능이 정상적일 때의 시나리오이다. 

 

설계된 L-ATS 2.0의 기능은 크게 4가지로 구분된다. 

  1. 이베스트 증권 계좌 선택
  2. 스탑로스 조건 설정
  3. 자동 매매 시작
  4. 종목별 처리할 스탑로스 종류 선택

실제론 대부분의 자동매매 프로그램들이 1.~3.번 기능이 전부이다. 2.번 기능이 프로그램마다의 특징을 갖는 기능이며, 자동으로 매수하는 기능이 있는 프로그램도 있다. (L-ATS 1.0에도 존재했던 기능이나 2.0에서는 스탑로스만...)

 

기능 자체는 간단해 보이지만, 돈이 왔다갔다하는 프로그램이기에 얕은 지식으로 간단하게 만들 수 있는 프로그램의 종류는 아니다. 

기능 구현보다 Exception 처리에 더 많은 공을 들여야 한다. 

사용자는...더구나 GUI 환경에서의 사용자는 개발자가 예측하지 못한 돌발 행동을 많이 한다.

 

Posted by [ 브랜든 ]
,

L-ATS는 한순간에 한 사람의 사용자(하나의 계정)만 사용할 수 있도록 운영할 예정이니 프로그램이 종료되는 시점까지 '사용자 정보'는 하나의 데이터 셋만 생성될 것이다. 

 

그럼 프로그램이 동작하는 동안 사용자는 어떤 정보들을 관리하여야 할까?

 

우선 기본 사용자 정보는 아래 두 가지 형태로 구분할 수 있다. 

  • L-ATS 사용자 정보
  • 이베스트 증권 사용자 정보

좀 더 Detailed 정보들을 나열해 보자.


[ L-ATS 사용자 정보 ]

 

 1. L-ATS 가입자 ID : 비밀번호 찾기와 연계하기 위해 E-Mail Type으로 정함.

 2. 가입자 Pricing Grade : L-ATS 가입자의 가격 정책 등급 정보.

 3. Auto Trading 여부 : 현재 자동 매매 처리 중인지 여부 정보.

 4. 현재 접속 단말 MAC : 한 계정당 한 명만 사용할 수 있도록 MAC 인증을 위한 정보.

 

[ 이베스트 증권 사용자 정보 ]

 

 1. 현재 접속 HTS 정보 : '모의투자' 또는 '실투자' 접속 서버 정보와 현재 접속 여부 정보.

 2. 이베스트 가입자 ID : 이베스트 증권 ID 정보.

 3. 현재 계좌 : 증권 사용자는 여러 개의 계좌를 가질 수 있기 때문에, 1개의 계좌를 선택하여 사용할 수 있음.


우선 이정도면 될 것 같다. 

 


 

사용자 정보는 프로그램이 시작된 순간부터 종료될 때까지 단 하나(!)만 존재하게 되므로 프로그램 어디에서도 사용할 수 있도록 Global 형태로 선언했다.

 

아래는 사용자 정보를 관리하는 Class다.

public class User_Info
{
    public static User_Info gUser_Info = new User_Info();

    public bool IsUserLogin;            // 프로그램 로그인 여부
    public bool IsAutoTrading;          // 자동매매 진행 여부

    private string Id;                  // L-ATS 사용자 ID
    private string Grade;               // 회원등급
    private string MacAddr;             // 현재 접속 단말 MAC Address

    public DateTime Last_Login;

    //---------------------------------------------------------------

    public bool IsHTSLogin;             // HTS 로그인 여부

    private string EbestId;             // 이베스트 ID
    private string UserName;            // 사용자 이름
    private string CurAccount;          // 현재 사용 계좌 번호

    // 생성자
    public User_Info()
    {
        IsUserLogin = false;
        IsAutoTrading = false;
        IsHTSLogin = false;
        
        Id = string.Empty;
        Grade = string.Empty;
        MacAddr = string.Empty;

        EbestId = string.Empty;
        UserName = string.Empty;
        CurAccount = string.Empty;
    }

    // 소멸자
    ~User_Info()
    {

    }
    
    ... 생략 ...
}

bool Type의 변수를 제외한 모든 정보들은 private으로 선언하여 Set/Get 함수를 사용하도록 했다. 

참고로 나는 변수의 초기화를 매우 중요하게 생각하는 개발자다. 

 

그리고 언제든 바로 프로그램 상의 사용자 상태 정보를 확인할 수 있는 메뉴를 만들었다. 즉, 위의 User_Info() 클래스의 정보를 확인하는 메뉴이다. 


 

'메인메뉴 > 사용자 정보'  메뉴에서 User_Info() 클래스 정보 표시

 

먼저 L-ATS 로그인 후 사용자 정보를 보면 아래처럼 알 수 있는 정보만 표시가 된다.

 

L-ATS 로그인 후 User_Info() 정보

 

회원가입시 입력했던 Database의 정보들과 로그인 시에 입력한 HTS Server 정보 (모의투자/실투자)가 표시된다. 

 

이베스트 HTS를 로그인하고 보유계좌까진 선택한 후 '사용자 정보'를 확인해 보자.

이베스트 HTS 로그인. 모의투자기 때문에 공인인증번호는 입력하지 않아도 된다.
이베스트 HTS 로그인이 정상 처리되면, 보유한 계좌의 목록을 확인할 수 있다.

 

이제 계좌의 목록 중 하나를 골라서 '선택' 버튼을 클릭하면 비로소 User_Info()의 모든 정보가 완성된다.

 

모든 정보가 채워진 User_Info(). 하단의 StatusBar에도 함께 표시하여 사용자 인지성을 향상시켰다.

 

사실 '사용자 정보' 메뉴는 디버깅 용으로 만들었던 건데... 메뉴가 되어 버렸다.

'Trading' 카테고리의 다른 글

[Trading] XingAPI - DevCenter 사용하기  (0) 2020.08.14
[Trading] L-ATS 사용자 시나리오  (0) 2020.08.02
[Trading] HTS 로그인 설계, 구현  (0) 2020.07.08
[Trading] 프로그램 로그인  (0) 2020.06.21
[Trading] 두번째 프로그램  (0) 2020.06.07
Posted by [ 브랜든 ]
,

이베스트에서 제공하는 XingAPI에 의한 로그인 기능은 키움API에서 제공하는 기능과는 사뭇 다르다.

 

먼저 키움API의 경우에는 로그인 할때 키움 HTS에서 로그인하는 것과 같은 방식을 제공한다.

로그인과 동시에 HTS 서버에 접속하고 업데이트 버전이 있을 경우 업데이트를 진행하고 그 다음 로그인까지

완료하는 과정을 거친다.

 

L-ATS v1.0을 통해 확인해 보자.

 

'로그인' API를 호출하면 위와 같이 키움 HTS 로그인 화면을 제공한다. 

 

이베스트 XingAPI는 'HTS 서버 연결'과 'HTS 로그인'이 별개로 동작한다.

즉, HTS 서버 연결 상태를 고려하여 로그인/로그아웃 처리를 진행해야 한다. 

물론 HTS 서버에 연결이 되어야 로그인이 될 것이다. 아래 두 경우는 분명 다르게 동작해야 한다.

 

  • 서버가 연결되어 있지 않은 상태에서의 로그인/로그아웃 시도
  • 서버가 연결되어 있는 상태에서의 로그인/로그아웃 시도

간단해 보이지만 쉽게 생각할 수 없는 부분이다. 

 

이베스트 API의 경우 사용자 Form을 이용해서 별도의 로그인이 필요하다.


[ 대략적인 동작 과정 ]

 

1. 프로그램 실행 후 먼저 프로그램 로그인을 시도한다.

 

2. '이베스트 HTS 서버' 연결을 시도한다.

   2-1. 연결이 완료 될 경우, 해당 연결 서버의 정보를 표시한다.

   2-2. 연결이 되지 않을 경우, 환경 설정 값에 의해 서버 연결을 재시도 한다.

      2-2-1. 환경 설정 값에 의한 재연결 시도 횟수 초과 시 자동으로 프로그램을 종료한다.

 

3. '이베스트 HTS 서버' 연결을 별도로 관리한다.

   3-1. HTS 서버와의 연결 상태를 주기적으로 확인하고, 연결 유실 시 재연결을 시도하도록 관리한다.

   3-2. 화면 한편에 현재 HTS 서버와의 연결 상태를 한번에 확인 할 수 있도록 표시한다.

 

LOGIN Flow Chart

 

가장 신중하게 생각해야할 부분은 'Connection 관리' 부분이다. 

 

네트워크 개발을 하던 첫 회사에서 'Connection 관리'가 생각보다 단순하지 않고 쉽지 않다는 것을 많이 느꼈다.

지금 로직을 구성한다 해도 100% 완벽하게 할 수 있을지 의문이다.

 

Connection 관리는 아래 두 개의 환경 설정 값에 의해 동작하도록 해야한다.

  • Connection Check Interval (확인 시간 간격)
  • Connection Check Count (최대 확인 횟수)

솔직히 Connection 관리는 실시간(Realtime)성이 가장 중요한 시스템에서 필수적인 것이지만

Trading 시스템에서는 크게 중요하지 않을 수도 있다. 

때문에 'HTS 로그인' 상태에서 'HTS 서버' Connection이 끊길 경우(네트워크 장애 등) 프로그램을 자동 종료하여도 크리티컬하진 않을 것이다.

 

'L-ATS 로그인 -> HTS 접속 -> HTS 로그인' 까지 완료된 화면.

 

보유 계좌 리스트 조회 완료.

다음 포스팅은 '자산현황' 조회와 '잔고현황' 불러오기가 될 예정이다.

'Trading' 카테고리의 다른 글

[Trading] L-ATS 사용자 시나리오  (0) 2020.08.02
[Trading] 사용자 정보 구조  (0) 2020.07.18
[Trading] 프로그램 로그인  (0) 2020.06.21
[Trading] 두번째 프로그램  (0) 2020.06.07
[Trading] 첫번째 프로그램  (0) 2020.05.24
Posted by [ 브랜든 ]
,

앞서 말한바와 같이 이베스트의 XingAPI는 서버 연결과 HTS 연결이 별로도 동작한다. 

때문에 L-ATS 프로그램을 사용하기 위해서는 아래 두 가지 로그인 절차를 거치게 설계했다.

  • Step 1. L-ATS 프로그램 로그인
  • Step 2. 이베스트 HTS 로그인

번거로울 수 있을 것이라 생각할 수도 있겠지만, 이베스트 XingAPI의 로그인 구조와

내가 추구하는 (아무나 내프로그램을 사용할 수 없는...?) 방향과 딱 맞아 떨어졌다 생각할 수 있겠다.

 

L-ATS 첫 실행 화면

지난 '두번째 프로그램' 초기화면 설계와 조금 달라진 모습을 볼 수 있다. 

 

우선, 프로그램 실행과 동시에 'L-ATS 로그인' 화면을 제공하여 프로그램 사용자 로그인과 동시에 

이베스트 HTS 서버 연결을 선택하도록 했다. (덕분에 프로그램 사용자 정보도 관리해야할 것 같다.)

 

먼저 구현된 각 화면의 표시 정보를 보자. (기능이 구현되는 순으로 계속 설명을 써야겠다.)

  1. 사용자 정보 : L-ATS 등록 사용자 정보
  2. HTS : 실시간 이베스트 HTS 연동 상태 표시. 빨 : Disconnect, 녹 : Connected. 
  3. 시작 버튼 : HTS 로그인 후 계좌를 선택해야 하므로, ATS의 모든 기능은 이 버튼이 눌린 시점부터 시작된다.
  4. 알림 : 프로그램에서 Event 발생 시, 텍스트로 표시해 준다. (예] 로그인, 매수, 매도 등)
  5. 하단 Status Bar : 이베스트 HTS 사용자 정보 표시

우선 로그인을 해보자.

내 계정은 이미 등록이 되어 있는 상태이며, 추후 사용자 관리관련 포스팅 예정이다.

ID와 비밀번호를 입력 후, 모의투자/실투자 선택.

그리고 로그인 버튼을 누르면 다음과 같은 L-ATS 시작 화면이 된다.

L-ATS 사용자 로그인 및 이베스트 HTS 접속 상태.

L-ATS 프로그램 사용자의 정보가 왼쪽 상단에 표시되고, 실시간 이베스트 HTS 접속 상태가 'HTS' 부분에 빨간색->초록색으로 표시가 된다. '모의투자'를 선택했을 경우 '모투', '실투자'를 선택했을 경우 '실투'라고 표시된다.

그리고 '알림' 부분에 현재 발생한 로그인 이벤트에 대한 내용이 표시된다. 

여기까지는 아직 이베트스 HTS에 로그인 하긴 전 상태라 계좌정보, 자산현황 등을 알 수 없다. (다음 게시물 예정.)

 

자동 매매 프로그램에 있어서 HTS 연결은 매우 중요하다. 

정전, 네트워크 장애 등등. 어떠한 이유에 있어 프로그램이 돌아가고 있는 상태에서 HTS 연결만 끊기는 경우가 발생할 수 있으므로, HTS 연결 상태를 지속적으로 확인(Heart-Beat)하고 재연결(Reconnect)를 할 수 있도록 개발해야하는 것이 기본이다. 이건 Database 서버와의 연결도 마찬가지이다. 

 

L-ATS v1.0 때보다 많은 기능이 설계에 들어가고 있어...매우 정신이 없다...

 

그래도 재밌는걸 어떡하나 싶다...

 

만들다보니 회원가입 절차가 필요해져서 '비밀번호'는 당연히 입력 즉시(나도 알 수 없도록) 암호화하여 DB에 저장하도록 해야겠다 생각했지만, 이베스트 XingAPI 특징상 HTS 로그인시에 아이디/비번/공인인증서비번을 입력 받도록 되어있다.

 

보안에 굉장히 취약할 수도 있는 부분이라 이 부분을 어떻게 해야 사용자들이 안심하고 사용할 수 있을지 고민이다. 

아니면....내가 예상하는 것과 다를 수도 있고....

'Trading' 카테고리의 다른 글

[Trading] L-ATS 사용자 시나리오  (0) 2020.08.02
[Trading] 사용자 정보 구조  (0) 2020.07.18
[Trading] HTS 로그인 설계, 구현  (0) 2020.07.08
[Trading] 두번째 프로그램  (0) 2020.06.07
[Trading] 첫번째 프로그램  (0) 2020.05.24
Posted by [ 브랜든 ]
,
  • 프로그램 명 : L-ATS (Lim's Automatic Trading System)
  • 버전 : 2.0
  • 환경 : Visual C#
  • 주요기능 : HTS/MTS 매수 종목 정보 실시간 수신, 설정값 기반 주식 매도, Flexable 스탑로스
  • API : 이베스트 증권 XingAPI
  • 제작기간 : 2020.05 ~ 

 

1차 화면 구성 초안이 완성 됐다. 

 

v1.0이 있어서 구성은 어렵지 않았지만, v2.0은 실제 다른 여러 사람이 사용할 수 있을 거란(그럴리 없겠지만...;;;)

생각을 전제로 시작부터 많은 기능을 구상했다. 

 

프로그램 사용 절차부터 가입 사용자 로그인 부분과 HTS 접속을 구분하고,

사용자 구분에 따라 스탑로스 사용 범위를 나눌 생각이다. 

그렇게 기본 스탑로스는 모두에게 공개하며, 스탑로스 Flex는 공개되지 않을 예정이다. 

무엇보다 공개 Beta 서비스는 모의 투자만 가능하도록 할 것이다. 

 

스탑로스 자체는 증권사 HTS/MTS에서도 제공되는 기능이지만,

v1.0에서 구현했던 세분화된 스탑로스 조건을 적용할 수 있는 방식을 다시 사용하여 차별화를 둘 예정이다. 

 

설계랑 구현을 동시에 할라니 정신이 없구나...

'Trading' 카테고리의 다른 글

[Trading] L-ATS 사용자 시나리오  (0) 2020.08.02
[Trading] 사용자 정보 구조  (0) 2020.07.18
[Trading] HTS 로그인 설계, 구현  (0) 2020.07.08
[Trading] 프로그램 로그인  (0) 2020.06.21
[Trading] 첫번째 프로그램  (0) 2020.05.24
Posted by [ 브랜든 ]
,

프로그램 명 : L-ATS (Lim's Automatic Trading System)

버전 : 1.0

환경 : Visual Basic

주요기능 : 검색식 기반 주식 매수, 설정값 기반 주식 매도, 스탑로스

API : 키움증권 API

제작기간 : 2015.05 ~ 2015.08

 

 

키움에서 제공하는 검색식 기반 자동매매 프로그램이다. 

구현된 기능 및 UI 구조는 당시 안정성 및 디테일한 기능 제공으로 유명했던 어떤 프로그램을 벤치마킹했다.

 

매수와 매도를 전적으로 프로그램에 맡기는 형태로 검색식을 얼마나 잘 만드냐에 따라 희비가 갈린다.

경험자는 잘 알겠지만 매수를 자동으로 하는것이 매우 어렵다.

때문에 새로만들 두번째 L-ATS는 매도만 하는 프로그램으로 구상했다.

물론 일반적인 스탑로스라면 재미없겠지만, 아직 어느곳에서도 사용되지 않았던 방식의 스탑로스가

적용될 것이다.

 

API는 키움 -> 이베스트로 변경 예정.

C#으로 만들 생각하니 벌써부터 두근두근 거린다.

'Trading' 카테고리의 다른 글

[Trading] L-ATS 사용자 시나리오  (0) 2020.08.02
[Trading] 사용자 정보 구조  (0) 2020.07.18
[Trading] HTS 로그인 설계, 구현  (0) 2020.07.08
[Trading] 프로그램 로그인  (0) 2020.06.21
[Trading] 두번째 프로그램  (0) 2020.06.07
Posted by [ 브랜든 ]
,