def do_reset(self, line): if self.rt: self.rt.stop() TradeManager.cancel_all_current_orders() TradeManager.close_all_positions() TradeManager.stopLossTriggered = False DatabaseManager.delete_all_order_models() Util.get_logger().info("Derishell Reset")
def cancel_all_current_orders(): orders = DatabaseManager.get_all_open_orders() client = RestClient(ConfigManager.get_config().apiKey1, ConfigManager.get_config().apiSecret1, ConfigManager.get_config().apiUrl) for order in orders: client.cancel(order.orderId) DatabaseManager.update_order_entry(order.orderId, "cancelled") Util.get_logger().info("Cancelled order: " + str(order.orderId))
def setup_inital_ladder(): Util.get_logger().info("Setup initial ladder") for x in range(ConfigManager.get_config().numOfOrders): order = TradeManager.create_new_buy_order( (ConfigManager.get_config().basePrice - ConfigManager.get_config().priceDistance) - (ConfigManager.get_config().priceDistance * x), ConfigManager.get_config().contractSize, True) DatabaseManager.create_order_entry(order['order']['orderId'], order['order']['price'], order['order']['amount'], order['order']['direction'])
def setup_inital_ladder(): Util.get_logger().info("Setup initial ladder") for x in range(ConfigManager.get_config().numOfOrders): DatabaseManager.create_order_entry( "", (ConfigManager.get_config().basePrice - ConfigManager.get_config().priceDistance) - (ConfigManager.get_config().priceDistance * x), ConfigManager.get_config().contractSize, "buy") TradeManager.update_pending_orders() # Create the stop loss order order = TradeManager.create_sl_sell_order( ConfigManager.get_config().stopLossPrice, ConfigManager.get_config().numOfOrders * ConfigManager.get_config().contractSize) DatabaseManager.create_sl_order_entry( order['order']['orderId'], ConfigManager.get_config().stopLossPrice, ConfigManager.get_config().numOfOrders * ConfigManager.get_config().contractSize)
def show_current_orders(): openOrders = DatabaseManager.get_all_open_orders( ) + DatabaseManager.get_all_pending_orders() print() table_data = [] table_data.append( [ColorText.yellow(ConfigManager.get_config().basePrice)]) table = AsciiTable(table_data, "Base") print(table.table) print() TradeManager.show_sells_table(openOrders) print() TradeManager.show_buys_table(openOrders) print()
def update_pending_orders(): orders = DatabaseManager.get_all_pending_orders() for order in orders: try: if order.direction == 'buy': #if currentPrice > order.price: newOrder = TradeManager.create_new_buy_order( order.price, order.contractSize) DatabaseManager.update_new_order_entry( order, newOrder['order']['orderId'], "open") else: newOrder = TradeManager.create_new_sell_order( order.price, order.contractSize) DatabaseManager.update_new_order_entry( order, newOrder['order']['orderId'], "open") except Exception as e: print(e)
def update_order_status(): if TradeManager.stopLossTriggered == False: orders = DatabaseManager.get_all_open_orders() client = RestClient(ConfigManager.get_config().apiKey1, ConfigManager.get_config().apiSecret1, ConfigManager.get_config().apiUrl) for order in orders: try: updatedOrder = client.getorderstate(order.orderId) DatabaseManager.update_order_entry(order.orderId, updatedOrder['state']) if updatedOrder['state'] == "filled": if "SLMS" in order.orderId: # Stop loss fired Util.get_logger().info( "STOP LOSS FIRED - CANCELLING ALL ORDERS") TradeManager.cancel_all_current_orders() TradeManager.stopLossTriggered = True else: if updatedOrder['direction'] == "buy": if ConfigManager.get_config().fcbMode: #Create new one DatabaseManager.create_order_entry( "", order.price + ConfigManager.get_config( ).priceDistance, ConfigManager.get_config( ).contractSize, "sell") else: sellPriceOffset = ConfigManager.get_config( ).basePrice - order.price DatabaseManager.create_order_entry( "", ConfigManager.get_config().basePrice + sellPriceOffset, ConfigManager.get_config( ).contractSize, "sell") else: if ConfigManager.get_config().fcbMode: DatabaseManager.create_order_entry( "", order.price - ConfigManager.get_config( ).priceDistance, ConfigManager.get_config( ).contractSize, "buy") else: # put in buy order buyPriceOffset = order.price - ConfigManager.get_config( ).basePrice DatabaseManager.create_order_entry( "", ConfigManager.get_config().basePrice + buyPriceOffset, ConfigManager.get_config( ).contractSize, "buy") except: pass else: #We no longer update our queue until user resets pass
def update_order_status(): orders = DatabaseManager.get_all_open_orders() client = RestClient(ConfigManager.get_config().apiKey1, ConfigManager.get_config().apiSecret1, ConfigManager.get_config().apiUrl) Util.get_logger().info("Updating orders") for order in orders: updatedOrder = client.getorderstate(order.orderId) if updatedOrder['state'] == "filled": if updatedOrder['direction'] == "buy": if ConfigManager.get_config().fcbMode: #Create new one newOrder = TradeManager.create_new_sell_order( updatedOrder["price"] + ConfigManager.get_config().priceDistance, updatedOrder['quantity'], False) DatabaseManager.create_order_entry( newOrder['order']['orderId'], newOrder['order']['price'], newOrder['order']['quantity'], newOrder['order']['direction']) else: sellPriceOffset = ConfigManager.get_config( ).basePrice - updatedOrder["price"] #Create new one newOrder = TradeManager.create_new_sell_order( ConfigManager.get_config().basePrice + sellPriceOffset, updatedOrder['quantity'], False) DatabaseManager.create_order_entry( newOrder['order']['orderId'], newOrder['order']['price'], newOrder['order']['quantity'], newOrder['order']['direction']) else: if ConfigManager.get_config().fcbMode: newOrder = TradeManager.create_new_buy_order( updatedOrder["price"] - ConfigManager.get_config().priceDistance, updatedOrder['quantity'], False) DatabaseManager.create_order_entry( newOrder['order']['orderId'], newOrder['order']['price'], newOrder['order']['quantity'], newOrder['order']['direction']) else: # put in buy order buyPriceOffset = updatedOrder[ "price"] - ConfigManager.get_config().basePrice #Create new one newOrder = TradeManager.create_new_buy_order( ConfigManager.get_config().basePrice + buyPriceOffset, updatedOrder['quantity'], False) DatabaseManager.create_order_entry( newOrder['order']['orderId'], newOrder['order']['price'], newOrder['order']['quantity'], newOrder['order']['direction']) DatabaseManager.update_order_entry(order.orderId, updatedOrder['state'])
TradeManager.close_all_positions() def do_cancel_orders(self, line): TradeManager.cancel_all_current_orders() def do_close_positions(self, line): TradeManager.close_all_positions() def do_pause(self, line): self.rt.stop() def do_start_update(self,line): if self.client1 != None: self.rt = RepeatedTimer(10, TradeManager.update_order_status) def do_update_orders(self, line): if self.client1 != None: TradeManager.update_order_status() def do_clear(self, line): Util.clear_screen() def do_quit(self, line): self.close() return True if __name__ == '__main__': Util.clear_screen() print(Util.banner) DatabaseManager.initalize() DeriShell().cmdloop()