씽크알고 : 씽크풀 알고리즘 트레이딩 with xingAPI

> 질의 응답 게시판 > 상세보기

커뮤니티

질의 응답 게시판
자유게시판
질의 응답 게시판
무료강의는 누구나 질문이 가능하며, 유료강의는 결제하신 강의에 대해서 질문이 가능합니다. 답변은 머니봇 강사님이 직접 달아드립니다.
트위터로 보내기 싸이월드 공감
답변 : 안녕하세요 씽크알고입니다.   |  질의 응답 게시판 2019-06-10 09:35:34
작성자   관리자 thinkpool 조회  144   |   추천  24
안녕하세요 씽크알고입니다. 
 
회원님께서 보내주신 코드는 저희가 배포한 코드가 아닙니다. 
저희가 배포한 코드가 아니면 저희가 답변해 드리기 어려운점 이해 부탁 드립니다. 
 
감사합니다. 
 
 
 
인용글

일단 제가 사용하기 편한 엑셀 vba로 작성하고 있습니다.

먼저 TR목록에서 O3105를 real목록에서 ovc를 체결 데이터를 같이 연동해서 코드를 짜보았습니다. 주식코드를 짜는 것과 마찬가지로 t1101에서 s3를 같이 짜는 방식과 마찬가지로 시도해보았습니다.

그런데 구동도중 계속 어딘가 에러가 뜨네요 이게 서로 코드가 잘 안맞아서 그런건지 아니면 다른 문제가 있는 건지 모르겠습니다.

그래서 o3106하고도 다르게 수식을 짜보기도 해습니다.

일단 제가 짠 코드는 다음과 같습니다. o3105와 real 목록의 ovc와 같이 짠 것입니다.

Dim WithEvents XAQuery_o3105 As XAQuery
Dim WithEvents XAReal_OVC_ As XAReal

Private Sub cmdLogin_Click()

    frmLogin.Show
    
    If frmLogin.lbSuccess = "Success" Then
        cmdLogin.Enabled = False
    End If
        
End Sub

Private Sub CommandButton1_Click()

    Call Request_o3105(Cells(10, "J").Value)
    
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("J10")) Is Nothing Then
        Call Request_o3105                              ' o3106 호가조회
    End If
End Sub


Private Sub Request_o3105()
    ' 기존 real 해제
    If XAReal_OVC_ Is Nothing Then
    Else:        Call XAReal_OVC_.UnadviseRealData
    End If
    If XAQuery_o3105 Is Nothing Then    ' 객체를 생성
        Set XAQuery_o3105 = CreateObject("XA_DataSet.XAQuery")
    End If
    
    XAQuery_o3105.ResFileName = "\res\o3105.res"
    
    Call XAQuery_o3105.SetFieldData("o3105InBlock", "symbol", 0, Sheet2.Cells(7, 10))
    
    If XAQuery_o3105.Request(False) < 0 Then
        MsgBox "전송오류"
    End If

End Sub

Private Sub XAQuery_o3105_ReceiveData(ByVal szTrCode As String)
    Dim sTime As String
    
    Cells(1, "A") = XAQuery_o3105.GetFieldData("o3105OutBlock", "TrdP", 0)           ' 현재가
    Cells(1, "B") = XAQuery_o3105.GetFieldData("o3105OutBlock", "Cgubun", 0)         ' 체결구분
    Cells(1, "C") = XAQuery_o3105.GetFieldData("o3105OutBlock", "TrdQ", 0)           ' 체결수량
    Cells(1, "D") = XAQuery_o3105.GetFieldData("o3105OutBlock", "TotQ", 0)           ' 누적거래량
    
    ' 수신시간
    sTime = XAQuery_o3105.GetFieldData("o3105OutBlock", "TrdTm", 0)
    Cells(1, "F") = Left(sTime, 2) & ":" & Mid(sTime, 3, 2) & ":" & Mid(sTime, 5, 2)
    

    ' 객체를 생성한다.
    If XAReal_OVC Is Nothing Then
        Set XAReal_OVC = CreateObject("XA_DataSet.XAReal")
        XAReal_OVC.ResFileName = "\res\OVC_.res"
    End If
    
    Call XAReal_OVC.SetFieldData("InBlock", "symbol", Cells(10, "J").Value)
    
    ' 실시간 호가수신 등록
    Call XAReal_OVC.AdviseRealData

End Sub

Private Sub XAQuery_o3105_ReceiveMessage(ByVal bIsSystemError As Boolean, ByVal nMessageCode As String, ByVal szMessage As String)

    Cells(14, "I").Value = nMessageCode ' 요청 메세지
    Cells(14, "J").Value = szMessage '응답메세지
    
End Sub

Private Sub XAReal_OVC_ReceiveRealData(ByVal szTrCode As String)
    Dim sTime As String
    Dim arrHoga(1, 4)
   
    sTime = XAReal_OVC.GetFieldData("OutBlock", "trdtm")
    Cells(1, "F") = Left(sTime, 2) & ":" & Mid(sTime, 3, 2) & ":" & Mid(sTime, 5, 2)
    
    arrHoga(0, 0) = XAReal_OVC.GetFieldData("OutBlock", "curpr")
    arrHoga(0, 1) = XAReal_OVC.GetFieldData("OutBlock", "cgubun")
    arrHoga(0, 2) = XAReal_OVC.GetFieldData("OutBlock", "trdq")
    arrHoga(0, 3) = XAReal_OVC.GetFieldData("OutBlock", "totq")

    Range("A1:D1").Value = arrHoga
   
End Sub


인수의 개수나 속성이 잘못 되었다고 하고

-------------
이 부분은 런타임 디버그가 생깁니다
    [Sheet2.Range("B4") = XAReal_OVC_.GetFieldData("OutBlock", "curpr")          ' 현재가 ]
이 부분 입니다.

Dim WithEvents XASession_Account As XASession

Dim WithEvents XAQuery_o3105 As XAQuery         '해외선물현재가호가조회
Dim WithEvents XAQuery_CIDBT00100 As XAQuery    '해외선물 신규주문

Dim WithEvents XAReal_OVC_ As XAReal            '해외선물체결

'----------------------------------------------------------------
' 로그인 버튼 클릭
'----------------------------------------------------------------
Private Sub cbLogin_Click()                     '로그인
    frmLogin.Show
End Sub

'----------------------------------------------------------------
' 계좌콤보를 선택했을때
'----------------------------------------------------------------
Private Sub cbAccount_GotFocus()
    If XASession_Account Is Nothing Then
        Set XASession_Account = CreateObject("XA_Session.XASession")
    End If
    
    ' 계좌리스트를 가져온적이 없다면 계좌리스트를 가져와서 계좌콤보에 넣는다.
    If cbAccount.ListCount = 0 Then
        nCount = XASession_Account.GetAccountListCount
        For i = 0 To nCount - 1
            Call cbAccount.AddItem(XASession_Account.GetAccountList(i))
        Next
    End If
End Sub


'----------------------------------------------------------------
' 종목코드 입력시 조회대상 변경 이벤트
'----------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C2")) Is Nothing Then
        Call Request_o3105                              ' o3105 호가조회
    End If
End Sub

'----------------------------------------------------------------
' 현재가호가조회 요청
'----------------------------------------------------------------
Private Sub Request_o3105()
    ' 기존 real 해제
    If XAReal_OVC_ Is Nothing Then
    Else:        Call XAReal_OVC_.UnadviseRealData
    End If
    
 
    If XAQuery_o3105 Is Nothing Then    ' 객체를 생성
        Set XAQuery_o3105 = CreateObject("XA_DataSet.XAQuery")
    End If
    
    XAQuery_o3105.ResFileName = "\res\o3105.res"
    
    Call XAQuery_o3105.SetFieldData("o3105InBlock", "symbol", 0, Sheet2.Cells(2, 3))
    
    If XAQuery_o3105.Request(False) < 0 Then
        MsgBox "전송오류"
    End If

End Sub

'----------------------------------------------------------------
' 현재가호가조회 결과
'----------------------------------------------------------------
Private Sub XAQuery_o3105_ReceiveData(ByVal szTrCode As String)
    
    '-------------------------------------------------------------------
    ' 현재가
    Dim arrPrice(5)
      
    Sheet2.Range("E2") = XAQuery_o3105.GetFieldData("o3105OutBlock", "SymbolNm", 0)  ' 종목명
    
    arrPrice(0) = XAQuery_o3105.GetFieldData("o3105OutBlock", "TrdP", 0)           ' 현재가
    arrPrice(1) = XAQuery_o3105.GetFieldData("o3105OutBlock", "Cgubun", 0)            ' 체결구분
    arrPrice(2) = XAQuery_o3105.GetFieldData("o3105OutBlock", "TrdQ", 0)          ' 체결량
    arrPrice(3) = XAQuery_o3105.GetFieldData("o3105OutBlock", "TrdTm", 0)            ' 현지 체결시간
    arrPrice(4) = XAQuery_o3105.GetFieldData("o3105OutBlock", "TotQ", 0)          ' 누적거래량
    Range("B4:F4").Value = arrPrice

    '-------------------------------------------------------------------
        
    sTime = XAQuery_o3105.GetFieldData("o3105OutBlock", "TrdTm", 0)
    Sheet2.Cells(5, 4) = Left(sTime, 2) & ":" & Mid(sTime, 3, 2) & ":" & Mid(sTime, 5, 2)

    
    If XAReal_OVC_ Is Nothing Then
        Set XAReal_OVC_ = CreateObject("XA_DataSet.XAReal")
    End If
    XAReal_OVC_.ResFileName = "\res\OVC.res"
    
    Call XAReal_OVC_.SetFieldData("InBlock", "symbol", Sheet2.Cells(2, 3))
    Call XAReal_OVC_.AdviseRealData
    
'xing api의 tr목록에서 o3105 및 o3106 단일로 ovc와 연동이 안되는 경우가 있음 이 부분 자세히 알아보기

    
End Sub

' 해외선물 체결 실시간
'----------------------------------------------------------------
Private Sub XAReal_OVC__ReceiveRealData(ByVal szTrCode As String)

    Sheet2.Range("B4") = XAReal_OVC_.GetFieldData("OutBlock", "curpr")          ' 현재가
    Sheet2.Range("C4") = XAReal_OVC_.GetFieldData("OutBlock", "cgubun")      ' 체결구분
    Sheet2.Range("D4") = XAReal_OVC_.GetFieldData("OutBlock", "trdq")        ' 체결수량
    Sheet2.Range("E4") = XAReal_OVC_.GetFieldData("OutBlock", "trdtm")        ' 체결시각 현지
    Sheet2.Range("F4") = XAReal_OVC_.GetFieldData("OutBlock", "totq")           ' 누적거래량
End Sub

'----------------------------------------------------------------
' 매도
'----------------------------------------------------------------
Private Sub btnOrder1_Click()
    Call Order(1)
End Sub

'----------------------------------------------------------------
' 매수
'----------------------------------------------------------------
Private Sub btnOrder2_Click()
    Call Order(2)
End Sub

'----------------------------------------------------------------
' 매도/매수 주문 전송
'----------------------------------------------------------------
Private Sub Order(nOrderType)
    If XAQuery_CIDBT00100 Is Nothing Then
        Set XAQuery_CIDBT00100 = CreateObject("XA_DataSet.XAQuery")
        XAQuery_CIDBT00100.ResFileName = "\res\CIDBT00100.res"
    End If
    
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "RecCnt", 0, "1")            ' 레코드갯수
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "OrdDt", 0, "20130807")      ' 주문일자
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "BrnCode", 0, "")            ' 지점코드
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "AcntNo", 0, cbAccount)      ' 계좌번호
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "Pwd", 0, tbPwd)             ' 비밀번호
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "IsuCodeVal", 0, Range("C2").Value)  '종목코드값
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "FutsOrdTpCode", 0, "1")     ' 선물주문코드
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "BnsTpCode", 0, nOrderType)  ' 매매구분코드
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "AbrdFutsOrdPtnCode", 0, Range("L6").Value)  ' 해외선물주문유형코드
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "CrcyCode", 0, "")           ' 통화코드
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "OvrsDrvtOrdPrc", 0, Range("L8").Value) ' 해외파생주문가격
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "CndiOrdPrc", 0, "")         ' 조건주문가격
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "OrdQty", 0, Range("L7").Value)  '주문수량
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "PrdtCode", 0, "")           ' 상품코드
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "DueYymm", 0, "")            ' 만기년월
    Call XAQuery_CIDBT00100.SetFieldData("CIDBT00100InBlock1", "ExchCode", 0, "")           ' 거래소코드

    nSuccess = XAQuery_CIDBT00100.Request(False)
    If nSuccess < 0 Then
        MsgBox "전송오류 : " & nSuccess
    End If
End Sub

'----------------------------------------------------------------
' 매도/매수 주문 데이터 수신
'----------------------------------------------------------------
Private Sub XAQuery_CIDBT00100_ReceiveData(ByVal szTrCode As String)
    ' 주문번호를 엑셀에 표시
    Range("L20").Value = XAQuery_CIDBT00100.GetFieldData("CIDBT00100OutBlock2", "OvrsFutsOrdNo", 0)
End Sub

'----------------------------------------------------------------
' 매도/매수 주문 메시지 수신
'----------------------------------------------------------------
Private Sub XAQuery_CIDBT00100_ReceiveMessage(ByVal bIsSystemError As Boolean, ByVal nMessageCode As String, ByVal szMessage As String)
    ' 메시지를 메시지박스에 표시하면 데이터 수신이 안되는 문제가 있다.
    ' 엑셀이 메시지 수신을 막는듯 함.
    Range("K13").Value = "[" & nMessageCode & "] " & szMessage
End Sub
 

 

추천 소스보기
목록
(주) 씽크풀
서울시 영등포구 국제금융로 70. 15층 (여의도동, 미원빌딩)
고객센터 1666-6300 사업자등록번호 115-81-54775 대표 김동진
@ThinkPool Co.,Ltd. All Rights Reserved