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