Console
To experiment with the API, a preconfigurated interactive irb-console is provided
---------------------------------------------
Namespace is IB !
---------------------------------------------
06:44:03.998 Connected to server, version: 137,
connection time: 2018-03-21 06:44:03 +0000 local, 2018-03-21T06:44:03+00:00 remote.
06:44:03.999 Got message 15 (IB::Messages::Incoming::ManagedAccounts)
------------------------------- Managed Accounts ----------------------------------
Detected Accounts: DF167347 -- DU167348 -- DU167349
----> C points to the connection-instance
some basic Messages are subscribed and accordingly displayed
It connects to a running Gateway-Application on localhost. The GUI-Version (TWS) is addressed with »./console.rb tws«
C.send_message :RequestContractDetails, contract: Stock.new( symbol: 'TAP')
=> 5878
07:10:13.389 Got message 10 (IB::Messages::Incoming::ContractData)
I, [2018-03-21T07:10:13.389943 #22286] INFO -- : <Stock: TAP USD>
07:10:13.390 Got message 52 (IB::Messages::Incoming::ContractDataEnd)
I, [2018-03-21T07:10:13.390092 #22286] INFO -- : <ContractDataEnd: request_id 5878 >
C.received.keys
=> [:ManagedAccounts, :NextValidId, :Alert, :OpenOrder, :ContractData, :ContractDataEnd]
C.received[:ContractData]
=> ["<ContractData: request_id 5878, contract {:symbol=>\"TAP\", :sec_type=>\"STK\", :last_trading_day=>\"\", :strike=>0.0, :right=>\"\", :exchange=>\"SMART\", :currency=>\"USD\", :local_symbol=>\"TAP\", :trading_class=>\"TAP\", :con_id=>33191300, :multiplier=>0, :primary_exchange=>\"NYSE\"}, contract_detail {:market_name=>\"TAP\", :min_tick=>0.1e-1, :md_size_multiplier=>100, :order_types=>\"ACTIVETIM,ADJUST,ALERT,ALGO,ALLOC,AON,AVGCOST,BASKET,COND,CONDORDER,DARKONLY,DARKPOLL,DAY,DEACT,DEACTDIS,DEACTEOD,DIS,GAT,GTC,GTD,GTT,HID,IBKRATS,ICE,IMB,IOC,LIT,LMT,LOC,MIT,MKT,MOC,MTL,NGCOMB,NODARK,NONALGO,OCA,OPG,OPGREROUT,PEGBENCH,POSTONLY,PREOPGRTH,REL,RPI,RTH,RTHIGNOPG,SCALE,SCALEODD,SCALERST,SNAPMID,SNAPMKT,SNAPREL,STP,STPLMT,SWEEP,TRAIL,TRAILLIT,TRAILLMT,TRAILMIT,WHATIF\", :valid_exchanges=>\"SMART,AMEX,NYSE,CBOE,ISE,CHX,ARCA,ISLAND,VWAP,DRCTEDGE,NSX,BEX,BATS,EDGEA,CSFBALGO,JEFFALGO,BYX,IEX,PSX\", :price_magnifier=>1, :under_con_id=>0, :long_name=>\"MOLSON COORS BREWING CO -B\", :contract_month=>\"\", :industry=>\"Consumer, Non-cyclical\", :category=>\"Beverages\", :subcategory=>\"Brewery\", :time_zone=>\"EST\", :ev_rule=>0.0, :ev_multipler=>\"\", :sec_id_list=>{}}, sec_id_list_count 0 >"]
C.received[:ContractData].contract.to_human
=> ["<Stock: TAP USD>"]
To simplify operations with received data, arbitrary operations may be applied to array's, i.e.
The :RequestOptionChainDefinition-Message returns an OptionChainDefinition-Record including strikes and expirations. This is easily inspected in the console
C.send_message :RequestOptionChainDefinition, con_id: 2623, symbol: "GOOG", sec_type: "STK"
C.received.keys
=> [:ManagedAccounts, :NextValidId, :OpenOrder, :ContractDetailsEnd, :ContractData, :ContractDataEnd, :OptionChainDefinition, :SecurityDefinitionOptionParameterEnd]
C.received[:OptionChainDefinition].first.strikes
=> [0.38e3, 0.39e3, 0.4e3, 0.41e3, 0.42e3, 0.43e3, 0.44e3, 0.45e3, 0.46e3, 0.47e3, 0.48e3, 0.49e3, 0.5e3, 0.51e3, 0.52e3, 0.53e3, 0.54e3, 0.55e3, 0.56e3, 0.57e3, 0.58e3, 0.59e3, 0.6e3, 0.61e3, 0.62e3, 0.63e3, 0.64e3, 0.65e3, 0.66e3, 0.67e3, 0.68e3, 0.69e3, 0.695e3, 0.7e3, 0.71e3, 0.72e3, 0.725e3, 0.73e3, 0.735e3, 0.74e3, 0.745e3, 0.75e3, 0.755e3, 0.76e3, 0.765e3, 0.77e3, 0.775e3, 0.78e3, 0.785e3, 0.79e3, 0.795e3, 0.8e3, 0.805e3, 0.81e3, 0.815e3, 0.82e3, 0.825e3, 0.83e3, 0.835e3, 0.84e3, 0.845e3, 0.85e3, 0.855e3, 0.86e3, 0.865e3, 0.87e3, 0.875e3, 0.88e3, 0.885e3, 0.89e3, 0.895e3, 0.9e3, 0.905e3, 0.91e3, 0.915e3, 0.92e3, 0.925e3, 0.93e3, 0.935e3, 0.9375e3, 0.94e3, 0.9425e3, 0.945e3, 0.9475e3, 0.95e3, 0.9525e3, 0.955e3, 0.9575e3, 0.96e3, 0.9625e3, 0.965e3, 0.9675e3, 0.97e3, 0.9725e3, 0.975e3, 0.9775e3, 0.98e3, 0.9825e3, 0.985e3, 0.9875e3, 0.99e3, 0.9925e3, 0.995e3, 0.9975e3, 0.1e4, 0.10025e4, 0.1005e4, 0.10075e4, 0.101e4, 0.10125e4, 0.1015e4, 0.10175e4, 0.102e4, 0.10225e4, 0.1025e4, 0.10275e4, 0.103e4, 0.10325e4, 0.1035e4, 0.10375e4, 0.104e4, 0.10425e4, 0.1045e4, 0.10475e4, 0.105e4, 0.10525e4, 0.1055e4, 0.10575e4, 0.106e4, 0.10625e4, 0.1065e4, 0.10675e4, 0.107e4, 0.10725e4, 0.1075e4, 0.10775e4, 0.108e4, 0.10825e4, 0.1085e4, 0.10875e4, 0.109e4, 0.10925e4, 0.1095e4, 0.10975e4, 0.11e4, 0.11025e4, 0.1105e4, 0.11075e4, 0.111e4, 0.11125e4, 0.1115e4, 0.11175e4, 0.112e4, 0.11225e4, 0.1125e4, 0.11275e4, 0.113e4, 0.11325e4, 0.1135e4, 0.11375e4, 0.114e4, 0.11425e4, 0.1145e4, 0.11475e4, 0.115e4, 0.11525e4, 0.1155e4, 0.11575e4, 0.116e4, 0.11625e4, 0.1165e4, 0.11675e4, 0.117e4, 0.11725e4, 0.1175e4, 0.11775e4, 0.118e4, 0.11825e4, 0.1185e4, 0.11875e4, 0.119e4, 0.11925e4, 0.1195e4, 0.11975e4, 0.12e4, 0.12025e4, 0.1205e4, 0.12075e4, 0.121e4, 0.12125e4, 0.1215e4, 0.12175e4, 0.122e4, 0.12225e4, 0.1225e4, 0.12275e4, 0.123e4, 0.12325e4, 0.1235e4, 0.12375e4, 0.124e4, 0.12425e4, 0.1245e4, 0.12475e4, 0.125e4, 0.12525e4, 0.1255e4, 0.12575e4, 0.126e4, 0.12625e4, 0.1265e4, 0.12675e4, 0.127e4, 0.12725e4, 0.1275e4, 0.12775e4, 0.128e4, 0.12825e4, 0.1285e4, 0.12875e4, 0.129e4, 0.12925e4, 0.1295e4, 0.12975e4, 0.13e4, 0.13025e4, 0.1305e4, 0.13075e4, 0.131e4, 0.13125e4, 0.1315e4, 0.13175e4, 0.132e4, 0.13225e4, 0.1325e4, 0.13275e4, 0.133e4, 0.13325e4, 0.1335e4, 0.13375e4, 0.134e4, 0.13425e4, 0.135e4, 0.136e4, 0.137e4, 0.138e4, 0.139e4, 0.14e4, 0.141e4, 0.142e4, 0.143e4, 0.144e4, 0.145e4, 0.146e4, 0.148e4, 0.15e4, 0.152e4, 0.154e4, 0.156e4, 0.158e4, 0.16e4, 0.162e4, 0.164e4, 0.166e4, 0.168e4, 0.17e4, 0.172e4, 0.174e4, 0.176e4]
C.received[:OptionChainDefinition].first.strikes.to_i
=> [380, 390, 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560, 570, 580, 590, 600, 610, 620, 630, 640, 650, 660, 670, 680, 690, 695, 700, 710, 720, 725, 730, 735, 740, 745, 750, 755, 760, 765, 770, 775, 780, 785, 790, 795, 800, 805, 810, 815, 820, 825, 830, 835, 840, 845, 850, 855, 860, 865, 870, 875, 880, 885, 890, 895, 900, 905, 910, 915, 920, 925, 930, 935, 937, 940, 942, 945, 947, 950, 952, 955, 957, 960, 962, 965, 967, 970, 972, 975, 977, 980, 982, 985, 987, 990, 992, 995, 997, 1000, 1002, 1005, 1007, 1010, 1012, 1015, 1017, 1020, 1022, 1025, 1027, 1030, 1032, 1035, 1037, 1040, 1042, 1045, 1047, 1050, 1052, 1055, 1057, 1060, 1062, 1065, 1067, 1070, 1072, 1075, 1077, 1080, 1082, 1085, 1087, 1090, 1092, 1095, 1097, 1100, 1102, 1105, 1107, 1110, 1112, 1115, 1117, 1120, 1122, 1125, 1127, 1130, 1132, 1135, 1137, 1140, 1142, 1145, 1147, 1150, 1152, 1155, 1157, 1160, 1162, 1165, 1167, 1170, 1172, 1175, 1177, 1180, 1182, 1185, 1187, 1190, 1192, 1195, 1197, 1200, 1202, 1205, 1207, 1210, 1212, 1215, 1217, 1220, 1222, 1225, 1227, 1230, 1232, 1235, 1237, 1240, 1242, 1245, 1247, 1250, 1252, 1255, 1257, 1260, 1262, 1265, 1267, 1270, 1272, 1275, 1277, 1280, 1282, 1285, 1287, 1290, 1292, 1295, 1297, 1300, 1302, 1305, 1307, 1310, 1312, 1315, 1317, 1320, 1322, 1325, 1327, 1330, 1332, 1335, 1337, 1340, 1342, 1350, 1360, 1370, 1380, 1390, 1400, 1410, 1420, 1430, 1440, 1450, 1460, 1480, 1500, 1520, 1540, 1560, 1580, 1600, 1620, 1640, 1660, 1680, 1700, 1720, 1740, 1760]
puts C.received[:OptionChainDefinition].to_human
OptionChainDefinition GOOG@BOX [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@MIAX [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@CBOE2 [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@MERCURY [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@CBOE [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@EDGX [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@ISE [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@GEMINI [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@PEARL [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@BATS [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@PHLX [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@NASDAQBX [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@SMART [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@AMEX [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@PSE [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17
OptionChainDefinition GOOG@NASDAQOM [100] strikes: 380.0 - 1760.0 expirations: 2018-03-23 - 2020-01-17