Compare commits

...
1 Commits
Author SHA1 Message Date
cmallwitz a0f723cfba Fix historic price rounding and missing summaryDetail 2025-04-21 16:12:10 +01:00
5 changed files with 43 additions and 33 deletions
BIN
View File
Binary file not shown.
+18 -8
View File
@@ -77,6 +77,14 @@ class Yahoo(BaseClient):
parsed = json.loads(js)
parsed = parsed['chart']['result'][0]
price_hint = 2
if 'priceHint' in parsed['meta']:
price_hint = str(parsed['meta']['priceHint'])
if price_hint and price_hint.isnumeric():
price_hint = int(price_hint)
else:
price_hint = 2
tz = datetime.timezone(datetime.timedelta(seconds=parsed['meta']['gmtoffset']), parsed['meta']['exchangeTimezoneName'])
rows = list(
@@ -93,12 +101,12 @@ class Yahoo(BaseClient):
for row in rows:
tick = self.get_ticker()
try:
tick[Datacode.OPEN] = round(float(row[1]), 2)
tick[Datacode.LOW] = round(float(row[2]), 2)
tick[Datacode.HIGH] = round(float(row[3]), 2)
tick[Datacode.VOLUME] = round(float(row[4]), 2)
tick[Datacode.CLOSE] = round(float(row[5]), 2)
tick[Datacode.ADJ_CLOSE] = round(float(row[6]), 2)
tick[Datacode.OPEN] = round(float(row[1]), price_hint)
tick[Datacode.LOW] = round(float(row[2]), price_hint)
tick[Datacode.HIGH] = round(float(row[3]), price_hint)
tick[Datacode.VOLUME] = round(float(row[4]), price_hint)
tick[Datacode.CLOSE] = round(float(row[5]), price_hint)
tick[Datacode.ADJ_CLOSE] = round(float(row[6]), price_hint)
except:
pass
@@ -240,7 +248,10 @@ class Yahoo(BaseClient):
parsed = json.loads(js)
parsed = parsed['quoteSummary']['result'][0]
summaryDetail = dict(sorted(parsed['summaryDetail'].items()))
summaryDetail = dict()
if 'summaryDetail' in parsed:
summaryDetail = dict(sorted(parsed['summaryDetail'].items()))
price = dict(sorted(parsed['price'].items()))
if 'defaultKeyStatistics' in parsed:
@@ -457,6 +468,5 @@ class Yahoo(BaseClient):
return None
def createInstance(ctx):
return Yahoo(ctx)
+1 -1
View File
@@ -14,7 +14,7 @@ import os
cur_dir = os.getcwd()
addin_id = "com.financials.getinfo"
addin_version = "3.7.1"
addin_version = "3.7.2"
addin_displayname = "Financial Market Extension"
addin_publisher_link = "https://github.com/cmallwitz/Financials-Extension"
addin_publisher_name = "The Publisher"
+9 -9
View File
@@ -142,31 +142,31 @@ class Test(unittest.TestCase):
def test_US_futures(self):
# https://markets.ft.com/data/commodities/tearsheet/summary?s=775326843 ESH25:IOM
# https://markets.ft.com/data/commodities/tearsheet/summary?s=823439664 ESH26:IOM - EMINI S&P MAR26
s = financials.getRealtime('775326843', Datacode.NAME.value, 'FT')
s = financials.getRealtime('823439664', Datacode.NAME.value, 'FT')
self.assertEqual(str, type(s), 'test_realtime_US_futures NAME {}'.format(s))
self.assertEqual('EMINI S&P MAR25', s, 'test_US_futures NAME {}'.format(s))
self.assertEqual('EMINI S&P MAR26', s, 'test_US_futures NAME {}'.format(s))
s = financials.getRealtime('775326843', Datacode.LAST_PRICE.value, 'FT')
s = financials.getRealtime('823439664', Datacode.LAST_PRICE.value, 'FT')
self.assertEqual(float, type(s), 'test_US_futures LAST_PRICE {}'.format(s))
# s = financials.getRealtime('775326843', Datacode.OPEN.value, 'FT')
# self.assertEqual(float, type(s), 'test_US_futures OPEN {}'.format(s))
s = financials.getRealtime('775326843', Datacode.VOLUME.value, 'FT')
s = financials.getRealtime('823439664', Datacode.VOLUME.value, 'FT')
self.assertEqual(float, type(s), 'test_US_futures VOLUME {}'.format(s))
s = financials.getRealtime('775326843', Datacode.LOW_52_WEEK.value, 'FT')
s = financials.getRealtime('823439664', Datacode.LOW_52_WEEK.value, 'FT')
self.assertEqual(float, type(s), 'test_US_futures LOW_52_WEEK {}'.format(s))
s = financials.getRealtime('775326843', Datacode.HIGH_52_WEEK.value, 'FT')
s = financials.getRealtime('823439664', Datacode.HIGH_52_WEEK.value, 'FT')
self.assertEqual(float, type(s), 'test_US_futures HIGH_52_WEEK {}'.format(s))
s = financials.getRealtime('775326843', Datacode.CHANGE.value, 'FT')
s = financials.getRealtime('823439664', Datacode.CHANGE.value, 'FT')
self.assertEqual(float, type(s), 'test_US_futures CHANGE {}'.format(s))
s = financials.getRealtime('775326843', Datacode.CHANGE_IN_PERCENT.value, 'FT')
s = financials.getRealtime('823439664', Datacode.CHANGE_IN_PERCENT.value, 'FT')
self.assertEqual(float, type(s), 'test_US_futures CHANGE_IN_PERCENT {}'.format(s))
def test_UK_ETF(self):
+15 -15
View File
@@ -183,53 +183,53 @@ class Test(unittest.TestCase):
# symbol from https://finance.yahoo.com/quote/IBM/options?p=IBM
s = financials.getRealtime('IBM250321C00260000', Datacode.PREV_CLOSE.value, 'YAHOO')
s = financials.getRealtime('IBM260116C00230000', Datacode.PREV_CLOSE.value, 'YAHOO')
self.assertEqual(float, type(s), 'test_realtime_US_options PREV_CLOSE {}'.format(s))
s = financials.getRealtime('IBM250321C00260000', Datacode.NAME.value, 'YAHOO')
s = financials.getRealtime('IBM260116C00230000', Datacode.NAME.value, 'YAHOO')
self.assertEqual(str, type(s), 'test_realtime_US_options NAME {}'.format(s))
self.assertEqual('IBM Mar 2025 260.000 call', s, 'test_realtime_US_options NAME {}'.format(s))
self.assertEqual('IBM Jan 2026 230.000 call', s, 'test_realtime_US_options NAME {}'.format(s))
s = financials.getRealtime('IBM250321C00260000', Datacode.EXPIRY_DATE.value, 'YAHOO')
s = financials.getRealtime('IBM260116C00230000', Datacode.EXPIRY_DATE.value, 'YAHOO')
self.assertEqual(str, type(s), 'test_realtime_US_options EXPIRY_DATE {}'.format(s))
self.assertTrue(testutils.is_date(s), 'test_realtime_US_options EXPIRY_DATE {}'.format(s))
self.assertEqual("2025-03-21", s, 'test_realtime_US_options EXPIRY_DATE {}'.format(s))
self.assertEqual("2026-01-16", s, 'test_realtime_US_options EXPIRY_DATE {}'.format(s))
s = financials.getRealtime('IBM250321C00260000', Datacode.LAST_PRICE.value, 'YAHOO')
s = financials.getRealtime('IBM260116C00230000', Datacode.LAST_PRICE.value, 'YAHOO')
self.assertEqual(float, type(s), 'test_realtime_US_options LAST_PRICE {}'.format(s))
s = financials.getRealtime('IBM250321C00260000', Datacode.OPEN.value, 'YAHOO')
s = financials.getRealtime('IBM260116C00230000', Datacode.OPEN.value, 'YAHOO')
self.assertEqual(float, type(s), 'test_realtime_US_options OPEN {}'.format(s))
s = financials.getRealtime('IBM250321C00260000', Datacode.VOLUME.value, 'YAHOO')
s = financials.getRealtime('IBM260116C00230000', Datacode.VOLUME.value, 'YAHOO')
self.assertEqual(float, type(s), 'test_realtime_US_options VOLUME {}'.format(s))
s = financials.getRealtime('IBM250321C00260000', Datacode.BID.value, 'YAHOO')
s = financials.getRealtime('IBM260116C00230000', Datacode.BID.value, 'YAHOO')
self.assertEqual(float, type(s), 'test_realtime_US_options BID {}'.format(s))
s = financials.getRealtime('IBM250321C00260000', Datacode.ASK.value, 'YAHOO')
s = financials.getRealtime('IBM260116C00230000', Datacode.ASK.value, 'YAHOO')
self.assertEqual(float, type(s), 'test_realtime_US_options ASK {}'.format(s))
s = financials.getRealtime('IBM250321C00260000', Datacode.PAYOUT_RATIO.value, 'YAHOO')
s = financials.getRealtime('IBM260116C00230000', Datacode.PAYOUT_RATIO.value, 'YAHOO')
self.assertIsNone(s, 'test_realtime_US_options PAYOUT_RATIO {}'.format(s))
s = financials.getRealtime('IBM250117C00165000', Datacode.SECTOR.value, 'YAHOO')
s = financials.getRealtime('IBM260116C00230000', Datacode.SECTOR.value, 'YAHOO')
self.assertIsNone(s, 'test_realtime_US_options SECTOR {}'.format(s))
def test_realtime_US_futures(self):
s = financials.getRealtime('ES=F', Datacode.NAME.value, 'YAHOO')
self.assertEqual(str, type(s), 'test_realtime_US_futures NAME {}'.format(s))
self.assertEqual('E-Mini S&P 500 Mar 25', s, 'test_realtime_US_futures NAME {}'.format(s))
self.assertEqual('E-Mini S&P 500 Jun 25', s, 'test_realtime_US_futures NAME {}'.format(s))
s = financials.getRealtime('ES=F', Datacode.TICKER.value, 'YAHOO')
self.assertEqual(str, type(s), 'test_realtime_US_futures TICKER {}'.format(s))
self.assertEqual('ESH25.CME', s, 'test_realtime_US_futures TICKER {}'.format(s))
self.assertEqual('ESM25.CME', s, 'test_realtime_US_futures TICKER {}'.format(s))
s = financials.getRealtime('ES=F', Datacode.SETTLEMENT_DATE.value, 'YAHOO')
self.assertEqual(str, type(s), 'test_realtime_US_futures SETTLEMENT_DATE {}'.format(s))
self.assertTrue(testutils.is_date(s), 'test_realtime_US_futures SETTLEMENT_DATE {}'.format(s))
self.assertEqual("2025-03-21", s, 'test_realtime_US_futures SETTLEMENT_DATE {}'.format(s))
self.assertEqual("2025-06-20", s, 'test_realtime_US_futures SETTLEMENT_DATE {}'.format(s))
s = financials.getRealtime('ES=F', Datacode.LAST_PRICE.value, 'YAHOO')
self.assertEqual(float, type(s), 'test_realtime_US_futures LAST_PRICE {}'.format(s))