import qnt.data as qndata import qnt.stats as qnstats import qnt.forward_looking as qnfl import time from qnt.neutralization import neutralize import datetime as dt data = qndata.load_data(tail=dt.timedelta(days=365 * 3), forward_order=True, dims=("time", "field", "asset")) assets = qndata.load_assets() print(qnstats.calc_avg_points_per_year(data)) output = data.sel(field=qndata.f.IS_LIQUID) output = qndata.sort_and_crop_output(output) output = neutralize(output, assets, 'industry') output *= 1 print(output.to_pandas()) print(output[0, 0].item()) print(qnstats.calc_slippage(data).to_pandas()[13:]) stat2 = qnstats.calc_stat(data, output, slippage_factor=0.05, per_asset=True) # ss = qnstats.calc_stat(data, output, max_periods=252 * 3, slippage_factor=0.05, per_asset=True) print( stat2.sel(field=[ # qnstats.stf.RELATIVE_RETURN,
v = v * volume s = np.nancumsum(v) s[np.isnan(v)] = np.nan return s def obv(close: nda.NdType, volume: nda.NdType) -> nda.NdType: return nda.nd_universal_adapter(obv_np_1d, (close, volume), ()) if __name__ == '__main__': from qnt.data import load_data, load_assets, ds from qnt.xr_talib import OBV import time assets = load_assets() ids = [i['id'] for i in assets[0:2000]] data = load_data(assets=ids, dims=(ds.TIME, ds.ASSET, ds.FIELD), forward_order=True) t1 = time.time() obv1 = OBV(data) t2 = time.time() obv2 = obv(data.sel(field='close'), data.sel(field='vol')) t3 = time.time() obv3 = obv( data.sel(field='close').to_pandas(), data.sel(field='vol').to_pandas()) t4 = time.time()
print("init") def step(self, data): assets = data.sel(**{ds.FIELD: f.OPEN}) assets = assets.where( data.sel(**{ds.FIELD: f.IS_LIQUID}) > 0) # liquidity check assets = assets.isel(**{ds.TIME: 0}) assets = assets.dropna(ds.ASSET) assets = assets.coords[ds.ASSET] pct = 1. / max(len(assets), 1) return xr.DataArray(np.full([len(assets)], pct, dtype=np.float64), dims=[ds.ASSET], coords={ds.ASSET: assets}) assets = load_assets(min_date='2018-01-01') print(len(assets)) ids = ["NASDAQ:AAPL", "NASDAQ:AMZN", "NASDAQ:FB", "NASDAQ:GOOG"] data = load_data(assets=ids, min_date='2015-01-01', dims=(ds.TIME, ds.ASSET, ds.FIELD)) output = test_strategy(data, SimpleStrategy()) write_output(output) RRo = calc_relative_return(data, output) print(RRo.mean()) RRn = calc_relative_return(data, output)