이번에 실험해볼 데이터는 KODEX 레버리지 & KODEX 인버스를 가지고 데이트레이딩을 시도해보려고합니다. 그러려면 데이터가 있어야겠죠!
데이터는 키움증권에서 제공하는 DDE 서비스를 통해 틱단위로 데이터를 쌓으려고 합니다.
DDE는 영웅문 프로그램에서 상단 좌측의 (기능)란을 누르면 맨 아래쪽에 엑셀연동서비스(DDE)라고 뜨는데 그걸 클릭하면 아래와 같은 창을 볼 수 있습니다.
위 창에서 원하는 종목, 원하는 필드의 데이터를 받아올 수 있습니다. 저는 코스닥 레버리지 ETF와 인버스 ETF를 이용하기로 하였기 때문에 위와 같이 설정해주었습니다.
이후 오른쪽 아래의 '엑셀로 보내기'를 클릭하면 아래와 같이 엑셀 파일이 열리게 됩니다.
위는 사진이라 수시로 바뀌지 않지만, 실제로 DDE를 실행시켜 보면 셀 안의 값들이 계속 바뀌는 것을 볼 수 있습니다. 제 목표는 수시로 바뀌는 값들을 계속 기록해서 쌓아나가는 것이 목표이기 때문에 VBA를 사용하여 셀 값이 바뀔 때마다 기록하도록 설정해주었습니다.
VBA는 다루어본 적이 없기 때문에 구글링을 통해서 적당히 코드를 짜집기해서 만들었습니다!
데이터를 기록하는 순서는 다음과 같습니다.
1. 기록할 데이터의 종류만큼 시트를 생성(예시에서는 코스닥 레버리지 & 인버스 2개이므로 시트 2개 생성)
2. 기록될 데이터가 표시되는 시트(기본값은 Sheet1)를 우클릭하여 코드 보기를 클릭
3. 아래의 코드 입력
Private Sub Worksheet_Calculate() With Sheets("Record") lr = .Cells(Rows.Count, "A").End(xlUp).Row If Range("E2").Value <> .Cells(lr, "E") Then .Cells(lr + 1, "A").Value = Range("A2").Value .Cells(lr + 1, "B").Value = Range("B2").Value .Cells(lr + 1, "C").Value = Range("C2").Value .Cells(lr + 1, "D").Value = Range("D2").Value .Cells(lr + 1, "E").Value = Range("E2").Value .Cells(lr + 1, "F").Value = Range("F2").Value .Cells(lr + 1, "G").Value = Range("G2").Value .Cells(lr + 1, "H").Value = Range("H2").Value .Cells(lr + 1, "I").Value = Range("I2").Value .Cells(lr + 1, "J").Value = Range("J2").Value .Cells(lr + 1, "K").Value = Range("K2").Value .Cells(lr + 1, "L").Value = Range("L2").Value End If End With With Sheets("Record1") num = "3" lr = .Cells(Rows.Count, "A").End(xlUp).Row If Range("E" + num).Value <> .Cells(lr, "E") Then .Cells(lr + 1, "A").Value = Range("A" + num).Value .Cells(lr + 1, "B").Value = Range("B" + num).Value .Cells(lr + 1, "C").Value = Range("C" + num).Value .Cells(lr + 1, "D").Value = Range("D" + num).Value .Cells(lr + 1, "E").Value = Range("E" + num).Value .Cells(lr + 1, "F").Value = Range("F" + num).Value .Cells(lr + 1, "G").Value = Range("G" + num).Value .Cells(lr + 1, "H").Value = Range("H" + num).Value .Cells(lr + 1, "I").Value = Range("I" + num).Value .Cells(lr + 1, "J").Value = Range("J" + num).Value .Cells(lr + 1, "K").Value = Range("K" + num).Value .Cells(lr + 1, "L").Value = Range("L" + num).Value End If End With End Sub
간략하게 위 코드의 의미를 분석해보자면,
첫 파트의 경우 코스닥 레버리지를 기록하기 위한 시트인 Record (새로 만든 시트의 이름을 기입) 와 연동하여 작업을 하게 됩니다.
현재 존재하는 마지막 행의 번호를 받아온 후, (가장 최근에 기록된 데이터)
해당 행의 'E' 열과 현재 DDE에서 연동된 'E2'의 데이터를 비교해서 같지 않다면
그 다음 행에 현재 수신된 데이터를 기록하는 과정입니다.
저는 거래량을 기준으로, 거래량이 바뀔 때 기록되도록 해놓았는데 목적에 따라 시간 등으로 설정해도 좋을 것 같습니다.
아무튼 위와 같이 설정을 하고 실행을 시키면 다음과 같이 데이터가 기록됩니다.
저는 제가 다루기 편하도록 시트를 따로 떼어 csv파일로 저장해놓았습니다.
이제 구해놓은 데이터를 바탕으로 알고리즘 짜고 백테스팅을 돌려보고 해야겠네요!
오늘은 이상으로 마치겠습니다.

댓글 없음:
댓글 쓰기