Splitting by conditions

Specific methods for segmenting on time ranges or if condition is met is supported with the following methods.

when

The when methods allows aggregating elements from a TimeArray into specific time periods, such as Mondays or the month of October:

julia> using TimeSeries

julia> using MarketData

julia> when(cl, dayofweek, 1)
95×1 TimeArray{Float64,1,Date,Array{Float64,1}} 2000-01-03 to 2001-12-31
│            │ Close  │
├────────────┼────────┤
│ 2000-01-03 │ 111.94 │
│ 2000-01-10 │ 97.75  │
│ 2000-01-24 │ 106.25 │
│ 2000-01-31 │ 103.75 │
│ 2000-02-07 │ 114.06 │
│ 2000-02-14 │ 115.81 │
│ 2000-02-28 │ 113.25 │
│ 2000-03-06 │ 125.69 │
│ ⋮          │ ⋮      │
│ 2001-11-19 │ 20.0   │
│ 2001-11-26 │ 21.37  │
│ 2001-12-03 │ 21.05  │
│ 2001-12-10 │ 22.54  │
│ 2001-12-17 │ 20.62  │
│ 2001-12-24 │ 21.36  │
│ 2001-12-31 │ 21.9   │

julia> when(cl, dayname, "Monday")
95×1 TimeArray{Float64,1,Date,Array{Float64,1}} 2000-01-03 to 2001-12-31
│            │ Close  │
├────────────┼────────┤
│ 2000-01-03 │ 111.94 │
│ 2000-01-10 │ 97.75  │
│ 2000-01-24 │ 106.25 │
│ 2000-01-31 │ 103.75 │
│ 2000-02-07 │ 114.06 │
│ 2000-02-14 │ 115.81 │
│ 2000-02-28 │ 113.25 │
│ 2000-03-06 │ 125.69 │
│ ⋮          │ ⋮      │
│ 2001-11-19 │ 20.0   │
│ 2001-11-26 │ 21.37  │
│ 2001-12-03 │ 21.05  │
│ 2001-12-10 │ 22.54  │
│ 2001-12-17 │ 20.62  │
│ 2001-12-24 │ 21.36  │
│ 2001-12-31 │ 21.9   │

The period argument holds a valid Date method. Below are currently available alternatives.

Dates methodExample
dayJan 3, 2000 = 3
daynameJan 3, 2000 = "Monday"
weekJan 3, 2000 = 1
monthJan 3, 2000 = 1
monthnameJan 3, 2000 = "January"
yearJan 3, 2000 = 2000
dayofweekMonday = 1
dayofweekofmonthFourth Monday in Jan = 4
dayofyearDec 31, 2000 = 366
quarterofyearDec 31, 2000 = 4
dayofquarterDec 31, 2000 = 93

from

The from method truncates a TimeArray starting with the date passed to the method:

julia> using TimeSeries

julia> using MarketData

julia> from(cl, Date(2001, 12, 27))
3×1 TimeArray{Float64,1,Date,Array{Float64,1}} 2001-12-27 to 2001-12-31
│            │ Close │
├────────────┼───────┤
│ 2001-12-27 │ 22.07 │
│ 2001-12-28 │ 22.43 │
│ 2001-12-31 │ 21.9  │

to

The to method truncates a TimeArray after the date passed to the method:

julia> using TimeSeries

julia> using MarketData

julia> to(cl, Date(2000, 1, 5))
3×1 TimeArray{Float64,1,Date,Array{Float64,1}} 2000-01-03 to 2000-01-05
│            │ Close  │
├────────────┼────────┤
│ 2000-01-03 │ 111.94 │
│ 2000-01-04 │ 102.5  │
│ 2000-01-05 │ 104.0  │

findwhen

The findwhen method test a condition and returns a vector of Date or DateTime where the condition is true:

julia> using TimeSeries

julia> using MarketData

julia> green = findwhen(ohlc[:Close] .> ohlc[:Open]);

julia> typeof(green)
Array{Date,1}

julia> ohlc[green]
244×4 TimeArray{Float64,2,Date,Array{Float64,2}} 2000-01-03 to 2001-12-28
│            │ Open   │ High   │ Low    │ Close  │
├────────────┼────────┼────────┼────────┼────────┤
│ 2000-01-03 │ 104.88 │ 112.5  │ 101.69 │ 111.94 │
│ 2000-01-05 │ 103.75 │ 110.56 │ 103.0  │ 104.0  │
│ 2000-01-07 │ 96.5   │ 101.0  │ 95.5   │ 99.5   │
│ 2000-01-13 │ 94.48  │ 98.75  │ 92.5   │ 96.75  │
│ 2000-01-14 │ 100.0  │ 102.25 │ 99.38  │ 100.44 │
│ 2000-01-18 │ 101.0  │ 106.0  │ 100.44 │ 103.94 │
│ 2000-01-19 │ 105.62 │ 108.75 │ 103.38 │ 106.56 │
│ 2000-01-25 │ 105.0  │ 113.12 │ 102.38 │ 112.25 │
│ ⋮          │ ⋮      │ ⋮      │ ⋮      │ ⋮      │
│ 2001-12-17 │ 20.4   │ 21.0   │ 20.19  │ 20.62  │
│ 2001-12-18 │ 20.89  │ 21.33  │ 20.22  │ 21.01  │
│ 2001-12-19 │ 20.58  │ 21.68  │ 20.47  │ 21.62  │
│ 2001-12-24 │ 20.9   │ 21.45  │ 20.9   │ 21.36  │
│ 2001-12-26 │ 21.35  │ 22.3   │ 21.14  │ 21.49  │
│ 2001-12-27 │ 21.58  │ 22.25  │ 21.58  │ 22.07  │
│ 2001-12-28 │ 21.97  │ 23.0   │ 21.96  │ 22.43  │

findall

The findall method tests a condition and returns a vector of Int representing the row in the array where the condition is true:

julia> using TimeSeries

julia> using MarketData

julia> red = findall(ohlc[:Close] .< ohlc[:Open]);

julia> typeof(red)
Array{Int64,1}

julia> ohlc[red]
252×4 TimeArray{Float64,2,Date,Array{Float64,2}} 2000-01-04 to 2001-12-31
│            │ Open   │ High   │ Low    │ Close  │
├────────────┼────────┼────────┼────────┼────────┤
│ 2000-01-04 │ 108.25 │ 110.62 │ 101.19 │ 102.5  │
│ 2000-01-06 │ 106.12 │ 107.0  │ 95.0   │ 95.0   │
│ 2000-01-10 │ 102.0  │ 102.25 │ 94.75  │ 97.75  │
│ 2000-01-11 │ 95.94  │ 99.38  │ 90.5   │ 92.75  │
│ 2000-01-12 │ 95.0   │ 95.5   │ 86.5   │ 87.19  │
│ 2000-01-20 │ 115.5  │ 121.5  │ 113.5  │ 113.5  │
│ 2000-01-21 │ 114.25 │ 114.25 │ 110.19 │ 111.31 │
│ 2000-01-24 │ 108.44 │ 112.75 │ 105.12 │ 106.25 │
│ ⋮          │ ⋮      │ ⋮      │ ⋮      │ ⋮      │
│ 2001-12-11 │ 22.67  │ 22.85  │ 21.65  │ 21.78  │
│ 2001-12-12 │ 21.87  │ 21.92  │ 21.25  │ 21.49  │
│ 2001-12-13 │ 21.49  │ 21.55  │ 20.5   │ 21.0   │
│ 2001-12-14 │ 20.73  │ 20.83  │ 20.09  │ 20.39  │
│ 2001-12-20 │ 21.4   │ 21.47  │ 20.62  │ 20.67  │
│ 2001-12-21 │ 21.01  │ 21.54  │ 20.8   │ 21.0   │
│ 2001-12-31 │ 22.51  │ 22.66  │ 21.83  │ 21.9   │

The following example won't create a temporary Bool vector, and gains better performance.

julia> findall(>(100), cl)
89-element Array{Int64,1}:
   1
   2
   3
  10
  11
  12
  13
  14
  15
  16
   ⋮
  88
  89
  91
  92
  93
  94
  95
  96
 118

Splitting by head and tail

head

The head method defaults to returning only the first value in a TimeArray. By selecting the second positional argument to a different value, the user can modify how many from the top are selected:

julia> using TimeSeries

julia> using MarketData

julia> head(cl)
6×1 TimeArray{Float64,1,Date,Array{Float64,1}} 2000-01-03 to 2000-01-10
│            │ Close  │
├────────────┼────────┤
│ 2000-01-03 │ 111.94 │
│ 2000-01-04 │ 102.5  │
│ 2000-01-05 │ 104.0  │
│ 2000-01-06 │ 95.0   │
│ 2000-01-07 │ 99.5   │
│ 2000-01-10 │ 97.75  │

tail

The tail method defaults to returning only the last value in a TimeArray. By selecting the second positional argument to a different value, the user can modify how many from the bottom are selected:

julia> using TimeSeries

julia> using MarketData

julia> tail(cl)
6×1 TimeArray{Float64,1,Date,Array{Float64,1}} 2001-12-21 to 2001-12-31
│            │ Close │
├────────────┼───────┤
│ 2001-12-21 │ 21.0  │
│ 2001-12-24 │ 21.36 │
│ 2001-12-26 │ 21.49 │
│ 2001-12-27 │ 22.07 │
│ 2001-12-28 │ 22.43 │
│ 2001-12-31 │ 21.9  │

julia> tail(cl, 3)
3×1 TimeArray{Float64,1,Date,Array{Float64,1}} 2001-12-27 to 2001-12-31
│            │ Close │
├────────────┼───────┤
│ 2001-12-27 │ 22.07 │
│ 2001-12-28 │ 22.43 │
│ 2001-12-31 │ 21.9  │