라벨이 엑셀VBA기본문법인 게시물 표시

블로그 이사 합니다.

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

엑셀 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 결과