示例#1
0
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
示例#2
0
 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])
示例#3
0
 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])
示例#4
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])
示例#5
0
 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)
示例#6
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)
示例#7
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
示例#8
0
    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)
示例#9
0
            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
示例#10
0
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)
示例#11
0
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)