Add shares outstanding and free float information

This commit is contained in:
cmallwitz
2021-09-28 20:28:00 +01:00
parent e22dc7448f
commit 4e626c272e
9 changed files with 46 additions and 1 deletions
+2
View File
@@ -88,6 +88,8 @@ You can either specify numbers or names (lower or upper case) - not all bits are
|EX_DIV_DATE|72|Yes|Yes| |yyyy-mm-dd|
|PAYOUT_RATIO|73|Yes|No|||
|EXPIRY_DATE|74|Yes (on options)|No| |yyyy-mm-dd|
|SHARES_OUT|75|Yes|Yes| ||
|FREE_FLOAT|76|Yes|Yes| ||
|CLOSE|90|No|No|Yes||
|ADJ_CLOSE|91|No|No|Yes||
|SECTOR|98|Yes|Yes|||
BIN
View File
Binary file not shown.
+8
View File
@@ -195,6 +195,7 @@ class BaseClient:
tick[Datacode.EXCHANGE] = None
tick[Datacode.EXPIRY_DATE] = None
tick[Datacode.EX_DIV_DATE] = None
tick[Datacode.FREE_FLOAT] = None
tick[Datacode.HIGH] = None
tick[Datacode.HIGH_52_WEEK] = None
tick[Datacode.INDUSTRY] = None
@@ -210,6 +211,7 @@ class BaseClient:
tick[Datacode.PE_RATIO] = None
tick[Datacode.PREV_CLOSE] = None
tick[Datacode.SECTOR] = None
tick[Datacode.SHARES_OUT] = None
tick[Datacode.TICKER] = None
tick[Datacode.TIMEZONE] = None
tick[Datacode.VOLUME] = None
@@ -320,6 +322,12 @@ class BaseClient:
else:
return data[Datacode.EXPIRY_DATE]
elif datacode == Datacode.FREE_FLOAT.value and Datacode.FREE_FLOAT in data:
return data[Datacode.FREE_FLOAT]
elif datacode == Datacode.SHARES_OUT.value and Datacode.SHARES_OUT in data:
return data[Datacode.SHARES_OUT]
elif datacode == Datacode.CLOSE.value and Datacode.CLOSE in data:
return data[Datacode.CLOSE]
+2
View File
@@ -44,6 +44,8 @@ class Datacode(Enum):
EX_DIV_DATE = 72
PAYOUT_RATIO = 73
EXPIRY_DATE = 74
SHARES_OUT = 75
FREE_FLOAT = 76
CLOSE = 90
ADJ_CLOSE = 91
+12
View File
@@ -241,6 +241,18 @@ class FT(BaseClient):
tick[Datacode.AVG_DAILY_VOL_3MONTH] = self.save_wrapper(
lambda: handle_abbreviations(html.unescape(match.group(1))))
r = r'<th>\s*Shares outstanding\s*</th><td>\s*([0-9,\.btnmk]+)\s*</td>'
match = re.compile(r, flags=re.DOTALL).search(text, start)
if match:
tick[Datacode.SHARES_OUT] = self.save_wrapper(
lambda: handle_abbreviations(html.unescape(match.group(1))))
r = r'<th>\s*Free float\s*</th><td>\s*([0-9,\.btnmk]+)\s*</td>'
match = re.compile(r, flags=re.DOTALL).search(text, start)
if match:
tick[Datacode.FREE_FLOAT] = self.save_wrapper(
lambda: handle_abbreviations(html.unescape(match.group(1))))
r = r'<th>\s*P/E.*?</th><td>\s*([0-9,\.\-]+)\s*<'
match = re.compile(r, flags=re.DOTALL).search(text, start)
if match:
+3
View File
@@ -176,6 +176,7 @@ class Yahoo(BaseClient):
price = results['price']
quoteType = results['quoteType']
summaryDetail = results['summaryDetail']
defaultKeyStatistics = results['defaultKeyStatistics'] if 'defaultKeyStatistics' in results else dict()
if not price:
return 'Could not find price for \'{}\''.format(ticker)
@@ -203,6 +204,8 @@ class Yahoo(BaseClient):
tick[Datacode.DIV_YIELD] = float(raw(summaryDetail, 'dividendYield'))
tick[Datacode.EX_DIV_DATE] = self.save_wrapper(
lambda: dateutil.parser.parse(str(fmt(summaryDetail, 'exDividendDate')), yearfirst=True, dayfirst=False).date())
tick[Datacode.SHARES_OUT] = float(raw(defaultKeyStatistics, 'sharesOutstanding'))
tick[Datacode.FREE_FLOAT] = float(raw(defaultKeyStatistics, 'floatShares'))
tick[Datacode.PAYOUT_RATIO] = float(raw(summaryDetail, 'payoutRatio'))
tick[Datacode.LOW_52_WEEK] = float(raw(summaryDetail, 'fiftyTwoWeekLow'))
+1 -1
View File
@@ -14,7 +14,7 @@ import os
cur_dir = os.getcwd()
addin_id = "com.financials.getinfo"
addin_version = "3.0.4"
addin_version = "3.0.5"
addin_displayname = "Financial Market Extension"
addin_publisher_link = "https://github.com/cmallwitz/Financials-Extension"
addin_publisher_name = "The Publisher"
+12
View File
@@ -70,6 +70,12 @@ class Test(unittest.TestCase):
s = financials.getRealtime('IBM:NYQ', 'EPS', 'FT')
self.assertEqual(float, type(s), 'test_US_equity EPS {}'.format(s))
s = financials.getRealtime('IBM:NYQ', 'SHARES_OUT', 'FT')
self.assertEqual(float, type(s), 'test_US_equity SHARES_OUT {}'.format(s))
s = financials.getRealtime('IBM:NYQ', 'FREE_FLOAT', 'FT')
self.assertEqual(float, type(s), 'test_US_equity FREE_FLOAT {}'.format(s))
s = financials.getRealtime('IBM:NYQ', 'PE_RATIO', 'FT')
self.assertEqual(float, type(s), 'test_US_equity PE_RATIO {}'.format(s))
@@ -217,6 +223,12 @@ class Test(unittest.TestCase):
s = financials.getRealtime('SAPX:GER', 'EPS', 'FT')
self.assertEqual(float, type(s), 'test_DE_equity EPS {}'.format(s))
s = financials.getRealtime('SAPX:GER', 'SHARES_OUT', 'FT')
self.assertEqual(float, type(s), 'test_DE_equity SHARES_OUT {}'.format(s))
s = financials.getRealtime('SAPX:GER', 'FREE_FLOAT', 'FT')
self.assertEqual(float, type(s), 'test_DE_equity FREE_FLOAT {}'.format(s))
s = financials.getRealtime('SAPX:GER', 'PE_RATIO', 'FT')
self.assertEqual(float, type(s), 'test_DE_equity PE_RATIO {}'.format(s))
+6
View File
@@ -106,6 +106,12 @@ class Test(unittest.TestCase):
s = financials.getRealtime('IBM', Datacode.PAYOUT_RATIO.value, 'YAHOO')
self.assertTrue(testutils.is_positive_float(s), 'test_realtime_US_equity PAYOUT_RATIO {}'.format(s))
s = financials.getRealtime('IBM', Datacode.SHARES_OUT.value, 'YAHOO')
self.assertTrue(testutils.is_positive_float(s), 'test_realtime_US_equity SHARES_OUT {}'.format(s))
s = financials.getRealtime('IBM', Datacode.FREE_FLOAT.value, 'YAHOO')
self.assertTrue(testutils.is_positive_float(s), 'test_realtime_US_equity FREE_FLOAT {}'.format(s))
s = financials.getRealtime('IBM', Datacode.EXCHANGE.value, 'YAHOO')
self.assertEqual(s, 'NYQ', 'test_realtime_US_equity EXCHANGE')