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(t2 - t1, t3 - t2, t4 - t3, "relative delta =", (abs(obv1 - obv2) * 2 / (obv1 + obv2)).mean().values, "t(talib)/t(this) =", (t2 - t1) / (t3 - t2))
import qnt.data as qndata import qnt.stats as qnstats import qnt.xr_talib as qnxrtalib import xarray as xr import pandas as pd from qnt.stepper import test_strategy import xarray.ufuncs as xrf data = qndata.load_data(min_date="2010-01-01", max_date=None, dims=("time", "field", "asset"), forward_order=True) wma = qnxrtalib.WMA(data.sel(field='close'), 120) sroc = qnxrtalib.ROCP(wma, 60) stoch = qnxrtalib.STOCH(data, 8, 3, 3) k = stoch.sel(field='slowk') d = stoch.sel(field='slowd') data_ext = xr.concat([wma, sroc, k, d], pd.Index(['wma', 'sroc', 'k', 'd'], name='field')) data_ext = xr.concat([data, data_ext], 'field') weights = data.isel(time=0, field=0) weights[:] = 0 def step(data): latest = data.isel(time=-1)
macd_line = fast - slow signal_line = signal_ma(macd_line) hist = macd_line - signal_line return macd_line, signal_line, hist if __name__ == '__main__': from qnt.data import load_data, load_assets, ds from qnt.xr_talib import MACD 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).sel(field="close") t1 = time.time() macd1 = MACD(data, 12, 26, 9) t2 = time.time() macd2_line, macd2_signal, macd2_hist = macd(data, 12, 26, 9) t3 = time.time() macd3 = macd(data.to_pandas(), 12, 26, 9) t4 = time.time() print(t2 - t1, t3 - t2, t4 - t3, "relative delta =", (abs( (macd1.sel(macd='hist') - macd2_hist) * 2 / macd2_hist)).mean().values, "t(talib)/t(this) =", (t2 - t1) / (t3 - t2)) import matplotlib.pyplot as plt
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,
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}) init_data_length = 14 # data length for init assets = load_assets() print(len(assets)) ids = [i['id'] for i in assets] print(ids) data = load_data(assets=ids, min_date='2015-01-01', dims=(ds.TIME, ds.ASSET, ds.FIELD)) # print(data.sel(asset='AMEX:AIRI').dropna('time').to_pandas().to_csv()) output = test_strategy(data, init=init, step=step, init_data_length=init_data_length) write_output(output) # output = output.loc[:'2019-01-05'] # print(len(find_missed_dates(output, data))) pd.set_option('display.max_colwidth', -1)
import qnt.data as qndata # data loading and manipulation import qnt.forward_looking as qnfl # forward looking checking qndata.MAX_DATE_LIMIT = None import datetime data1 = qndata.load_data( min_date="2015-01-01", # max_date="2019-03-04", # You should not limit max_date for final calculations! dims=("time", "field", "asset"), forward_order=True) last_date = datetime.datetime.now().date() last_date = last_date - datetime.timedelta(days=182) qndata.MAX_DATE_LIMIT = last_date data2 = qndata.load_data( min_date="2015-01-01", # max_date="2019-03-04", # You should not limit max_date for final calculations! dims=("time", "field", "asset"), forward_order=True) qndata.MAX_DATE_LIMIT = None print(data1) print(data2) qnfl.check_forward_looking( data2.sel(field='close').where(data2.sel(field='is_liquid') > 0), data1.sel(field='close').where(data1.sel(field='is_liquid') > 0))