Example #1
0
    def keltner_buy_strat(self, total_bitcoin):
        if len(self.keltner_coins['BTC-ETH']
               ['upper_band_data']) > self.keltner_period:
            keltner_slots_open = self.keltner_slots - len(
                self.held_coins) - len(self.pending_orders['Buying']) - len(
                    self.pending_orders['Selling'])

            for coin in self.keltner_coins:
                market = self.bittrex_coins[coin]['MarketName']
                lower_band_data = self.keltner_coins[market]['lower_band_data']
                if len(lower_band_data) == self.keltner_period:
                    coins_pending_buy = [
                        market for market in self.pending_orders['Buying']
                    ]
                    coins_pending_sell = [
                        market for market in self.pending_orders['Selling']
                    ]

                    if market not in self.held_coins and market not in coins_pending_buy and market not in coins_pending_sell:

                        cur_price = self.bittrex_coins[coin]['Last']
                        if self.upward_cross(market, 'lower_band_data'):
                            bitcoin_to_use = float(total_bitcoin /
                                                   (keltner_slots_open + .25))
                            amount = bitcoin_to_use / cur_price
                            percent_change_24h = utils.get_percent_change_24h(
                                coin)
                            utils.buy(self.api, market, amount, cur_price,
                                      percent_change_24h, 0)

                            keltner_slots_open = self.total_slots - len(
                                self.held_coins) - len(
                                    self.pending_orders['Buying']) - len(
                                        self.pending_orders['Selling'])
    def buy(self, market, total_bitcoin):
        coins_pending_buy = [
            market for market in self.pending_orders['Buying']
        ]
        coins_pending_sell = [
            market for market in self.pending_orders['Selling']
        ]

        if market not in self.held_coins and market not in coins_pending_buy and market not in \
                coins_pending_sell:

            slots_open = self.total_slots - len(self.held_coins) - len(
                self.pending_orders['Buying']) - len(
                    self.pending_orders['Selling'])
            bitcoin_to_use = float(total_bitcoin / (slots_open + .25))

            coin_price = float(self.bittrex_coins[market]['Last'])
            amount = bitcoin_to_use / coin_price

            if amount > 0:
                percent_change_24h = utils.get_percent_change_24h(
                    self.bittrex_coins[market])
                result = utils.buy(self.api, market, amount, coin_price,
                                   percent_change_24h, 0, 0)
                if result['success']:
                    utils.print_and_write_to_logfile('Buy order of' +
                                                     str(amount) + 'of' +
                                                     market + 'Unsuccessful')
                else:
                    utils.print_and_write_to_logfile('Buy order of' +
                                                     str(amount) + 'of' +
                                                     market + 'Successful')
                return result
    def low_high_buy_strat(self, total_bitcoin):
        top_reddit_coins = utils.file_to_json('reddit_top_coins.json')
        markets_to_ignore = ['BTC-ETH', 'BTC-BTC']

        for rank in range(len(top_reddit_coins)):
            market = top_reddit_coins[str(rank)]['market']

            if market not in markets_to_ignore:

                slots_open = self.total_slots - len(self.held_coins) - len(
                    self.pending_orders['Buying']) - len(
                        self.pending_orders['Selling'])
                bitcoin_to_use = float(total_bitcoin / (slots_open + .25))

                coins_pending_buy = [
                    market for market in self.pending_orders['Buying']
                ]
                coins_pending_sell = [
                    market for market in self.pending_orders['Selling']
                ]

                if market not in self.held_coins and market not in coins_pending_buy and market not in \
                        coins_pending_sell:

                    percent_change_24h = utils.get_percent_change_24h(
                        self.bittrex_coins[market])
                    coin_low_bars = utils.file_to_json('coin_low_bars.json')
                    low_bar = coin_low_bars[market]

                    if percent_change_24h <= self.desired_low_point and percent_change_24h <= low_bar:
                        coin_low_bars[market] = low_bar - 10
                        utils.json_to_file(coin_low_bars, 'coin_low_bars.json')

                    elif low_bar != self.desired_low_point and percent_change_24h > low_bar + 10:
                        self.update_bittrex_coins()
                        coin_price = float(self.bittrex_coins[market]['Last'])
                        amount = bitcoin_to_use / coin_price
                        if amount > 0:
                            result = utils.buy(self.api, market, amount,
                                               coin_price, percent_change_24h,
                                               self.desired_gain, 0)
                            if not result['success']:
                                utils.print_and_write_to_logfile(
                                    "Failed to make buy order " + market)
                            else:
                                utils.print_and_write_to_logfile(
                                    "Attempting buy order of " + str(amount) +
                                    " of " + market)
Example #4
0
    def hodl_buy_strat(self, total_bitcoin):

        slots_open = self.total_slots - len(self.held_coins) - len(
            self.pending_orders['Buying']) - len(
                self.pending_orders['Selling'])
        bitcoin_to_use = float(total_bitcoin / (slots_open + .25))

        failed_pairs = []

        for market_gain_pair in self.markets_desired_gain:
            market = market_gain_pair[0]
            desired_gain = market_gain_pair[1]

            coins_pending_buy = [
                market for market in self.pending_orders['Buying']
            ]
            coins_pending_sell = [
                market for market in self.pending_orders['Selling']
            ]

            if market not in self.held_coins and market not in coins_pending_buy and market not in \
                    coins_pending_sell:

                coin_price = float(self.bittrex_coins[market]['Last'])
                amount = bitcoin_to_use / coin_price

                if amount > 0:
                    percent_change_24h = utils.get_percent_change_24h(
                        self.bittrex_coins[market])
                    result = utils.buy(self.api, market, amount, coin_price,
                                       percent_change_24h, desired_gain, 0)
                    if result['success']:
                        utils.print_and_write_to_logfile('Buy order of' +
                                                         str(amount) + 'of' +
                                                         market +
                                                         'unsuccessful')
                    else:
                        failed_pairs.append(market_gain_pair)
                        utils.print_and_write_to_logfile('Buy order of' +
                                                         str(amount) + 'of' +
                                                         market + 'successful')

        self.markets_desired_gain = failed_pairs
    def reddit_buy_strat(self, total_bitcoin):
        coin_rank = 0
        coins_to_dismiss = utils.file_to_json(
            'coins_to_dismiss.json')["coins_to_dismiss"]

        slots_open = self.total_slots - len(self.held_coins) - len(
            self.pending_orders['Buying']) - len(
                self.pending_orders['Selling'])

        while coin_rank < 5:
            cur_coin = self.rank_by_upvotes()[coin_rank][0]
            if cur_coin not in coins_to_dismiss:
                market = "BTC-" + cur_coin
                coins_pending_buy = [
                    market for market in self.pending_orders['Buying']
                ]
                coins_pending_sell = [
                    market for market in self.pending_orders['Selling']
                ]

                if market not in self.held_coins and market not in coins_pending_buy and market not in \
                        coins_pending_sell:
                    bitcoin_to_use = float(total_bitcoin / (slots_open + .25))
                    coin_price = float(self.bittrex_coins[market]['Last'])
                    amount = bitcoin_to_use / coin_price

                    if amount > 0:
                        percent_change_24h = utils.get_percent_change_24h(
                            self.bittrex_coins[market])
                        buy_request = utils.buy(self.api, market, amount,
                                                coin_price, percent_change_24h,
                                                0)
                        if buy_request['success']:
                            utils.print_and_write_to_logfile("Buy order of " +
                                                             str(amount) +
                                                             " " + market +
                                                             " requested")
                        else:
                            utils.print_and_write_to_logfile(
                                buy_request['message'])
            if cur_coin not in coins_to_dismiss:
                coin_rank += 1
    def percent_buy_strat(self, total_bitcoin):

        symbol_1h_change_pairs = utils.get_coinmarketcap_1hr_change(
            self.coinmarketcap_coins)
        slots_open = self.total_slots - len(self.held_coins) - len(
            self.pending_orders['Buying']) - len(
                self.pending_orders['Selling'])

        if slots_open <= 0:
            utils.print_and_write_to_logfile("0 slots open")
            return

        bitcoin_to_use = float(total_bitcoin / slots_open * 0.990)

        if bitcoin_to_use < self.satoshi_50k:
            utils.print_and_write_to_logfile(
                "Order less than 50k satoshi (~$2). Attempted to use: $" +
                str(utils.bitcoin_to_USD(bitcoin_to_use)) + ", BTC: " +
                str(bitcoin_to_use))
            return

        for hist_coin in self.history_coins:
            coin_price = float(self.bittrex_coins[hist_coin]['Last'])
            # update highest price recorded while held
            if hist_coin in self.held_coins:
                highest_recorded_price = float(self.history_coins[hist_coin])
                if coin_price > highest_recorded_price:
                    self.history_coins[hist_coin] = coin_price
                    utils.json_to_file(self.history_coins,
                                       "coin_highest_price_history.json")

        ignored = utils.file_to_json("ignored_coins.json")
        # checking all bittrex coins to find the one
        for coin in self.bittrex_coins:
            if coin in ignored:
                continue

            percent_change_24h = utils.get_percent_change_24h(
                self.bittrex_coins[coin])
            # if coin 24 increase between x and y
            if self.buy_min_percent <= percent_change_24h <= self.buy_max_percent:
                rank = utils.get_ranks(self.coinmarketcap_coins)
                coin_rank = rank[utils.get_second_market_coin(coin)]
                coin_volume = self.bittrex_coins[coin]['Volume']
                # volume must be > 200 so we can sell when want
                if float(
                        coin_rank
                ) > 40 and coin not in self.history_coins and coin_volume > 200:
                    market = self.bittrex_coins[coin]['MarketName']
                    if market.startswith('ETH'):
                        break
                    if market.startswith('BTC'):
                        coin_to_buy = utils.get_second_market_coin(market)
                        coin_1h_change = float(
                            symbol_1h_change_pairs[coin_to_buy])

                        coins_pending_buy = [
                            market for market in self.pending_orders['Buying']
                        ]
                        coins_pending_sell = [
                            market for market in self.pending_orders['Selling']
                        ]

                        if market not in self.held_coins and market not in coins_pending_buy and market not in \
                                coins_pending_sell and coin_1h_change > self.buy_desired_1h_change:

                            coin_price = float(
                                self.bittrex_coins[coin]['Last'])
                            amount = bitcoin_to_use / coin_price
                            if amount > 0:
                                utils.buy(self.api, market, amount, coin_price,
                                          percent_change_24h, 0,
                                          coin_1h_change)
Example #7
0
    def percent_buy_strat(self, total_bitcoin):
        """
        Searches all coins on bittrex and buys up to the
        variable "total_slots" different coins. Splits the
        amount of bitcoin use on each evenly.

        :param total_bitcoin:
        :return:
        """
        symbol_1h_change_pairs = utils.get_coinmarketcap_1hr_change(
            self.coinmarketcap_coins)
        slots_open = self.total_slots - len(self.held_coins) - len(
            self.pending_orders['Buying']) - len(
                self.pending_orders['Selling'])

        if slots_open <= 0:
            utils.print_and_write_to_logfile("0 slots open")
            return

        bitcoin_to_use = float(total_bitcoin / slots_open * 0.990)

        if bitcoin_to_use < self.satoshi_50k:
            utils.print_and_write_to_logfile(
                "Order less than 50k satoshi (~$2). Attempted to use: $" +
                str(utils.bitcoin_to_USD(bitcoin_to_use)) + ", BTC: " +
                str(bitcoin_to_use))
            return

        for hist_coin in self.history_coins:
            bitcoin_to_use = float(total_bitcoin / slots_open * 0.990)
            coin_price = float(self.bittrex_coins[hist_coin]['Last'])
            # update highest price recorded while held
            if hist_coin in self.held_coins:
                highest_recorded_price = float(self.history_coins[hist_coin])
                if coin_price > highest_recorded_price:
                    self.history_coins[hist_coin] = coin_price
                    utils.json_to_file(self.history_coins,
                                       "coin_highest_price_history.json")

            # checking if the price of the sold coin is now greater then previously recorded high
            elif float(self.history_coins[hist_coin]) * 1.1 < coin_price:

                coins_pending_buy = [
                    market for market in self.pending_orders['Buying']
                ]
                coins_pending_sell = [
                    market for market in self.pending_orders['Selling']
                ]

                if hist_coin not in coins_pending_buy and hist_coin not in coins_pending_sell:
                    amount = bitcoin_to_use / coin_price
                    if amount > 0:
                        coin_to_buy = utils.get_second_market_coin(hist_coin)
                        coin_1h_change = float(
                            symbol_1h_change_pairs[coin_to_buy])
                        percent_change_24h = utils.get_percent_change_24h(
                            self.bittrex_coins[hist_coin])
                        utils.buy(self.api, hist_coin, amount, coin_price,
                                  percent_change_24h, 0, coin_1h_change)

                        slots_open = self.total_slots - len(
                            self.held_coins) - len(
                                self.pending_orders['Buying']) - len(
                                    self.pending_orders['Selling'])
                        bitcoin_to_use = float(total_bitcoin / slots_open *
                                               0.990)

        # checking all bittrex coins to find the one
        for coin in self.bittrex_coins:
            percent_change_24h = utils.get_percent_change_24h(
                self.bittrex_coins[coin])
            # if coin 24 increase between x and y
            if self.buy_min_percent <= percent_change_24h <= self.buy_max_percent:
                rank = utils.get_ranks(self.coinmarketcap_coins)
                coin_rank = rank[utils.get_second_market_coin(coin)]
                coin_volume = self.bittrex_coins[coin]['Volume']
                # volume must be > 200 so we can sell when want
                if float(
                        coin_rank
                ) > 50 and coin not in self.history_coins and coin_volume > 200:
                    market = self.bittrex_coins[coin]['MarketName']
                    if market.startswith('ETH'):
                        break
                    if market.startswith('BTC'):
                        coin_to_buy = utils.get_second_market_coin(market)
                        coin_1h_change = float(
                            symbol_1h_change_pairs[coin_to_buy])

                        coins_pending_buy = [
                            market for market in self.pending_orders['Buying']
                        ]
                        coins_pending_sell = [
                            market for market in self.pending_orders['Selling']
                        ]

                        if market not in self.held_coins and market not in coins_pending_buy and market not in \
                                coins_pending_sell and coin_1h_change > self.buy_desired_1h_change:

                            coin_price = float(
                                self.bittrex_coins[coin]['Last'])
                            amount = bitcoin_to_use / coin_price
                            if amount > 0:
                                buy_request = utils.buy(
                                    self.api, market, amount, coin_price,
                                    percent_change_24h, 0, coin_1h_change)
                                if buy_request['success']:
                                    utils.print_and_write_to_logfile(
                                        "Buy order of " + str(amount) + " " +
                                        market + " requested")
                                    self.refresh_held_pending()
                                else:
                                    utils.print_and_write_to_logfile(
                                        buy_request['message'])