def arbitragem(update, context): try: loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) graph = create_weighted_multi_exchange_digraph( ['kraken', 'bittrex', 'binance', 'coinbase', 'poloniex'], fees=True, log=True) graph, paths = bellman_ford_multi(graph, 'BTC') i = 0 lines = "" for path in paths: lines = lines + str( print_profit_opportunity_for_path_multi(graph, path)) if i % 3 == 0: try: context.bot.send_message(chat_id=update.message.chat_id, text=lines) except: time.sleep(5) context.bot.send_message(chat_id=update.message.chat_id, text=lines) pass lines = "" if i > 30: break i += 1 replyStr = "\nAbra sua conta na binance: https://www.binance.com/?ref=16836135" update.message.reply_text(replyStr) except Exception as e: print(str(e)) pass
def test_path_beginning_equals_end(self): graph = multi_digraph_from_json('test_multigraph.json') for node in graph: new_graph, paths = bellman_ford_multi(graph, node) for path in paths: if path: self.assertEqual(path[0], path[-1])
def test_loop_from_source(self): graph = multi_digraph_from_json('test_multigraph.json') for node in graph: new_graph, paths = bellman_ford_multi(graph, node, loop_from_source=True) for path in paths: if path: self.assertEqual(path[0], path[-1]) self.assertEqual(node, path[0])
def test_path_beginning_equals_end(self): __location__ = os.path.realpath( os.path.join(os.getcwd(), os.path.dirname(__file__))) graph = multi_digraph_from_json(os.path.join(__location__, 'test_multigraph.json')) for node in graph: new_graph, paths = bellman_ford_multi(graph, node) for path in paths: if path: self.assertEqual(path[0], path[-1])
def test_positive_ratio(self): graph = multi_digraph_from_json('test_multigraph.json') for node in graph: new_graph, paths = bellman_ford_multi(graph, node) for path in paths: if path: # assert that the path is a negative weight cycle ratio = calculate_profit_ratio_for_path(new_graph, path) # python float precision may round some numbers to 1.0. self.assertGreaterEqual(ratio, 1.0)
def test_positive_ratio(self): __location__ = os.path.realpath( os.path.join(os.getcwd(), os.path.dirname(__file__))) graph = multi_digraph_from_json(os.path.join(__location__, 'test_multigraph.json')) for node in graph: new_graph, paths = bellman_ford_multi(graph, node) for path in paths: if path: # assert that the path is a negative weight cycle ratio = calculate_profit_ratio_for_path(new_graph, path) # python float precision may round some numbers to 1.0. self.assertGreaterEqual(ratio, 1.0)
def ask_peregrine(exchanges: list, volume: int) -> list: graph = create_weighted_multi_exchange_digraph(exchanges, log=True, volume=volume) graph, paths = bellman_ford_multi(graph, 'ETH', loop_from_source=False, unique_paths=True) results = list() for path in paths: results.append( print_profit_opportunity_for_path_multi(graph, path, volume=volume)) return results
def notify(self): # print(self.__class__.__name__, 'notify:', self.exchanges) graph = self.build_graph() graph, paths = bellman_ford_multi(graph, 'btc', loop_from_source=False, unique_paths=True, ensure_profit=False) for path in paths: total = calculate_profit_ratio_for_path(graph, path) total_p = (total - 1) * 100.0 if total_p > 0: # print(total, path) print('{:5.3}%'.format(total_p), ' -> '.join([p for p in path])) print_profit_opportunity_for_path_multi(graph, path)
i + 1, results[0][2], opportunity['highest_bid']['price'], opportunity['highest_bid']['exchange'].id, opportunity['lowest_ask']['price'], opportunity['lowest_ask']['exchange'].id, str((results[0][0] - 1) * 100)) if i == 2: break heapq.heappop(results) results = [] api.update_status(output) # does not currently work. comment out all code after this line to use bot in its current working form. graph = create_weighted_multi_exchange_digraph(exchanges, log=True) graph, paths = bellman_ford_multi(graph, markets[market_iterator].split('/')[0], loop_from_source=True, unique_paths=True) for path in paths: output = print_profit_opportunity_for_path_multi(graph, path, print_output=False, round_to=2, shorten=True) print(output) api.update_status(output) print('ho') market_iterator += 1 if market_iterator == len(markets): market_iterator = 0 time.sleep(600) # 10 minutes
from peregrinearb import create_weighted_multi_exchange_digraph, bellman_ford_multi, \ print_profit_opportunity_for_path_multi #graph = create_weighted_multi_exchange_digraph(['bittrex', 'gemini', 'kraken'], log=True) #VOLUME = None VOLUME = 70 graph = create_weighted_multi_exchange_digraph(['bittrex', 'kraken'], log=True, volume=VOLUME) #graph, paths = bellman_ford_multi(graph, 'ETH', loop_from_source=False, unique_paths=True) graph, paths = bellman_ford_multi(graph, 'ETH', loop_from_source=False, unique_paths=True) for path in paths: print_profit_opportunity_for_path_multi(graph, path, volume=VOLUME)
from peregrinearb import create_weighted_multi_exchange_digraph, bellman_ford_multi, \ print_profit_opportunity_for_path_multi graph = create_weighted_multi_exchange_digraph(['bittrex', 'gemini', 'kraken'], log=True) graph, paths = bellman_ford_multi(graph, 'ETH') for path in paths: print_profit_opportunity_for_path_multi(graph, path)