Define open() As Number = BarOpen(_symbolIndex, barIndex, length + 1)
Define high() As Number = BarHigh(_symbolIndex, barIndex, length + 1)
Define low() As Number = BarLow(_symbolIndex, barIndex, length + 1)
Define close() As Number = BarClose(_symbolIndex, barIndex, length + 1)
Define volume() As Number = BarVolume(_symbolIndex, barIndex, length + 1)
Define ASI As Number = IndicatorIndexValue()
Define swingIndex,upper,R,K,R1,R2,R3,R4 As Number
Define results(length - 1) As Number
For i As Integer = length - 1 To 0 Step -1
If (close(i+1) <> 0) Then
upper = (close(i) - close(i+1)) + 0.5 * (close(i) - open(i)) + 0.25 * (close(i+1) - open(i+1))
R1 = MathAbs(high(i) - close(i+1))
R2 = MathAbs(low(i) - close(i+1))
R3 = MathAbs(high(i) - low(i))
R4 = MathAbs(close(i+1) - open(i+1))
If (R1 >= MathMax(R2, R3)) Then
R = R1 - (R2 / 2) + (R4 / 4)
Else If (R2 >= MathMax(R1,R3)) Then
R = R2 - (R1 / 2) + (R4 / 4)
Else
R = R3 + (R4 / 4)
End If
K = MathMax(R1,R2)
If (R <> 0) Then
swingIndex = (50 * (upper / R) * K) / _limitMove
If (-100 <= swingIndex And swingIndex <= 100) Then
ASI += swingIndex
Else If (swingIndex > 100) Then
ASI += 100
Else
ASI += -100
ASI += swingIndex
End If
End If
End If
results(i) = ASI
Next
Return results |