개요. | |
문제정의. CyFinAPI 체계에서, CyOrderModify 와 CyOrderCancel 의 타겟이 되는 CyOrderNew 에는 아래와 같은 2가지 관리기능이 필수요구된다. 1. CyOrderModify/Cancel 명령 적용 가능여부를 CyOrderNew에서 제공해야한다. 2. 1개의 CyOrderNew 에 1개 이상의 CyOrderModify/Cancel 프로세스 중복 불허하는 수단이 CyOrderNew에서 제공되어야 한다. 즉, CyOrderModify/Cancel (모두 CyOrderNew를 수정하는 기능임) 은 1개의 CyOrderNew 개체에 1개의 수정프로세스만 진행가능하며, 진행중인 수정프로세스가 종료된 이후에만 추가의 수정프로세스가 CyOrderNew에 접근가능하다. 상기의 수단이 없는 경우, 발생할 수 있는 오류는 자명하다. 예. CyOrderNew 를 타겟으로 하는 CyOrderModify 가 시작되었는데 CyOrderModify 가 아직 거래소 전송중이고 최종 적용여부가 결정나지도 않은 시점에 프로그램에서 또다른 CyOrderModify 혹은 CyOrderCancel 을 적용하였다고 프로그램적으로 적용은 되고 해당 정정/취소주문도 전송은 가능하다. 중간에 Broker(증권사)서버등에서 오류가 있는 주문인 경우에는 오류 통보를 해주기는 하나, 프로그램 출발점부터 오류가 자명한 것은 첨부터 진행하지 않는것이 중요하다. 문제해결 방향. 상기1 을 판단함에 분명히 사용될 정보 중에는 CyOrderNew 자체의 상태정보인 주문전송상태, 미체결수량 상태등이 활용될 것이다. 상기2 를 판단함에 분명히 사용될 정보 중에는 현재 CyOrderNew에 현재 수정프로세스 진행여부가 필수로 사용되며, 해당 프로세스의 실시간 갱신 처리 필수요구된다. Thread Safety 는 당연 만족해야함. - 구현하다가 스레드안전 문제가 발생할 소지가 있는 경우 구현함. 상기1, 2의 기능은 CyOrderModify/Cancel 을 적용하려는 입장에서는 CyOrderNew 에 "수정프로세스 적용가능 여부 정보"라는 점에서는 동일하나, CyOrderNew 에서의 해당 기능들을 구현하는 입장에서는 CyOrderNew 가 수정프로세스가 진행중이라는 상태 설정과 CyOrderNew자체의 상태 (주문전송상태, 미체결수량 상태) 라는 것으로 분리된 기능이므로 CyOrderNew측에서의 구현에서 논리적으로 분리되어 구현되도록 한다. | |
|
구현 | |
CyOrderNew에 상태변수 정의. 상태변수명 : emCyOdStateMCT 변수명 의미 : CyOrder State Modify Cancel Targeted. 변수 초기화 : CyOrderNew 개체 생성시 초기화 값은 emMTNon으로 설정된다. 변수값이 셋되는 시점 : CyOrderNew 를 타겟으로 하는 CyOrderModify/CyOrderCancel 적용시작하는 시점에 emCyOdStateMCT 변수값이 emMTModify (CyOrderModify 적용하는 경우)또는 emMTCancel (CyOrderCancel 적용하는 경우) 로 설정된다. 변수값 릴리스 되는시점 : 해당 수정프로세스가 종료되는 시점에 emMTNon 으로 변경된다. CyOrderNew에 함수 정의1. - 수정처리 진입시 점검함수. 함수명 : GetState_CanBeTarget_ModifyCancel() CyOrderModify, CyOrderCancel 을 적용하려고 할 때는 이 함수를 먼저 호출해서 가능한 경우에만 CyOrderModify/Cancel 진행시작한다. CyOrderNew에 함수 정의2. - 수정처리 시작/종료시 상태설정함수. CyOrderModify, CyOrderCancel 프로세스가 시작된 시점과 종료된 시점에 알릴 수단으로 CyOrderNew의 멤버 함수를 정의한다. 함수명 : SetState_ByMCProcess(bool start_stop, ExchAcpt 개체포인터 = nullptr); // 수정처리 중의 CyOrderNew 상태 설정이란 의미. 인자. bool start_stop : true = 수정프로세스 시작됨. false = 수정 프로세스 종료됨. ExchAcpt : 수정프로세스 종료시점에 이 값이 nullptr이 전달되지 않은 것은 ExchArriveFail 에 의한 것이며, null이 아닌 것이 전달되면 확정된 정보들(Accept, Reject . Accept 인 경우 확정된 수량,가격등 )을 확보할 수 있다. 수정프로세스 시작시점 - 1개 지점만 있음. - "주문신규"를 타겟으로 하는 주문정정/취소 개체 생성된 시점. 수정프로세스 종료시점 - 2개 지점 있음. 1. ExchArriveFail : 수정 명령이 Exchange에 도착실패함. 해당 수정적용안됨 확정상태. 2. ExchAcpt 수신된 지점. - 이 시점의 정보들. Accept(수정적용 확정된 수량 정보 확보됨.), Reject(수정적용안되었음. ) | |
|
///543.
'트레이딩' 카테고리의 다른 글
Limit Order Book - 호가창. (0) | 2016.01.24 |
---|---|
손매매 달인. 일본 B.N.F 등, 스캘핑 실전매매 동영상. (0) | 2016.01.21 |
Order Cancel Process. (0) | 2016.01.10 |
Order Modify Process. 주문정정처리. 관련 메시지 핸들러에서의 처리로직. (0) | 2016.01.09 |
Order Routing State (주문전송상태). CyOrder 개체의 전송 상태- 정의. (0) | 2016.01.07 |
댓글