|
1 | | -using Fastback |
2 | | -using Test |
3 | 1 | using Dates |
| 2 | +using TestItemRunner |
4 | 3 |
|
5 | | -@testset "periodic_collector" begin |
| 4 | +@testitem "periodic_collector" begin |
| 5 | + using Test, Fastback, Dates |
6 | 6 | # every 500 ms from 1 sec to 5 sec |
7 | 7 | dts = map(x -> DateTime(2000, 1, 1) + Millisecond(x), 1000:500:5000) |
8 | 8 | data = [100.0, 110.0, 99.0, 102.0, 105.0, 105.0, 105.0, 120.0, 110.0] |
9 | | - |
10 | | - begin |
11 | | - # periodic_collector |
12 | | - f, collected = periodic_collector(Float64, Second(1)) |
13 | | - |
14 | | - for i in eachindex(dts) |
15 | | - should_collect(collected, dts[i]) && f(dts[i], data[i]) |
16 | | - end |
17 | | - |
18 | | - @test length(values(collected)) == 5 |
19 | | - @test all(dates(collected) .== map(x -> DateTime(2000, 1, 1) + Second(x), 1:5)) |
20 | | - @test collected.last_dt == dts[end] |
| 9 | + # periodic_collector |
| 10 | + f, collected = periodic_collector(Float64, Second(1)) |
| 11 | + for i in eachindex(dts) |
| 12 | + should_collect(collected, dts[i]) && f(dts[i], data[i]) |
21 | 13 | end |
| 14 | + @test length(values(collected)) == 5 |
| 15 | + @test all(dates(collected) .== map(x -> DateTime(2000, 1, 1) + Second(x), 1:5)) |
| 16 | + @test collected.last_dt == dts[end] |
22 | 17 | end |
23 | 18 |
|
24 | | - |
25 | | -@testset "predicate_collector" begin |
| 19 | +@testitem "predicate_collector" begin |
| 20 | + using Test, Fastback, Dates |
26 | 21 | # every 500 ms from 1 sec to 5 sec |
27 | 22 | dts = map(x -> DateTime(2000, 1, 1) + Millisecond(x), 1000:500:5000) |
28 | 23 | data = [100.0, 110.0, 99.0, 102.0, 105.0, 105.0, 105.0, 120.0, 110.0] |
29 | | - |
30 | | - begin |
31 | | - # predicate_collector |
32 | | - predicate = (collected, dt) -> (dt - collected.last_dt) >= Second(1) |
33 | | - f, collected = predicate_collector(Float64, predicate, 0.0) |
34 | | - |
35 | | - for i in eachindex(dts) |
36 | | - should_collect(collected, dts[i]) && f(dts[i], data[i]) |
37 | | - end |
38 | | - |
39 | | - @test length(dates(collected)) == 5 |
40 | | - @test all(dates(collected) .== map(x -> DateTime(2000, 1, 1) + Second(x), 1:5)) |
41 | | - @test collected.last_dt == dts[end] |
| 24 | + # predicate_collector |
| 25 | + predicate = (collected, dt) -> (dt - collected.last_dt) >= Second(1) |
| 26 | + f, collected = predicate_collector(Float64, predicate, 0.0) |
| 27 | + for i in eachindex(dts) |
| 28 | + should_collect(collected, dts[i]) && f(dts[i], data[i]) |
42 | 29 | end |
| 30 | + @test length(dates(collected)) == 5 |
| 31 | + @test all(dates(collected) .== map(x -> DateTime(2000, 1, 1) + Second(x), 1:5)) |
| 32 | + @test collected.last_dt == dts[end] |
43 | 33 | end |
44 | 34 |
|
45 | | - |
46 | | -@testset "min/max_value_collector" begin |
| 35 | +@testitem "min_value_collector" begin |
| 36 | + using Test, Fastback, Dates |
47 | 37 | # every 500 ms from 1 sec to 5 sec |
48 | 38 | dts = map(x -> DateTime(2000, 1, 1) + Millisecond(x), 1000:500:5000) |
49 | 39 | data = [100.0, 110.0, 99.0, 102.0, 105.0, 105.0, 105.0, 120.0, 110.0] |
50 | | - |
51 | | - begin |
52 | | - # min_value_collector |
53 | | - f, collected = min_value_collector(Float64) |
54 | | - |
55 | | - for i in eachindex(dts) |
56 | | - f(dts[i], data[i]) |
57 | | - end |
58 | | - |
59 | | - @test collected.min_value == minimum(data) |
60 | | - @test collected.dt == dts[indexin(minimum(data), data)][1] |
| 40 | + # min_value_collector |
| 41 | + f, collected = min_value_collector(Float64) |
| 42 | + for i in eachindex(dts) |
| 43 | + f(dts[i], data[i]) |
61 | 44 | end |
| 45 | + @test collected.min_value == minimum(data) |
| 46 | + @test collected.dt == dts[indexin(minimum(data), data)][1] |
| 47 | +end |
62 | 48 |
|
63 | | - begin |
64 | | - # max_value_collector |
65 | | - f, collected = max_value_collector(Float64) |
66 | | - |
67 | | - for i in eachindex(dts) |
68 | | - f(dts[i], data[i]) |
69 | | - end |
70 | | - |
71 | | - @test collected.max_value == maximum(data) |
72 | | - @test collected.dt == dts[indexin(maximum(data), data)][1] |
| 49 | +@testitem "max_value_collector" begin |
| 50 | + using Test, Fastback, Dates |
| 51 | + # every 500 ms from 1 sec to 5 sec |
| 52 | + dts = map(x -> DateTime(2000, 1, 1) + Millisecond(x), 1000:500:5000) |
| 53 | + data = [100.0, 110.0, 99.0, 102.0, 105.0, 105.0, 105.0, 120.0, 110.0] |
| 54 | + # max_value_collector |
| 55 | + f, collected = max_value_collector(Float64) |
| 56 | + for i in eachindex(dts) |
| 57 | + f(dts[i], data[i]) |
73 | 58 | end |
| 59 | + @test collected.max_value == maximum(data) |
| 60 | + @test collected.dt == dts[indexin(maximum(data), data)][1] |
74 | 61 | end |
75 | 62 |
|
76 | | -@testset "drawdown_collector" begin |
| 63 | +@testitem "drawdown_collector_pnl" begin |
| 64 | + using Test, Fastback, Dates |
77 | 65 | # every 500 ms from 1 sec to 5 sec |
78 | 66 | dts = map(x -> DateTime(2000, 1, 1) + Millisecond(x), 1000:500:5000) |
79 | 67 | data = [100.0, 110.0, 99.0, 102.0, 105.0, 105.0, 105.0, 120.0, 110.0] |
80 | | - |
81 | | - begin |
82 | | - # drawdown_collector (P&L) |
83 | | - p = (v, dt, equity) -> dt - v.last_dt >= Second(1) |
84 | | - f, collected = drawdown_collector(DrawdownMode.PnL, p) |
85 | | - |
86 | | - for i in eachindex(dts) |
87 | | - f(dts[i], data[i]) |
88 | | - end |
89 | | - |
90 | | - @test length(dates(collected)) == 5 |
91 | | - @test length(values(collected)) == 5 |
92 | | - @test all(dates(collected) .== map(x -> DateTime(2000, 1, 1) + Second(x), 1:5)) |
93 | | - @test collected.last_dt == dts[end] |
94 | | - @test all(values(collected) .== [0.0, -11, -5, -5, -10]) |
| 68 | + # drawdown_collector (P&L) |
| 69 | + p = (v, dt, equity) -> dt - v.last_dt >= Second(1) |
| 70 | + f, collected = drawdown_collector(DrawdownMode.PnL, p) |
| 71 | + for i in eachindex(dts) |
| 72 | + f(dts[i], data[i]) |
95 | 73 | end |
| 74 | + @test length(dates(collected)) == 5 |
| 75 | + @test length(values(collected)) == 5 |
| 76 | + @test all(dates(collected) .== map(x -> DateTime(2000, 1, 1) + Second(x), 1:5)) |
| 77 | + @test collected.last_dt == dts[end] |
| 78 | + @test all(values(collected) .== [0.0, -11, -5, -5, -10]) |
| 79 | +end |
96 | 80 |
|
97 | | - begin |
98 | | - # drawdown_collector (%) |
99 | | - p = (dv, dt, equity) -> dt - dv.last_dt >= Second(1) |
100 | | - f, collected = drawdown_collector(DrawdownMode.Percentage, p) |
101 | | - |
102 | | - for i in eachindex(dts) |
103 | | - f(dts[i], data[i]) |
104 | | - end |
105 | | - |
106 | | - @test length(dates(collected)) == 5 |
107 | | - @test length(values(collected)) == 5 |
108 | | - @test all(dates(collected) .== map(x -> DateTime(2000, 1, 1) + Second(x), 1:5)) |
109 | | - @test collected.last_dt == dts[end] |
110 | | - @test all(values(collected) .≈ [0.0, -11 / 110, -5 / 110, -5 / 110, -10 / 120]) |
| 81 | +@testitem "drawdown_collector_pct" begin |
| 82 | + using Test, Fastback, Dates |
| 83 | + # every 500 ms from 1 sec to 5 sec |
| 84 | + dts = map(x -> DateTime(2000, 1, 1) + Millisecond(x), 1000:500:5000) |
| 85 | + data = [100.0, 110.0, 99.0, 102.0, 105.0, 105.0, 105.0, 120.0, 110.0] |
| 86 | + # drawdown_collector (%) |
| 87 | + p = (dv, dt, equity) -> dt - dv.last_dt >= Second(1) |
| 88 | + f, collected = drawdown_collector(DrawdownMode.Percentage, p) |
| 89 | + for i in eachindex(dts) |
| 90 | + f(dts[i], data[i]) |
111 | 91 | end |
| 92 | + @test length(dates(collected)) == 5 |
| 93 | + @test length(values(collected)) == 5 |
| 94 | + @test all(dates(collected) .== map(x -> DateTime(2000, 1, 1) + Second(x), 1:5)) |
| 95 | + @test collected.last_dt == dts[end] |
| 96 | + @test all(values(collected) .≈ [0.0, -11 / 110, -5 / 110, -5 / 110, -10 / 120]) |
112 | 97 | end |
0 commit comments