Class: Quant::Ticks::Tick
- Inherits:
-
Object
- Object
- Quant::Ticks::Tick
- Defined in:
- lib/quant/ticks/tick.rb
Overview
Tick is the abstract ancestor for all Ticks and holds the logic for interacting with series and indicators. The public interface is devoid of properties around price, volume, and timestamp, etc. Descendant classes are responsible for defining the properties and how they are represented.
The Tick class is designed to be immutable and is intended to be used as a value object. This means that once a Tick is created, it cannot be changed. This is important for the integrity of the series and indicators that depend on the ticks within the series.
When a tick is added to a series, it is locked into the series and ownership cannot be changed. This is important for the integrity of the series and indicators that depend on the ticks within the series. This is a key design to being able to being able to not only compute indicators on the ticks just once, but also avoid recomputing indicators when series are limited/sliced/filtered into subsets of the original series.
Ticks can be serialized to and from Ruby Hash, JSON strings, and CSV strings.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#series ⇒ Object
readonly
Returns the value of attribute series.
Class Method Summary collapse
-
.default_serializer_class ⇒ Object
Reflects the serializer class from the tick’s class name.
-
.from(hash, serializer_class: default_serializer_class) ⇒ Quant::Ticks::Tick
Returns a
Tickfrom a RubyHash. -
.from_json(json, serializer_class: default_serializer_class) ⇒ Quant::Ticks::Tick
Returns a
Tickfrom a JSON string.
Instance Method Summary collapse
-
#assign_series(new_series) ⇒ Object
Ticks always belong to the first series they’re assigned so we can easily spin off sub-sets or new series with the same ticks while allowing each series to have its own state and full control over the ticks within its series.
-
#assign_series!(new_series) ⇒ Object
Ticks always belong to the first series they’re assigned so we can easily spin off sub-sets or new series with the same ticks.
-
#default_serializer_class ⇒ Object
Reflects the serializer class from the tick’s class name.
-
#initialize ⇒ Tick
constructor
A new instance of Tick.
-
#to_csv(serializer_class: default_serializer_class, headers: false) ⇒ Object
Returns a CSV row as a String for the Tick.
-
#to_h(serializer_class: default_serializer_class) ⇒ Object
Returns a Ruby hash for the Tick.
-
#to_json(serializer_class: default_serializer_class) ⇒ Object
Returns a JSON string for the Tick.
Constructor Details
#initialize ⇒ Tick
Returns a new instance of Tick.
46 47 48 49 |
# File 'lib/quant/ticks/tick.rb', line 46 def initialize # Set the series by appending to the series or calling #assign_series method @series = nil end |
Instance Attribute Details
#series ⇒ Object (readonly)
Returns the value of attribute series.
44 45 46 |
# File 'lib/quant/ticks/tick.rb', line 44 def series @series end |
Class Method Details
.default_serializer_class ⇒ Object
internal use only.
Reflects the serializer class from the tick’s class name.
104 105 106 |
# File 'lib/quant/ticks/tick.rb', line 104 def self.default_serializer_class Object.const_get "Quant::Ticks::Serializers::#{name.split("::").last}" end |
.from(hash, serializer_class: default_serializer_class) ⇒ Quant::Ticks::Tick
Returns a Tick from a Ruby Hash. The default serializer is used to generate the Tick.
28 29 30 |
# File 'lib/quant/ticks/tick.rb', line 28 def self.from(hash, serializer_class: default_serializer_class) serializer_class.from(hash, tick_class: self) end |
.from_json(json, serializer_class: default_serializer_class) ⇒ Quant::Ticks::Tick
Returns a Tick from a JSON string. The default serializer is used to generate the Tick.
40 41 42 |
# File 'lib/quant/ticks/tick.rb', line 40 def self.from_json(json, serializer_class: default_serializer_class) serializer_class.from_json(json, tick_class: self) end |
Instance Method Details
#assign_series(new_series) ⇒ Object
Ticks always belong to the first series they’re assigned so we can easily spin off sub-sets or new series with the same ticks while allowing each series to have its own state and full control over the ticks within its series
54 55 56 57 |
# File 'lib/quant/ticks/tick.rb', line 54 def assign_series(new_series) assign_series!(new_series) if @series.nil? self end |
#assign_series!(new_series) ⇒ Object
Ticks always belong to the first series they’re assigned so we can easily spin off sub-sets or new series with the same ticks. However, if you need to reassign the series, you can use this method to force the change of series ownership.
The series interval is also assigned to the tick if it is not already set.
64 65 66 67 68 |
# File 'lib/quant/ticks/tick.rb', line 64 def assign_series!(new_series) @series = new_series @interval = new_series.interval if @interval.nil? self end |
#default_serializer_class ⇒ Object
internal use only.
Reflects the serializer class from the tick’s class name.
110 111 112 |
# File 'lib/quant/ticks/tick.rb', line 110 def default_serializer_class self.class.default_serializer_class end |
#to_csv(serializer_class: default_serializer_class, headers: false) ⇒ Object
Returns a CSV row as a String for the Tick. The default serializer is used to generate the CSV string. If headers is true, two lines returned separated by newline. The first line is the header row and the second line is the data row.
98 99 100 |
# File 'lib/quant/ticks/tick.rb', line 98 def to_csv(serializer_class: default_serializer_class, headers: false) serializer_class.to_csv(self, headers: headers) end |
#to_h(serializer_class: default_serializer_class) ⇒ Object
Returns a Ruby hash for the Tick. The default serializer is used to generate the hash.
76 77 78 |
# File 'lib/quant/ticks/tick.rb', line 76 def to_h(serializer_class: default_serializer_class) serializer_class.to_h(self) end |
#to_json(serializer_class: default_serializer_class) ⇒ Object
Returns a JSON string for the Tick. The default serializer is used to generate the JSON string.
86 87 88 |
# File 'lib/quant/ticks/tick.rb', line 86 def to_json(serializer_class: default_serializer_class) serializer_class.to_json(self) end |