quantitative 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8908c3b863d42be9e0c27fcce1dc57a7b0f0b2f4699cb559140eca1caa717223
4
- data.tar.gz: 2fda3094ef0da147ed1aef5c5aa6b3020f3de426e885562dab714ed00d3bac43
3
+ metadata.gz: 5980a746b36ba0ee44bbd6117df75040a94969c5f00e1129d0f74aa1772b5013
4
+ data.tar.gz: 88fff74e34d1c446d252f9750bb5363828a448b9b326904fefa41499318fdb20
5
5
  SHA512:
6
- metadata.gz: a35fa3205f447fa5b43a52c7725b3ee3fe3c576c5663e2a5cb29fb67325ca11ee4bea24e80bc93510f7d0c22c5bce706fb809a0e8b9a73bfe00a831f28e875ca
7
- data.tar.gz: 1f31136c06beacee9276208a2e9a6bdaebd4c60930ece409b552581dea19b27e38231680ab7699e985cf1040b12d4ac0819510bc748c364051033b3bcd0e4017
6
+ metadata.gz: 57dd5832cf3aceaac7fda15fe2cec89fb615387205fcbbfd2dcb20ed2241bde58648aaa5b87f6bf605e2f827086613e7309d4e71bffdf60d786e2d71038a146f
7
+ data.tar.gz: f80357622cd7cbcee2d13d5439b0423aa0aab9006d3a1aedfd215d8690cf5cc158a9c10990b5ecb933322d5784709c258daa26ccaa0c51ea4808e36ee35554a2
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- quantitative (0.3.2)
4
+ quantitative (0.3.3)
5
5
  oj (~> 3.10)
6
6
  zeitwerk (~> 2.6)
7
7
 
@@ -98,9 +98,18 @@ module Quant
98
98
  series.indicators[source][dominant_cycle_indicator_class]
99
99
  end
100
100
 
101
- def dc_period
101
+ # The adaptive period is the full dominant cycle period
102
+ def adaptive_period
102
103
  dominant_cycle.points[t0].period
103
104
  end
105
+ alias dc_period adaptive_period
106
+ alias dominant_cycle_period adaptive_period
107
+
108
+ def adaptive_half_period
109
+ adaptive_period / 2
110
+ end
111
+ alias dc_half_period adaptive_half_period
112
+ alias dominant_half_cycle_period adaptive_half_period
104
113
 
105
114
  def ticks
106
115
  @points.keys
@@ -193,67 +202,14 @@ module Quant
193
202
  t0.send(source)
194
203
  end
195
204
 
196
- # def warmed_up?
197
- # true
198
- # end
199
-
200
- # attr_reader :dc_period
201
-
202
- # def points_for(series:)
203
- # @points_for_cache[series] ||= self.class.new(series:, settings:, cloning: true).tap do |indicator|
204
- # series.ticks.each { |tick| indicator.points.push(tick.indicators[self]) }
205
- # end
206
- # end
207
-
208
- # # Ticks belong to the first series they're associated with always
209
- # # NOTE: No provisions for series merging their ticks to one series!
210
- # def parent_series
211
- # series.ticks.empty? ? series : series.ticks.first.series
212
- # end
213
-
214
- # # Returns the last point of the current indicator rather than the entire series
215
- # # This is used for indicators that depend on dominant cycle or other indicators
216
- # # to compute their data points.
217
- # def current_point
218
- # points.size - 1
219
- # end
220
-
221
- # def dominant_cycles
222
- # parent_series.indicators.dominant_cycles
223
- # end
224
-
225
- # # Override this method to change source of dominant cycle computation for an indicator
226
- # def dominant_cycle_indicator
227
- # @dominant_cycle_indicator ||= dominant_cycles.band_pass
228
- # end
229
-
230
- # def ensure_not_dominant_cycler_indicator
231
- # return unless is_a? Quant::Indicators::DominantCycles::DominantCycle
232
-
233
- # raise 'Dominant Cycle Indicators cannot use the thing they compute!'
234
- # end
235
-
236
- # # Returns the dominant cycle point for the current indicator's point
237
- # def current_dominant_cycle
238
- # dominant_cycle_indicator[current_point]
239
- # end
205
+ def warmed_up?
206
+ ticks.size > min_period
207
+ end
240
208
 
241
209
  # # Returns the atr point for the current indicator's point
242
210
  # def atr_point
243
211
  # parent_series.indicators.atr[current_point]
244
212
  # end
245
-
246
- # # def dc_period
247
- # # dominant_cycle.period.round(0).to_i
248
- # # end
249
-
250
- # def <<(ohlc)
251
- # points.append(ohlc)
252
- # end
253
-
254
- # def append(ohlc)
255
- # points.append(ohlc)
256
- # end
257
213
  end
258
214
  end
259
215
  end
@@ -27,6 +27,17 @@ module Quant
27
27
  def_delegator :indicator, :dominant_cycle_kind
28
28
  def_delegator :indicator, :pivot_kind
29
29
 
30
+ def_delegator :tick, :high_price
31
+ def_delegator :tick, :low_price
32
+ def_delegator :tick, :close_price
33
+ def_delegator :tick, :open_price
34
+ def_delegator :tick, :volume
35
+ def_delegator :tick, :trades
36
+
37
+ def oc2
38
+ tick.respond_to?(:oc2) ? tick.oc2 : tick.close_price
39
+ end
40
+
30
41
  def initialize_data_points
31
42
  # No-Op - Override in subclass if needed.
32
43
  end
@@ -10,31 +10,25 @@ module Quant
10
10
  end
11
11
 
12
12
  def scale
13
- 5.0
13
+ 3.0
14
14
  end
15
15
 
16
16
  def atr_value
17
- atr_point.slow * scale
17
+ atr_point.value * scale
18
18
  end
19
19
 
20
20
  def compute_midpoint
21
- p0.midpoint = two_pole_super_smooth :input, previous: :midpoint, period: averaging_period
21
+ p0.midpoint = smoothed_average_midpoint
22
22
  end
23
23
 
24
- def compute_bands
25
- p0.h6 = p0.midpoint + 1.000 * atr_value
26
- p0.h5 = p0.midpoint + 0.786 * atr_value
27
- p0.h4 = p0.midpoint + 0.618 * atr_value
28
- p0.h3 = p0.midpoint + 0.500 * atr_value
29
- p0.h2 = p0.midpoint + 0.382 * atr_value
30
- p0.h1 = p0.midpoint + 0.236 * atr_value
24
+ ATR_SERIES = [0.236, 0.382, 0.500, 0.618, 0.786, 1.0].freeze
31
25
 
32
- p0.l1 = p0.midpoint - 0.236 * atr_value
33
- p0.l2 = p0.midpoint - 0.382 * atr_value
34
- p0.l3 = p0.midpoint - 0.500 * atr_value
35
- p0.l4 = p0.midpoint - 0.618 * atr_value
36
- p0.l5 = p0.midpoint - 0.786 * atr_value
37
- p0.l6 = p0.midpoint - 1.000 * atr_value
26
+ def compute_bands
27
+ ATR_SERIES.each_with_index do |ratio, index|
28
+ offset = ratio * atr_value
29
+ p0[index + 1] = p0.midpoint + offset
30
+ p0[-index - 1] = p0.midpoint - offset
31
+ end
38
32
  end
39
33
  end
40
34
  end
@@ -9,37 +9,20 @@ module Quant
9
9
  using Quant
10
10
 
11
11
  def compute_midpoint
12
- values = period_points(half_period).map(&:input)
13
- alpha = bars_to_alpha(half_period)
12
+ values = period_points(adaptive_half_period).map(&:input)
13
+ alpha = bars_to_alpha(adaptive_half_period)
14
14
 
15
15
  p0.midpoint = alpha * values.mean + (1 - alpha) * p1.midpoint
16
16
  p0.std_dev = values.standard_deviation(p0.midpoint)
17
17
  end
18
18
 
19
- def compute_bands
20
- p0.h1 = p0.midpoint + p0.std_dev * 1.0
21
- p0.l1 = p0.midpoint - p0.std_dev * 1.0
22
-
23
- p0.h2 = p0.midpoint + p0.std_dev * 1.5
24
- p0.l2 = p0.midpoint - p0.std_dev * 1.5
25
-
26
- p0.h3 = p0.midpoint + p0.std_dev * 1.75
27
- p0.l3 = p0.midpoint - p0.std_dev * 1.75
28
-
29
- p0.h4 = p0.midpoint + p0.std_dev * 2.0
30
- p0.l4 = p0.midpoint - p0.std_dev * 2.0
19
+ BOLLINGER_SERIES = [1.0, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0].freeze
31
20
 
32
- p0.h5 = p0.midpoint + p0.std_dev * 2.25
33
- p0.l5 = p0.midpoint - p0.std_dev * 2.25
34
-
35
- p0.h6 = p0.midpoint + p0.std_dev * 2.5
36
- p0.l6 = p0.midpoint - p0.std_dev * 2.5
37
-
38
- p0.h7 = p0.midpoint + p0.std_dev * 2.75
39
- p0.l7 = p0.midpoint - p0.std_dev * 2.75
40
-
41
- p0.h8 = p0.midpoint + p0.std_dev * 3.0
42
- p0.l8 = p0.midpoint - p0.std_dev * 3.0
21
+ def compute_bands
22
+ BOLLINGER_SERIES.each_with_index do |ratio, index|
23
+ p0[index + 1] = p0.midpoint + ratio * p0.std_dev
24
+ p0[-index - 1] = p0.midpoint - ratio * p0.std_dev
25
+ end
43
26
  end
44
27
  end
45
28
  end
@@ -7,51 +7,52 @@ module Quant
7
7
  # input the previous day’s open, high, low and close. The formulas for each
8
8
  # resistance and support level are:
9
9
  #
10
- # R4 = Close + (High Low) * 1.1/2
11
- # R3 = Close + (High Low) * 1.1/4
12
- # R2 = Close + (High Low) * 1.1/6
13
- # R1 = Close + (High Low) * 1.1/12
14
- # S1 = Close – (High Low) * 1.1/12
15
- # S2 = Close – (High Low) * 1.1/6
16
- # S3 = Close – (High Low) * 1.1/4
17
- # S4 = Close – (High Low) * 1.1/2
10
+ # R4 = Closing + ((High -Low) x 1.5000)
11
+ # R3 = Closing + ((High -Low) x 1.2500)
12
+ # R2 = Closing + ((High -Low) x 1.1666)
13
+ # R1 = Closing + ((High -Low x 1.0833)
14
+ # PP = (High + Low + Closing) / 3
15
+ # S1 = Closing – ((High -Low) x 1.0833)
16
+ # S2 = Closing – ((High -Low) x 1.1666)
17
+ # S3 = Closing – ((High -Low) x 1.2500)
18
+ # S4 = Closing – ((High-Low) x 1.5000)
19
+ #
20
+ # R5 = R4 + 1.168 * (R4 – R3)
21
+ # R6 = (High/Low) * Close
22
+ # S5 = S4 – 1.168 * (S3 – S4)
23
+ # S6 = Close – (R6 – Close)
18
24
  #
19
25
  # The calculation for further resistance and support levels varies from this
20
26
  # norm. These levels can come into play during strong trend moves, so it’s
21
27
  # important to understand how to identify them. For example, R5, R6, S5 and S6
22
28
  # are calculated as follows:
23
29
  #
24
- # R5 = R4 + 1.168 * (R4 – R3)
25
- # R6 = (High/Low) * Close
26
- #
27
- # S5 = S4 – 1.168 * (S3 – S4)
28
- # S6 = Close – (R6 – Close)
30
+ # source: https://tradingstrategyguides.com/camarilla-pivot-trading-strategy/
29
31
  class Camarilla < Pivot
30
32
  register name: :camarilla
31
33
 
32
34
  def compute_midpoint
33
- p0.midpoint = t0.close_price
35
+ p0.midpoint = t0.hlc3
34
36
  end
35
37
 
36
38
  def compute_bands
37
- mp_plus_range = p0.midpoint + p0.range
38
- mp_minus_range = p0.midpoint - p0.range
39
+ p0.h1 = t0.close_price + p0.range * 1.083
40
+ p0.l1 = t0.close_price - p0.range * 1.083
41
+
42
+ p0.h2 = t0.close_price + p0.range * 1.167
43
+ p0.l2 = t0.close_price - p0.range * 1.167
39
44
 
40
- p0.h4 = mp_plus_range * (1.1 / 2.0)
41
- p0.h3 = mp_plus_range * (1.1 / 4.0)
42
- p0.h2 = mp_plus_range * (1.1 / 6.0)
43
- p0.h1 = mp_plus_range * (1.1 / 12.0)
45
+ p0.h3 = t0.close_price + p0.range * 1.250
46
+ p0.l3 = t0.close_price - p0.range * 1.250
44
47
 
45
- p0.l1 = mp_minus_range * (1.1 / 12.0)
46
- p0.l2 = mp_minus_range * (1.1 / 6.0)
47
- p0.l3 = mp_minus_range * (1.1 / 4.0)
48
- p0.l4 = mp_minus_range * (1.1 / 2.0)
48
+ p0.h4 = t0.close_price + p0.range * 1.500
49
+ p0.l4 = t0.close_price - p0.range * 1.500
49
50
 
50
- p0.h5 = p0.h4 + 1.168 * (p0.h4 - p0.h3)
51
- p0.h6 = p0.midpoint * (p0.high_price / p0.low_price)
51
+ p0.h5 = p0.h4 + 1.68 * (p0.h4 - p0.h3)
52
+ p0.l5 = p0.l4 - 1.68 * (p0.l3 - p0.l4)
52
53
 
53
- p0.l5 = p0.l4 - 1.168 * (p0.l3 - p0.l4)
54
- p0.l6 = p0.midpoint - (p0.h6 - p0.midpoint)
54
+ p0.h6 = (t0.high_price / t0.low_price) * t0.close_price
55
+ p0.l6 = t0.close_price - (p0.h6 - t0.close_price)
55
56
  end
56
57
  end
57
58
  end
@@ -7,7 +7,7 @@ module Quant
7
7
  register name: :classic
8
8
 
9
9
  def compute_midpoint
10
- p0.midpoint = super_smoother :input, previous: :midpoint, period: averaging_period
10
+ p0.midpoint = smoothed_average_midpoint
11
11
  end
12
12
 
13
13
  def compute_bands
@@ -36,15 +36,15 @@ module Quant
36
36
 
37
37
  def compute_midpoint
38
38
  p0.midpoint = p0.input / 4.0
39
- p0.midpoint = super_smoother :midpoint, previous: :midpoint, period: averaging_period
39
+ p0.midpoint = three_pole_super_smooth :midpoint, previous: :midpoint, period: averaging_period
40
40
  end
41
41
 
42
42
  def compute_bands
43
43
  p0.h1 = (p0.input / 2.0) - p0.avg_high
44
- p0.h1 = super_smoother :h1, previous: :h1, period: averaging_period
44
+ p0.h1 = three_pole_super_smooth :h1, previous: :h1, period: averaging_period
45
45
 
46
46
  p0.l1 = (p0.input / 2.0) - p0.avg_low
47
- p0.l1 = super_smoother :l1, previous: :l1, period: averaging_period
47
+ p0.l1 = three_pole_super_smooth :l1, previous: :l1, period: averaging_period
48
48
  end
49
49
  end
50
50
  end
@@ -5,35 +5,31 @@ module Quant
5
5
  module Pivots
6
6
  class Donchian < Pivot
7
7
  register name: :donchian
8
- using Quant
9
8
 
10
- def st_period; min_period end
11
- def mt_period; half_period end
12
- def lt_period; max_period end
13
-
14
- def st_highs; @st_highs ||= [].max_size!(st_period) end
15
- def st_lows; @st_lows ||= [].max_size!(st_period) end
16
- def mt_highs; @mt_highs ||= [].max_size!(mt_period) end
17
- def mt_lows; @mt_lows ||= [].max_size!(mt_period) end
18
- def lt_highs; @lt_highs ||= [].max_size!(lt_period) end
19
- def lt_lows; @lt_lows ||= [].max_size!(lt_period) end
9
+ def compute_midpoint
10
+ p0.midpoint = (p0.high_price + p0.low_price) * 0.5
11
+ end
20
12
 
21
13
  def compute_bands
22
- st_highs << p0.high_price
23
- st_lows << p0.low_price
24
- mt_highs << p0.high_price
25
- mt_lows << p0.low_price
26
- lt_highs << p0.high_price
27
- lt_lows << p0.low_price
14
+ period_points(micro_period).tap do |period_points|
15
+ p0.l1 = period_points.map(&:low_price).min
16
+ p0.h1 = period_points.map(&:high_price).max
17
+ end
28
18
 
29
- p0.h1 = @st_highs.maximum
30
- p0.l1 = @st_lows.minimum
19
+ period_points(min_period).tap do |period_points|
20
+ p0.l2 = period_points.map(&:low_price).min
21
+ p0.h2 = period_points.map(&:high_price).max
22
+ end
31
23
 
32
- p0.h2 = @mt_highs.maximum
33
- p0.l2 = @mt_lows.minimum
24
+ period_points(half_period).tap do |period_points|
25
+ p0.l3 = period_points.map(&:low_price).min
26
+ p0.h3 = period_points.map(&:high_price).max
27
+ end
34
28
 
35
- p0.h3 = @lt_highs.maximum
36
- p0.l3 = @lt_lows.minimum
29
+ period_points(max_period).tap do |period_points|
30
+ p0.l4 = period_points.map(&:low_price).min
31
+ p0.h4 = period_points.map(&:high_price).max
32
+ end
37
33
  end
38
34
  end
39
35
  end
@@ -4,18 +4,19 @@ module Quant
4
4
  class Fibbonacci < Pivot
5
5
  register name: :fibbonacci
6
6
 
7
- def averaging_period
8
- half_period
9
- end
10
-
11
- def fibbonacci_series
12
- [0.146, 0.236, 0.382, 0.5, 0.618, 0.786, 1.0, 1.146]
13
- end
7
+ FIBBONACCI_SERIES = [0.146, 0.236, 0.382, 0.5, 0.618, 0.786, 1.0, 1.146].freeze
14
8
 
15
9
  def compute_bands
16
- fibbonacci_series.each_with_index do |ratio, index|
17
- p0[index + 1] = p0.midpoint + ratio * p0.avg_range
18
- p0[-index - 1] = p0.midpoint - ratio * p0.avg_range
10
+ period_points(adaptive_period).tap do |period_points|
11
+ highest = period_points.map(&:high_price).max
12
+ lowest = period_points.map(&:low_price).min
13
+ p0.range = highest - lowest
14
+ p0.midpoint = (highest + lowest) * 0.5
15
+ end
16
+
17
+ FIBBONACCI_SERIES.each_with_index do |ratio, index|
18
+ p0[index + 1] = p0.midpoint + ratio * p0.range
19
+ p0[-index - 1] = p0.midpoint - ratio * p0.range
19
20
  end
20
21
  end
21
22
  end
@@ -10,33 +10,24 @@ module Quant
10
10
  end
11
11
 
12
12
  def scale
13
- 5.0
14
- end
15
-
16
- def alpha
17
- bars_to_alpha(min_period)
13
+ 3.0
18
14
  end
19
15
 
20
16
  def compute_midpoint
17
+ alpha = bars_to_alpha(min_period)
21
18
  p0.midpoint = alpha * p0.input + (1 - alpha) * p1.midpoint
22
19
  end
23
20
 
24
- def compute_bands
25
- atr_value = atr_point.slow * scale
21
+ KELTNER_SERIES = [0.236, 0.382, 0.500, 0.618, 0.786, 1.0].freeze
26
22
 
27
- p0.h6 = p0.midpoint + 1.000 * atr_value
28
- p0.h5 = p0.midpoint + 0.786 * atr_value
29
- p0.h4 = p0.midpoint + 0.618 * atr_value
30
- p0.h3 = p0.midpoint + 0.500 * atr_value
31
- p0.h2 = p0.midpoint + 0.382 * atr_value
32
- p0.h1 = p0.midpoint + 0.236 * atr_value
23
+ def compute_bands
24
+ atr_value = atr_point.value * scale
33
25
 
34
- p0.l1 = p0.midpoint - 0.236 * atr_value
35
- p0.l2 = p0.midpoint - 0.382 * atr_value
36
- p0.l3 = p0.midpoint - 0.500 * atr_value
37
- p0.l4 = p0.midpoint - 0.618 * atr_value
38
- p0.l5 = p0.midpoint - 0.786 * atr_value
39
- p0.l6 = p0.midpoint - 1.000 * atr_value
26
+ KELTNER_SERIES.each_with_index do |ratio, index|
27
+ offset = ratio * atr_value
28
+ p0[index + 1] = p0.midpoint + offset
29
+ p0[-index - 1] = p0.midpoint - offset
30
+ end
40
31
  end
41
32
  end
42
33
  end
@@ -14,20 +14,13 @@ module Quant
14
14
  p0.midpoint = p0.lowest + (p0.input * 4.0)
15
15
  end
16
16
 
17
- def compute_bands
18
- p0.h6 = p0.midpoint + p0.input * 6.0
19
- p0.h5 = p0.midpoint + p0.input * 5.0
20
- p0.h4 = p0.midpoint + p0.input * 4.0
21
- p0.h3 = p0.midpoint + p0.input * 3.0
22
- p0.h2 = p0.midpoint + p0.input * 2.0
23
- p0.h1 = p0.midpoint + p0.input * 1.0
17
+ MURREY_SERIES = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0].freeze
24
18
 
25
- p0.l1 = p0.midpoint - p0.input * 1.0
26
- p0.l2 = p0.midpoint - p0.input * 2.0
27
- p0.l3 = p0.midpoint - p0.input * 3.0
28
- p0.l4 = p0.midpoint - p0.input * 4.0
29
- p0.l5 = p0.midpoint - p0.input * 5.0
30
- p0.l6 = p0.midpoint - p0.input * 6.0
19
+ def compute_bands
20
+ MURREY_SERIES.each_with_index do |ratio, index|
21
+ p0[index + 1] = p0.midpoint + p0.input * ratio
22
+ p0[-index - 1] = p0.midpoint - p0.input * ratio
23
+ end
31
24
  end
32
25
  end
33
26
  end
@@ -2,11 +2,9 @@ module Quant
2
2
  module Indicators
3
3
  module Pivots
4
4
  class PivotPoint < IndicatorPoint
5
- attribute :high_price
6
5
  attribute :avg_high, default: :high_price
7
6
  attribute :highest, default: :input
8
7
 
9
- attribute :low_price
10
8
  attribute :avg_low, default: :low_price
11
9
  attribute :lowest, default: :input
12
10
 
@@ -61,7 +59,7 @@ module Quant
61
59
  end
62
60
 
63
61
  def period
64
- dc_period
62
+ adaptive_period
65
63
  end
66
64
 
67
65
  def averaging_period
@@ -72,6 +70,10 @@ module Quant
72
70
  period_points(period).map(&:midpoint)
73
71
  end
74
72
 
73
+ def smoothed_average_midpoint
74
+ three_pole_super_smooth :input, previous: :midpoint, period: averaging_period
75
+ end
76
+
75
77
  def compute
76
78
  compute_extents
77
79
  compute_value
@@ -93,14 +95,12 @@ module Quant
93
95
 
94
96
  def compute_extents
95
97
  period_midpoints.tap do |midpoints|
96
- p0.high_price = t0.high_price
97
- p0.low_price = t0.low_price
98
98
  p0.highest = midpoints.max
99
99
  p0.lowest = midpoints.min
100
100
  p0.range = p0.high_price - p0.low_price
101
- p0.avg_low = super_smoother(:low_price, previous: :avg_low, period: averaging_period)
102
- p0.avg_high = super_smoother(:high_price, previous: :avg_high, period: averaging_period)
103
- p0.avg_range = super_smoother(:range, previous: :avg_range, period: averaging_period)
101
+ p0.avg_low = three_pole_super_smooth(:low_price, previous: :avg_low, period: averaging_period)
102
+ p0.avg_high = three_pole_super_smooth(:high_price, previous: :avg_high, period: averaging_period)
103
+ p0.avg_range = three_pole_super_smooth(:range, previous: :avg_range, period: averaging_period)
104
104
  end
105
105
  end
106
106
  end
data/lib/quant/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Quant
4
- VERSION = "0.3.2"
4
+ VERSION = "0.3.3"
5
5
  end
data/lib/quantitative.rb CHANGED
@@ -18,6 +18,7 @@ module Quant
18
18
  include Config
19
19
  include Experimental
20
20
  end
21
+ Quantitative = Quant
21
22
 
22
23
  # Configure Zeitwerk to autoload the Quant module.
23
24
  loader = Zeitwerk::Loader.for_gem
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quantitative
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Lang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-02 00:00:00.000000000 Z
11
+ date: 2024-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj