def generate_pairs_filter_xml(maxpairs=None):

    lock = threading.Lock()
    exchanges = u.getExchangesFromXml('exchanges.xml')
    assets = u.getAssetsFromXml('assets.xml')
    logger = loggerHandler('generate_pairs_filter_xml',log_path='log/')
    
    u.initExchangesConcurrency(exchanges,assets,logger)
    pairs = u.getMostQuotedPairs(exchanges,logger)

    root = etree.Element('PairsFilter')

    if maxpairs:
        if maxpairs>len(pairs):
            maxpairs = len(pairs)
    else:
        maxpairs = len(pairs)
    
    for pair in pairs[:maxpairs]:
        node = etree.SubElement(root,'Pair',name=pair[1])
        
    str_xml = etree.tostring(root,pretty_print=True)
    outFile = open('pairs_filter.xml','w')
    outFile.write(str_xml.decode())
    outFile.close()
    logger.close()
            return True
    return False

if __name__=="__main__":

    threads = []
    time_start = time.time()
    exchanges = u.getExchangesFromXml('exchanges.xml')
    assets = u.getAssetsFromXml('assets.xml')
    pairs_filter = u.getPairsFilterFromXml('pairs_filter.xml')
    logger = loggerHandler('exchange_listener',log_path='log/')
    loggerExchangeInfo = loggerHandler('exchange_info',log_path='log/')
    loggerArbitrage = loggerHandler('exchange_arbitrage',log_path='log/')

    #init exchanges
    u.initExchangesConcurrency(exchanges,assets,logger)
    
    #delete pair we are not listening
    u.deletePairsUnlistened(exchanges,pairs_filter)
    
    #listen to exchanges
    threads = u.launchExchangeListenersWithPairsFilter(exchanges,pairs_filter,logger)
    time.sleep(3)

    print('Launching shell....')
    print('****************************************************************')
    print('****  key in \'cmdlist\' to get list of available commands *****')
    print('****************************************************************')
    
    #shell loop
    while True: