def on_press(key): global g_do_exit if hasattr(key, 'char') and key.char in ['q', 'Q']: g_do_exit = True Console.print("Terminating...") # Stop listener return False
def on_press(key): global g_do_exit if key in ['q', 'Q']: g_do_exit = True Console.print("Terminating...") # Stop listener return False return True
def run_monitor(args): """ Run monitor while there are active trades or continuously """ Console.print('Starting monitor...') with bot.Service() as svc: Console.print('Account: ' + svc.active_account.code) __run_monitor(svc)
def run_account(args): """ Display account status """ Console.print('Retrieving account status...') with bot.Service() as svc: Console.print('Account: ' + svc.active_account.code) acc = svc.refresh_account() Console.print_account(acc) Console.print_account_positions(acc)
def signal_handler(signalnum, stackframe): global g_do_exit Console.print("Received signal " + str(signalnum) + ", terminating...") g_do_exit = True
def __run_monitor(svc: bot.Service) -> bool: """ Run monitor Returns True on normal exit, False on user quit request """ # keyboard controls init global g_do_exit g_do_exit = False def on_press(key): global g_do_exit if key in ['q', 'Q']: g_do_exit = True Console.print("Terminating...") # Stop listener return False return True if os.name == 'nt': from ibc.key_reader import KeyAsyncReader key_reader = KeyAsyncReader() key_reader.startReading(on_press) def signal_handler(signalnum, stackframe): global g_do_exit Console.print("Received signal " + str(signalnum) + ", terminating...") g_do_exit = True signal.signal(signal.SIGTERM, signal_handler) signal.signal(signal.SIGINT, signal_handler) if os.name == 'nt': signal.signal(signal.SIGBREAK, signal_handler) else: signal.signal(signal.SIGQUIT, signal_handler) Console.print_dashboard(svc) while True: Console.print('Waiting for updates - Press Q or Ctrl-C to exit...') time_last_updated = datetime.now() while True: svc.broker.wait_for_update(2.) now = datetime.now() # prevent very frequent updates if now - time_last_updated > timedelta(seconds=1): break svc.refresh_account() Console.print_dashboard(svc, delete_previous_lines=True) if g_do_exit: break svc.refresh_account() Console.print_dashboard(svc, delete_previous_lines=True) Console.print() Console.print() return g_do_exit
def run_ls(args): """ Display accounts and orders """ Console.print('Listing orders...') with bot.Service() as svc: Console.print('Account: ' + svc.active_account.code) svc.refresh_account() acc = svc.active_account Console.print_account(acc) Console.print_account_positions(acc) orders = svc.active_account.orders for order in orders: Console.print_order(order) Console.print()
def __run_monitor(svc: bot.Service) -> bool: """ Run monitor Returns True on normal exit, False on user quit request """ # keyboard controls init global g_do_exit g_do_exit = False def on_press(key): global g_do_exit if hasattr(key, 'char') and key.char in ['q', 'Q']: g_do_exit = True Console.print("Terminating...") # Stop listener return False from pynput.keyboard import Listener # Collect events until released listener = Listener(on_press=on_press) listener.start() Console.print_dashboard(svc) while True: Console.print('Waiting for updates - Press Q to exit...') time_last_updated = datetime.now() while True: svc.broker.wait_for_update(2.) now = datetime.now() # prevent very frequent updates if now - time_last_updated > timedelta(seconds=1): break svc.refresh_account() Console.print_dashboard(svc, delete_previous_lines=True) if g_do_exit: break svc.refresh_account() Console.print_dashboard(svc, delete_previous_lines=True) Console.print() Console.print() return g_do_exit