69 lines
2.2 KiB
Plaintext
69 lines
2.2 KiB
Plaintext
dim v$( 100) ' Each array term stores a particular SMA of period p in p*10 bytes
|
|
|
|
nomainwin
|
|
|
|
WindowWidth =1080
|
|
WindowHeight = 780
|
|
|
|
graphicbox #w.gb1, 20, 20, 1000, 700
|
|
|
|
open "Running averages to smooth data" for window as #w
|
|
|
|
#w "trapclose quit"
|
|
|
|
#w.gb1 "down"
|
|
|
|
old.x = 0
|
|
old.y.orig =500 ' black
|
|
old.y.3.SMA =350 ' red
|
|
old.y.20.SMA =300 ' green
|
|
|
|
for i =0 to 999 step 1
|
|
scan
|
|
v =1.1 +sin( i /1000 *2 *3.14159265) + 0.2 *rnd( 1) ' sin wave with added random noise
|
|
x =i /6.28318 *1000
|
|
y.orig =500 -v /2.5 *500
|
|
|
|
#w.gb1 "color black ; down ; line "; i-1; " "; old.y.orig; " "; i; " "; y.orig; " ; up"
|
|
|
|
y.3.SMA =500 -SMA( 1, v, 3) /2.5 *500 ' SMA given ID of 1 is to do 3-term running average
|
|
#w.gb1 "color red ; down ; line "; i-1; " "; old.y.3.SMA +50; " "; i; " "; y.3.SMA +50; " ; up"
|
|
|
|
y.20.SMA =500 -SMA( 2, v, 20) /2.5 *500 ' SMA given ID of 2 is to do 20-term running average
|
|
#w.gb1 "color green ; down ; line "; i-1; " "; old.y.20.SMA +100; " "; i; " "; y.20.SMA +100; " ; up"
|
|
|
|
'print "Supplied with "; v; ", so SMAs are now "; using( "###.###", SMA( 1, v, 3)); " over 3 terms or "; using( "###.###", SMA( 2, v, 5)) ; " over 5 terms." ' ID, latest data, period
|
|
|
|
old.y.orig =y.orig
|
|
old.y.3.SMA =y.3.SMA
|
|
old.y.20.SMA =y.20.SMA
|
|
next i
|
|
|
|
wait
|
|
|
|
sub quit j$
|
|
close #w
|
|
end
|
|
end sub
|
|
|
|
|
|
|
|
function SMA( ID, Number, Period)
|
|
v$( ID) =right$( " " +str$( Number), 10) +v$( ID) ' add new number at left, lose last number on right
|
|
v$( ID) =left$( v$( ID), Period *10)
|
|
'print "{"; v$( ID); "}",
|
|
|
|
k =0 ' number of terms read
|
|
total =0 ' sum of terms read
|
|
|
|
do
|
|
p$ =mid$( v$( ID), 1 +k *10, 10)
|
|
if p$ ="" then exit do
|
|
vv =val( p$)
|
|
total =total +vv
|
|
k =k +1
|
|
loop until p$ =""
|
|
|
|
if k <Period then SMA =total / k else SMA =total /Period
|
|
end function
|