def do_initalize(self, line): try: self.client1 = RestClient(ConfigManager.get_config().apiKey1, ConfigManager.get_config().apiSecret1, ConfigManager.get_config().apiUrl) self.client1.account() Util.get_logger().info("Credentials Verified") except: Util.get_logger().info("Api credentials invalid") self.close()
def create_sl_sell_order(price, amount): Util.get_logger().info("Placing SL Sell Order for " + str(amount) + " contracts at " + str(price)) client = RestClient(ConfigManager.get_config().apiKey1, ConfigManager.get_config().apiSecret1, ConfigManager.get_config().apiUrl) order = client.sell_stop_market_order( ConfigManager.get_config().tradeInsturment, amount, price) return order
def create_new_buy_order(price, amount): Util.get_logger().info("Placing Buy Order for " + str(amount) + " contracts at " + str(price)) client = RestClient(ConfigManager.get_config().apiKey1, ConfigManager.get_config().apiSecret1, ConfigManager.get_config().apiUrl) order = client.buy(ConfigManager.get_config().tradeInsturment, amount, price, False, "") return order
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 close_all_positions(): client = RestClient(ConfigManager.get_config().apiKey1, ConfigManager.get_config().apiSecret1, ConfigManager.get_config().apiUrl) positions = client.positions() for x in positions: if x['direction'] == 'buy': client.sell(ConfigManager.get_config().tradeInsturment, x['size'], 1, False, "") else: client.buy(ConfigManager.get_config().tradeInsturment, x['size'], 99999, False, "")
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'])
class DeriShell(cmd.Cmd): prompt = 'DeriShell> ' file = None rt = None def close(self): Util.get_logger().debug("Shutting Down") exit() def preloop(self): self.do_initalize("") def do_initalize(self, line): try: self.client1 = RestClient(ConfigManager.get_config().apiKey1, ConfigManager.get_config().apiSecret1, ConfigManager.get_config().apiUrl) self.client1.account() Util.get_logger().info("Credentials Verified") except: Util.get_logger().info("Api credentials invalid") self.close() def do_set_base_price(self, line): arguments = Util.safe_str_split_on_space(line) if len(arguments) >= 1: config = ConfigManager.get_config() config.basePrice = float(arguments[0]) ConfigManager.update_config(config) Util.get_logger().info("Upddated base price to: " + str(config.basePrice)) else: Util.get_logger().info("Not enough parameters. Ex. set_base_price 6000") def do_set_num_orders(self, line): arguments = Util.safe_str_split_on_space(line) if len(arguments) >= 1: config = ConfigManager.get_config() config.numOfOrders = int(arguments[0]) ConfigManager.update_config(config) Util.get_logger().info("Upddated number of orders to: " + str(config.numOfOrders)) else: Util.get_logger().info("Not enough parameters. Ex. set_num_orders 5") def do_set_contract_amount(self, line): arguments = Util.safe_str_split_on_space(line) if len(arguments) >= 1: config = ConfigManager.get_config() config.contractSize = int(arguments[0]) ConfigManager.update_config(config) Util.get_logger().info("Upddated number of contracts to: " + str(config.contractSize)) else: Util.get_logger().info("Not enough parameters. Ex. set_contract_amount 100") def do_set_price_distance(self, line): arguments = Util.safe_str_split_on_space(line) if len(arguments) >= 1: config = ConfigManager.get_config() config.priceDistance = float(arguments[0]) ConfigManager.update_config(config) Util.get_logger().info("Upddated price difference to: " + str(config.priceDistance)) else: Util.get_logger().info("Not enough parameters. Ex. set_price_distance 1(in USD)") def do_check_accounts(self, line): if self.client1 != None: print(self.client1.account()) def do_check_positions(self, line): if self.client1 != None: print(self.client1.positions()) def do_get_summary(self,line): if self.client1 != None: print(self.client1.getsummary(ConfigManager.get_config().tradeInsturment)) def do_test(self, line): if self.client1 != None: data = self.client1.buy(ConfigManager.get_config().tradeInsturment, 100, 9909, True, "") print(data) time.sleep(4) print(self.client1.orderhistory(10)) print(self.client1.getopenorders(ConfigManager.get_config().tradeInsturment, data['order']['orderId'])) def do_create_ladder(self, line): if self.client1 != None: TradeManager.setup_inital_ladder() def do_reset(self, line): TradeManager.cancel_all_current_orders() 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