コード例 #1
0
ファイル: calc_financials.py プロジェクト: zrabin/stocker
def calc_magic_formula_trailing():

    LOGGER.info('Calculating Magic Formula Trailing')

    strategy = "magic_formula_ttm"

    query = d.Company.raw('''SELECT company.symbol, 
        financialdata.rank_pe_ratio_ttm + financialdata.rank_return_on_assets AS score
        FROM company 
        INNER JOIN financialdata on company.id = financialdata.company_id
        WHERE financialdata.rank_pe_ratio_ttm > 0
        AND financialdata.rank_return_on_assets > 0
        AND company.sector IS NOT 'Finance' 
        AND company.sector IS NOT 'Energy'
        AND company.sector IS NOT 'Miscellaneous'
        AND company.sector NOT LIKE '%Utilities%'
        ORDER BY score ASC''')

    rankings = alg.getRank(query, strategy)
    count = 0
    for x in rankings:
        count = count + 1
        data.set_financial_data(company=x["company"],
                                symbol=x["symbol"],
                                date=get_time(),
                                magic_formula_trailing=x[strategy])

    LOGGER.info(
        'Finished calculating Magic F Trailing - %s total calculations' %
        count)
コード例 #2
0
ファイル: calc_financials.py プロジェクト: zrabin/stocker
def calc_garp_ratio():

    LOGGER.info('Calculating garp ratio')

    query = d.Company.raw('''SELECT company.symbol, 
        financialdata.pe_ratio_ttm / financialdata.peg_ratio as garp_ratio  
        FROM company 
        INNER JOIN financialdata on company.id = financialdata.company_id
        WHERE financialdata.pe_ratio_ttm > 0
        AND financialdata.peg_ratio > 0
        ORDER BY company.symbol ASC''')

    financials = []

    for row in query:
        symbol = row.symbol
        garp_ratio = row.garp_ratio
        values = {}
        values.update({
            "company": row.id,
            "symbol": symbol,
            "garp_ratio": garp_ratio
        })
        financials.append(values)

    count = 0
    for x in financials:
        count = count + 1
        data.set_financial_data(company=x["company"],
                                symbol=x["symbol"],
                                date=get_time(),
                                garp_ratio=x["garp_ratio"])

    LOGGER.info('Finished calculating garp_ratio - %s total calculations' %
                count)
コード例 #3
0
def calc_magic_formula_trailing():
    
    LOGGER.info('Calculating Magic Formula Trailing')
    
    strategy = "magic_formula_ttm"
    
    query = d.Company.raw(
        '''SELECT company.symbol, 
        financialdata.rank_pe_ratio_ttm + financialdata.rank_return_on_assets AS score
        FROM company 
        INNER JOIN financialdata on company.id = financialdata.company_id
        WHERE financialdata.rank_pe_ratio_ttm > 0
        AND financialdata.rank_return_on_assets > 0
        AND company.sector IS NOT 'Finance' 
        AND company.sector IS NOT 'Energy'
        AND company.sector IS NOT 'Miscellaneous'
        AND company.sector NOT LIKE '%Utilities%'
        ORDER BY score ASC'''
        )

    rankings = alg.getRank(query, strategy)
    count = 0
    for x in rankings:
        count = count + 1
        data.set_financial_data(
            company = x["company"],
            symbol = x["symbol"],
            date=get_time(),
            magic_formula_trailing = x[strategy]
        )
    
    LOGGER.info('Finished calculating Magic F Trailing - %s total calculations' % count)
コード例 #4
0
ファイル: import_financials.py プロジェクト: zrabin/stocker
def get_yahoo_roa(companies):
    
    url = 'https://finance.yahoo.com/q/ks'
    
    for company in companies:
        LOGGER.info('Getting ks: %s' % company.symbol)
        
        map_data = {
            'Return on Assets (ttm):': {
                'key': 'return_on_assets',
                'decode': decode_percent,
            },
            'Return on Equity (ttm):': {
                'key': 'return_on_equity',
                'decode': decode_percent,
            },
        }
        
        response = requests.get(url, params={'s': company.symbol})
        soup = BeautifulSoup(response.text, 'html.parser')
        
        for doc in soup.body.find_all('tr'):
            try:
                md = map_data[doc.td.text]
                if doc.td.text in map_data:
                    md['value'] = doc.contents[1].text.strip()
            except:
                continue
        
        extra = {}
        
        for md in map_data.values():
            if 'value' not in md:
                continue
            value = md['decode'](md['value'])
            if value is not None:
                extra[md['key']] = value
        
        if extra:
            timestamp = get_time()
            LOGGER.info('Setting ks: %s: %s' % (company.symbol, extra))
            data.set_financial_data(company=company, symbol=company.symbol, date=timestamp, **extra)
        else:
            LOGGER.info('Skipping ks: %s' % company.symbol)
コード例 #5
0
def calc_pe_ratio_ftm():
    
    LOGGER.info('Calculating pe ratio')

    query = d.Company.raw(
        '''SELECT company.symbol, 
        financialdata.ask / financialdata.EPSEstimateNextYear AS future_pe      
        FROM company 
        INNER JOIN financialdata on company.id = financialdata.company_id
        WHERE financialdata.ask IS NOT Null 
        AND financialdata.EPSEstimateNextYear > 0
        ORDER BY company.symbol ASC'''
        )
    
    financials = []
    
    for row in query:
        symbol = row.symbol
        pe_ratio_ftm = row.future_pe
        values = {}
        values.update({
            "company" : row.id, 
            "symbol" : symbol,
            "pe_ratio_ftm" : pe_ratio_ftm
        })
        financials.append(values)
  
    count = 0
    for x in financials:
        count = count + 1
        data.set_financial_data(
            company=x["company"],
            symbol=x["symbol"],
            date=get_time(),
            pe_ratio_ftm=x["pe_ratio_ftm"]
        )

    LOGGER.info('Finished calculating pe_ratio - %s total calculations' % count)
    return financials
コード例 #6
0
ファイル: import_financials.py プロジェクト: zrabin/stocker
def yahoo_finance(sleep_time):
    
    companies = list(data.get_companies())
    companies = [companies[i:i+BATCH] for i in range(0, len(companies), BATCH)]

    for i, batch in enumerate(companies):
        if i > 0: time.sleep(sleep_time)

        batch = dict([(c.symbol, c) for c in batch])
        url = 'https://query.yahooapis.com/v1/public/yql'
        params = {
            'q': 'select * from yahoo.finance.quotes where symbol IN ("%s")' % '", "'.join(batch.keys()),
            'format': 'json',
            'env': 'http://datatables.org/alltables.env',
        }
        response = requests.get(url, params=params)
        body = response.json()

        LOGGER.info('Getting quotes: %s' % ', '.join(batch.keys()))

        for item in body['query']['results']['quote']:
            company = batch[item['symbol']]
            timestamp = get_time()
            data.set_financial_data(
                company=company,
                symbol=company.symbol,
                date=timestamp,
                ask=decode_money(item.get('Ask')),
                market_cap=decode_money(item.get('MarketCapitalization')),
                ebitda=decode_money(item.get('EBITDA')),
                pe_ratio_ttm=decode_float(item.get('PERatio')),
                peg_ratio=decode_float(item.get('PEGRatio')),
                DividendYield = decode_float(item.get('DividendYield')),
                OneyrTargetPrice = decode_float(item.get('OneyrTargetPrice')),
                EPSEstimateCurrentYear = decode_float(item.get('EPSEstimateCurrentYear')),
                EPSEstimateNextYear = decode_float(item.get('EPSEstimateNextYear')),
                EPSEstimateNextQuarter = decode_float(item.get('EPSEstimateNextQuarter')),
            )
コード例 #7
0
def calc_garp_ratio():
    
    LOGGER.info('Calculating garp ratio')
    
    query = d.Company.raw(
        '''SELECT company.symbol, 
        financialdata.pe_ratio_ttm / financialdata.peg_ratio as garp_ratio  
        FROM company 
        INNER JOIN financialdata on company.id = financialdata.company_id
        WHERE financialdata.pe_ratio_ttm > 0
        AND financialdata.peg_ratio > 0
        ORDER BY company.symbol ASC'''
        )
    
    financials = []
    
    for row in query:
        symbol = row.symbol
        garp_ratio = row.garp_ratio
        values = {}
        values.update({
            "company" : row.id, 
            "symbol" : symbol,
            "garp_ratio" : garp_ratio
        })
        financials.append(values)
    
    count = 0
    for x in financials:
        count = count + 1
        data.set_financial_data(
            company=x["company"],
            symbol=x["symbol"],
            date=get_time(),
            garp_ratio=x["garp_ratio"]
        )
    
    LOGGER.info('Finished calculating garp_ratio - %s total calculations' % count)
コード例 #8
0
ファイル: import_financials.py プロジェクト: zrabin/stocker
def get_quandl(companies):

    for i, company in enumerate(companies):
        
        q_codes ={
            "net_income" : "NET_INCOME_Q",
            "total_assets" : "TOTAL_ASSETS_Q",
            "shares_outstanding" : "TOTAL_COMMON_SHARES_OUTSTANDING_Q"
            }

        financials = {}
        
        LOGGER.info('Getting quandl income & assets for: %s' % company.symbol)                          
        
        for k, v in q_codes.iteritems():
            code = "RAYMOND/" + company.symbol + "_" + v

            try:
                stat = Quandl.get(code, rows="1", authtoken=QUAND_KEY)
                stat = decode_quandl(stat)
                stat = decode_float(stat)
                financials.update({k : stat})
                    
            except:
                stat = "N/A"
                stat = decode_float(stat)
                financials.update({k : stat})
            
        LOGGER.info('%s --- %s:' % (company.symbol, financials))                          
        timestamp = get_time()
        data.set_financial_data(
            company=company, 
            symbol=company.symbol,
            date=timestamp,
            **financials
            )
コード例 #9
0
ファイル: calc_financials.py プロジェクト: zrabin/stocker
def calc_pe_ratio_ftm():

    LOGGER.info('Calculating pe ratio')

    query = d.Company.raw('''SELECT company.symbol, 
        financialdata.ask / financialdata.EPSEstimateNextYear AS future_pe      
        FROM company 
        INNER JOIN financialdata on company.id = financialdata.company_id
        WHERE financialdata.ask IS NOT Null 
        AND financialdata.EPSEstimateNextYear > 0
        ORDER BY company.symbol ASC''')

    financials = []

    for row in query:
        symbol = row.symbol
        pe_ratio_ftm = row.future_pe
        values = {}
        values.update({
            "company": row.id,
            "symbol": symbol,
            "pe_ratio_ftm": pe_ratio_ftm
        })
        financials.append(values)

    count = 0
    for x in financials:
        count = count + 1
        data.set_financial_data(company=x["company"],
                                symbol=x["symbol"],
                                date=get_time(),
                                pe_ratio_ftm=x["pe_ratio_ftm"])

    LOGGER.info('Finished calculating pe_ratio - %s total calculations' %
                count)
    return financials