Class | IB::OutgoingMessages::PlaceOrder |
In: |
messages.rb
|
Parent: | AbstractMessage |
Data format is { :order_id => int, :contract => Contract, :order => Order }
# File messages.rb, line 112 112: def send(server) 113: queue = [ self.class.message_id, 114: 20, # version 115: @data[:order_id], 116: @data[:contract].symbol, 117: @data[:contract].sec_type, 118: @data[:contract].expiry, 119: @data[:contract].strike, 120: @data[:contract].right 121: ] 122: queue.push(@data[:contract].multiplier) if server[:version] >= 15 123: queue.push(@data[:contract].exchange) if server[:version] >= 14 124: queue.push(@data[:contract].currency) 125: queue.push(@data[:contract].local_symbol) if server[:version] >= 2 126: 127: queue.concat([ 128: @data[:order].tif, 129: @data[:order].oca_group, 130: @data[:order].account, 131: @data[:order].open_close, 132: @data[:order].origin, 133: @data[:order].order_ref, 134: @data[:order].transmit 135: ]) 136: 137: queue.push(@data[:contract].parent_id) if server[:version] >= 4 138: 139: queue.concat([ 140: @data[:order].block_order, 141: @data[:order].sweep_to_fill, 142: @data[:order].display_size, 143: @data[:order].trigger_method, 144: @data[:order].ignore_rth 145: ]) if server[:version] >= 5 146: 147: queue.push(@data[:order].hidden) if server[:version] >= 7 148: 149: 150: queue.concat(@data[:contract].serialize_combo_legs(true)) if server[:version] >= 8 && @data[:contract].sec_type.upcase == "BAG" # "BAG" is defined as a constant in EClientSocket.java, line 45 151: 152: queue.push(@data[:order].shares_allocation) if server[:version] >= 9 # EClientSocket.java says this is deprecated. No idea. 153: queue.push(@data[:order].discretionary_amount) if server[:version] >= 10 154: queue.push(@data[:order].good_after_time) if server[:version] >= 11 155: queue.push(@data[:order].good_till_date) if server[:version] >= 12 156: 157: queue.concat([ 158: @data[:order].fa_group, 159: @data[:order].fa_method, 160: @data[:order].fa_percentage, 161: @data[:order].fa_profile 162: ]) if server[:version] >= 13 163: 164: queue.concat([ 165: @data[:order].short_sale_slot, 166: @data[:order].designated_location 167: ]) if server[:version] >= 18 168: 169: queue.concat([ 170: @data[:order].oca_type, 171: @data[:order].rth_only, 172: @data[:order].rule_80a, 173: @data[:order].settling_firm, 174: @data[:order].all_or_none, 175: nilFilter(@data[:order].min_quantity), 176: nilFilter(@data[:order].percent_offset), 177: @data[:order].etrade_only, 178: @data[:order].firm_quote_only, 179: nilFilter(@data[:order].nbbo_price_cap), 180: nilFilter(@data[:order].auction_strategy), 181: nilFilter(@data[:order].starting_price), 182: nilFilter(@data[:order].stock_ref_price), 183: nilFilter(@data[:order].delta), 184: 185: # Says the Java here: 186: # "// Volatility orders had specific watermark price attribs in server version 26" 187: # I have no idea what this means. 188: 189: ((server[:version] == 26 && @data[:order].order_type.upcase == "VOL") ? EOL : @data[:order].stock_range_lower), 190: ((server[:version] == 26 && @data[:order].order_type.upcase == "VOL") ? EOL : @data[:order].stock_range_upper), 191: 192: ]) if server[:version] >= 19 193: 194: queue.push(@data[:order].override_percentage_constraints) if server[:version] >= 22 195: 196: # Volatility orders 197: if server[:version] >= 26 198: queue.concat([nilFilter(@data[:order].volatility), 199: nilFilter(@data[:order].volatility_type) ]) 200: 201: if server[:version] < 28 202: queue.push(@data[:order].delta_neutral_order_type.upcase == "MKT") 203: else 204: queue.concat([@data[:order].delta_neutral_order_type, 205: nilFilter(@data[:order].delta_neutral_aux_price) 206: ]) 207: end 208: 209: queue.push(@data[:order].continuous_update) 210: queue.concat([ 211: (@data[:order].order_type.upcase == "VOL" ? @data[:order].stock_range_lower : EOL), 212: (@data[:order].order_type.upcase == "VOL" ? @data[:order].stock_range_upper : EOL) 213: ]) if server[:version] == 26 214: 215: queue.push(@data[:order].reference_price_type) 216: 217: end # if version >= 26 218: 219: queue 220: end