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)
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)
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'])