class Enterprice::IO::CandleStream

Attributes

period[RW]

Public Class Methods

new(period, block) click to toggle source
# File lib/enterprice/io/candle_stream.rb, line 10
def initialize(period, block)
  @pivot= nil
  @open= nil
  @period= period
  @prev_close= 0.0
  @block= block
  reset_state
end
start(period, &block) click to toggle source
# File lib/enterprice/io/candle_stream.rb, line 6
def self.start(period, &block)
  CandleStream.new(period, block)
end

Public Instance Methods

<<(row) click to toggle source
# File lib/enterprice/io/candle_stream.rb, line 19
def << (row)
  ts, price, amount= row
  @pivot||= ts
  @open||= price

  if ts> @pivot+ @period- 1
    call
    @prev_close= @close
    reset_state
    @pivot+= @period
  end
  
  while ts> @pivot+ @period- 1
    call_blank
    @pivot+= @period
  end
  
  if ts< @pivot+ @period
    @open= @prev_close if @prev_close!= 0.0
    @high= price if price> @high
    @low= price if price< @low
    @close= price
    @volume+= amount
  end
end
call() click to toggle source
# File lib/enterprice/io/candle_stream.rb, line 45
def call
  @block.call [@pivot, @open, @high, @low, @close, @volume]
end

Private Instance Methods

call_blank() click to toggle source
# File lib/enterprice/io/candle_stream.rb, line 50
def call_blank
  @block.call [@pivot, @prev_close, @prev_close, @prev_close, @prev_close, 0]
end
reset_state() click to toggle source
# File lib/enterprice/io/candle_stream.rb, line 54
def reset_state
  @high= -Float::INFINITY
  @low= Float::INFINITY
  @close= -Float::INFINITY
  @volume= 0
end