Class: Quant::Ticks::OHLC
- Includes:
- Quant::TimeMethods
- Defined in:
- lib/quant/ticks/ohlc.rb
Overview
A OHLC is a bar or candle for a point in time that has an open, high, low, and close price. It is the most common form of a Tick and is usually used to representa time period such as a minute, hour, day, week, or month.
The OHLC is used to represent the price action of an asset The interval of the OHLC is the time period that the OHLC represents, such has hourly, daily, weekly, etc.
Constant Summary
Constants included from Quant::TimeMethods
Quant::TimeMethods::EPOCH_DATE, Quant::TimeMethods::EPOCH_TIME
Instance Attribute Summary collapse
-
#base_volume ⇒ Object
(also: #volume)
readonly
Returns the value of attribute base_volume.
-
#close_price ⇒ Object
(also: #price)
readonly
Returns the value of attribute close_price.
-
#close_timestamp ⇒ Object
(also: #timestamp)
readonly
Returns the value of attribute close_timestamp.
-
#doji ⇒ Object
readonly
Returns the value of attribute doji.
-
#green ⇒ Object
readonly
Returns the value of attribute green.
-
#high_price ⇒ Object
readonly
Returns the value of attribute high_price.
-
#low_price ⇒ Object
readonly
Returns the value of attribute low_price.
-
#open_price ⇒ Object
readonly
Returns the value of attribute open_price.
-
#open_timestamp ⇒ Object
readonly
Returns the value of attribute open_timestamp.
-
#series ⇒ Object
readonly
Returns the value of attribute series.
-
#target_volume ⇒ Object
readonly
Returns the value of attribute target_volume.
-
#trades ⇒ Object
readonly
Returns the value of attribute trades.
Attributes inherited from Tick
Instance Method Summary collapse
-
#==(other) ⇒ Object
Two OHLC ticks are equal if their interval, close_timestamp, and close_price are equal.
-
#compute_doji ⇒ Boolean
Computes a doji candlestick pattern.
-
#compute_green ⇒ Object
Set the #green? property to true when the close_price is greater than or equal to the open_price.
-
#corresponding?(other) ⇒ Boolean
The corresponding? method helps determine that the other tick’s timestamp is the same as this tick’s timestamp, which is useful when aligning ticks between two separate series where one starts or ends at a different time, or when there may be gaps in the data between the two series.
-
#daily_price_change ⇒ Float
Returns the percent daily price change from open_price to close_price, ranging from 0.0 to 1.0.
-
#daily_price_change_ratio ⇒ Float
Calculates the absolute change from the open_price to the close_price, divided by the average of the open_price and close_price.
- #doji? ⇒ Boolean
- #green? ⇒ Boolean
- #hl2 ⇒ Object
- #hlc3 ⇒ Object
-
#initialize(open_timestamp:, close_timestamp:, open_price:, high_price:, low_price:, close_price:, volume: nil, base_volume: nil, target_volume: nil, trades: nil, green: nil, doji: nil) ⇒ OHLC
constructor
A new instance of OHLC.
- #inspect ⇒ Object
- #oc2 ⇒ Object
- #ohlc4 ⇒ Object
- #red? ⇒ Boolean
Methods included from Quant::TimeMethods
epoch_date, epoch_time, #extract_time
Methods inherited from Tick
#assign_series, #assign_series!, #default_serializer_class, default_serializer_class, from, from_json, #interval, #series?, #to_csv, #to_h, #to_json
Constructor Details
#initialize(open_timestamp:, close_timestamp:, open_price:, high_price:, low_price:, close_price:, volume: nil, base_volume: nil, target_volume: nil, trades: nil, green: nil, doji: nil) ⇒ OHLC
Returns a new instance of OHLC.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/quant/ticks/ohlc.rb', line 23 def initialize( open_timestamp:, close_timestamp:, open_price:, high_price:, low_price:, close_price:, volume: nil, base_volume: nil, target_volume: nil, trades: nil, green: nil, doji: nil ) @open_timestamp = extract_time() @close_timestamp = extract_time() @open_price = open_price.to_f @high_price = high_price.to_f @low_price = low_price.to_f @close_price = close_price.to_f @base_volume = (volume || base_volume).to_i @target_volume = (target_volume || @base_volume).to_i @trades = trades.to_i @green = green.nil? ? compute_green : green @doji = doji.nil? ? compute_doji : doji super() end |
Instance Attribute Details
#base_volume ⇒ Object (readonly) Also known as: volume
Returns the value of attribute base_volume.
20 21 22 |
# File 'lib/quant/ticks/ohlc.rb', line 20 def base_volume @base_volume end |
#close_price ⇒ Object (readonly) Also known as: price
Returns the value of attribute close_price.
19 20 21 |
# File 'lib/quant/ticks/ohlc.rb', line 19 def close_price @close_price end |
#close_timestamp ⇒ Object (readonly) Also known as: timestamp
Returns the value of attribute close_timestamp.
18 19 20 |
# File 'lib/quant/ticks/ohlc.rb', line 18 def @close_timestamp end |
#doji ⇒ Object (readonly)
Returns the value of attribute doji.
21 22 23 |
# File 'lib/quant/ticks/ohlc.rb', line 21 def doji @doji end |
#green ⇒ Object (readonly)
Returns the value of attribute green.
21 22 23 |
# File 'lib/quant/ticks/ohlc.rb', line 21 def green @green end |
#high_price ⇒ Object (readonly)
Returns the value of attribute high_price.
19 20 21 |
# File 'lib/quant/ticks/ohlc.rb', line 19 def high_price @high_price end |
#low_price ⇒ Object (readonly)
Returns the value of attribute low_price.
19 20 21 |
# File 'lib/quant/ticks/ohlc.rb', line 19 def low_price @low_price end |
#open_price ⇒ Object (readonly)
Returns the value of attribute open_price.
19 20 21 |
# File 'lib/quant/ticks/ohlc.rb', line 19 def open_price @open_price end |
#open_timestamp ⇒ Object (readonly)
Returns the value of attribute open_timestamp.
18 19 20 |
# File 'lib/quant/ticks/ohlc.rb', line 18 def @open_timestamp end |
#series ⇒ Object (readonly)
Returns the value of attribute series.
17 18 19 |
# File 'lib/quant/ticks/ohlc.rb', line 17 def series @series end |
#target_volume ⇒ Object (readonly)
Returns the value of attribute target_volume.
20 21 22 |
# File 'lib/quant/ticks/ohlc.rb', line 20 def target_volume @target_volume end |
#trades ⇒ Object (readonly)
Returns the value of attribute trades.
20 21 22 |
# File 'lib/quant/ticks/ohlc.rb', line 20 def trades @trades end |
Instance Method Details
#==(other) ⇒ Object
Two OHLC ticks are equal if their interval, close_timestamp, and close_price are equal.
74 75 76 |
# File 'lib/quant/ticks/ohlc.rb', line 74 def ==(other) [interval, , close_price] == [other.interval, other., other.close_price] end |
#compute_doji ⇒ Boolean
Computes a doji candlestick pattern. A doji is a candlestick pattern that occurs when the open and close are the same or very close to the same. The high and low are also very close to the same. The doji pattern is a sign of indecision in the market. It is a sign that the market is not sure which way to go.
119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/quant/ticks/ohlc.rb', line 119 def compute_doji body_bottom, body_top = [open_price, close_price].sort body_length = body_top - body_bottom head_length = high_price - [open_price, close_price].max tail_length = [open_price, close_price].max - low_price body_ratio = 100.0 * (1 - (body_bottom / body_top)) head_ratio = head_length / body_length tail_ratio = tail_length / body_length body_ratio < 0.025 && head_ratio > 1.0 && tail_ratio > 1.0 end |
#compute_green ⇒ Object
Set the #green? property to true when the close_price is greater than or equal to the open_price.
99 100 101 |
# File 'lib/quant/ticks/ohlc.rb', line 99 def compute_green close_price >= open_price end |
#corresponding?(other) ⇒ Boolean
The corresponding? method helps determine that the other tick’s timestamp is the same as this tick’s timestamp, which is useful when aligning ticks between two separate series where one starts or ends at a different time, or when there may be gaps in the data between the two series.
69 70 71 |
# File 'lib/quant/ticks/ohlc.rb', line 69 def corresponding?(other) [, ] == [other., other.] end |
#daily_price_change ⇒ Float
Returns the percent daily price change from open_price to close_price, ranging from 0.0 to 1.0. A positive value means the price increased, and a negative value means the price decreased. A value of 0.0 means no change.
82 83 84 85 86 87 |
# File 'lib/quant/ticks/ohlc.rb', line 82 def daily_price_change return open_price.zero? ? 0.0 : -1.0 if close_price.zero? return 0.0 if open_price == close_price (open_price / close_price) - 1.0 end |
#daily_price_change_ratio ⇒ Float
Calculates the absolute change from the open_price to the close_price, divided by the average of the open_price and close_price. This method will give a value between 0 and 2, where 0 means no change, 1 means the price doubled, and 2 means the price went to zero. This method is useful for comparing the volatility of different assets.
94 95 96 |
# File 'lib/quant/ticks/ohlc.rb', line 94 def daily_price_change_ratio (open_price - close_price).abs / oc2 end |
#doji? ⇒ Boolean
111 112 113 |
# File 'lib/quant/ticks/ohlc.rb', line 111 def doji? @doji end |
#green? ⇒ Boolean
103 104 105 |
# File 'lib/quant/ticks/ohlc.rb', line 103 def green? @green end |
#hl2 ⇒ Object
61 |
# File 'lib/quant/ticks/ohlc.rb', line 61 def hl2; ((high_price + low_price) / 2.0) end |
#hlc3 ⇒ Object
63 |
# File 'lib/quant/ticks/ohlc.rb', line 63 def hlc3; ((high_price + low_price + close_price) / 3.0) end |
#inspect ⇒ Object
133 134 135 |
# File 'lib/quant/ticks/ohlc.rb', line 133 def inspect "#<#{self.class.name} ct=#{.iso8601} o=#{open_price} h=#{high_price} l=#{low_price} c=#{close_price} v=#{volume}>" end |
#oc2 ⇒ Object
62 |
# File 'lib/quant/ticks/ohlc.rb', line 62 def oc2; ((open_price + close_price) / 2.0) end |
#ohlc4 ⇒ Object
64 |
# File 'lib/quant/ticks/ohlc.rb', line 64 def ohlc4; ((open_price + high_price + low_price + close_price) / 4.0) end |
#red? ⇒ Boolean
107 108 109 |
# File 'lib/quant/ticks/ohlc.rb', line 107 def red? !green? end |