반응형
🔍 개요
조건매매 전략을 Excel VBA로 자동화했다면,
마지막 단계는 실제 계좌와 연동된 API 시스템을 통해 전략을 자동 주문으로 전환하는 것입니다.
이 단계에서는 다음 2가지 방식 중 원하는 방식으로 확장할 수 있습니다:
- ✅ 실거래 API 연동 (키움 OpenAPI 등)
- ✅ 실전매매 테스트 모드 (가상 주문 시스템)
✅ 실거래 API vs 테스트 모드 차이
항목 | 실거래 API 연동 | 실전 테스트 모 |
실제 주문 체결 | ✅ 예 (실제 계좌 사용) | ❌ 아님 (가상으로 처리) |
필요 조건 | API 인증, 보안 설정, 계좌번호 | 내부 함수 + 조건 감지만 필요 |
위험성 | 실계좌 자산이 움직임 ⚠️ | 테스트 전용, 안전함 ✅ |
활용 목적 | 실전 투자 자동화 | 전략 점검, 시뮬레이션 기록용 |
🧠 실거래 API 연동 (키움증권 OpenAPI+ 사용)
✅ 1. 준비 사항
- 키움증권 HTS 설치 (영웅문4)
- OpenAPI+ (32bit 전용) 설치
- API 신청 승인 (계좌 인증 필요)
- Visual Basic 또는 Python에서 연동 가능
✅ 2. 주문 실행 핵심 함수 (VBA 예시)
vba(OrderModule.bas) <== 신규모듈
Function 키움_주문_실행(종목코드 As String, 수량 As Long, 가격 As Long, 매수여부 As Boolean)
Dim ocx As Object
Set ocx = CreateObject("KHOpenAPI.KHOpenAPICtrl.1") ' 영웅문 API 컨트롤
Dim 주문유형 As String
If 매수여부 Then
주문유형 = "2" ' 신규매수
Else
주문유형 = "1" ' 신규매도
End If
Dim result As Long
result = ocx.SendOrder("VBA자동주문", "1000", "계좌번호", 주문유형, 종목코드, 수량, 가격, "00", "")
If result = 0 Then
MsgBox "✅ 주문 전송 성공!"
Else
MsgBox "❌ 주문 전송 실패: 코드 " & result
End If
End Function
✅ 3. 조건매매 판단 후 주문 실행 연결
vba(OrderModule.bas)
If signalText Like "*매수 시그널*" Then
키움_주문_실행 "005930", 10, 80000, True
ElseIf signalText Like "*매도 시그널*" Then
키움_주문_실행 "005930", 10, 0, False ' 시장가 매도
End If
🧪 실전매매 테스트 모드 (주문 시뮬레이션)
실계좌가 없어도 다음처럼 가상 주문을 실행한 것처럼 기록만 남기는 테스트 모드도 가능합니다.
✅ 예시 코드 (테스트용 주문 기록)
vba(OrderModule.bas)
Sub 가상주문_기록(r As Long, 매수여부 As Boolean)
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
If 매수여부 Then
ws.Cells(r, 55).Value = "📥 가상매수"
ws.Cells(r, 56).Value = ws.Cells(r, 5).Value ' 매수가
Else
ws.Cells(r, 55).Value = "📤 가상매도"
ws.Cells(r, 56).Value = ws.Cells(r, 5).Value ' 매도가
End If
End Sub
✅ 조건 발생 시 호출
vba(OrderModule.bas)
If signalText Like "*매수 시그널*" Then
가상주문_기록 r, True
ElseIf signalText Like "*매도 시그널*" Then
가상주문_기록 r, False
End If
✅ 실전 연동 시 주의사항
항목 | 설명 |
✅ 주문 제한시간 | 08:30~15:30 사이에만 주문 가능 |
✅ 서버 오류 대비 | 주문 응답 실패 시 재시도 로직 필요 |
✅ 자산 초과 방지 | 현재 보유 수량/금액 체크 후 실행 권장 |
✅ 모의투자 계좌 테스트 | 키움 모의투자 계좌를 통해 먼저 테스트 강력 권장 |
✅ 결론
조건매매 시스템의 마지막 단계는 실제 매매와의 연결입니다.
실거래 API와 직접 연동하거나,
보다 안전하게 시작하고 싶다면 가상 주문 테스트 모드로 전략 검증을 이어갈 수 있습니다.
Excel VBA에서도 매우 간단한 함수 호출 방식으로 자동주문을 구현할 수 있으며,
실시간 시그널 감지 시스템과 결합하면 완전한 실전 조건매매 자동화 시스템이 완성됩니다.
✅ 결론: 모듈 구조 분리 기준
모듈이름 | 역할 | 이 단계 포함 여부 |
Module1 | 실시간 기록, 조건매매 시그널 감지, 매매 판단 및 실행 ✅ | ✔️ 실전 주문 함수는 여기 포함 가능 |
RiskModule | 손실 제한, 횟수 제한, 시간 제한 등 | ❌ 포함하지 말 것 |
ReportModule | 전략 리포트 생성, 수익률 통계 | ❌ |
BacktestModule | 리플레이, 기간별 백테스트 | ❌ |
✅ (선택) OrderModule | 주문 실행 함수만 별도로 분리하고 싶을 때 | ✅ 깔끔한 구조를 원한다면 추천 |
📌 실전 적용에 따라 선택 기준
🅰 간단히 하고 싶다면:
- Module1 에 아래 함수들을 그대로 추가해도 충분합니다:
- 키움_주문_실행()
- 가상주문_기록()
- 조건 감지 시 주문 연결 로직
✅ 예:
vba(OrderModule.bas)
If signalText Like "*매수 시그널*" Then
키움_주문_실행 "005930", 10, 80000, True
🅱 기능별로 철저히 모듈을 분리하고 싶다면:
- OrderModule.bas 이라는 새 모듈을 만들고, 아래 항목들을 넣으세요:
✅ 넣는 함수 예시:
함수명설명
키움_주문_실행() | 실전 주문 실행 (API 호출) |
가상주문_기록() | 테스트 모드 주문 기록 |
실전_매매_조건검사() | 자산/시간 등 추가 체크가 필요한 경우 |
🔁 조건매매_매수매도판단(r) 내 사용 예시
이 함수는 여전히 Module1에 있고, 그 안에서 주문 함수만 호출하는 구조가 가장 일반적입니다:
vba(OrderModule.bas)
Sub 조건매매_매수매도판단(r As Long)
...
If signalText Like "*매수 시그널*" Then
Call 키움_주문_실행("005930", 10, 0, True) ' 실전
' 또는
Call 가상주문_기록(r, True) ' 테스트 모드
End If
End Sub
✅ 정리
케이스권장 | 모듈 위치 |
실시간 로직과 같이 쓰고 싶을 때 | ✅ Module1 |
주문 관련 기능만 따로 모으고 싶을 때 | ✅ OrderModule |
✅ 키움 OpenAPI+에서 선물/옵션 주문용 함수
vba(OrderModule.bas)
SendOrderFO(
sRQName As String, ' 사용자 구분명
sScreenNo As String, ' 화면번호
sAccNo As String, ' 계좌번호
sCode As String, ' 종목코드 (예: 101W6000)
lOrdKind As Long, ' 주문종류 (1:신규매수, 2:신규매도, 3:매도청산, 4:매수청산)
lQty As Long, ' 주문수량
sPrice As String, ' 주문가격 (시장가일 경우 "0")
sHogaGb As String, ' 호가유형 (00:지정가, 03:시장가 등)
sOrgOrderNo As String ' 원주문번호 (정정/취소용)
) As Long
✅ VBA용 선물 주문 함수 예시 (신규 주문 전용)
vba(OrderModule.bas)
Function 선물_주문_실행(종목코드 As String, 수량 As Long, 가격 As Long, 주문종류 As String)
' 주문종류: "매수", "매도", "매수청산", "매도청산"
Dim ocx As Object
Set ocx = CreateObject("KHOpenAPI.KHOpenAPICtrl.1")
Dim 주문코드 As Long
Select Case 주문종류
Case "매수": 주문코드 = 1
Case "매도": 주문코드 = 2
Case "매도청산": 주문코드 = 3
Case "매수청산": 주문코드 = 4
Case Else
MsgBox "❌ 잘못된 주문종류입니다. (매수/매도/청산)", vbCritical
Exit Function
End Select
Dim 가격형식 As String
If 가격 = 0 Then
가격형식 = "0"
Else
가격형식 = CStr(가격)
End If
Dim result As Long
result = ocx.SendOrderFO("선물주문", "7000", "계좌번호", 종목코드, 주문코드, 수량, 가격형식, "03", "")
If result = 0 Then
MsgBox "✅ 선물 주문 전송 성공!"
Else
MsgBox "❌ 선물 주문 실패! 오류 코드: " & result
End If
End Function
✅ 조건 시그널 발생 시 연결 예시 (매수/매도)
vba(OrderModule.bas)
If signalText Like "*매수 시그널*" Then
Call 선물_주문_실행("101W6000", 1, 0, "매수") ' 시장가 신규매수
ElseIf signalText Like "*매도 시그널*" Then
Call 선물_주문_실행("101W6000", 1, 0, "매도") ' 시장가 신규매도
End If
🔐 주의할 점
항목 | 설명 |
종목코드 | 선물 종목코드 사용 (예: "101W6000": 코스피200 선물 최근월물) |
계좌번호 | 실거래용 선물 계좌 (번호 형식: 5206xxxx-xx) |
시장가 호가코드 | "03" (선물 시장가 지정) |
실제 주문 가능 시간 | 08:45 ~ 15:45 (또는 상품별 다름) |
✅ 정리된 연결 코드
vba(OrderModule.bas)
Sub 조건매매_매수매도판단(r As Long)
Dim signalText As String
signalText = ws.Cells(r, 50).Value
If signalText Like "*매수 시그널*" Then
Call 선물_주문_실행("101W6000", 1, 0, "매수")
ElseIf signalText Like "*매도 시그널*" Then
Call 선물_주문_실행("101W6000", 1, 0, "매도")
End If
End Sub
📝 적용해 보시고 모르는것 있으시면 댓글 달아주세요. 확인해서 알려드릴께요 !!!
반응형