모든 프로그램들은 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 [ 브랜든 ]
,