Sha256: be6630235e86182ebe15be563be84abf63381a44241495d1cd71786b2f0d6d9d

Contents?: true

Size: 1.65 KB

Versions: 6

Compression:

Stored size: 1.65 KB

Contents

require 'models/ib/contract'

module IB

  # "BAG" is not really a contract, but a combination (combo) of securities.
  # AKA basket or bag of securities. Individual securities in combo are represented
  # by ComboLeg objects.
  class Bag < Contract
    # General Notes:
    # 1. :exchange for the leg definition must match that of the combination order.
    # The exception is for a STK legs, which must specify the SMART exchange.
    # 2. :symbol => "USD" For combo Contract, this is an arbitrary value (like "USD")

    validates_format_of :sec_type, :with => /^bag$/, :message => "should be a bag"
    validates_format_of :right, :with => /^none$/, :message => "should be none"
    validates_format_of :expiry, :with => /^$/, :message => "should be blank"

    def default_attributes
      super.merge :sec_type => :bag #,:legs => Array.new,
    end

    def description
      self[:description] || to_human
    end

    def to_human
      "<Bag: #{[symbol, exchange, currency].join(' ')} legs: #{legs_description} >"
    end

    ### Leg-related methods

    # TODO: Rewrite with legs and legs_description being strictly in sync...
    # TODO: Find a way to serialize legs without references...
    # IB-equivalent leg description.
    def legs_description
      self[:legs_description] || legs.map { |leg| "#{leg.con_id}|#{leg.weight}" }.join(',')
    end

    # Check if two Contracts have same legs (maybe in different order)
    def same_legs? other
      legs == other.legs ||
        legs_description.split(',').sort == other.legs_description.split(',').sort
    end

    # Contract comparison
    def == other
      super && same_legs?(other)
    end

  end # class Bag
end # IB

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
ib-ruby-0.9.2 lib/models/ib/bag.rb
ib-ruby-0.9.1 lib/models/ib/bag.rb
ib-ruby-0.9.0 lib/models/ib/bag.rb
ib-ruby-0.8.5 lib/models/ib/bag.rb
ib-ruby-0.8.4 lib/models/ib/bag.rb
ib-ruby-0.8.3 lib/models/ib/bag.rb