wiecej zmian
This commit is contained in:
parent
35c3d4f936
commit
17c326d477
5
.gitignore
vendored
5
.gitignore
vendored
@ -20,6 +20,10 @@
|
|||||||
.*.lb
|
.*.lb
|
||||||
*.pdf
|
*.pdf
|
||||||
|
|
||||||
|
/macd/
|
||||||
|
/sprawozdanie/*-figure*
|
||||||
|
|
||||||
|
|
||||||
## Build tool auxiliary files:
|
## Build tool auxiliary files:
|
||||||
*.fdb_latexmk
|
*.fdb_latexmk
|
||||||
*.synctex
|
*.synctex
|
||||||
@ -27,6 +31,7 @@
|
|||||||
*.synctex.gz
|
*.synctex.gz
|
||||||
*.synctex.gz(busy)
|
*.synctex.gz(busy)
|
||||||
*.pdfsync
|
*.pdfsync
|
||||||
|
*.auxlock
|
||||||
|
|
||||||
# hyperref
|
# hyperref
|
||||||
*.brf
|
*.brf
|
||||||
|
2
common.h
2
common.h
@ -2,4 +2,4 @@
|
|||||||
#include "decider.h"
|
#include "decider.h"
|
||||||
|
|
||||||
// 4 prices, 4 macd, 4 signal, 4 feedback loop
|
// 4 prices, 4 macd, 4 signal, 4 feedback loop
|
||||||
using current_decider = neural_decider<6, 8, 8, 4, 8, 8>;
|
using current_decider = neural_decider<6, 8, 8, 2, 12, 8>;
|
||||||
|
1000
data/intel.dat
Normal file
1000
data/intel.dat
Normal file
File diff suppressed because it is too large
Load Diff
1260
data/nvidia.dat
Normal file
1260
data/nvidia.dat
Normal file
File diff suppressed because it is too large
Load Diff
681
data/paypal.dat
Normal file
681
data/paypal.dat
Normal file
@ -0,0 +1,681 @@
|
|||||||
|
36.709999
|
||||||
|
36.619999
|
||||||
|
34.700001
|
||||||
|
34.5
|
||||||
|
34.689999
|
||||||
|
36.779999
|
||||||
|
36.93
|
||||||
|
37.509998
|
||||||
|
38.630001
|
||||||
|
38.389999
|
||||||
|
40.470001
|
||||||
|
39.349998
|
||||||
|
38.389999
|
||||||
|
37.009998
|
||||||
|
37
|
||||||
|
36.389999
|
||||||
|
37.599998
|
||||||
|
37.950001
|
||||||
|
38.450001
|
||||||
|
38.700001
|
||||||
|
39.389999
|
||||||
|
38.950001
|
||||||
|
39.27
|
||||||
|
38.849998
|
||||||
|
39.130001
|
||||||
|
39.049999
|
||||||
|
38.849998
|
||||||
|
38.189999
|
||||||
|
37.619999
|
||||||
|
38.139999
|
||||||
|
38.73
|
||||||
|
37.990002
|
||||||
|
37.189999
|
||||||
|
35.98
|
||||||
|
34.25
|
||||||
|
33.75
|
||||||
|
32.700001
|
||||||
|
33.169998
|
||||||
|
34.619999
|
||||||
|
35.040001
|
||||||
|
35
|
||||||
|
33.77
|
||||||
|
35.07
|
||||||
|
35.310001
|
||||||
|
34.290001
|
||||||
|
34.700001
|
||||||
|
34.369999
|
||||||
|
33.459999
|
||||||
|
33.549999
|
||||||
|
33.77
|
||||||
|
33.799999
|
||||||
|
33.77
|
||||||
|
33.32
|
||||||
|
32.919998
|
||||||
|
34.25
|
||||||
|
33.349998
|
||||||
|
34.16
|
||||||
|
33.91
|
||||||
|
33.77
|
||||||
|
32.25
|
||||||
|
30.629999
|
||||||
|
31.040001
|
||||||
|
31.48
|
||||||
|
32.830002
|
||||||
|
32.669998
|
||||||
|
31.860001
|
||||||
|
32.380001
|
||||||
|
31.67
|
||||||
|
32.060001
|
||||||
|
32.630001
|
||||||
|
33.220001
|
||||||
|
34.049999
|
||||||
|
34.619999
|
||||||
|
34.290001
|
||||||
|
34.84
|
||||||
|
34.869999
|
||||||
|
33.830002
|
||||||
|
34.790001
|
||||||
|
34.990002
|
||||||
|
36.439999
|
||||||
|
35.939999
|
||||||
|
36.52
|
||||||
|
35.91
|
||||||
|
36.009998
|
||||||
|
36.990002
|
||||||
|
37.900002
|
||||||
|
37.599998
|
||||||
|
36.709999
|
||||||
|
36.240002
|
||||||
|
36.599998
|
||||||
|
37
|
||||||
|
36.330002
|
||||||
|
35.57
|
||||||
|
34.529999
|
||||||
|
35.610001
|
||||||
|
36.209999
|
||||||
|
36.220001
|
||||||
|
36.189999
|
||||||
|
36.360001
|
||||||
|
35.560001
|
||||||
|
35.119999
|
||||||
|
35.360001
|
||||||
|
35.18
|
||||||
|
35.259998
|
||||||
|
35.169998
|
||||||
|
35.150002
|
||||||
|
34.23
|
||||||
|
35.619999
|
||||||
|
35.16
|
||||||
|
35.599998
|
||||||
|
35.07
|
||||||
|
35.490002
|
||||||
|
34.689999
|
||||||
|
35.009998
|
||||||
|
36.32
|
||||||
|
35.98
|
||||||
|
35.540001
|
||||||
|
34.98
|
||||||
|
36.080002
|
||||||
|
36.805
|
||||||
|
37.110001
|
||||||
|
37.07
|
||||||
|
36.610001
|
||||||
|
37.080002
|
||||||
|
36.48
|
||||||
|
36.200001
|
||||||
|
34.75
|
||||||
|
34.310001
|
||||||
|
33.98
|
||||||
|
33.130001
|
||||||
|
32.689999
|
||||||
|
33.040001
|
||||||
|
33.080002
|
||||||
|
32.119999
|
||||||
|
32.869999
|
||||||
|
32.310001
|
||||||
|
32.200001
|
||||||
|
31.200001
|
||||||
|
31.200001
|
||||||
|
31.690001
|
||||||
|
31.469999
|
||||||
|
31.969999
|
||||||
|
31.59
|
||||||
|
34.240002
|
||||||
|
36.139999
|
||||||
|
37.080002
|
||||||
|
36.830002
|
||||||
|
37.009998
|
||||||
|
37.169998
|
||||||
|
35.07
|
||||||
|
33.610001
|
||||||
|
32.700001
|
||||||
|
32.900002
|
||||||
|
33.52
|
||||||
|
34.299999
|
||||||
|
35.459999
|
||||||
|
36.360001
|
||||||
|
36.310001
|
||||||
|
35.759998
|
||||||
|
36
|
||||||
|
35.48
|
||||||
|
36.470001
|
||||||
|
36.740002
|
||||||
|
37.490002
|
||||||
|
38.139999
|
||||||
|
39.25
|
||||||
|
39.16
|
||||||
|
39.02
|
||||||
|
39.040001
|
||||||
|
38.98
|
||||||
|
38.16
|
||||||
|
38.57
|
||||||
|
38.490002
|
||||||
|
39.490002
|
||||||
|
39.380001
|
||||||
|
39.27
|
||||||
|
39.84
|
||||||
|
39.93
|
||||||
|
39.41
|
||||||
|
41.139999
|
||||||
|
41.32
|
||||||
|
40.52
|
||||||
|
38.919998
|
||||||
|
38.740002
|
||||||
|
39.529999
|
||||||
|
39.040001
|
||||||
|
38.599998
|
||||||
|
39.400002
|
||||||
|
38.790001
|
||||||
|
38.549999
|
||||||
|
39.16
|
||||||
|
38.279999
|
||||||
|
38.41
|
||||||
|
38.060001
|
||||||
|
37.799999
|
||||||
|
38.790001
|
||||||
|
38.639999
|
||||||
|
38.580002
|
||||||
|
39.639999
|
||||||
|
39.240002
|
||||||
|
40.080002
|
||||||
|
40.099998
|
||||||
|
40.310001
|
||||||
|
39.82
|
||||||
|
39.73
|
||||||
|
40.009998
|
||||||
|
40.07
|
||||||
|
39.18
|
||||||
|
39.02
|
||||||
|
38.360001
|
||||||
|
38.310001
|
||||||
|
38.950001
|
||||||
|
39.48
|
||||||
|
39.619999
|
||||||
|
40.110001
|
||||||
|
39.709999
|
||||||
|
39.509998
|
||||||
|
39.48
|
||||||
|
39.299999
|
||||||
|
39.064999
|
||||||
|
38.98
|
||||||
|
37.650002
|
||||||
|
37.529999
|
||||||
|
38.07
|
||||||
|
38.919998
|
||||||
|
38.759998
|
||||||
|
38.07
|
||||||
|
38.09
|
||||||
|
37.790001
|
||||||
|
38.310001
|
||||||
|
38.560001
|
||||||
|
38.330002
|
||||||
|
38.099998
|
||||||
|
37.57
|
||||||
|
37.549999
|
||||||
|
37.130001
|
||||||
|
36.77
|
||||||
|
36.540001
|
||||||
|
37.16
|
||||||
|
36.84
|
||||||
|
36.970001
|
||||||
|
36.970001
|
||||||
|
36.860001
|
||||||
|
36.16
|
||||||
|
36
|
||||||
|
36.66
|
||||||
|
35.080002
|
||||||
|
34.200001
|
||||||
|
35.240002
|
||||||
|
35.77
|
||||||
|
36.509998
|
||||||
|
36.349998
|
||||||
|
36.119999
|
||||||
|
35.93
|
||||||
|
36.32
|
||||||
|
37.360001
|
||||||
|
38.150002
|
||||||
|
38.790001
|
||||||
|
39.279999
|
||||||
|
39.959999
|
||||||
|
39.09
|
||||||
|
38.919998
|
||||||
|
39.369999
|
||||||
|
40.049999
|
||||||
|
40.130001
|
||||||
|
37.419998
|
||||||
|
37.779999
|
||||||
|
37.689999
|
||||||
|
37.220001
|
||||||
|
37.220001
|
||||||
|
37.240002
|
||||||
|
37.060001
|
||||||
|
36.540001
|
||||||
|
36.580002
|
||||||
|
37.299999
|
||||||
|
38.099998
|
||||||
|
37.91
|
||||||
|
38.099998
|
||||||
|
38.07
|
||||||
|
38.459999
|
||||||
|
38.509998
|
||||||
|
38.459999
|
||||||
|
38.380001
|
||||||
|
38.139999
|
||||||
|
38.220001
|
||||||
|
38.09
|
||||||
|
38.110001
|
||||||
|
37.860001
|
||||||
|
37.52
|
||||||
|
37.509998
|
||||||
|
37.650002
|
||||||
|
37.290001
|
||||||
|
37
|
||||||
|
37.150002
|
||||||
|
36.830002
|
||||||
|
37.07
|
||||||
|
37.18
|
||||||
|
38.560001
|
||||||
|
39.27
|
||||||
|
38.009998
|
||||||
|
38.77
|
||||||
|
39.860001
|
||||||
|
39.959999
|
||||||
|
40.830002
|
||||||
|
40.700001
|
||||||
|
40.009998
|
||||||
|
39.689999
|
||||||
|
40.290001
|
||||||
|
40.490002
|
||||||
|
40.07
|
||||||
|
40.34
|
||||||
|
41.060001
|
||||||
|
40.970001
|
||||||
|
40.389999
|
||||||
|
40.970001
|
||||||
|
40.59
|
||||||
|
40.779999
|
||||||
|
40.439999
|
||||||
|
40.18
|
||||||
|
39.880001
|
||||||
|
39.860001
|
||||||
|
39.189999
|
||||||
|
39.529999
|
||||||
|
39.200001
|
||||||
|
39.240002
|
||||||
|
39.48
|
||||||
|
39.830002
|
||||||
|
40.240002
|
||||||
|
40.09
|
||||||
|
44.150002
|
||||||
|
43.869999
|
||||||
|
43.310001
|
||||||
|
42.330002
|
||||||
|
41.689999
|
||||||
|
41.759998
|
||||||
|
41.66
|
||||||
|
41.540001
|
||||||
|
41.349998
|
||||||
|
41.189999
|
||||||
|
40.900002
|
||||||
|
41.279999
|
||||||
|
41.580002
|
||||||
|
41.259998
|
||||||
|
40.450001
|
||||||
|
40.080002
|
||||||
|
38.810001
|
||||||
|
38.939999
|
||||||
|
39.07
|
||||||
|
39.880001
|
||||||
|
40.080002
|
||||||
|
40.630001
|
||||||
|
40.330002
|
||||||
|
40.049999
|
||||||
|
40.259998
|
||||||
|
39.959999
|
||||||
|
39.889999
|
||||||
|
39.279999
|
||||||
|
38.34
|
||||||
|
38.619999
|
||||||
|
38.990002
|
||||||
|
38.98
|
||||||
|
39.450001
|
||||||
|
39.610001
|
||||||
|
39.650002
|
||||||
|
39.43
|
||||||
|
39.43
|
||||||
|
39.549999
|
||||||
|
39.540001
|
||||||
|
39.32
|
||||||
|
39.439999
|
||||||
|
39.740002
|
||||||
|
40.09
|
||||||
|
39.68
|
||||||
|
39.580002
|
||||||
|
39.720001
|
||||||
|
39.57
|
||||||
|
39.959999
|
||||||
|
39.470001
|
||||||
|
40.25
|
||||||
|
41
|
||||||
|
41.060001
|
||||||
|
41.450001
|
||||||
|
41.400002
|
||||||
|
41.080002
|
||||||
|
41.279999
|
||||||
|
41.560001
|
||||||
|
41.599998
|
||||||
|
41.27
|
||||||
|
41.349998
|
||||||
|
41.27
|
||||||
|
41.689999
|
||||||
|
41.619999
|
||||||
|
41.959999
|
||||||
|
41.709999
|
||||||
|
41.5
|
||||||
|
40.27
|
||||||
|
39.860001
|
||||||
|
39.779999
|
||||||
|
39.310001
|
||||||
|
39.580002
|
||||||
|
39.59
|
||||||
|
39.740002
|
||||||
|
40.02
|
||||||
|
40.880001
|
||||||
|
40.830002
|
||||||
|
40.580002
|
||||||
|
41.169998
|
||||||
|
41.619999
|
||||||
|
41.869999
|
||||||
|
42.150002
|
||||||
|
41.959999
|
||||||
|
42.43
|
||||||
|
42.419998
|
||||||
|
42.529999
|
||||||
|
43.07
|
||||||
|
42.639999
|
||||||
|
42
|
||||||
|
42.43
|
||||||
|
42.77
|
||||||
|
43.029999
|
||||||
|
42.869999
|
||||||
|
42.889999
|
||||||
|
42.790001
|
||||||
|
42.919998
|
||||||
|
42.990002
|
||||||
|
42.59
|
||||||
|
42.099998
|
||||||
|
42.389999
|
||||||
|
42.400002
|
||||||
|
43.080002
|
||||||
|
43.16
|
||||||
|
42.639999
|
||||||
|
43.189999
|
||||||
|
43.139999
|
||||||
|
43.130001
|
||||||
|
43.080002
|
||||||
|
43.150002
|
||||||
|
43.240002
|
||||||
|
43.540001
|
||||||
|
43.02
|
||||||
|
42.630001
|
||||||
|
42.720001
|
||||||
|
42.889999
|
||||||
|
42.900002
|
||||||
|
43.040001
|
||||||
|
43.049999
|
||||||
|
42.689999
|
||||||
|
42.490002
|
||||||
|
42.549999
|
||||||
|
43.099998
|
||||||
|
43.09
|
||||||
|
43.299999
|
||||||
|
43.689999
|
||||||
|
43.810001
|
||||||
|
44.27
|
||||||
|
44.709999
|
||||||
|
44.41
|
||||||
|
47.150002
|
||||||
|
47.720001
|
||||||
|
47.540001
|
||||||
|
49.049999
|
||||||
|
49.02
|
||||||
|
48.91
|
||||||
|
49.299999
|
||||||
|
49.169998
|
||||||
|
49.220001
|
||||||
|
49.790001
|
||||||
|
49.700001
|
||||||
|
49.369999
|
||||||
|
49.77
|
||||||
|
50.34
|
||||||
|
49.049999
|
||||||
|
49.110001
|
||||||
|
49.389999
|
||||||
|
49.77
|
||||||
|
50.130001
|
||||||
|
51.049999
|
||||||
|
50.93
|
||||||
|
51.189999
|
||||||
|
51.060001
|
||||||
|
52.209999
|
||||||
|
53.16
|
||||||
|
53.52
|
||||||
|
53.799999
|
||||||
|
53.400002
|
||||||
|
53.849998
|
||||||
|
54.389999
|
||||||
|
53.400002
|
||||||
|
52.16
|
||||||
|
52.060001
|
||||||
|
51.900002
|
||||||
|
52.290001
|
||||||
|
51.84
|
||||||
|
52.93
|
||||||
|
52.52
|
||||||
|
53.540001
|
||||||
|
53.869999
|
||||||
|
54.330002
|
||||||
|
53.740002
|
||||||
|
52.73
|
||||||
|
54.389999
|
||||||
|
53.419998
|
||||||
|
53.669998
|
||||||
|
52.869999
|
||||||
|
54.610001
|
||||||
|
53.470001
|
||||||
|
53.970001
|
||||||
|
54.939999
|
||||||
|
54.759998
|
||||||
|
56.549999
|
||||||
|
57.900002
|
||||||
|
57.16
|
||||||
|
57.580002
|
||||||
|
58.959999
|
||||||
|
58.349998
|
||||||
|
59.09
|
||||||
|
58.669998
|
||||||
|
58.580002
|
||||||
|
58.259998
|
||||||
|
58.790001
|
||||||
|
60.150002
|
||||||
|
59.200001
|
||||||
|
58.549999
|
||||||
|
59.34
|
||||||
|
59.119999
|
||||||
|
58.419998
|
||||||
|
58.860001
|
||||||
|
59.619999
|
||||||
|
59.48
|
||||||
|
59.669998
|
||||||
|
58.02
|
||||||
|
58.040001
|
||||||
|
59.060001
|
||||||
|
59.689999
|
||||||
|
60.290001
|
||||||
|
59.290001
|
||||||
|
59.439999
|
||||||
|
59.400002
|
||||||
|
60.84
|
||||||
|
60.049999
|
||||||
|
60
|
||||||
|
59.970001
|
||||||
|
60.529999
|
||||||
|
61.009998
|
||||||
|
61.77
|
||||||
|
61.68
|
||||||
|
61.459999
|
||||||
|
61.27
|
||||||
|
61.240002
|
||||||
|
62
|
||||||
|
61.130001
|
||||||
|
62.639999
|
||||||
|
62.560001
|
||||||
|
62.040001
|
||||||
|
62.240002
|
||||||
|
62.5
|
||||||
|
62.919998
|
||||||
|
63.830002
|
||||||
|
64.739998
|
||||||
|
64.629997
|
||||||
|
65.080002
|
||||||
|
63.5
|
||||||
|
62.939999
|
||||||
|
63.330002
|
||||||
|
63.93
|
||||||
|
64.029999
|
||||||
|
64.18
|
||||||
|
64.220001
|
||||||
|
64.010002
|
||||||
|
65.82
|
||||||
|
66.050003
|
||||||
|
66.230003
|
||||||
|
66.040001
|
||||||
|
67.779999
|
||||||
|
68.860001
|
||||||
|
68.660004
|
||||||
|
67.309998
|
||||||
|
66.669998
|
||||||
|
67.260002
|
||||||
|
67.25
|
||||||
|
70.970001
|
||||||
|
69.800003
|
||||||
|
70.209999
|
||||||
|
71.019997
|
||||||
|
71.339996
|
||||||
|
71.059998
|
||||||
|
71.150002
|
||||||
|
72.559998
|
||||||
|
72.379997
|
||||||
|
72.25
|
||||||
|
73.389999
|
||||||
|
74.739998
|
||||||
|
74.410004
|
||||||
|
74.769997
|
||||||
|
74.099998
|
||||||
|
73.989998
|
||||||
|
74.029999
|
||||||
|
74.489998
|
||||||
|
73.43
|
||||||
|
77.699997
|
||||||
|
76.379997
|
||||||
|
76.010002
|
||||||
|
77.769997
|
||||||
|
77.57
|
||||||
|
78.57
|
||||||
|
77.839996
|
||||||
|
77.790001
|
||||||
|
73.25
|
||||||
|
75.730003
|
||||||
|
75.300003
|
||||||
|
70.970001
|
||||||
|
71.199997
|
||||||
|
73.139999
|
||||||
|
73.690002
|
||||||
|
72.910004
|
||||||
|
73.290001
|
||||||
|
73.620003
|
||||||
|
74.089996
|
||||||
|
74.260002
|
||||||
|
75.650002
|
||||||
|
75.32
|
||||||
|
74.5
|
||||||
|
74
|
||||||
|
74.019997
|
||||||
|
73.889999
|
||||||
|
74.269997
|
||||||
|
74.589996
|
||||||
|
74.169998
|
||||||
|
73.620003
|
||||||
|
73.839996
|
||||||
|
76.75
|
||||||
|
76.730003
|
||||||
|
78.699997
|
||||||
|
79.050003
|
||||||
|
79.190002
|
||||||
|
79.370003
|
||||||
|
79.75
|
||||||
|
80.540001
|
||||||
|
80.419998
|
||||||
|
82.470001
|
||||||
|
82.940002
|
||||||
|
83.839996
|
||||||
|
83.980003
|
||||||
|
84.209999
|
||||||
|
83.709999
|
||||||
|
84.339996
|
||||||
|
85.449997
|
||||||
|
84.309998
|
||||||
|
83.779999
|
||||||
|
85.32
|
||||||
|
78.400002
|
||||||
|
76.57
|
||||||
|
74.705002
|
||||||
|
75.68
|
||||||
|
75.589996
|
||||||
|
72.32
|
||||||
|
74.75
|
||||||
|
75.279999
|
||||||
|
74.970001
|
||||||
|
77.269997
|
||||||
|
78.294998
|
||||||
|
78.370003
|
||||||
|
77.059998
|
||||||
|
76.510002
|
||||||
|
77.699997
|
||||||
|
79.690002
|
||||||
|
79.349998
|
||||||
|
79.459999
|
||||||
|
79.410004
|
||||||
|
78.639999
|
||||||
|
78.870003
|
||||||
|
79.07
|
||||||
|
79.230003
|
||||||
|
79.519997
|
||||||
|
79.870003
|
||||||
|
80.709999
|
||||||
|
80.599998
|
||||||
|
80.199997
|
||||||
|
83.309998
|
||||||
|
82.57
|
||||||
|
82.160004
|
@ -6,6 +6,7 @@ macd_decider::macd_decider(std::size_t limit)
|
|||||||
|
|
||||||
void macd_decider::process(double price)
|
void macd_decider::process(double price)
|
||||||
{
|
{
|
||||||
|
count++;
|
||||||
prices.add(price);
|
prices.add(price);
|
||||||
macd.add(ema<double>(prices.begin(), prices.begin() + 12) - ema<double>(prices.begin(), prices.begin() + 26));
|
macd.add(ema<double>(prices.begin(), prices.begin() + 12) - ema<double>(prices.begin(), prices.begin() + 26));
|
||||||
signal.add(ema<double>(macd.begin(), macd.begin() + 9));
|
signal.add(ema<double>(macd.begin(), macd.begin() + 9));
|
||||||
@ -16,4 +17,7 @@ void macd_decider::reset(double price)
|
|||||||
prices = buffer<double>(limit, price);
|
prices = buffer<double>(limit, price);
|
||||||
signal = buffer<double>(limit, .0);
|
signal = buffer<double>(limit, .0);
|
||||||
macd = buffer<double>(limit, .0);
|
macd = buffer<double>(limit, .0);
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
start_price = price;
|
||||||
}
|
}
|
||||||
|
10
decider.h
10
decider.h
@ -26,7 +26,9 @@ protected:
|
|||||||
buffer<double> macd;
|
buffer<double> macd;
|
||||||
buffer<double> signal;
|
buffer<double> signal;
|
||||||
|
|
||||||
|
unsigned count = 0;
|
||||||
public:
|
public:
|
||||||
|
double start_price;
|
||||||
macd_decider(std::size_t limit = 1000);
|
macd_decider(std::size_t limit = 1000);
|
||||||
|
|
||||||
virtual void process(double price);
|
virtual void process(double price);
|
||||||
@ -36,7 +38,7 @@ public:
|
|||||||
template <int p, int m, int s, int r, int ...layers>
|
template <int p, int m, int s, int r, int ...layers>
|
||||||
class neural_decider : public decider, macd_decider {
|
class neural_decider : public decider, macd_decider {
|
||||||
public:
|
public:
|
||||||
using network_t = network<double, p+m+s+r, layers..., 2+r>;
|
using network_t = network<double, p+m+s+r+2, layers..., 2+r>;
|
||||||
using self_t = neural_decider<p, m, s, r, layers...>;
|
using self_t = neural_decider<p, m, s, r, layers...>;
|
||||||
|
|
||||||
network_t network;
|
network_t network;
|
||||||
@ -50,6 +52,8 @@ public:
|
|||||||
virtual int decide(double price, double money, unsigned stock)
|
virtual int decide(double price, double money, unsigned stock)
|
||||||
{
|
{
|
||||||
process(price);
|
process(price);
|
||||||
|
|
||||||
|
if (count < 35) return 0;
|
||||||
|
|
||||||
auto input = prepare(money, stock);
|
auto input = prepare(money, stock);
|
||||||
auto result = network.evaluate(input);
|
auto result = network.evaluate(input);
|
||||||
@ -108,7 +112,7 @@ private:
|
|||||||
typename network_t::input prepare(double money, unsigned stock)
|
typename network_t::input prepare(double money, unsigned stock)
|
||||||
{
|
{
|
||||||
vector<double, 2> state = {
|
vector<double, 2> state = {
|
||||||
{ (money - start_money) / start_money },
|
{ (prices[0] * stock + money) / (start_money + start_stock * start_price) },
|
||||||
{ (double)stock / this->start_stock }
|
{ (double)stock / this->start_stock }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -133,7 +137,7 @@ private:
|
|||||||
// analytic data is normalized in its own domain
|
// analytic data is normalized in its own domain
|
||||||
tech = normalize(tech);
|
tech = normalize(tech);
|
||||||
|
|
||||||
return concat(concat(prices, tech), feedback);
|
return concat(concat(prices, tech), concat(feedback, state));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
\coordinate (action-1) at (1,0);
|
\coordinate (action-1) at (0,0);
|
||||||
\coordinate (action-2) at (2,0);
|
\coordinate (action-2) at (1,0);
|
||||||
\coordinate (action-3) at (23,0);
|
\coordinate (action-3) at (22,0);
|
||||||
\coordinate (action-4) at (76,0);
|
\coordinate (action-4) at (75,0);
|
||||||
\coordinate (action-5) at (138,0);
|
\coordinate (action-5) at (137,0);
|
||||||
\coordinate (action-6) at (201,0);
|
\coordinate (action-6) at (200,0);
|
||||||
\coordinate (action-7) at (264,0);
|
\coordinate (action-7) at (263,0);
|
||||||
\coordinate (action-8) at (327,0);
|
\coordinate (action-8) at (326,0);
|
||||||
\coordinate (action-9) at (390,0);
|
\coordinate (action-9) at (389,0);
|
||||||
\coordinate (action-10) at (453,0);
|
\coordinate (action-10) at (452,0);
|
||||||
\coordinate (action-11) at (515,0);
|
\coordinate (action-11) at (514,0);
|
||||||
\coordinate (action-12) at (578,0);
|
\coordinate (action-12) at (577,0);
|
||||||
\coordinate (action-13) at (641,0);
|
\coordinate (action-13) at (640,0);
|
||||||
\coordinate (action-14) at (704,0);
|
\coordinate (action-14) at (703,0);
|
||||||
\coordinate (action-15) at (767,0);
|
\coordinate (action-15) at (766,0);
|
||||||
\coordinate (action-16) at (829,0);
|
\coordinate (action-16) at (828,0);
|
||||||
\coordinate (action-17) at (892,0);
|
\coordinate (action-17) at (891,0);
|
||||||
\coordinate (action-18) at (955,0);
|
\coordinate (action-18) at (954,0);
|
||||||
|
@ -190,14 +190,16 @@ public:
|
|||||||
|
|
||||||
template <std::size_t N> using layer_type = typename layer_types<N, T, in, out, layers...>::type;
|
template <std::size_t N> using layer_type = typename layer_types<N, T, in, out, layers...>::type;
|
||||||
|
|
||||||
template <std::size_t N> layer_type<N>& get()
|
template <std::size_t N>
|
||||||
|
typename std::enable_if<N != 0, layer_type<N>>::type& get()
|
||||||
{
|
{
|
||||||
return subnetwork.template get<N-1>();
|
return subnetwork.template get<N-1>();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<> layer_type<0>& get<0>()
|
template<std::size_t N>
|
||||||
|
typename std::enable_if<N == 0, layer_type<N>>::type& get()
|
||||||
{
|
{
|
||||||
return base::template get<0>();
|
return base::template get<N>();
|
||||||
}
|
}
|
||||||
|
|
||||||
output evaluate(typename base::input inp)
|
output evaluate(typename base::input inp)
|
||||||
|
25
result.tex
Normal file
25
result.tex
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
\begin{groupplot}[width=\linewidth, height=4cm, group style={
|
||||||
|
group size=1 by 4,
|
||||||
|
vertical sep=.2cm,
|
||||||
|
group name=G
|
||||||
|
},
|
||||||
|
axis lines=center,
|
||||||
|
no marks,
|
||||||
|
xtick=\empty, clip=false
|
||||||
|
]
|
||||||
|
\nextgroupplot
|
||||||
|
\addplot +[thick] table [x=no, y=price, col sep=comma] {\file};
|
||||||
|
|
||||||
|
\nextgroupplot[height=3cm]
|
||||||
|
\addplot +[name path global=macd, red] table [x=no, y=macd, col sep=comma] {\file};
|
||||||
|
\addplot +[name path global=signal, blue] table [x=no, y=signal, col sep=comma] {\file};
|
||||||
|
|
||||||
|
\nextgroupplot[height=2cm, ytick=\empty, y axis line style={draw=none}]
|
||||||
|
\addplot +[thick, black] table [x=no, y=delta, col sep=comma] {\file};
|
||||||
|
|
||||||
|
\nextgroupplot[height=3cm]
|
||||||
|
\addplot +[name path global=macd, red] table [x=no, y=macd, col sep=comma] {\file};
|
||||||
|
\addplot +[name path global=signal, blue] table [x=no, y=signal, col sep=comma] {\file};
|
||||||
|
|
||||||
|
\coordinate (safe) at (35,0);
|
||||||
|
\end{groupplot}
|
@ -1,5 +1,5 @@
|
|||||||
\begin{groupplot}[width=\linewidth, height=4cm, group style={
|
\begin{groupplot}[width=\linewidth, height=4cm, group style={
|
||||||
group size=1 by 4,
|
group size=1 by 3,
|
||||||
vertical sep=.2cm,
|
vertical sep=.2cm,
|
||||||
group name=G
|
group name=G
|
||||||
},
|
},
|
||||||
@ -19,8 +19,5 @@
|
|||||||
|
|
||||||
\coordinate (safe) at (35,0);
|
\coordinate (safe) at (35,0);
|
||||||
\input{\action-c.tex}
|
\input{\action-c.tex}
|
||||||
|
|
||||||
\nextgroupplot[height=3cm]
|
|
||||||
\addplot +[thick, orange] table [x=x, y=decsion, col sep=comma] {\decision};
|
|
||||||
\end{groupplot}
|
\end{groupplot}
|
||||||
\input{\action-a.tex}
|
\input{\action-a.tex}
|
||||||
|
24
sprawozdanie/result.tex
Normal file
24
sprawozdanie/result.tex
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
\begin{groupplot}[width=\linewidth, height=4cm, group style={
|
||||||
|
group size=1 by 4,
|
||||||
|
vertical sep=.2cm,
|
||||||
|
group name=G
|
||||||
|
},
|
||||||
|
axis lines=center,
|
||||||
|
no marks,
|
||||||
|
xtick=\empty, clip=false
|
||||||
|
]
|
||||||
|
\nextgroupplot
|
||||||
|
\addplot +[thick] table [x=no, y=price, col sep=comma] {\file};
|
||||||
|
|
||||||
|
\nextgroupplot[height=3cm]
|
||||||
|
\addplot +[orange] table [x=x, y=decsion, col sep=comma] {\action};
|
||||||
|
|
||||||
|
\nextgroupplot[height=2cm, ytick=\empty, y axis line style={draw=none}]
|
||||||
|
\addplot +[thick, black] table [x=no, y=delta, col sep=comma] {\file};
|
||||||
|
|
||||||
|
\nextgroupplot[height=2cm]
|
||||||
|
\addplot +[name path global=macd, red] table [x=no, y=macd, col sep=comma] {\file};
|
||||||
|
\addplot +[name path global=signal, blue] table [x=no, y=signal, col sep=comma] {\file};
|
||||||
|
|
||||||
|
\coordinate (safe) at (35,0);
|
||||||
|
\end{groupplot}
|
@ -29,6 +29,8 @@
|
|||||||
|
|
||||||
\pgfplotsset{compat=1.15}
|
\pgfplotsset{compat=1.15}
|
||||||
\usepgfplotslibrary{groupplots}
|
\usepgfplotslibrary{groupplots}
|
||||||
|
\usepgfplotslibrary{external}
|
||||||
|
\tikzexternalize
|
||||||
|
|
||||||
\DeclarePairedDelimiter\ceil{\lceil}{\rceil}
|
\DeclarePairedDelimiter\ceil{\lceil}{\rceil}
|
||||||
\DeclarePairedDelimiter\floor{\lfloor}{\rfloor}
|
\DeclarePairedDelimiter\floor{\lfloor}{\rfloor}
|
||||||
@ -47,18 +49,172 @@
|
|||||||
|
|
||||||
\floatname{algorithm}{Program}
|
\floatname{algorithm}{Program}
|
||||||
|
|
||||||
\newcommand{\macd}[1]{\def\file{../macd/#1.dat}\def\action{../macd/#2-intersect.dat}\input{macd.tex}}
|
\newcommand{\macd}[1]{%
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\def\file{../macd/#1.csv}
|
||||||
|
\def\action{../macd/#1-intersect}
|
||||||
|
\input{macd.tex}
|
||||||
|
\end{tikzpicture}%
|
||||||
|
}
|
||||||
|
|
||||||
|
\newcommand{\result}[2]{%
|
||||||
|
\begin{tikzpicture}
|
||||||
|
\def\file{../macd/#1.csv}
|
||||||
|
\def\action{#2.csv}
|
||||||
|
\input{result.tex}
|
||||||
|
\end{tikzpicture}%
|
||||||
|
}
|
||||||
|
|
||||||
\tikzstyle{sell}=[red, -latex, densely dotted]
|
\tikzstyle{sell}=[red, -latex, densely dotted]
|
||||||
\tikzstyle{buy}=[green, latex-, densely dotted]
|
\tikzstyle{buy}=[green, latex-, densely dotted]
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\maketitle
|
\maketitle
|
||||||
|
|
||||||
|
\section{Cel projektu}
|
||||||
|
Założeniem projektu było stworzenie programu, który umożliwiałby wyznaczenie wskaźnika giełdowego MACD. Drugim zadaniem
|
||||||
|
było opracowanie programu, który automatycznie podejmowałby decyzje kupna bądź sprzedaży na podstawie analizy dostępnych
|
||||||
|
mu danych.
|
||||||
|
|
||||||
|
\section{Analiza wskaźnika MACD}
|
||||||
|
Wskaźnik MACD składa się z 2 powiązanych ze sobą wskaźników - wskaźnika rozbieżności między trendem krótkotrwałym oraaz
|
||||||
|
długotrwałym, oraz wskaźnika sygnału stanowiącego średnią tej rozbieżności. Do wyznaczenia obu tych wskaźników
|
||||||
|
wykorzystuje się średnie z danych historycznych. Przyjęło się, że poprzez trend długotrwały rozumiemy średnią z
|
||||||
|
ostatnich 26 dni, krótkotrwały z 12 dni a sygnał jest średnią z ostatnich 9 dni.
|
||||||
|
|
||||||
|
Tak niska granulacja danych wynika z faktu, że w czasie opracowania wskaźnika nie było możliwości dostępu do danych o
|
||||||
|
większej granulacji niż dniowa, i najczęściej na podstawie tego typu danych musiano podejmować decyzje kupna bądź
|
||||||
|
sprzedaży. Dobór rozmiaru okien czasowych również w czasie opracowania prawdopodobnie był nieprzypadkowy - przy 6
|
||||||
|
dniowym tygodniu handlowym 12 dni stanowiło 2 tygodnie, 9 dni półtora a 26 miesiąc i pół tygodnia - zatem zgodnie z ideą
|
||||||
|
prawdopodobnie właściwym doborem parametrów dla aktualnych czasów byłyby średnie z ostatnich 22, 10 oraz 7 dni.
|
||||||
|
|
||||||
|
Ze względu na oparcie wskaźnika na ostatnich $n$-wartościach historycznych, reakcja wskaźnika na zachowania inwestorów
|
||||||
|
zawsze jest opóźniona i nie radzi sobie za dobrze w wypadku nagłych gwałtownych spadków cen - w sytuacji, w której
|
||||||
|
sprawny inwestor podjąłby szybką decyzję sprzedaży akcji, wskaźnik zasugeruje taką decyzję z drobnym, najczęściej około
|
||||||
|
2-3 dniowym opóźnieniem.
|
||||||
|
|
||||||
|
Dodatkowo jak można zaobserwować na niemal wszystkich wykresach, informacje pochodzące ze wskaźnika generują znaczny
|
||||||
|
szum w momentach, w których giełda zachowuje się relatywnie stabilnie generując wiele sygnałów o ostatecznie zerowym
|
||||||
|
znaczeniu inwestycyjnym.
|
||||||
|
|
||||||
\begin{figure}[H]
|
\begin{figure}[H]
|
||||||
\begin{tikzpicture}
|
\macd{fb}
|
||||||
\macd{sin}
|
\caption{Wskaźnik MACD oraz Signal dla firmy Facebook}
|
||||||
\end{tikzpicture}
|
|
||||||
\caption{XD}
|
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
Patrząc na powyższy wykres widzimy ogromną ilość sygnałów do kupna oraz sprzedaży, jednak część z nich stanowi całkiem
|
||||||
|
kompetentny licznik modulo 2, sugerujący sprzedaż akcji jednego dnia tylko po to by kupić je następnego.
|
||||||
|
Wyznacznik ten sprawdza się jednak całkiem dobrze w wypadku nagłych wzrostów, po których następuje stabilizacja -
|
||||||
|
najczęściej całkiem dobrze przewidując moment w którym będzie bezpiecznie sprzedać bez tracenia ewentualnych zysków.
|
||||||
|
|
||||||
|
Dodatkowo ze względu na to, że jest to wyznacznik dość dobrze rozpowszechniony wśród osób niedoświadczonych istnieje
|
||||||
|
niezerowe ryzyko wystąpienia zjawiska samoindukcji wskaźnika.
|
||||||
|
|
||||||
|
Jak wcześniej zauważono, ze względu na budowę wskaźnik ten zawsze będzie miał drobne opóźnienie względem aktualnej
|
||||||
|
sytuacji na giełdzie. W niektórych wypadkach jednak istnieje nieorawdopodobna wręcz zgodność zachowania wykresu
|
||||||
|
giełdowego z przewidywaniami wskaźnika. Sytuację te można zaobserwować na wyżej wymienionym wykresie firmy facebook.
|
||||||
|
Ponieważ inwestorzy opierają się i sugerują wskaźnikiem może wystąpić sytuacja, w której wskaźnik sprawdzi się wyjątkowo
|
||||||
|
dobrze tylko ze względu na to, że inwestorzy sugerując się nim podjęli decyzję nagłej sprzedaży.
|
||||||
|
|
||||||
|
\section{Automatyczne zarabianie}
|
||||||
|
|
||||||
|
Wnioski:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Sieć kurewsko trudno wytrenować
|
||||||
|
\item Najlepiej powierzyć te zadanie kotu, chodząc po klawiaturze ma równe szanse na dobre inwestycje co program
|
||||||
|
\item
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\appendix
|
||||||
|
|
||||||
|
\section{Wykresy wskaźników dla różnych spółek giełdowych}
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{11bit}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla 11-bit studios}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{amazon}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla firmy Amazon}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{apple}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla firmy Apple}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{bitcoin}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla Bitcoina}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{cdr}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla firmy CD Projekt Red}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{dogecoin}
|
||||||
|
\caption{Wow, such MACD, many SIGNAL, wow.}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{dow30}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla indeksu Dow Jones}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{fb}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla firmy Facebook}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{google}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla firmy Google}
|
||||||
|
\end{figure}
|
||||||
|
%
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{intel}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla firmy Intel}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{ltc}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla kryptowaluty Litecoin}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{msft}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla firmy Microsoft}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{nasdaq}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla giełdy NASDAQ}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{nvidia}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla firmy Nvidia}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{paypal}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla firmy PayPal}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{sin}
|
||||||
|
\caption{Cóż... XD}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{tesla}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla firmy Tesla}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\macd{wig20}
|
||||||
|
\caption{Wskaźnik MACD oraz Signal dla indeksu WIG20}
|
||||||
|
\end{figure}
|
||||||
\end{document}
|
\end{document}
|
||||||
|
@ -31,7 +31,7 @@ int main(int argc, const char* argv[])
|
|||||||
args({"s", "stock"}, 1000) >> start_stock;
|
args({"s", "stock"}, 1000) >> start_stock;
|
||||||
args({"m", "money"}, 1000.) >> start_money;
|
args({"m", "money"}, 1000.) >> start_money;
|
||||||
|
|
||||||
std::function<double(const double&)> normalizer = [](const double& result) -> double { return erf(result); };
|
std::function<double(const double&)> normalizer = [](const double& result) -> double { return result / (1 + abs(result)); };
|
||||||
|
|
||||||
std::ifstream network_file(network, std::ios::in | std::ios::binary);
|
std::ifstream network_file(network, std::ios::in | std::ios::binary);
|
||||||
std::ifstream input_file;
|
std::ifstream input_file;
|
||||||
|
@ -53,7 +53,7 @@ int main(int argc, char* argv[])
|
|||||||
return distribution(random_engine);
|
return distribution(random_engine);
|
||||||
};
|
};
|
||||||
|
|
||||||
std::function<double(const double&)> normalizer = [](const double& result) -> double { return erf(result); };
|
std::function<double(const double&)> normalizer = [](const double& result) -> double { return result / (1 + abs(result)); };
|
||||||
|
|
||||||
std::function<current_decider ()> factory = [&]() -> current_decider {
|
std::function<current_decider ()> factory = [&]() -> current_decider {
|
||||||
current_decider decider(normalizer);
|
current_decider decider(normalizer);
|
||||||
|
10
trainer.h
10
trainer.h
@ -47,7 +47,7 @@ public:
|
|||||||
auto hodl = input.back() * this->stock + this->money;
|
auto hodl = input.back() * this->stock + this->money;
|
||||||
|
|
||||||
auto result = std::min((current - hodl)/hodl, (current - start)/start);
|
auto result = std::min((current - hodl)/hodl, (current - start)/start);
|
||||||
if (result < 0) result *= 5;
|
/* if (result < 0) result *= 4; */
|
||||||
return result / (1 + abs(result));
|
return result / (1 + abs(result));
|
||||||
};
|
};
|
||||||
add(n);
|
add(n);
|
||||||
@ -95,7 +95,7 @@ public:
|
|||||||
simulator sim(&(trainee->decider), this->money, this->stock);
|
simulator sim(&(trainee->decider), this->money, this->stock);
|
||||||
sim.proceed(input);
|
sim.proceed(input);
|
||||||
|
|
||||||
trainee->score += q(trainee, input, sim.money, sim.stock);
|
trainee->score = std::min(trainee->score, q(trainee, input, sim.money, sim.stock));
|
||||||
|
|
||||||
auto last = input.back();
|
auto last = input.back();
|
||||||
auto first = input.front();
|
auto first = input.front();
|
||||||
@ -147,7 +147,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::discrete_distribution<unsigned> distribution(probability.begin(), probability.end());
|
std::discrete_distribution<unsigned> distribution(probability.begin(), probability.end());
|
||||||
std::exponential_distribution<double> exponential(1.5);
|
std::exponential_distribution<double> exponential(2.5);
|
||||||
std::uniform_real_distribution<double> ratio(0.0, 1.0);
|
std::uniform_real_distribution<double> ratio(0.0, 1.0);
|
||||||
|
|
||||||
auto combiner = [=](const double& a, const double& b){
|
auto combiner = [=](const double& a, const double& b){
|
||||||
@ -160,11 +160,13 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto mutator = [=](const double& a) {
|
auto mutator = [=](const double& a) {
|
||||||
|
if(ratio(random_engine) < .25) return a;
|
||||||
|
|
||||||
auto mutation = (rand() % 2 ? -1 : 1) * exponential(random_engine);
|
auto mutation = (rand() % 2 ? -1 : 1) * exponential(random_engine);
|
||||||
return a + mutation;
|
return a + mutation;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::size_t to_combine = diff * 0.4, to_mutate = diff * 0.4;
|
std::size_t to_combine = diff * 0.5, to_mutate = diff * 0.3;
|
||||||
|
|
||||||
unsigned first, second;
|
unsigned first, second;
|
||||||
for (int i = 0; i < to_combine; i++) {
|
for (int i = 0; i < to_combine; i++) {
|
||||||
|
1247
wig20/alr_d.dat
Normal file
1247
wig20/alr_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/bzw_d.dat
Normal file
1247
wig20/bzw_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/ccc_d.dat
Normal file
1247
wig20/ccc_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/cps_d.dat
Normal file
1247
wig20/cps_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1067
wig20/eng_d.dat
Normal file
1067
wig20/eng_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/eur_d.dat
Normal file
1247
wig20/eur_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/jsw_d.dat
Normal file
1247
wig20/jsw_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/kgh_d.dat
Normal file
1247
wig20/kgh_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/lpp_d.dat
Normal file
1247
wig20/lpp_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/lts_d.dat
Normal file
1247
wig20/lts_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/mbk_d.dat
Normal file
1247
wig20/mbk_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/opl_d.dat
Normal file
1247
wig20/opl_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/peo_d.dat
Normal file
1247
wig20/peo_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/pge_d.dat
Normal file
1247
wig20/pge_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/pgn_d.dat
Normal file
1247
wig20/pgn_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/pkn_d.dat
Normal file
1247
wig20/pkn_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/pko_d.dat
Normal file
1247
wig20/pko_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/pzu_d.dat
Normal file
1247
wig20/pzu_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
1247
wig20/tpe_d.dat
Normal file
1247
wig20/tpe_d.dat
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user