Class: JIJI::Dao::TradeResultDao
- Inherits:
-
Object
- Object
- JIJI::Dao::TradeResultDao
- Defined in:
- lib/jiji/dao/trade_result_dao.rb
Overview
取引結果DAO
Defined Under Namespace
Classes: TradeAggregator
Instance Method Summary collapse
-
#each(scale = :raw, start_date = nil, end_date = nil, &block) ⇒ Object
指定の期間の損益データを得る。.
-
#flush(time) ⇒ Object
取引結果を強制的に記録する。.
-
#initialize(data_dir, scales = []) ⇒ TradeResultDao
constructor
A new instance of TradeResultDao.
-
#list_positions(scale, start_date = nil, end_date = nil) ⇒ Object
指定期間のトレードデータを得る。.
-
#load(id) ⇒ Object
ポジションデータをロードする。.
-
#next(operator, time) ⇒ Object
取引結果を記録する。.
-
#save(position) ⇒ Object
ポジションデータを保存する.
Constructor Details
#initialize(data_dir, scales = []) ⇒ TradeResultDao
Returns a new instance of TradeResultDao.
16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/jiji/dao/trade_result_dao.rb', line 16 def initialize( data_dir, scales=[] ) @data_dir = data_dir @scales = scales aggregators = @scales.map {|s| TradeAggregator.new(s) } @trade_dao = dao( "trade", aggregators ) aggregators = @scales.map {|s| LastAggregator.new(s) } @profit_or_loss_dao = dao( "profit_or_loss", aggregators ) @position_dir = "#{data_dir}/positions" FileUtils.mkdir_p @position_dir unless File.exists? @position_dir end |
Instance Method Details
#each(scale = :raw, start_date = nil, end_date = nil, &block) ⇒ Object
指定の期間の損益データを得る。
73 74 75 76 77 |
# File 'lib/jiji/dao/trade_result_dao.rb', line 73 def each( scale=:raw, start_date=nil, end_date=nil, &block ) @profit_or_loss_dao.each_data( scale, start_date, end_date ) {|row, time| yield row } end |
#flush(time) ⇒ Object
取引結果を強制的に記録する。
88 89 90 91 |
# File 'lib/jiji/dao/trade_result_dao.rb', line 88 def flush( time ) # 取引結果のみ(損益データは出力しない) @trade_dao.flush(time) end |
#list_positions(scale, start_date = nil, end_date = nil) ⇒ Object
指定期間のトレードデータを得る。
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/jiji/dao/trade_result_dao.rb', line 51 def list_positions( scale, start_date=nil, end_date=nil ) ids = Set.new @trade_dao.each_data( scale, start_date, end_date ) {|r, t| ids += r[0].split(" ") } # バッファ内に取得期間内のデータがある場合、それも追加する。 aggregator = @trade_dao.aggregator.find {|a| a.scale == scale } if aggregator && aggregator.values aggregator.values.each {|v| ids << v } end ids.inject({}) {|r,id| v = load(id) if ( v && !( start_date && v[:fix_date] != 0 && v[:fix_date] < start_date.to_i ) \ && !( end_date && v[:date] > end_date.to_i )) r[id] = v end r } end |
#load(id) ⇒ Object
ポジションデータをロードする。
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/jiji/dao/trade_result_dao.rb', line 39 def load( id ) props = {} file = "#{@position_dir}/#{id}.yaml" if ( File.exist? file ) FileLock.new( file ).readlock {|f| props = YAML.load f } end props end |
#next(operator, time) ⇒ Object
取引結果を記録する。
80 81 82 83 84 85 |
# File 'lib/jiji/dao/trade_result_dao.rb', line 80 def next( operator, time ) @profit_or_loss_dao << BasicTimedData.new( [operator.profit_or_loss, operator.fixed_profit_or_loss, operator.win_rate], time) ids = operator.positions.map {|p| p[1].position_id } @trade_dao << BasicTimedData.new( [ids], time) end |