Skip to content

Commit

Permalink
Merge pull request #45 from stephenhky/develop
Browse files Browse the repository at this point in the history
Added a symbol list retrieval script
  • Loading branch information
stephenhky committed Jan 18, 2024
2 parents 85d423d + 1605a0a commit 6640b63
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 12 deletions.
49 changes: 49 additions & 0 deletions script/retrieve_stock_symbols
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/usr/bin/env python

from argparse import ArgumentParser
import os

import pandas as pd
from finsim.data.finnhub import FinnHubStockReader


def get_argparser():
argparser = ArgumentParser(description='Retrieve stock symbols from Finnhub')
argparser.add_argument('outputjson', help='path of the stock symbols (*.json)')
argparser.add_argument('--finnhubtokenpath', help='path of Finnhub tokens')
argparser.add_argument('--useenvtoken', help='Use the environment variable FINNHUBTOKEN as the tokens')
argparser.add_argument('--shorten', default=False, action='store_true', help='shorten list of symbols')
return argparser


if __name__ == '__main__':
# parsing argument
args = get_argparser().parse_args()

# check if the output directory exists
dirname = os.path.dirname(args.outputjson)
if not os.path.isdir(dirname):
raise FileNotFoundError('Directory {} does not exist!'.format(dirname))

# get Finnhub tokens
if args.useenvtoken:
finnhub_token = os.getenv('FINNHUBTOKEN')
if finnhub_token is None:
raise ValueError('Finnhub tokens not found in the environment variable $FINNHUBTOKEN.')
else:
finnhub_token = open('finnhub.tokens', 'r').read().strip()

# initialize FinnHub reader
finnreader = FinnHubStockReader(finnhub_token)

# grab symbols
allsym = finnreader.get_all_US_symbols()
allsymdf = pd.DataFrame(allsym)

if args.shorten:
filtered_symdf = allsymdf[allsymdf['mic'].isin(['XNAS', 'XNYS', 'ARCX'])]
filtered_symdf = filtered_symdf[~filtered_symdf['type'].isin(['PUBLIC'])]
filtered_symdf = filtered_symdf[~filtered_symdf['symbol'].str.contains('\.')]
filtered_symdf.to_json(args.outputjson, orient='records')
else:
allsymdf.to_json(args.outputjson, orient='records')
19 changes: 7 additions & 12 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@

from setuptools import setup, Extension
from setuptools import setup
import numpy as np
from Cython.Build import cythonize

# from Cython.Build import cythonize
# ext_modules = cythonize(['finsim/portfolio/optimize/native/cythonmetrics.pyx',
# 'finsim/estimate/native/cythonfit.pyx',
# 'finsim/estimate/native/cythonrisk.pyx'])
ext_modules = [
Extension('finsim.portfolio.optimize.native.cythonmetrics', ['finsim/portfolio/optimize/native/cythonmetrics.c']),
Extension('finsim.estimate.native.cythonfit', [ 'finsim/estimate/native/cythonfit.c']),
Extension('finsim.estimate.native.cythonrisk', ['finsim/estimate/native/cythonrisk.c'])
]
ext_modules = cythonize(['finsim/portfolio/optimize/native/cythonmetrics.pyx',
'finsim/estimate/native/cythonfit.pyx',
'finsim/estimate/native/cythonrisk.pyx'])


def readme():
Expand All @@ -30,7 +25,7 @@ def package_description():

setup(
name='finsim',
version="0.11.1",
version="0.11.2a1",
description="Financial simulation and inference",
long_description=package_description(),
long_description_content_type='text/markdown',
Expand Down Expand Up @@ -70,7 +65,7 @@ def package_description():
tests_require=[
'unittest2'
],
# scripts=[],
scripts=['script/retrieve_stock_symbols'],
include_package_data=True,
ext_modules=ext_modules,
test_suite="test",
Expand Down

0 comments on commit 6640b63

Please sign in to comment.