class IB::Option
Public Class Methods
from_osi(osi)
click to toggle source
Make valid IB
Contract
definition from OSI (Option
Symbology Initiative) code. NB: Simply making a new Contract
with local_symbol (osi) property set to a valid OSI code works just as well, just do NOT set expiry, right or strike properties in this case. This class method provided as a backup and shows how to analyse OSI codes.
# File lib/models/ib/option.rb, line 27 def self.from_osi osi # Parse contract's OSI (OCC Option Symbology Initiative) code args = osi.match(/(\w+)\s?(\d\d)(\d\d)(\d\d)([pcPC])(\d+)/).to_a.drop(1) symbol = args.shift year = 2000 + args.shift.to_i month = args.shift.to_i day = args.shift.to_i right = args.shift.upcase strike = args.shift.to_i/1000.0 # Set correct expiry date - IB expiry date differs from OSI if expiry date # falls on Saturday (see https://github.com/arvicco/option_mower/issues/4) expiry_date = Time.utc(year, month, day) expiry_date = Time.utc(year, month, day-1) if expiry_date.wday == 6 new :symbol => symbol, :exchange => "SMART", :expiry => expiry_date.to_ib[2..7], # YYMMDD :right => right, :strike => strike end
Public Instance Methods
default_attributes()
click to toggle source
Calls superclass method
IB::Contract#default_attributes
# File lib/models/ib/option.rb, line 50 def default_attributes super.merge :sec_type => :option #self[:description] ||= osi ? osi : "#{symbol} #{strike} #{right} #{expiry}" end
osi=(value)
click to toggle source
# File lib/models/ib/option.rb, line 17 def osi= value # Normalize to 21 char self.local_symbol = value.sub(/ /, ' '*(22-value.size)) end
to_human()
click to toggle source
# File lib/models/ib/option.rb, line 55 def to_human "<Option: " + [symbol, expiry, right, strike, exchange, currency].join(" ") + ">" end