26 lines
685 B
Text
26 lines
685 B
Text
REAL :: n=10, nums(n)
|
|
|
|
nums = (1,2,3,4,5, 5,4,3,2,1)
|
|
DO i = 1, n
|
|
WRITE() "num=", i, "SMA3=", SMA(3,nums(i)), "SMA5=",SMA(5,nums(i))
|
|
ENDDO
|
|
|
|
END ! of "main"
|
|
|
|
FUNCTION SMA(period, num) ! maxID independent streams
|
|
REAL :: maxID=10, now(maxID), Periods(maxID), Offsets(maxID), Pool(1000)
|
|
|
|
ID = INDEX(Periods, period)
|
|
IF( ID == 0) THEN ! initialization
|
|
IDs = IDs + 1
|
|
ID = IDs
|
|
Offsets(ID) = SUM(Periods) + 1
|
|
Periods(ID) = period
|
|
ENDIF
|
|
|
|
now(ID) = now(ID) + 1
|
|
ALIAS(Pool,Offsets(ID), Past,Periods(ID)) ! renames relevant part of data pool
|
|
Past = Past($+1) ! shift left
|
|
Past(Periods(ID)) = num
|
|
SMA = SUM(Past) / MIN( now(ID), Periods(ID) )
|
|
END
|