2012년 3월 3일 토요일

Elliott Pattern Helper와 HTS의 DDE 연동 기능 구현 2


※ 이 글은 EPH(Elliott Pattern Helper) beta 버전에만 적용되며, v1.0에는 기본으로 포함된 기능입니다.
※ EPH와 상관없이 엑셀에서 HTS의 DDE를 연계하는 것과 관련된 내용은 'Excel에서 HTS DDE 활용하기' 시리즈를 참고하십시요.  



지난 블로그에 이어 DDE를 통한 EPH와 증권사 HTS와의 연동에 관한 두 번째 블로그를 올립니다.

2. 캔들 정보 자동 생성

절차는 다음과 같습니다.
  • 분봉 데이터 엑셀 저장
  • DDE 함수 입력
  • 엑셀 매크로 모듈 작성
  • DDE update 이벤트 처리


가. 분봉 데이터 엑셀 저장

아래 그림 1과 같이 분석하고자 하는 종목에 대해 특정 분단위를 선택하여 HTS로 부터 분봉 데이터를 엑셀 파일로 저장합니다.

그림 1. LG전자 15분봉 데이터


나. DDE 함수 입력

다음 그림 2와 같이 새로운 sheet를 생성하여 sheet 이름을 'Quote'로 변경한 후 DDE 함수를 채웁니다. 이때 현재가, 거래량, 체결량 및 체결시간을 반드시 포함해야 합니다. 키움증권 영웅문의 경우 아래와 같이 입력하면 됩니다.

  • 현재가: KHRun|'??????'!'10'
  • 거래량:  KHRun|'??????'!'13'
  • 체결량:  KHRun|'??????'!'15'
  • 체결시간:  KHRun|'??????'!'20'

위에서 ??????는 해당 종목의 종목코드로 대체하면 됩니다.

※ 주의: 아래에서 제공하는 엑셀 매크로 모듈(MQuote.bas)를 다운로드하여 수정 없이 사용하시려면 그림 2와 같이 '기준가' 항목도 포함하셔야 합니다. 

증권사 HTS의 DDE 연결 기능을 활성화하면 DDE 함수를 입력한 셀의 값이 해당 종목 주식 거래가 체결될 때마다 지속적으로  update됩니다. 그림 2의 경우, 셀 A2, B2, C2, D2, E2가 update되는 것이죠.

그림 2. 영웅문 DDE 함수 입력


참고로 키움증권 영웅문에서 DDE 연결을 활성화하는 방법은 아래 그림과 같습니다.

그림 3. 키움증권 영웅문의 DDE 연결


다. 엑셀 매크로 모듈 작성

DDE를 통해 해당 종목의 체결 정보가 update될 때, 새로운 캔들을 생성하거나 기 생성된 캔들 정보(고가, 저가, 거래량 등)를 수정하기 위한 엑셀 매크로 모듈이 필요합니다.

이를 위해 엑셀에서 Alt 키와 F11키를 동시에 눌러 엑셀 VB 편집창을 띄운 후, 아래 그림 4와 같이 해당 종목의 분봉 데이터를 저장한 엑셀 파일에 모듈을 추가하고 이벤트 처리 루틴을 작성합니다.

그림 4. 엑셀 매크로 모듈 삽입 방법

매크로 작성 과정을 돕기 위해 제가 작성한 모듈을 올려 놓으니 다운로드 받으신 후 독자 여러분의 환경에 맞게 수정하여 사용하시기 바랍니다.

※ 모듈 다운로드 

위 파일을 다운로드 받으신 후 다음 그림 5와 같이 엑셀 VB 편집창에서 '파일 가져오기'를 실행하시면 됩니다.

그림 5-1. 매크로 모듈 가져오기 1

'파일 가져오기'를 실행하면 파일 선택창이 활성화되며, 다운로드 받은 파일(MQuote.bas)을 선택하여 '열기' 버튼을 클릭하시면 됩니다.

그림 5-2. 매크로 모듈 가져오기 2

'파일 가져오기'가 완료되면 다음 그림과 같이 삽입된 모듈을 확인할 수 있습니다.
※ MQuote.bas의 소스코드 내용과 관련하여 문의할 사항이 있으시면 댓글을 남겨 주세요.

그림 6


라. DDE update 이벤트 처리

마지막으로 DDE update 이벤트를 받아 위에서 작성한 매크로를 실행시키기 위한 trigger 코드를 추가합니다.

DDE value의 update 이벤트를 처리하는 방법이 Worksheet의 Worksheet_change()나 Worksheet_calculate() 메써드를 overriding하는 방법과 Workbook의 SetLinkOnData 함수를 사용하는 방법이 있다고 합니다.

그런데 키움증권 영웅문의 DDE 모듈인 KHRun.exe의 경우 무슨 이유에선지 DDE value update 이벤트가 Worksheet_change()나 Worksheet_calculate()를 triggering하지 못하더군요. 그래서 SetLinkOnData를 사용하는 코드를 추가하도록 하겠습니다.

아래 그림 7과 같이 해당 엑셀 파일의 'ThisWorkbook'에 코드를 삽입합니다.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Workbook_Open()
    On Error Resume Next
    ThisWorkbook.VBProject.References.AddFromFile _       
"C:\Users\drstones\AppData\Roaming\Microsoft\AddIns\ElliottPatternHelper.xlam"
    ThisWorkbook.SetLinkOnData "KHRun|'??????'!'20'", "Quote"
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

위 코드에서 수정해야 할 부분이 두 군데 있습니다. 첫 번째는 Elliott pattern helper Add-In의 파일 위치를 수정하는 것입니다. 그리고 ??????는 해당 종목의 종목코드로 대체하면 됩니다.

그림 7. Trigger 코드 추가


이제 모든 작업이 끝났습니다. 해당 파일을 '매크로 사용 통합문서'로 저장한 후, HTS의 DDE를 실행시킨 후 파일을 다시 open합니다.

그림 8. 파일 저장


파일을 open한 후 해당 분봉의 단위시간이 지남에 따라 캔들 정보가 자동으로 생성 및 변경되는 것을 확인할 수 있습니다.

그림 9


그리고 'Quote' sheet에서 Elliott chart와 Fractal Counting chart를 생성하면 DDE update 이벤트가 발생할 때마다 chart가 변경될 것입니다.

위 과정이 조금 복잡한가요? 다음 블로그에서는 EPH chart를 활용하는 것과 관련된 얘기를 잠시 한 후, 위 모든 과정을 자동화할 수 있는 매크로를 작성해 보도록 하겠습니다.


※ Elliott Pattern Helper Add In
  • Download Add In for Excel 2007 
  • Download Add In for Excel 2003 

댓글 9개:

  1. 문의좀 드립니다.
    우연히 서핑하다가 제가 vba로 주식 캔들차트 구현하는것에 관심이 있어서 보게되었는데요. 키움으로 dde 연동해서 매크로 실행해보니 "컴파일 오류입니다: Sub 또는 Function이 정의되지 않았습니다" 하고 에러 메세지 창이 뜹니다. 이런 에러는 어떻게 조치해야 하나요?
    제가 워낙 VBA 초보라 잘 몰라서 질문을 드립니다.

    답글삭제
    답글
    1. 작성한 매크로에서 호출하는 다른 매크로 모듈 또는 함수가 존재하지 않기 때문인데요, 혹시 Elliott Pattern Helper를 설치하셨는지요?

      삭제
  2. 혹시 모듈 다운로드 파일을 재업로드 해주실수있으신가요??

    답글삭제
    답글
    1. 안녕하세요?
      링크 위에서 마우스 오른쪽 버튼 클릭 -> '다른 이름으로 링크 저장' 기능을 사용하시기 바랍니다.
      보안 경고, 예를 들어 크롬의 경우 '안전하게 다운로드할 수 없습니다'처럼 경고를 할 경우, '계속' 클릭하여 진행하십시요.

      삭제
    2. ※모듈 다운로드 �� 옆에 링크가 안보여요ㅠㅠ 손가락 버튼 누르면 페이지를 표시 할 수 없다고 뜨네요,,

      삭제
    3. 위 페이지 내용 중
      'Download Add In for Excel 2007 ☞'의 '☞'에 파일 다운로드 링크가 걸려 있습니다.
      마우스 오른쪽 버튼을 클릭하여 컨텍스트 메뉴가 뜨면,
      크롬 브라우저의 경우, '다른 이름으로 링크 저장' 메뉴를,
      마이크로소프트 에지 브라우저의 경우, '(으)로 링크 저장' 메뉴를 선택하시면 됩니다.

      삭제
    4. 모듈 다른로드...다른이름으로 링크 저장을 해도 네트워크 문제로 다운로드 할 수 없다고 뜹니다ㅠ

      삭제
    5. 크롬의 경우 브라우저 하단에 뜨는 보안경고 우측의 아래화살표 클릭하여 추가 옵션으로 저장할 수 있으며, 에지 브라우저는 브라우저 우측 상단에 뜨는 보안경고에서 '자세히 보기' 클릭 후 '...' 버튼 클릭하여 저장할 수 있습니다.

      삭제
  3. 크롬사용자인데요 unknown 유저님질문과 동일한 '실패-네트워크 오류" 현상이 계속발생 하고있읍니다. 해결방법으로 답길되로 진행하영도 해결이 안되고 동일한 현상이발생합니다 ㅠㅠㅠ

    답글삭제