6
6
// @description TODO: add library description here
7
7
library(title='FunctionBestFitFrequency')
8
8
9
- import RicardoSantos/FunctionArrayMovingAverage/1 as ma
10
- import RicardoSantos/ArrayExtension/2 as ae
9
+ import RicardoSantos/ArrayExtension/1 as ae
10
+
11
+ // @function Moving Average values for selected data.
12
+ // @param sample float array, sample data values.
13
+ // @param length int, length to smooth the data.
14
+ // @param ommit_initial bool, default=true, ommit values at the start of the data under the length.
15
+ // @param fillna string, default='na', options='na', '0', 'avg'
16
+ // @returns float array
17
+ // errors:
18
+ // length > sample size "Canot call array methods when id of array is na."
19
+ export array_moving_average (float[] sample, int length, bool ommit_initial=true, string fillna='na') => //{
20
+ int _size = array.size(id=sample)
21
+ if _size > 1 and _size > length
22
+ float[] _ma = array.copy(id=sample)
23
+ float _nav = float(na)
24
+ if fillna == '0'
25
+ _nav := 0
26
+ if fillna == 'avg'
27
+ _nav := array.avg(id=sample)
28
+ float[] _ma_total = array.new_float(0)
29
+ for _i = 0 to _size-1
30
+ array.push(id=_ma_total, value=array.get(id=sample, index=_i))
31
+ if array.size(id=_ma_total) > length
32
+ array.shift(id=_ma_total)
33
+ if ommit_initial and _i < length
34
+ array.set(id=_ma, index=_i, value=_nav)
35
+ else
36
+ float _avg = array.avg(id=_ma_total)
37
+ array.set(id=_ma, index=_i, value=_avg)
38
+ _ma
39
+ //{
40
+ // usage:
41
+ int length = input.int(defval=6)
42
+ bool ommit_init = input.bool(true)
43
+ string fill_na = input.string(defval='na', options=['na', '0', 'avg'])
44
+ rngs0 = array.from(79, 47, 5, 82, 31, 77, 58, 45, 15, 76, 76, 33, 47, 8, 1, 14, 65, 16, 16, 10, 60)
45
+ string tex = str.format('S: {0}', rngs0)
46
+ for _i = 2 to length
47
+ tex += str.format('\n{0}: {1}', _i, str.tostring(array_moving_average(rngs0, _i, ommit_init, fill_na), '#.##'))
48
+ if barstate.islast
49
+ label.new(bar_index, 0.0, tex)
50
+ //}}
11
51
12
52
// @function Search a frequency range for the fairest moving average frequency.
13
53
// @param sample float array, sample data to based the moving averages.
@@ -20,7 +60,7 @@ export best_fit_frequency (float[] sample, int start, int end) => //{
20
60
int _best = 0
21
61
float _percent = -999
22
62
for _freq = start to end
23
- float[] _avg = ma. array_moving_average(sample=sample, length=_freq, ommit_initial=false, fillna='avg')
63
+ float[] _avg = array_moving_average(sample=sample, length=_freq, ommit_initial=false, fillna='avg')
24
64
float _esum = 0.0
25
65
for _i = 0 to _size-1
26
66
float _erri = array.get(id=sample, index=_i) - array.get(id=_avg, index=_i)
0 commit comments