엑셀/VBA

VBA - 30초봉 계산하기/MAX/MIN/RANGE

gongdol 2024. 3. 9. 23:55
300x250

1. 예제파일 작성

   1) 아래 시간기준으로 30초마다 CLOSE 데이터를 OHLC 계산한다.

 

2. 코드작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Sub minute_bong()
    
    last_row = Cells(Rows.Count, 1).End(3).Row
    start_pos = 10 '시작위치
    
    FOR_IDX = 3
    c = FOR_IDX
    pre_index_row = FOR_IDX - 1
    
    START_COND = 1
    
    For ii = FOR_IDX To last_row
        
        '1. 시간계산하기
        Cells(ii, start_pos).Value = Cells(ii, 2).Value \ 10000   '시
        Cells(ii, start_pos + 1).Value = (Cells(ii, 2).Value \ 100- (Cells(ii, 2).Value \ 10000* 100 '분
        Cells(ii, start_pos + 2).Value = Cells(ii, 2).Value Mod 100 '초
        Cells(ii, start_pos + 3).Value = Cells(ii, start_pos).Value * 3600 + Cells(ii, start_pos + 1).Value * 60 + Cells(ii, start_pos + 2).Value '시간을 초환산
        Cells(ii, start_pos + 4).Value = Cells(ii, start_pos + 3).Value Mod 30
        
        '1-1. 헤더 작성하기
        If START_COND = 1 Then
           Cells(c - 1, start_pos + 6).Value = "OPEN"
           Cells(c - 1, start_pos + 7).Value = "HIGH"
           Cells(c - 1, start_pos + 8).Value = "LOW"
           Cells(c - 1, start_pos + 9).Value = "CLOSE"
           START_COND = 0
        End If
        
        '2. 봉계산하기
        If (Cells(ii, start_pos + 4).Value - Cells(ii - 1, start_pos + 4).Value) < 0 Then '30초
        'If Cells(ii, start_pos + 1).Value <> Cells(ii - 1, start_pos + 1).Value Then '1분
        
            'Cells(ii, start_pos + 4).Value = ii 'index row
            
            'Cells(c, start_pos + 5).Value = Cells(ii - 1, start_pos + 1).Value & Cells(ii - 1, start_pos + 2).Value 'time
            Cells(c, start_pos + 6).Value = Cells(pre_index_row, 6).Value 'open
            Cells(c, start_pos + 7).Value = WorksheetFunction.Max(Range("F" & pre_index_row & ":" & "F" & ii - 1)) 'high
            Cells(c, start_pos + 8).Value = WorksheetFunction.Min(Range("F" & pre_index_row & ":" & "F" & ii - 1)) 'low
            Cells(c, start_pos + 9).Value = Cells(ii - 16).Value 'close
            
            pre_index_row = ii 'open 계산용
            
            c = c + 1
            
            
        End If
        
    Next
    
    MsgBox ("완료")
End Sub
 
 
 
cs

 

3. 결과 

  1. 시간열을 쪼개 계산하고, 30초로 나눠 계산결과기준으로 OHLV 계산한다. 

 

 

300x250