[주식자동매매] 분할 매수/매도 코딩하기(끝), 실시간 현재가 받아온 후 분할 매수/매도 주문 전송
본문 바로가기

주식 자동매매 강의/중급반(시황 및 차트 구현)

[주식자동매매] 분할 매수/매도 코딩하기(끝), 실시간 현재가 받아온 후 분할 매수/매도 주문 전송

반응형

 드디어 분할 매수/매도 강의가 끝납니다. 여러분은 원하는 종목에 대해 원하는 가격에 분할 매수/매도를 할 수 있기 때문에 더 이상 HTS 창을 보지 않으셔도 됩니다. 아침 9시부터 오후 3시30분까지 완전한 자유를 얻으신 것을 축하드립니다.

 

 1. 키움 서버로부터 전달되는 데이터 받아오는 방(slot) 만들기

 키움 서버로부터 전달되는 데이터를 받아오는 부분입니다. 다시 말씀 드리지만 기초반에서 전부 했던 내용이며, 코드도 다 공유해 드렸었습니다. 혹시 이해가 어려우시면 기초반의 내용을 다 숙지 하시기를 추천드립니다.

  [링크 : 기초반 54강 무료 강의]

 

키움서버로부터 데이터 받아오기
키움서버로부터 데이터 받아오기

반응형

  (1) 키움서버로 장 시작 구분 요청하기 : SetRealReg 함수를 사용하여 장 시작 구분 요청을 합니다. 이때, FID 정보는 REALTYPE["장시작시간"]["장운용구분"]을 하시면 됩니다.

  (2) OnReceiveRealData 함수를 사용하여 받아오는 데이터를 모두 self.realdata_slot으로 넘겨줍니다. 그리고 체결 주문이 나가거나 주문이 완료되는 정보는 self.chejan_slot으로 넘겨줍니다.

 

 2. 장 운영상태 정보 받아오기

  우선 앞서 장 시작 구분 요청 데이터를 받아와 아래와 같이 메시지를 띄어 보겠습니다.

장 운영상태 정보 받아오기
장 운영상태 정보 받아오기

 (1) 장운 영구분에 대한 FID 번호를 REALTYPE에서 받아옵니다.

 (2) GetCommRealData(QString, int) 함수를 상용하여 관련 코드번호의  장운 영정보를 value에 저장합니다. value가 0이면 장 시작 전, 3이면 장 시작, 2이면 장 종료, 4면 장 마감입니다.

 (3) 위에서 받아온 value값이 0, 2, 3, 4일 때 각 메시지를 띄웁니다. 실제론 저 부분에 다양한 코딩을 할 수 있습니다. 예로 장 마감 시 데이터 분석 파일이 돌아가거나 등의 행위를 할 수 있습니다.

 

 3. 주식 채결 정보 받아오기

 드디어 우리가 원하는 종목에 대한 주식 채결 정보를 받아옵니다. 현재가부터 시작해서 다양한 데이터를 받아올 수 있던 거 기억하시죠? 아래 KOA Studio를 확인해 보시면 다양한 주식체결 정보를 받아올 수 있습니다. 저희는 현재가가 중요하죠. 물론 거래량, 누적거래량, 회전율 등을 이용해 더욱 멋진 프로그램을 만드실 수 있습니다.

주식 채결정보
주식 채결정보

 그러면 코딩 시작하겠습니다.

주식체결 정보
주식체결 정보

 (1) sRealType이 주식 채결이고 portfolio_stock_dict에 sCode가 있을 경우 아래 코드를 실행합니다. 가끔 네트워크 오류로 들어오는 이상 종목을 거르기 위한 곳입니다. 그리고 혹여나 등록된 종목이 아니면 거래가 되지 않도록 하기 위한 것이기도 합니다.

 

 (2) 체결시간, 현재가 등의 fid 번호를 받아옵니다. 그리고 GetCommRealData 함수를 사용해 우리가 원하는 값을 a, b, c등에 저장하게 됩니다. 그리고 가끔 +/-, 띄움 등이 포함된 값들이 있기 때문에 int, abs, strtip()을 이용해 우리가 식별할 수 있게 변경합니다.

 

3. 분할 매수 주문 전송하기

 분할 매수 코딩 시작하겠습니다. 기초반에서 했던 내용이며, 조건만 바뀌는 것입니다.

분할 매수 코딩
분할 매수 코딩

  (1) 만약 portfolio_stock_dict에 저장된 현재가가 우리가 설정한 가격(1차/2차/3차/4차) 보다 작을 때 아래와 같이 매수를 시작합니다.

 (2) 중복 매수를 막아주는 부분입니다. 앞서 우리가 리스트로 만들었던 self.orderitemlist_2에 sCode가 없다면 아래 코드를 실행합니다.

 (3) 매수가 시작되었기 때문에 self.orderitemlist에 매수가 된 종목을 저장합니다(다음번 매수를 막기 위한 것이죠). 그리고 Sendorder 함수를 사용해 매수 주문을 보냅니다(관련 함수의 자세한 설명은 기초반에 있습니다). 

 (4) 우리가 언제 무엇을 매수해야 하는지 디버깅해야겠죠. 따라서 텍스트 파일에 저장번호, 코드번호, 체결 가격, 체결시간을 저장합니다.

텍스트 저장
텍스트 저장

 (5) 매수가 올바르게 되었다면 우리에게 메시지를 보여 줍니다.

 

이런 식으로 계속 반복해 주시면 분할 매수가 됩니다. 아래 3차 매수도 똑같죠? 다른 부분은 3차 가격 하나입니다.

3차 분할 매수
3차 분할 매수

4. 분할 매도 주문 전송하기

 분할 매도는 분할 매수와 95% 동일합니다. 다른 부분만 말씀드리겠습니다. 딱 3 군대입니다.

분할 매도 주문 전송하기
분할 매도 주문 전송하기

 - 저 같은 경우 5차부터 8차까지 매도에 대한 정보이며, 우선 5차 가격을 바꿔 줍니다.

 - SendOrder 부분에 2 부분만 바꿔 주면 됩니다. 신규 매수에서 신규 매도로, 1에서 2로 바꿔 주시면 됩니다.

 

이렇게 원하는 가격과 수량을 바탕으로 분할 매수/매도를 완료하였습니다. 축하드립니다. 실제로 매수/매도 주문이 들어가게 되면 미체결 잔고로 들어가고 체결되면 우리 잔고에 업데이트되는 과정이 더 있습니다. 이 부분은 기초반 강의와 100%로 똑같기 때문에 링크로 대체합니다. 기초반 52강과 53강에 모든 설명과 코드가 들어 있습니다.

 

주문 결과 확인 : 미체결/체결 정보 [링크 : 52강, 53강]  

 

최종 결과 물입니다. 구동되는 거 다 확인했으니(4주씩 2번 매수) 혹시 궁금한 점 있으시면 댓글 달아 주시고 필요시 추가 강의하도록 하겠습니다. 감사합니다.

최종 결과물
최종 결과물
4주씩 2번 분할 매수
4주씩 2번 분할 매수

반응형

.link_tit