Ejemplo n.º 1
0
def calc_ewmac_forecast(price, Lfast, Lslow=None, usescalar=True):
    
    
    """
    Calculate the ewmac trading fule forecast, given a price and EWMA speeds Lfast, Lslow and vol_lookback
    
    Assumes that 'price' is daily data
    """
    ## price: This is the stitched price series
    ## We can't use the price of the contract we're trading, or the volatility will be jumpy
    ## And we'll miss out on the rolldown. See http://qoppac.blogspot.co.uk/2015/05/systems-building-futures-rolling.html

    if Lslow is None:
        Lslow=4*Lfast
    
    ## We don't need to calculate the decay parameter, just use the span directly
    
    fast_ewma=pd.ewma(price, span=Lfast)
    slow_ewma=pd.ewma(price, span=Lslow)
    raw_ewmac=fast_ewma - slow_ewma
    
    ## volatility adjustment
    stdev_returns=volatility(price)    
    vol_adj_ewmac=raw_ewmac/stdev_returns
    
    ## scaling adjustment
    if usescalar:
        f_scalar=ewmac_forecast_scalar(Lfast, Lslow)
        forecast=vol_adj_ewmac*f_scalar
    else:
        forecast=vol_adj_ewmac
    
    cap_forecast=cap_series(forecast, capmin=-20.0,capmax=20.0)
    
    return cap_forecast
Ejemplo n.º 2
0
def calc_ewmac_forecast(price, Lfast, Lslow=None, usescalar=True):
    """
    Calculate the ewmac trading fule forecast, given a price and EWMA speeds Lfast, Lslow and vol_lookback
    
    Assumes that 'price' is daily data
    """
    ## price: This is the stitched price series
    ## We can't use the price of the contract we're trading, or the volatility will be jumpy
    ## And we'll miss out on the rolldown. See http://qoppac.blogspot.co.uk/2015/05/systems-building-futures-rolling.html

    if Lslow is None:
        Lslow = 4 * Lfast

    ## We don't need to calculate the decay parameter, just use the span directly

    fast_ewma = pd.ewma(price, span=Lfast)
    slow_ewma = pd.ewma(price, span=Lslow)
    raw_ewmac = fast_ewma - slow_ewma

    ## volatility adjustment
    stdev_returns = volatility(price)
    vol_adj_ewmac = raw_ewmac / stdev_returns

    ## scaling adjustment
    if usescalar:
        f_scalar = ewmac_forecast_scalar(Lfast, Lslow)
        forecast = vol_adj_ewmac * f_scalar
    else:
        forecast = vol_adj_ewmac

    cap_forecast = cap_series(forecast, capmin=-20.0, capmax=20.0)

    return cap_forecast
Ejemplo n.º 3
0
data_to_plot = pd.concat([price, fast_ewma, slow_ewma], axis=1)
data_to_plot.columns = ['Price', 'Fast', 'Slow']

data_to_plot[d1:d2].plot()
plt.show()

raw_ewmac[d1:d2].plot()
plt.title("Raw EWMAC")
plt.show()

## volatility adjustment
stdev_returns = pd.ewmstd(price - price.shift(1), span=vol_lookback)
vol_adj_ewmac = raw_ewmac / stdev_returns

vol_adj_ewmac[d1:d2].plot()
plt.title("Vol adjusted")
plt.show()

## scaling adjustment
f_scalar = ewmac_forecast_scalar(Lfast, Lslow)

forecast = vol_adj_ewmac * f_scalar

cap_forecast = cap_series(forecast, capmin=-20.0, capmax=20.0)

data_to_plot = pd.concat([forecast, cap_forecast], axis=1)
data_to_plot.columns = ['Scaled Forecast', 'Capped forecast']

data_to_plot[d1:d2].plot()
plt.show()
Ejemplo n.º 4
0
plt.show()

raw_ewmac[d1:d2].plot()
plt.title("Raw EWMAC")
plt.show()

## volatility adjustment
stdev_returns=pd.ewmstd(price - price.shift(1), span=vol_lookback)    
vol_adj_ewmac=raw_ewmac/stdev_returns

vol_adj_ewmac[d1:d2].plot()
plt.title("Vol adjusted")
plt.show()

## scaling adjustment
f_scalar=ewmac_forecast_scalar(Lfast, Lslow)

forecast=vol_adj_ewmac*f_scalar


cap_forecast=cap_series(forecast, capmin=-20.0,capmax=20.0)

data_to_plot=pd.concat([forecast, cap_forecast], axis=1)
data_to_plot.columns=['Scaled Forecast', 'Capped forecast']

data_to_plot[d1:d2].plot()
plt.show()