Exemplo n.º 1
0

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))
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
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,
Exemplo n.º 5
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})


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)
Exemplo n.º 6
0
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))