Skip to content

Commit 9610c9a

Browse files
committedMar 28, 2023
linter went crazy
1 parent 94e2354 commit 9610c9a

File tree

4 files changed

+90
-85
lines changed

4 files changed

+90
-85
lines changed
 

‎margot/config/__init__.py

+22-20
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55

66
from . import settings
77

8-
CONFIG_FILE = '/etc/margot'
8+
CONFIG_FILE = "./etc/margot"
99

1010

1111
def init():
1212
# logging
13-
logger = logging.getLogger('margot config') # unless worker
13+
logger = logging.getLogger("margot config") # unless worker
1414

1515
# load config
1616
cfg = configparser.ConfigParser()
17-
logger.debug('loading config from {}'.format(CONFIG_FILE))
17+
logger.info("loading config from {}".format(CONFIG_FILE))
1818
cfg.read(CONFIG_FILE)
1919

2020
if len(cfg.sections()):
@@ -23,43 +23,45 @@ def init():
2323
for key, val in cfg.items(section):
2424
getattr(settings, section)[key] = val
2525
else:
26-
logger.warning('config not found at: {}.'.format(CONFIG_FILE))
26+
logger.warning("config not found at: {}.".format(CONFIG_FILE))
2727
return
2828

2929
# find home folder
30-
base_folder = settings.paths.get('base_folder')
30+
base_folder = settings.paths.get("base_folder")
3131
home = Path.home().joinpath(base_folder)
32-
logger.debug('using margot_home {}'.format(home))
32+
logger.debug("using margot_home {}".format(home))
3333

3434
settings.paths = {
3535
"home": home,
36-
"algo_folder": home.joinpath('algos'),
37-
"log_folder": home.joinpath('logs'),
38-
"journal_folder": home.joinpath('journal'),
39-
"venv_folder": home.joinpath('venvs'),
40-
"cache": home.joinpath('cache')
36+
"algo_folder": home.joinpath("algos"),
37+
"log_folder": home.joinpath("logs"),
38+
"journal_folder": home.joinpath("journal"),
39+
"venv_folder": home.joinpath("venvs"),
40+
"cache": home.joinpath("cache"),
4141
}
4242

4343
# create directory structure if it doesn't already exist.
4444
for folder in settings.paths.values():
4545
if not folder.exists():
46-
logger.info('creating new directory {}'.format(folder))
46+
logger.info("creating new directory {}".format(folder))
4747
folder.mkdir()
4848

4949
# look for algos
50-
algo_files = list(settings.paths['algo_folder'].glob('*.cfg'))
51-
logger.info('found {} cfg files in {}'.format(
52-
len(algo_files),
53-
settings.paths['algo_folder']))
50+
algo_files = list(settings.paths["algo_folder"].glob("*.cfg"))
51+
logger.info(
52+
"found {} cfg files in {}".format(
53+
len(algo_files), settings.paths["algo_folder"]
54+
)
55+
)
5456

5557
# create a dict to hold the algo configs (ConfigParser objects)
5658
settings.algos = dict()
5759

5860
for algo_file in algo_files:
59-
logger.debug('parsing {}'.format(algo_file))
61+
logger.debug("parsing {}".format(algo_file))
6062
algo_config = configparser.ConfigParser()
6163
algo_config.read(algo_file)
62-
algo_name = algo_config.get('python', 'file')
64+
algo_name = algo_config.get("python", "file")
6365

6466
settings.algos[algo_name] = dict()
6567

@@ -69,11 +71,11 @@ def init():
6971
for key, val in algo_config.items(section):
7072
settings.algos[algo_name][section][key] = val
7173
else:
72-
logger.warning('config not found at: {}.'.format(CONFIG_FILE))
74+
logger.warning("config not found at: {}.".format(CONFIG_FILE))
7375
return
7476

7577
# lets collect up the os environment variables here too.
76-
if not hasattr(settings, 'env'):
78+
if not hasattr(settings, "env"):
7779
settings.env = dict()
7880

7981
for key in os.environ:

‎margot/data/symbols.py

+20-14
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from inspect import getmembers
22

33
import pandas as pd
4-
from trading_calendars import get_calendar
4+
from exchange_calendars import get_calendar
55

66
from margot.data.columns import BaseColumn
77
from margot.data.features import BaseFeature
@@ -35,25 +35,30 @@ def __init__(self, symbol: str, trading_calendar: str): # noqa: D107
3535
self.trading_calendar = get_calendar(trading_calendar)
3636

3737
self.columns = [
38-
member for member,
39-
ref in getmembers(self, lambda m: isinstance(m, BaseColumn))]
38+
member
39+
for member, ref in getmembers(
40+
self, lambda m: isinstance(m, BaseColumn)
41+
)
42+
]
4043

4144
self.features = [
42-
member for member,
43-
ref in getmembers(self, lambda m: isinstance(m, BaseFeature))]
45+
member
46+
for member, ref in getmembers(
47+
self, lambda m: isinstance(m, BaseFeature)
48+
)
49+
]
4450

4551
self.ratios = [
46-
member for member,
47-
ref in getmembers(self, lambda m: isinstance(m, Ratio))]
52+
member
53+
for member, ref in getmembers(self, lambda m: isinstance(m, Ratio))
54+
]
4855

4956
for col in self.columns:
5057
new_col = getattr(self, col).clone()
5158
setattr(self, col, new_col)
52-
getattr(
53-
self,
54-
col).setup(
55-
symbol=symbol,
56-
trading_calendar=self.trading_calendar)
59+
getattr(self, col).setup(
60+
symbol=symbol, trading_calendar=self.trading_calendar
61+
)
5762

5863
for feature in self.features:
5964
base_series_name = getattr(self, feature).get_column_name()
@@ -68,8 +73,9 @@ def __init__(self, symbol: str, trading_calendar: str): # noqa: D107
6873

6974
def to_dict(self):
7075
elements = self.columns + self.features + self.ratios
71-
return {(self.symbol, elt): getattr(self, elt).series
72-
for elt in elements}
76+
return {
77+
(self.symbol, elt): getattr(self, elt).series for elt in elements
78+
}
7379

7480
def to_pandas(self):
7581
return pd.DataFrame(self.to_dict())

‎margot/tests/test_data.py

+47-50
Original file line numberDiff line numberDiff line change
@@ -3,79 +3,76 @@
33
from margot import finance, cboe, alphavantage as av
44

55

6-
# def test_symbol():
6+
def test_symbol():
7+
class Equity(Symbol):
8+
adjusted_close = av.DailyAdjusted(time_series="adjusted_close")
9+
volume = av.DailyAdjusted(time_series="volume")
710

8-
# class Equity(Symbol):
9-
# adjusted_close = av.DailyAdjusted(
10-
# time_series='adjusted_close')
11-
# volume = av.DailyAdjusted(
12-
# time_series='volume')
11+
simple_returns = finance.SimpleReturns(column="adjusted_close")
12+
log_returns = finance.LogReturns(column="adjusted_close")
13+
realised_vol = finance.RealisedVolatility(
14+
column="log_returns", window=30
15+
)
1316

14-
# simple_returns = finance.SimpleReturns(column='adjusted_close')
15-
# log_returns = finance.LogReturns(column='adjusted_close')
16-
# realised_vol = finance.RealisedVolatility(
17-
# column='log_returns', window=30)
17+
upper_band = finance.UpperBollingerBand(
18+
column="adjusted_close", window=20, width=2.0
19+
)
20+
sma20 = finance.SimpleMovingAverage(column="adjusted_close", window=20)
21+
lower_band = finance.LowerBollingerBand(
22+
column="adjusted_close", window=20, width=2.0
23+
)
1824

19-
# upper_band = finance.UpperBollingerBand(
20-
# column='adjusted_close', window=20, width=2.0)
21-
# sma20 = finance.SimpleMovingAverage(column='adjusted_close', window=20)
22-
# lower_band = finance.LowerBollingerBand(
23-
# column='adjusted_close', window=20, width=2.0)
24-
25-
# env = {'DATA_CACHE': os.path.join(os.getcwd(), 'data')}
26-
# spy = Equity(symbol='SPY', trading_calendar='NYSE')
25+
env = {"DATA_CACHE": os.path.join(os.getcwd(), "data")}
26+
spy = Equity(symbol="SPY", trading_calendar="NYSE")
2727

2828

2929
# def test_frame():
30-
3130
# class Index(Symbol):
32-
# close = cboe.Column(time_series='close')
31+
# close = cboe.Column(time_series="close")
3332

3433
# class VXBasis(MargotDataFrame):
35-
# vixm = Index(symbol='VIX3M', trading_calendar='NYSE')
36-
# vix3m = Index(symbol='VIX', trading_calendar='NYSE')
34+
# vixm = Index(symbol="VIX3M", trading_calendar="NYSE")
35+
# vix3m = Index(symbol="VIX", trading_calendar="NYSE")
3736
# vx_basis = Ratio(
3837
# numerator=vixm.close,
3938
# denominator=vix3m.close,
40-
# label='vx_basis_ratio')
39+
# label="vx_basis_ratio",
40+
# )
4141

4242
# vxbasis = VXBasis()
4343
# vxbasis.to_pandas()
4444
# vxbasis.vx_basis.latest
4545
# vxbasis.vx_basis.to_pandas()
4646

4747

48-
# def test_constructors():
49-
50-
# class Index(Symbol):
51-
# adjusted_close = av.DailyAdjusted(
52-
# time_series='adjusted_close')
53-
54-
# spy = Index(symbol='SPY', trading_calendar='NYSE')
55-
# vtwo = Index(symbol='VTWO', trading_calendar='NYSE')
48+
def test_constructors():
49+
class Index(Symbol):
50+
adjusted_close = av.DailyAdjusted(time_series="adjusted_close")
5651

57-
# assert(
58-
# spy.to_pandas().tail()[
59-
# 'SPY', 'adjusted_close'].sum() != vtwo.to_pandas().tail()[
60-
# 'VTWO', 'adjusted_close'].sum()
61-
# )
52+
spy = Index(symbol="SPY", trading_calendar="NYSE")
53+
vtwo = Index(symbol="VTWO", trading_calendar="NYSE")
6254

55+
assert (
56+
spy.to_pandas().tail()["SPY", "adjusted_close"].sum()
57+
!= vtwo.to_pandas().tail()["VTWO", "adjusted_close"].sum()
58+
)
6359

64-
# def test_finance_features():
6560

66-
# class Index(Symbol):
67-
# adjusted_close = av.DailyAdjusted(
68-
# time_series='adjusted_close')
61+
def test_finance_features():
62+
class Index(Symbol):
63+
adjusted_close = av.DailyAdjusted(time_series="adjusted_close")
6964

70-
# simple_returns = finance.SimpleReturns(column='adjusted_close')
71-
# log_returns = finance.LogReturns(column='adjusted_close')
72-
# real_vol = finance.RealisedVolatility(column='log_returns', window=20)
73-
# sma = finance.SimpleMovingAverage(column='adjusted_close', window=10)
74-
# upper = finance.UpperBollingerBand(
75-
# column='adjusted_close', window=20, width=2.0)
76-
# lower = finance.LowerBollingerBand(
77-
# column='adjusted_close', window=20, width=2.0)
65+
simple_returns = finance.SimpleReturns(column="adjusted_close")
66+
log_returns = finance.LogReturns(column="adjusted_close")
67+
real_vol = finance.RealisedVolatility(column="log_returns", window=20)
68+
sma = finance.SimpleMovingAverage(column="adjusted_close", window=10)
69+
upper = finance.UpperBollingerBand(
70+
column="adjusted_close", window=20, width=2.0
71+
)
72+
lower = finance.LowerBollingerBand(
73+
column="adjusted_close", window=20, width=2.0
74+
)
7875

79-
# spy = Index(symbol='SPY', trading_calendar='NYSE')
76+
spy = Index(symbol="SPY", trading_calendar="NYSE")
8077

81-
# spy.to_pandas()
78+
spy.to_pandas()

‎requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ sphinx-autobuild
1414
recommonmark
1515
sphinx-rtd-theme
1616

17-
trading-calendars
17+
exchange_calendars
1818
pyfolio
1919
pytz
2020

0 commit comments

Comments
 (0)
Please sign in to comment.