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