mmnode-ticker: get historical financial data from Yahoo Finance
This commit is contained in:
parent
545bc044c6
commit
af7c14fe36
5 changed files with 47 additions and 4 deletions
|
|
@ -48,6 +48,7 @@ class DataSource:
|
|||
'cc': 'coinpaprika'
|
||||
}, {
|
||||
'fi': 'yahoospot',
|
||||
'hi': 'yahoohist',
|
||||
}
|
||||
]
|
||||
|
||||
|
|
@ -248,7 +249,9 @@ class DataSource:
|
|||
'symbol': sym.upper(),
|
||||
'price_usd': price_usd,
|
||||
'price_btc': price_usd / btcusd,
|
||||
'percent_change_7d': None,
|
||||
'percent_change_1y': data['pct_chg_1y'],
|
||||
'percent_change_30d': data['pct_chg_4wks'],
|
||||
'percent_change_7d': data['pct_chg_1wk'],
|
||||
'percent_change_24h': data['regularMarketChangePercent']['raw'] * 100,
|
||||
'last_updated': data['regularMarketTime'],
|
||||
}
|
||||
|
|
@ -272,6 +275,7 @@ class DataSource:
|
|||
|
||||
kwargs = {
|
||||
'formatted': True,
|
||||
'asynchronous': True,
|
||||
'proxies': { 'https': cfg.proxy2 },
|
||||
}
|
||||
|
||||
|
|
@ -297,6 +301,33 @@ class DataSource:
|
|||
id = s.lower(),
|
||||
source = 'fi' )
|
||||
|
||||
class yahoohist(yahoospot):
|
||||
|
||||
json_fn_basename = 'ticker-finance-history.json'
|
||||
data_desc = 'historical financial data'
|
||||
net_data_type = 'json'
|
||||
period = '1y'
|
||||
interval = '1wk'
|
||||
|
||||
def process_network_data(self,ticker):
|
||||
return ticker.history(
|
||||
period = self.period,
|
||||
interval = self.interval).to_json(orient='index')
|
||||
|
||||
def postprocess_data(self,data):
|
||||
def gen():
|
||||
keys = set()
|
||||
for key,val in data.items():
|
||||
if m := re.match(r"\('(.*?)', datetime\.date\((.*)\)\)$",key):
|
||||
date = '{}-{:>02}-{:>02}'.format(*m[2].split(', '))
|
||||
if (sym := m[1]) in keys:
|
||||
d[date] = val
|
||||
else:
|
||||
keys.add(sym)
|
||||
d = {date:val}
|
||||
yield (sym,d)
|
||||
return dict(gen())
|
||||
|
||||
def assets_list_gen(cfg_in):
|
||||
for k,v in cfg_in.cfg['assets'].items():
|
||||
yield ''
|
||||
|
|
@ -378,6 +409,16 @@ def gen_data(data):
|
|||
if id in wants['id']:
|
||||
if id in found['id']:
|
||||
die(1,dup_sym_errmsg(id))
|
||||
if m := data['hi'].get(k):
|
||||
spot = v['regularMarketPrice']['raw']
|
||||
hist = tuple(m.values())
|
||||
v['pct_chg_1wk'], v['pct_chg_4wks'], v['pct_chg_1y'] = (
|
||||
(spot / hist[-2]['close'] - 1) * 100,
|
||||
(spot / hist[-5]['close'] - 1) * 100, # 4 weeks ≈ 1 month
|
||||
(spot / hist[0]['close'] - 1) * 100,
|
||||
)
|
||||
else:
|
||||
v['pct_chg_1wk'] = v['pct_chg_4wks'] = v['pct_chg_1y'] = None
|
||||
yield ( id, conv_func(id,v,btcusd) )
|
||||
found['id'].add(id)
|
||||
wants['id'].remove(id)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
3.2.dev3
|
||||
3.2.dev4
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ python_requires = >=3.8
|
|||
include_package_data = True
|
||||
|
||||
install_requires =
|
||||
mmgen>=14.0.dev9
|
||||
mmgen>=14.0.dev11
|
||||
pyyaml
|
||||
yahooquery
|
||||
|
||||
|
|
|
|||
|
|
@ -102,6 +102,7 @@ class CmdTestScripts(CmdTestBase):
|
|||
self.spawn('',msg_only=True)
|
||||
shutil.copy2(os.path.join(refdir,'ticker.json'),self.tmpdir)
|
||||
shutil.copy2(os.path.join(refdir,'ticker-finance.json'),self.tmpdir)
|
||||
shutil.copy2(os.path.join(refdir,'ticker-finance-history.json'),self.tmpdir)
|
||||
shutil.copy2(os.path.join(refdir,'ticker-btc.json'),self.tmpdir)
|
||||
return 'ok'
|
||||
|
||||
|
|
@ -146,7 +147,7 @@ class CmdTestScripts(CmdTestBase):
|
|||
'BITCOIN',
|
||||
r'ETHEREUM 1,659.66 1,559.5846 131,943.14 0.07138094 \+36.41 \+29.99 \+21.42 \+1.82',
|
||||
r'MONERO 158.97 149.3870 12,638.36 0.00683732 \+12.38 \+10.19 \+7.28 \+1.21 2022-08-02 18:25:59',
|
||||
r'S&P 500 4,320.06 4,059.5604 343,444.77 0.18580285 -- -- -- -0.23',
|
||||
r'S&P 500 4,320.06 4,059.5604 343,444.77 0.18580285 -1.71 \+12.93 \+9.05 -0.23',
|
||||
r'INDIAN RUPEE 0.01 0.0118 1.00 0.00000054 -- -- -- --',
|
||||
])
|
||||
|
||||
|
|
|
|||
1
test/ref/ticker/ticker-finance-history.json
Normal file
1
test/ref/ticker/ticker-finance-history.json
Normal file
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue