Fully automated futures trading

GAT,

Just to confirm my understanding, you use your two conditioning variables in a very simple way, a value lower than the mean value of the variable indicates one regime, and a value above the mean indicates another regime. Is my understanding correct?

Actually it's the median, but yes.

On the bootstrapping of the Sharpe Ratio distributions, do you simply take the equity curves during each regime and then draw some large number of samples with replacement and calculate the SR for each sample?

Exactly

GAT
 
Rob -

I'm really happy I found this thread. I am still working my way through all 154 pages, along with your book which I bought yesterday.
I'm trying to adapt your teachings to a small account size -- $10k capital to start with (just for this method -- my main and retirement portfolios are spread across various asset classes through equities, ETFs, and mutual funds, this is $ set aside for experimental strategies. Didn't want you to think I'm betting the rent).

I would like to trade futures with this $10k but obviously I wouldn't be able to work with a lot of the larger contract sizes without taking on way too much risk. I'm looking at some of the cheaper/smaller contracts such as minis, do you have any guidelines on what you consider acceptable volatility and volume numbers for an instrument to be a viable option? Is it at all feasible to work with that amount of capital, or am I just spinning my wheels here?

I know I won't be able to trade as diverse a portfolio as you are, but I'm hoping I can find a way to start out with 3 or 4 instruments from different asset classes and get my feet wet with automation.

Thanks for all of the info you've shared, it's fascinating stuff!
 
Rob -

I'm really happy I found this thread. I am still working my way through all 154 pages, along with your book which I bought yesterday.
I'm trying to adapt your teachings to a small account size -- $10k capital to start with (just for this method -- my main and retirement portfolios are spread across various asset classes through equities, ETFs, and mutual funds, this is $ set aside for experimental strategies. Didn't want you to think I'm betting the rent).

I would like to trade futures with this $10k but obviously I wouldn't be able to work with a lot of the larger contract sizes without taking on way too much risk. I'm looking at some of the cheaper/smaller contracts such as minis, do you have any guidelines on what you consider acceptable volatility and volume numbers for an instrument to be a viable option? Is it at all feasible to work with that amount of capital, or am I just spinning my wheels here?

I know I won't be able to trade as diverse a portfolio as you are, but I'm hoping I can find a way to start out with 3 or 4 instruments from different asset classes and get my feet wet with automation.

Thanks for all of the info you've shared, it's fascinating stuff!

Welcome to the party

This blog post is exactly what you need

https://qoppac.blogspot.co.uk/2016/03/diversification-and-small-account-size.html

GAT
 
Hi GAT

Besides your automated future trading system you mentioned to have an asset allocation to cover your daily needs. I was wondering if you are using the asset allocation trader from you first book or more the handcrafting method from your second book? I would be curious to know your choice and more important the reason behind it.

My second question is regarding expected returns / vols / correlation. You mentioned in your second book that you used historical data but adjusted it to get more reasonable numbers. I would be interested if you could share how you draw this conclusion and if there was any quantitative / systematic approach behind it? Do you regularly review this assumptions? Might be interesting for backtesting of strategies as well. Do you adjust there your historical data or leave it as it is?

cheers

c
 
Hi GAT

Besides your automated future trading system you mentioned to have an asset allocation to cover your daily needs. I was wondering if you are using the asset allocation trader from you first book or more the handcrafting method from your second book? I would be curious to know your choice.

My second question is regarding expected returns / vols / correlation. You mentioned in your second book that you used historical data but adjusted it to get more reasonable numbers. I would be interested if you could share how you draw this conclusion and if there was any quantitative / systematic approach behind it? Do you regularly review this assumptions? Might be interesting for backtesting of strategies as well. Do you adjust there your historical data or leave it as it is?

cheers

c

The approaches are pretty much equivalent, really the second book is just an extended explanation of the asset allocating investor in book one.

For my asset allocation I assume all sharpe ratios are equal and use the 'rule of thumb' numbers for vols and correlations that you can find in the appendices. I don't do any formal backtesting of this part of my portfolio.

GAT
 
I followed blog suggestions but my weights for bootstrapping look wrong and different from the blog post on optimising weights with costs...

In general, the faster rules are weighted a lot for cheap markets, I'm not sure what is wrong...

EUROSTX:
carry: 0.112
ewmac16_64: 0.175
ewmac32_128: 0.109
ewmac64_256: 0.143
ewmac8_32: 0.462

GBP:
carry: 0.097
ewmac16_64: 0.088
ewmac32_128: 0.052
ewmac4_16: 0.413
ewmac64_256: 0.126
ewmac8_32: 0.224

SP500:
carry: 0.107
ewmac16_64: 0.092
ewmac32_128: 0.064
ewmac4_16: 0.413
ewmac64_256: 0.119
ewmac8_32: 0.206


forecast_cost_estimates:
use_pooled_costs: False
use_pooled_turnover: True

#
forecast_weight_ewma_span: 125
forecast_weight_estimate:
func: syscore.optimisation.GenericOptimiser
method: bootstrap
pool_gross_returns: True
equalise_gross: False
cost_multiplier: 0.0
apply_cost_weight: True

ceiling_cost_SR: 0.13
frequency: "W"
date_method: "expanding"
rollyears: 20
cleaning: True
equalise_SR: False
ann_target_SR: 0.5
equalise_vols: True
shrinkage_SR: 0.90
shrinkage_corr: 0.50
monte_runs: 100
bootstrap_length: 50
 
Here is the code to quickly replicate

Code:
from matplotlib.pyplot import show
from sysdata.configdata import Config
from systems.basesystem import System

from sysdata.csv.csvfuturesdata import csvFuturesData
from systems.forecasting import Rules
from systems.basesystem import System
from systems.forecast_combine import ForecastCombine
from systems.forecast_scale_cap import ForecastScaleCap
from systems.futures.rawdata import FuturesRawData
from systems.positionsizing import PositionSizing
from systems.portfolio import Portfolios
from systems.account import Account

my_config = Config("systems.provided.futures_chapter15.futuresestimateconfig.yaml")

from systems.basesystem import System
stage_list = [Account(), Portfolios(), PositionSizing(), FuturesRawData(),
              ForecastCombine(), ForecastScaleCap(), Rules(None)]
system = System(stage_list, data=csvFuturesData(), config=my_config)
system.set_logging_level("on")
#system.rules.get_raw_forecast("EDOLLAR", "ewmac32").tail(5)

from systems.forecast_scale_cap import ForecastScaleCap

system.config.forecast_weight_estimate["method"] = "bootstrap"
system.config.instrument_weight_estimate["method"] = "bootstrap"

for instr_code in system.get_instrument_list():   
    rule2weight = system.combForecast.get_forecast_weights(instr_code).iloc[-1].to_dict()
    print(instr_code + " " + str(rule2weight))
 
Here is the code to quickly replicate

Code:
from matplotlib.pyplot import show
from sysdata.configdata import Config
from systems.basesystem import System

from sysdata.csv.csvfuturesdata import csvFuturesData
from systems.forecasting import Rules
from systems.basesystem import System
from systems.forecast_combine import ForecastCombine
from systems.forecast_scale_cap import ForecastScaleCap
from systems.futures.rawdata import FuturesRawData
from systems.positionsizing import PositionSizing
from systems.portfolio import Portfolios
from systems.account import Account

my_config = Config("systems.provided.futures_chapter15.futuresestimateconfig.yaml")

from systems.basesystem import System
stage_list = [Account(), Portfolios(), PositionSizing(), FuturesRawData(),
              ForecastCombine(), ForecastScaleCap(), Rules(None)]
system = System(stage_list, data=csvFuturesData(), config=my_config)
system.set_logging_level("on")
#system.rules.get_raw_forecast("EDOLLAR", "ewmac32").tail(5)

from systems.forecast_scale_cap import ForecastScaleCap

system.config.forecast_weight_estimate["method"] = "bootstrap"
system.config.instrument_weight_estimate["method"] = "bootstrap"

for instr_code in system.get_instrument_list():  
    rule2weight = system.combForecast.get_forecast_weights(instr_code).iloc[-1].to_dict()
    print(instr_code + " " + str(rule2weight))

I currently have a broken build whilst I'm fixing up some refactoring but will look at this when done

GAT
 
Back
Top