GxTradeStore의 구조
거래 전반을 관리하는 GxTradeStore와 하위 객체에 대해 알아 봅니다.

클라이언트가 거래 전반에 대한 정보와 주문 도구를 이용하기 위새서는 GxTradeStore 객체를 사용해야 합니다. GxTradeStore는 최상위 GxServer 하위에 존재하며 GxSymbolStore와는 같은 레벨에 존재 합니다. GxTradeStore는 크게 두 가지로 분류가 되는데 거래 전반의 정보 객체들과 주문 도구로 분류 됩니다.

거래 전반의 정보는 GxAccounts, GxOrders, GxPositions, GxFills, GxConfirms 등이 있으며 이는 GxAccount(계좌), GxOrder(주문), GxPosition(잔고), GxFill(체결), GxConfirm(확인) 을 구성원으로 하는 Collection 객체 이며 GxTradeStore 하위에 존재 합니다.

GxAccount, GxOrder 는 하위에 다른 Collection 객체를 두는 특이한 구조입니다. GxAccount는 하위에 GxOrders, GxPositions 를 둡니다. 이것들은 이전에 GxTradeStore 하위의 GxOrders, GxPositions 과는 분명 다른 객체 입니다. 이전에 객체는 전체 주문, 전체 잔고를 관리하는 Collection 객체 이지만 GxAccount 하위의 GxOrders, GxPositions 는 GxAccount 계좌에 해당하는 주문, 잔고를 관리하는 Collection 객체 입니다. GxOrder도 GxAccount와 마찬가지로 GxConfirms, GxFills Collection 객체를 하위에 두고 있습니다.

GxPosition의 경우 'Account', 'Symbol' 속성을 가지고 있습니다. 'Account'속성은 잔고에 해당하는 GxAccount를 가리키며 'Symbol'은 잔고에 해당하는 GxSymbol을 가리킵니다. 이와 같은 형태는 GxConfirm, GxFill 등 자주 나타나는 형태 입니다.

주문 도구는 GxOrderHandler, GxEmHandler 두 가지가 있습니다. 이 두 가지 GxTradeStore 하위에 있으며 Collection 객체가 아닙니다. 주의할 점은 주문들이 나가기 위해서 대상 계좌가 고수Plus 프로그램에서 '계좌 비밀번호 확인'이 되어야 합니다. 이는 고수Plus 프로그램에 수동적으로 해 주어야 합니다. 그리고 주문 메소드 사용 후 반환되는 값이 True인지 Null이 아닌지 확인하는 습관을 가져야 합니다. GxOrderHandler는 일반주문을 제외한 모든 주문 화면들이 사용하는 주문 모듈을 사용하고 GxEmHandler는 일반주문 모듈을 사용합니다.

GxOrderHandler는 IGxOrderHandler 인터페이스를 통해 신규, 정정, 취소 주문을 낼 수 있고 주문 추적 객체인 GxOrderReq의 Collection 객체를 하위에 두고 있습니다. 이를 사용하여 주문의 상태를 추적할 수 있습니다.

GxEmHandler는 긴급시의 상황을 바탕으로 만들어진 모듈을 사용하므로 주문 추적 기능은 없습니다. 단순히 전송 성공/실패를 수신 할 수 있습니다.
GxTradeStore 이벤트

GxAccount 객체의 속성 값이 변경되었을 경우 이벤트가 발생하며 OnAccountUpdated 입니다. 이를 수신하려면 GxTradeStore 하위의 GxAccounts 객체에 이벤트 요청을 해야 합니다. GxPosition 객체가 주문을 통하여 신규로 생성이 되었을 때 OnNewPosition 이벤트가 발생합니다. 기존의 GxPosition 객체의 수량 속성등이 변경되었을 경우 OnPositionUpdated 이벤트가 발생합니다. GxPosition의 평가손익이 변경 되었을 경우 OnEvalPLUpdated 이벤트가 발생합니다. 이 세 개의 이벤트는 GxTradeStore 하위의 GxPositions 객체에 이벤트 요청을 해야 합니다.

GxOrder 객체가 주문을 통하여 신규로 생성이 되었을 때 OnNewOrder 이벤트가 발생합니다. 기존의 GxOrder 객체가 주문 수량이 바꾸는 등의 변경이 있는 경우 OnOrderUpdated 이벤트가 발생합니다. 이 두 이벤트를 수신하려면 GxTradeStore 하위의 GxOrders 객체에 이벤트 요청을 해야 합니다.

GxFill 객체가 주문을 통한 체결 시 신규로 생성이 되었을 때 OnNewFill 이벤트가 발생합니다. GxFill 객체가 부분체결 상태에서 부분체결 상태를 유지하고 체결 수량이 변경이 변경되었을 때 OnFillUpdated 이벤트가 발생합니다. 이 두 이벤트를 수신하려면 GxTradeStore 하위의 GxFills 객체가 이벤트 요청을 해야 합니다.

GxConfirm 객체가 정정 주문을 통하여 신규로 생성이 되었을 때 OnNewConfirm 이벤트가 발생합니다. 이 이벤트를 수신하려면 GxTradeStore 하위의 GxConfirms 객체가 이벤트 요청을 해야 합니다.

GxOrderHandler 의 경우 하위의 GxOrderReq의 상태가 변할 때 OnStateChanged 이벤트가 발생합니다. 이 이벤트를 수신하려면 GxTradeStore 하위의 GxOrderHandler에 이벤트 요청을 해야 합니다.


GxEmHandler 의 경우 서버 접수 성공/실패를 OnEmOrderArrived 이벤트를 클라이언트에 알림니다. 이 이벤트를 수신하려면 GxTradeStore 하위의 GxEmHandler에 이벤트 요청을 해야 합니다.