Excel VBA code (technical index for trading system)

Excel VBA Source Code --- (Average True Range アベレージトゥルーレンジ)

Technical code for trading system.

Sub ATR()

'''-----http://www.samurai-logic.com/
'''-----Project of Trading System Development
'''------------------------------------------------------------------
''----B列(日付)、C列(始値)、D列(高値)、E列(安値)、F列(終値)
''----
''----TextBox1に計算期間
''----ここで計算するATRは、システムに対応させるために計算したATRを
''----終値で割る。それによって株価の価格帯の違いがあっても一定した数値が
''----得られる。
''--------------------------------------------------------------------

Dim length1%, length2%, length3%, i&, j&, j2%
Dim Temp!, TR!, Temp2!, TR2!

Application.ScreenUpdating = False

Worksheets("ATR").Activate

length1 = CInt(ActiveSheet.TextBox1.Value)
length2 = CInt(ActiveSheet.TextBox2.Value)

LastRow = Range("B4").End(xlDown).Row

Range("H3").Value = "ATR:" & length1
Range("I3").Value = "ATR:" & length2

Range("H5:I5000").ClearContents

length3 = IIf(length1 > length2, length1, length2)
 
For i = (length3) + 5 To LastRow ''---ひとつ目のATR
Temp = 0: TR = 0
 For j = 1 To length1
 
  Temp = WorksheetFunction.Max(CSng(Range("D" & i - _
  (length1) + j).Value) - CSng(Range("F" & i - _
  (length1) + j - 1).Value), CSng(Range("F" & i - _
  (length1) + j - 1).Value) - CSng(Range("E" & i - _
  (length1) + j).Value), CSng(Range("D" & i - _
  (length1) + j).Value) - CSng(Range("E" & i - (length1) + j).Value))
  
  TR = TR + Temp
  
 Next j
 
  Cells(i, 8).Value = (TR / length1) / CSng(Cells(i, 6).Value) * 100
  
  Temp2 = 0: TR2 = 0
 For j2 = 1 To length2    ''---ふたつ目のATR
 
   Temp2 = WorksheetFunction.Max(CSng(Range("D" & i - _
   (length2) + j2).Value) - CSng(Range("F" & i - _
   (length2) + j2 - 1).Value), CSng(Range("F" & i - _
   (length2) + j2 - 1).Value) - CSng(Range("E" & i - _
   (length2) + j2).Value), CSng(Range("D" & i - _
   (length2) + j2).Value) - CSng(Range("E" & i - (length2) + j2).Value))
   
   TR2 = TR2 + Temp2
   
  Next j2
  
   Cells(i, 9).Value = (TR2 / length2) / CSng(Cells(i, 6).Value) * 100

Next i

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

End Sub