def percent_sell_strat(self):
        ignored = utils.file_to_json("ignored_coins.json")
        held_markets = [market for market in self.held_coins]
        for coin_market in held_markets:
            current_high = self.history_coins[coin_market]
            coin_price = float(self.bittrex_coins[coin_market]['Last'])
            percent_change_24h = utils.get_percent_change_24h(
                self.bittrex_coins[coin_market])

            if coin_price < current_high * 0.80 \
                    or percent_change_24h >= 110:

                coin_to_sell = utils.get_second_market_coin(coin_market)

                balance = self.api.get_balance(coin_to_sell)

                if balance['success']:
                    amount = float(balance['result']['Available'])
                    if amount > 0:
                        utils.sell(self.api, amount, coin_market,
                                   self.bittrex_coins)
                        ignored[coin_market] = 1
                        utils.json_to_file(ignored, "ignored_coins.json")
                else:
                    utils.print_and_write_to_logfile(
                        "Could not retrieve balance: " + balance['message'])
コード例 #2
0
    def add_bittrex_coins_to_keltner_coins(self, coinmarketcap_coins):
        self.keltner_coins = {}
        self.coinmarketcap_coins = self.update_coinmarketcap_coins()
        self.bittrex_coins = self.update_bittrex_coins(
            self.coinmarketcap_coins)
        for market in self.bittrex_coins:
            if market.startswith('BTC'):
                symbol = utils.get_second_market_coin(market)
                if symbol in coinmarketcap_coins:
                    coin_rank = int(coinmarketcap_coins[symbol])
                    if coin_rank <= self.lowest_rank:
                        t = {}
                        t['market'] = market
                        t['price_data_seconds'] = []
                        t['price_data_minutes'] = []
                        t['tr_data'] = []
                        t['atr_data'] = []
                        t['ema_data'] = []
                        t['upper_band_data'] = []
                        t['middle_band_data'] = []
                        t['lower_band_data'] = []

                        self.keltner_coins[market] = t

        utils.json_to_file(self.keltner_coins, "keltner_coins.json")
コード例 #3
0
    def percent_sell_strat(self):
        """
        If a coin drops more than 10% of its highest price then sell
        """

        held_markets = [market for market in self.held_coins]
        for coin_market in held_markets:
            current_high = self.history_coins[coin_market]
            coin_price = float(self.bittrex_coins[coin_market]['Last'])
            """
            if cur_24h_change > highest_24h_change:
                self.held_coins[coin_market]['highest_24h_change'] = cur_24h_change
                highest_24h_change = cur_24h_change
                utils.json_to_file(self.held_coins, "held_coins.json")

                self.held_coins[coin_market]['sell_threshold'] = self.updated_threshold(coin_market, self.held_coins)
                utils.json_to_file(self.held_coins, "held_coins.json")
            """

            if coin_price < current_high * 0.97:

                coin_to_sell = utils.get_second_market_coin(coin_market)

                balance = self.api.get_balance(coin_to_sell)

                if balance['success']:
                    amount = float(balance['result']['Available'])
                    if amount > 0:
                        utils.sell(self.api, amount, coin_market,
                                   self.bittrex_coins)
                else:
                    utils.print_and_write_to_logfile(
                        "Could not retrieve balance: " + balance['message'])
コード例 #4
0
 def update_bittrex_coins(self, coinmarketcap_coins):
     bittrex_data = utils.query_url(
         "https://bittrex.com/api/v1.1/public/getmarketsummaries")['result']
     coins = {}
     for coin in bittrex_data:
         symbol = utils.get_second_market_coin(coin['MarketName'])
         if symbol in coinmarketcap_coins:
             coin_rank = int(coinmarketcap_coins[symbol])
             if coin_rank <= self.lowest_rank:
                 key = coin['MarketName']
                 coins[key] = coin
     return coins
コード例 #5
0
    def hodl_sell_strat(self):

        for market in self.held_coins:
            cur_price = float(self.bittrex_coins[market]['Last'])
            bought_price = self.held_coins[market]['price_bought']
            change = utils.percent_change(bought_price, cur_price)

            desired_gain = self.held_coins[market]['desired_gain']

            if change >= desired_gain:
                coin_to_sell = utils.get_second_market_coin(market)
                balance = self.api.get_balance(coin_to_sell)
                if balance['success']:
                    amount = float(balance['result']['Available'])
                    utils.sell(self.api, amount, market, self.bittrex_coins)
                else:
                    utils.print_and_write_to_logfile(
                        "Could not retrieve balance: " + balance['message'])
コード例 #6
0
    def keltner_sell_strat(self):
        if len(self.keltner_coins['BTC-ETH']
               ['upper_band_data']) > self.keltner_period:
            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:
                    market = self.bittrex_coins[coin]['MarketName']
                    coins_pending_buy = [
                        market for market in self.pending_orders['Buying']
                    ]
                    coins_pending_sell = [
                        market for market in self.pending_orders['Selling']
                    ]

                    highest_price_history = utils.file_to_json(
                        'coin_highest_price_history.json')
                    if market not in coins_pending_buy and market not in coins_pending_sell and market in self.held_coins:

                        cur_price = price_data_seconds[-1]
                        price_data_seconds = self.keltner_coins[market][
                            'price_data_seconds']

                        deviation = self.get_deviation_of_last_x(
                            5, price_data_seconds)

                        highest_coin_price = highest_price_history[market]

                        if self.downward_cross(
                                market, 'upper_band_data'
                        ) or cur_price <= highest_coin_price - 2 * deviation:
                            coin_to_sell = utils.get_second_market_coin(market)
                            balance = self.api.get_balance(coin_to_sell)
                            if balance['success']:
                                amount = float(balance['result']['Available'])
                                utils.sell(self.api, amount, market,
                                           self.bittrex_coins)
                            else:
                                utils.print_and_write_to_logfile(
                                    "Could not retrieve balance: " +
                                    balance['message'])
コード例 #7
0
    def low_high_sell_strat(self):
        for market in self.held_coins:
            cur_price = float(self.bittrex_coins[market]['Last'])
            bought_price = self.held_coins[market]['price_bought']
            change = utils.percent_change(bought_price, cur_price)

            desired_gain = self.held_coins[market]['desired_gain']
            high_bar = self.held_coins[market]['high_bar']

            if change >= desired_gain and change >= high_bar:
                self.held_coins[market]['high_bar'] = high_bar + 10
                utils.json_to_file(self.held_coins, 'held_coins.json')
            elif high_bar != desired_gain and change < high_bar - 10:
                coin_to_sell = utils.get_second_market_coin(market)
                balance = self.api.get_balance(coin_to_sell)
                if balance['success']:
                    amount = float(balance['result']['Available'])
                    self.update_bittrex_coins()
                    utils.sell(self.api, amount, market, self.bittrex_coins)
                else:
                    utils.print_and_write_to_logfile("Could not retrieve balance: " + balance['message'])
    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)
コード例 #9
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'])