def forecast(sym, market, df, dt, insts, conf, calc_sharpe=True): df2 = df.copy() df2 = df2.ix[df2.index <= dt] df2.sprice = df2.sprice / conf['price_divider']["%s_%s" % (sym,market)] carryoffset = insts[(sym,market)]['carryoffset'] res = pd.DataFrame() funcs = get_funcs(df, carryoffset) for x in funcs: res[x] = funcs[x]() res2 = res * pd.Series(conf['forecast_scalars']) res2[res2 < -20.] = -20 res2[res2 > 20.] = 20 res3 = res2 * pd.Series(conf['forecast_weights']) res3['forecast'] = res3.sum(axis=1) res3['sprice'] = df2.sprice #res[['carry','ewmac64_256','ewmac32_128','ewmac16_64']].to_csv("out1.csv") #res2[['carry','ewmac64_256','ewmac32_128','ewmac16_64']].to_csv("out2.csv") #res3[['carry','ewmac64_256','ewmac32_128','ewmac16_64','forecast','sprice']].to_csv("out3.csv") #res3.to_csv("out3.csv") sharpe = None; tval = None; pval = None if calc_sharpe: sharpe,tval,pval = util.sharpe(res3.sprice, res3.forecast) return res3.forecast, sharpe, tval, pval
def test_returns_sharpe_skew(): import util, zipfile, pandas as pd with zipfile.ZipFile("../alg/legacycsv.zip", "r") as z: df = pd.read_csv(z.open("EDOLLAR_price.csv"), index_col=0, parse_dates=True) fast_ewma = pd.ewma(df.PRICE, span=32) slow_ewma = pd.ewma(df.PRICE, span=128) raw_ewmac = fast_ewma - slow_ewma vol = util.robust_vol_calc(df.PRICE.diff()) forecast = raw_ewmac / vol sr, tval, pval = util.sharpe(df.PRICE, forecast) assert sr - 0.50 < 0.01 s = util.skew(df.PRICE, forecast) assert s - (-0.57) < 0.01
def test_returns_sharpe_skew(): import util, zipfile, pandas as pd with zipfile.ZipFile('../alg/legacycsv.zip', 'r') as z: df = pd.read_csv(z.open('EDOLLAR_price.csv'), index_col=0, parse_dates=True) fast_ewma = pd.ewma(df.PRICE, span=32) slow_ewma = pd.ewma(df.PRICE, span=128) raw_ewmac = fast_ewma - slow_ewma vol = util.robust_vol_calc(df.PRICE.diff()) forecast = raw_ewmac / vol sr, tval, pval = util.sharpe(df.PRICE, forecast) assert sr - 0.50 < 0.01 s = util.skew(df.PRICE, forecast) assert s - (-0.57) < 0.01