Beispiel #1
0
    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")
Beispiel #2
0
    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))
Beispiel #3
0
    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'])
Beispiel #4
0
    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)
Beispiel #5
0
    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()
Beispiel #6
0
    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)
Beispiel #7
0
    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
Beispiel #8
0
    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'])
Beispiel #9
0
        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()