Class IB::OutgoingMessages::PlaceOrder
In: messages.rb
Parent: AbstractMessage

Data format is { :order_id => int, :contract => Contract, :order => Order }

Methods

message_id   send  

Public Class methods

[Source]

     # File messages.rb, line 108
108:       def self.message_id
109:         3
110:       end

Public Instance methods

[Source]

     # 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

[Validate]