Excel VBA code (technical index for trading system)

Excel VBA Source Code --- MACD

Technical code for trading system.

Sub MACD()

'''-----http://www.samurai-logic.com/
'''-----Project of Trading System Development
'''------------------------------------------------------------------
''----B列(日付)、C列(始値)、D列(高値)、E列(安値)、F列(終値)
''----
''----TextBox1にEMA1の期間、TextBox2にEMA2の期間、
''----TextBox3にシグナルの期間
''--------------------------------------------------------------------

Dim length1%, length2%, length3%, LastRow&, i&, Temp!, Temp2!

Application.ScreenUpdating = False

Worksheets("MACD").Activate

LastRow = (Range("B4").End(xlDown).Row)
      
Range("H5:I5000").ClearContents
    
length1 = CInt(ActiveSheet.TextBox1.Value)   'EMAの期間 1
length2 = CInt(ActiveSheet.TextBox2.Value)   'EMAの期間  2
length3 = CInt(ActiveSheet.TextBox3.Value)   'Macd signal
    
  If (length1) > (length2) Then ''期間の長さが逆の場合切り替え
    length1 = ActiveSheet.TextBox2.Value
    length2 = ActiveSheet.TextBox1.Value
  End If
    
  Range("H3") = "MACD(" & length1 & ":" & length2 & ")"
  Range("I3") = "MACD Singal(" & length3 & ")"
  Temp = 0: Temp2 = 0
        
   '1つ目のEMAの値Temp & 2つ目のEMAの値Temp2を算出して代入
    
  For i = length1 + 4 To LastRow
    
   If i = (length1 + 4) Then
     Temp = _
     WorksheetFunction.Average(Range("F" & i - (length1) + 1, "F" & i))
   ElseIf i = (length2 + 4) Then
     Temp2 = _
     WorksheetFunction.Average(Range("F" & i - (length2) + 1, "F" & i))
   End If
      
   If i > (length1 + 4) And i > (length2 + 4) Then

     Temp = Temp + ((Cells(i, 6).Value - Temp) * 2 / (1 + length1))
     Temp2 = Temp2 + ((Cells(i, 6).Value - Temp2) * 2 / (1 + length2))

     Cells(i, 8).Value = Temp - Temp2
        
      If (i > (length2) + (length3 + 3)) Then
        Cells(i, 9).Value = _
        WorksheetFunction.Average(Range("H" & i, "H" & i - length3 + 1))
      End If
      
   ElseIf i > (length1 + 4) And i <= (length2 + 4) Then
   
     Temp = Temp + ((Cells(i, 6).Value - Temp) * 2 / (1 + length1))
     
   End If
    
  Next

Range("H5", "I" & LastRow).NumberFormatLocal = "0.00"

Application.ScreenUpdating = False
End Sub