Sha256: 9b095236b89d5e8fef42cfac9eb6bb049476bc45d3f8a552e54ba4dfa5d9eb93

Contents?: true

Size: 1.76 KB

Versions: 3

Compression:

Stored size: 1.76 KB

Contents

require 'ib-ruby/models/contract'

module IB
  module Models

    # "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 # Models
end # IB

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ib-ruby-0.8.1 lib/ib-ruby/models/bag.rb
ib-ruby-0.8.0 lib/ib-ruby/models/bag.rb
ib-ruby-0.7.12 lib/ib-ruby/models/bag.rb