라벨이 자동매매인 게시물 표시

블로그 이사 합니다.

 안녕하세요, 공돌투자자 입니다. 애드센스를 통과했음에도 흥행에 참패하여 다시 네이버로 돌아갑니다 ㅜㅜ 네이버로 관련 콘텐츠들을 조금씩 이동하고 네이버 내에서 기존 주식 투자 관련 컨텐츠와 함께 운영하도록 할게요. 혹시나 구독하신 분들, 찾아주신 분들께 죄송한 마음입니다. https://blog.naver.com/gdtooza '공돌투자자, 부의 사다리'  이곳으로 찾아와주세요. 실제적인 경제교육 + 투자 블로그로 운영하도록 하겠습니다. 감사합니다.

[엑셀VBA] 이베스트투자증권 xingAPI 조회 기능 사용하기

이미지
조회는 TR을 사용한다 이베스트투자증권에서 데이터 조회를 위해서는 TR(Transaction)을 사용한다. 현재가조회, 잔고조회 등을 TR을 통해 할 수 있다. 매수/매도 등 주문에도 TR이 사용된다. TR 목록과 각 TR의 입력, 출력은 Devcenter를 활용할 수 있다. TR을 사용하기 위해서는 XAQuery 생성 > Res 등록 > 데이터입력 > 요청 > 받기 > 데이터 가져오기 순으로 진행 하면 된다(이베스트투자증권 XingAPI COM 개발 가이드 발췌) XAQuery 생성 Dim WithEvents XAQuery_t1101 As XAQuery Set XAQuery_t1101 = CreateObject( “XA_DataSet.XAQuery” ) Res 등록 XAQuery_t1101.ResFileName = “C:\eBEST\XingAPI\Res\t1101.res” 데이터 입력 XAQuery_t1101.SetFieldData( “t1101InBlock”, “shcode”, 0, “078020” ) 요청 XAQuery_t1101.Request( False ) 받기 XAQuery_t1101_ReceiveData( ByVal szTrCode As String ) 데이터 가져오기 sName = XAQuery_t1101.GetFieldData( “t1101”, “t1101OutBlock”, “hname”, 0 )

엑셀 VBA 이베스트투자증권 xingAPI 사용하기 : 로그인

다른 API를 사용하기 전에 로그인이 되어있어야 한다. 다른 API를 사용하기 위해 로그인 API를 통해 이베스트투자증권 서버에 로그인이 되어야 한다. 서버연결, 로그인 등을 위해서는 XASession 객체를 사용한다. 예제 파일 등에도 로그인 코드 등은 기본적으로 존재하니 참초하면 된다. 구지 로직을 이해할 필요가 없다. 복사 + 붙여넣기 후 자신의 ID/비밀번호/공인인증서비밀번호 등을 수정하길 바란다. 그리고 모의투자/실투자에 대한 부분만 수정하면 된다. 소스를 복붙하고 수정이 필요한 부분만 바꾸자.  Dim WithEvents XASession_Excel As XASession '로그인 세션 Const ip_demo As String = "demo.ebestsec.co.kr" 'ip, 모의투자서버 Const ip_hts As String = "hts.ebestsec.co.kr" 'ip, 실투자서버 Const port As String = "20001" 'port 번호 Dim accountNum As String '계좌번호 Public Sub Login() On Error Resume Next Dim ip As String Dim id As String Dim pw As String Dim certpw As String Dim demo As Integer '-------------모의투자 시 이곳을 ...

이베스트투자증권 xingAPI 사용하기 : DevCenter, 예제파일, 질문하기를 활용하자

이미지
DevCenter를 활용하자 이베스트증권 xingapi 설치 폴더를 보면 devcenter.exe 파일이 있다. devcenter를 로그인 하면 아래 사진 처럼 화면이 생성된다. TR목록, Real목록을 선택할 수 있다. TR 목록은 Transaction의 약자로 비 실시간성 데이터 조회이다. 잔고조회, 현재가 조회 등을 할 수 있다. 조회 당시의 데이터를 획득할 수 있으며 실시간으로 변하는 값을 얻을 수 없다. Real 목록은 조회하는 값이 변하면 그때마다 변하는 값을 획득 할 수 있다. TR목록은 HTS에서 '조회' 버튼을 누르는 것과 같으며 Real목록은 HTS 현재가 창 처럼 변화하는 값을 받아올 수 있다. 1번의 Tab을 선택하면 API에서 제공하는 기능 목록을 확인할 수 있으며 클릭하면 해당 함수의 입력, 출력값이 3번 화면에 표시된다. 3번 항목의 입력, 출력 값을 클릭하면 각 필드의 속성값을 4번 창을 통해 호가인할 수 있다. [Tip 1] 메뉴 중 TR을 직접 실행해보는 방법이 있다. 코딩 전에 어떤 파라미터를 넣어야 할지 그럴 경우 어떤 결과가 나오는지를 미리 확인해볼 수 있다. [Tip2] 선택된 레코드를 코드로 만들기 선택한 필드에 대한 코드 값을 만들 수 있다. 코드 창에 붙여서 조금만 수정하면 되기 때문에 타이핑의 수고를 덜 수 있다. 예제 파일을 활용하자 맨땅에 헤당하면 어렵다. 왠만한 기능들에 대해 증권사나 유저들이 미리 만들어놓은 예제파일들이 많다. 이를 활용하여 편집해서 활용하는 것을 추천한다. 개발 시간이나 시행착오를 많이 줄일 수 있다. 이베스트 증권 홈페이지에서 다양한 예제를 다운로드 받을 수 있다. https://www.ebestsec.co.kr/ 접속 로그인 고객센터 > API 자료실 > 엑셀VBA 선택 TR은 TR끼리 Real은 Real끼리 호출이나 Callback 함수 처리가 비슷하니 Ctrl+C, V 신공을 통해 대부분 구현이 가능하다. 다시 말하지만 처음부터 끝까지 다 알고 개발하려고 하...

엑셀 VBA UI 만들기 : Button

이미지
UI요소 중 버튼은  가장 많이 쓰이는 UI 요소이다. UI에 그리기 개발도구 > 삽입 > Active X 컨트롤 에서 버튼 모양을 클릭 한 후 엑셀 창에 드래그하면 드래그한 크기만큼 버튼이 생성된다. 로그인, 자동매매시작, 자동매매종료, 잔고조회 등의 기능을 버튼을 통해 활용하고 있다. 버튼을 생성후 오른쪽 마우스를 눌러서  속성 을 클릭하면 버튼의 속성을 변경 할 수 있다. 코드상에서 해당 버튼객체에 접근해서 변경할 수도 있고 속성창에서 바로 변경할 수도 있다. 실제 변경이 필요한 부분은  이름  과  Caption  이다. 이름은 코드상에서 해당 버튼 객체에 접근하기 위해 사용한다. 가독성있는 이름으로 바꿔준다. 한글도 가능하다. Caption은 실제 UI에 상에 보여지는 버튼 위의 텍스트이다. 버튼을 눌렀을 때 실행되는 기능을 명시하면 된다. 코드에 접근하기  버튼 생성 후  디자인모드  선택된 상태에서 버튼을 더블클릭하면 해당 버튼이 클릭 되었을때 실행될 함수가 생성된다. [^myfootnote] 버튼 이름을 '로그인'으로 정했기 때문에 코드상에서 해당 버튼 객체에 접근하기 위해서는  로그인.  후 속성에 접근하면 된다.  로그인.  을 타이핑했을 때 자동완성되는 속성의 이름을 보면 대충 어떤 속성인지 알 수 있다. 버튼이 눌렸을 때 버튼 색이 바뀌는 예제이다. Private Sub 로그인_Click() 로그인.BackColor = RGB( 255 , 0 , 0 ) End Sub

엑셀 VBA 기본문법 : Timer

이미지
지정된 시간에 지정된 기능을 사용하려면 Timer를 사용합니다.  자동매매 프로그래밍에 있어 Timer의 사용은 매우 빈번하다. 주식 시장이 시간 base로 움직이기 때문이다. 8:30~8:40 : 장전 시간외 8:40~9:00 : 장전 동시호가 9:00~15:20 : 본장 15:20~15:30 : 장마감 동시호가 15:30~16:00 : 장후시간외 16:00~18:00 : 시간외 단일가(10분마다 체결) 예를 들어 내가 만든 프로그램을 '9시에 시작' 하려면 Timer를 활용해야한다. 필자는 9시에 시작하거나 동시호가(15시 20분 이후)에 시작하는 코드등을 만들 때 주로 사용한다. 일반적으로 timer는 모듈 내에 만든다. 그 이유는 모듈 내 만든 코드는 모든 sheet에서 사용할 수 있기 때문이다. 모듈을 만들고 그 안에 timer 관련 코드를 만들면 어떤 sheet에서도 접근이 가능하다. 지정된 시간에 수행 9시가 되면 Sheet1 의 자동매매 함수를 수행하는 예제를 살펴보자 Public Const cRunWhat = "TheSub" '선언 Public Sub StartTimer() 'Timer 시작 함수 ' 9시에 cRunWhat(TheSub) 함수를 수행 Application.OnTime TimeValue( "09:00:00" ), Procedure:=cRunWhat '수능 End Sub Public Sub TheSub() 'Sheet1의 자동매매 함수를 호출 Call Sheet1.자동매매 End Sub 지정된 시간 후에 수행 15초 후 my_Procedure 함수를 수행하는 코드는 아래와 같다. Application.OnTime Now + TimeValue( "00:00:15" ), "my_Procedure"

엑셀 VBA 기본문법 : 함수

매수, 매도 등 기능 단위는 함수를 통해 구현 된다. 함수는 어떤 목적을 수행하는 코드의 집합이라고 보면 된다. 자동매매 프로그래밍에서 어떤 목적이라고 하는 것을 예로 든다면 '로그인', '매수', '매도' 등이 있다. 함수내에서 함수를 호출 할 수 있다. 예를 들어 '자동매매'함수에서 '매수'함수나 '매도' 함수를 호출 할 수 있다. 1. Sub 함수  : 출력이 없는 함수 Public Sub 스탑로스( ByVal 현재가 As Long , ByVal 손절가 As Long ) '입력 : 현재가 & 손절가, 출력:없음 If 현재가 < 손절가 Then '만약에 현재가가 손절가보다 작으면 Call 매도하기 '매도하기 함수를 호출함 End If End Sub 2. Function 함수  : 출력이 있는 함수 Public Function get 손절가( ByVal 매수가 As Long ) As Double Dim 손절가 As Double 손절가 = 매수가 * 0.95 get 손절가 = 손절가 End Function

엑셀 VBA 기본문법 : 조건문과 반복문(자동매매에서의 실제 쓰임)

이미지
조건문 : IF문, 반복문 : For문  가장 많이 쓰는 Syntax가 If와 For 이다. IF문은 조건문에 쓰인다. If [조건] then [조건문] Else If [조건2] then [조건문2] Else [조건문3] Endif If문(조건문)은 정말 많이 쓰인다. 예를 들어 삼성전자가 5만원이하이면 매수, 10만원 이상이면 매도 이런 조건을 걸 수 있다. For문은 반복문에 쓰인다. For [변수] = [시작값] To [종료값] Step [간격] [반복문] Next i 예제 1~5행 각 첫번째 행에 행 값 출력 Private Sub CommandButton1_Click() For i = 1 To 5 Step 1 Cells(i, 1 ) = i Next i End Sub 좀 더 실제적으로 들어가보자. 실제 자동매매에 있어서 For문과 IF문은 항상 쓰인다. 실제로 필자는 이런식으로 프로그래밍 한다. 위의 그림처럼 8개의 종목을 루프를 돌면서 현재가가 매수타점 이하로 왔을 때 매수한다고 가정해보자.  (Order  함수는 기 구현되어 있다고 가정) For i = 2 To 9 Dim 현재가 As Double Dim 매수타점 As Double 현재가 = Cells(i, 5 ).Value 매수타점 = Cells(i, 4 ).Value If 현재가 <= 매수타점 Then Call Order '이 부분은 추가로 구현 필요 End If Next i 실제로 for문과 if문은 자동매매에서 가장 빈번하게 사용되는 구문이니 꼭 기억해야 한다.

엑셀 VBA 기본문법 : 변수(변하는 수)

변수란 변수는 말 그대로 변하는 수이다. 변하지 않는 수는 상수라고 말한다.  자동매매 프로그래밍에 있어서 상수는 거의 사용할 일이 없다.  변수 선언 VBA에서 변수의 선언은 `Dim [변수명] As [데이터타입]` 의 형식을 가진다. 변수명으로 한글도 사용이 가능하다.  실제로 사용하는 데이터 타입은 몇 개 없다. 아래의 예제를 보면 어떤 의미인지 쉽게 알 수 있다.  Private Sub CommandButton1_Click() 'Dim [변수명] As [데이터타입] Dim 종목코드 As String '문자열 Dim 종목명 As String '문자열 Dim i As Integer '정수 범위 : -32,768 ~ 32,767 Dim 현재가 As Long '정수 Dim 목표가 As Double '실수 Dim is로그인 As Boolean 'TRUE/FALSE Dim 날짜 As Date '날짜 종목코드 = "005930" i = 0 현재가 = 61500 목표가 = 99000. 5 is로그인 = False 날짜 = # 7 / 25 / 2022 # Debug.Print ( "종목코드 :" + 종목코드) Debug.Print ( "i :" & i) Debug.Print ( "현재가:" & 현재가) Debug.Print ( "목표가 :" & 목표가) Debug.Print ( "is로그인 :" & is로그인) Debug.Print ( "날짜 :...

엑셀 VBA 기본문법 : 에디터 사용

이미지
  엑셀 VBA 기본 문법 : 2. 에디터 Alt+11  버튼을 통해 VBA 에티터로 접근이 가능하다. 이곳에서 실제 코드를 작성한다.  프로젝트탐색창 : 파일 내의 worksheet 별로 접근이 가능하다. 각 worksheet에서 사용되는 코드는 해당 worksheet 를 더블클릭하여 코딩창에 코드를 작성하도록 한다. "현재_통합_문서" 에 타이머 등 모든 worksheet에서 공통으로 사용하는 코드들을 작성하는 것이 좋다. 코딩창 : 실제 코드들을 작성한다. 코딩창 상단 왼편에 버튼 등 객체들을 선택할 수 있으며 오른편의 이벤트를 선택하면 함수가 만들어진다. 해당 함수에 해당 이벤트가 발생했을 때 실행할 코드들을 작성하면 된다. 직접실행창( ctrl+g ) : 프로그램이 실행될 때 사용자가 작성한 디버깅 프린트를 디스플레이한다. 조사식창 : 디버깅 시 변수에 어떤 값이 할당되었는지 확인 할 수 있다. 그림을 보면 조사식창에 Cells(4,4)를 추가하였으며 그 값에 "셀에 접근" 이라는 값이 할당된 것을 볼 수 있다.

VBA 기본 문법 : 1. 객체모델

이미지
자동매매 프로그래밍에 있어서 필수적으로 필요한 문법을 소개한다. 전문 프로그래머 관점이 아니라 구현 가능한 수준에서 살펴본다. 내용의 오류가 있을 수 있으나 프로그래밍 하는데 있어서 아무런 문제가 없고 실제로 저자가 사용하는 방법만을 소개한다. 당부하고 싶은 말 너무 이해하려고 하지 말자. 유도리 있게 짜집게해서 동작하도록 만들자. 객체모델  엑셀 VBA 객체 모델에 대해 알아봅니다. 전문 개발자의 관점이 아니라 구현의 관점에서 바라보려고 합니다. 이정도만 알고 있어도 엑셀 VBA 자동매매 구현하는데 아무런 문제가 없습니다. 'Application > Workbook > Worksheet > Range > Cell' Application : 실행된 엑셀 프로그램 Workbook : 엑셀 프로그램 내 열려있는 파일 하나 Worksheet : 파일내 존재하는 sheet (하단 탭) Range : 연속된 셀의 집합 cell : 엑셀 내 한칸 Object Model에 접근하는 실제로 사용할 만한 코딩 예제를 보여드릴게요. 버튼을 눌렀을때 Sheet1인 worksheet내의 Range와 Cell에 접근하는 코드 입니다. 코드 Private Sub CommandButton1_Click() Worksheets( "Sheet1" ).Range(Cells( 1 , 1 ), Cells( 3 , 3 )) = 1 'Sheet1의 Range에 1을 삽입 Worksheets( "Sheet1" ).Cells( 4 , 4 ) = "셀에 접근" End Sub 결과