"Headless Mode" for In-App Scripting and Development

“Somewhat Interactive” Development Mode

As you’re developing apps, it’s sometimes useful to just create a scratch file containing a bit of code that grabs some input. You can watch the information get printed by the async reader loop as it becomes available off the socket, and maybe copy-paste it from the terminal printout do perform some of your exploratory development work.

Simple exploratory example:

# import shinybroker as sb
# import pandas as pd
#
#
# con_id = 265598  # AAPL Stock
#
#
# ib_conn = sb.create_ibkr_socket_conn()
# ib_socket = ib_conn['ib_socket']
#
# sb.send_ib_message(
#     s=ib_socket,
#     msg=sb.req_sec_def_opt_params(
#         reqId=1,
#         underlyingSymbol="AAPL",
#         futFopExchange="",
#         underlyingSecType="STK",
#         underlyingConId=265598
#     )
# )
#
# # start_time = datetime.datetime.now()
# # while (datetime.datetime.now() - start_time).seconds < timeout:
# incoming_msg = sb.read_ib_msg(sock=ib_socket)
# sdops = []
# while incoming_msg[0] != sb.functionary['incoming_msg_codes'][
#     'SECURITY_DEFINITION_OPTION_PARAMETER_END'
# ]:
#     incoming_msg = sb.read_ib_msg(sock=ib_socket)
#     if incoming_msg[0] == sb.functionary['incoming_msg_codes'][
#         'SECURITY_DEFINITION_OPTION_PARAMETER'
#     ]:
#     sdops.append(sb.format_sec_def_opt_params_input(sdop=incoming_msg[2:]))
#
# ib_socket.close()
#
#
# print(
#     pd.concat(sdops, ignore_index=True)
#     .sort_values('exchange')
# )