Forum Replies Created
@StefanM if you use the CASH strategy, it’s ultra-low volatility will act like a “lightning rod”. Try setting the volatility multiplier for CASH to about 25x in the Strategy Manager and observe the results. I’ve found using extreme settings like that causes instability in QT, so the cash stops in S3 are instead implemented using the volatility and cash Sharpe limits. I apply those limits only when they benefit the overall returns or reduce volatility/drawdowns, and only after the initial strategy is optimized. To answer your other question about holding stocks through earnings, yes, you can just manually inspect the list of stocks and check their recent performance. It’s perfectly fine to substitute a highly-ranked symbol for another. I sometimes choose alternatives just so I’m not all-in on tech stocks for example, or so I can avoid stocks with freaky looking charts.
Overall, S3 is just a typical combination of hedge and risk sub-strategies, with a dash of Nasdaq-100 top 4 to boost returns.
The hedge is constructed mostly of a mix of GLD and TLT, along with a few other symbols. I’ve been back and forth on using the inverse ETFs, but I’ve decided they are useful because they level out the hedge over time. Even if treasuries and gold are going down, the hedging sub-strategy is still able to move up. The inverse ETFs are used sparingly, because I don’t like their decay, but there are some periods of time when hedges are misbehaving when they prove useful.
The risk sub-strategies are mostly based upon QQQ and SPLV, although I use a few other alternate symbols that have good long-term behavior. I hedge each individual risk symbol, apply the cash stops when they’re useful, then rotate between them using the SRE method. I’m not really inclined to share the .ini files because of the amount of work I’ve done on it. To get similar returns, you could just use the Maximum Sharpe LI strategy. Of course, I prefer my own QT strategy, which sits at around Sharpe ratio 2.3 over long and short timeframes, consistently returning about 16%. It plows straight through the 2000 and 2009 markets with solid returns. It’s a thing of beauty.
If you have a higher risk appetite, just use any degree of leverage you’re comfortable with in your investment account.
I’ll try to post some more info soon, not trying to ignore your comments.09/04/2018 at 9:47 pm in reply to: Using synthetic data or external data sources in QuantTrader #54889
FYI I’ve tried many times to get synthetic pricing to work and it just doesn’t. It’s one of those things that really could use some attention in the program, just my 2 cents. I gave up again tonight =(09/04/2018 at 8:33 pm in reply to: Using synthetic data or external data sources in QuantTrader #54887
I just added UGLD_SYN to the collection.
Just add recent data to the others to bring them up-to-date. I’m not having the best of luck getting Quant Trader to recognize synthetic prices, it’s very sporadic. It would be nice if there were a built-in feature that would allow synthetic prices for leveraged funds based upon the underlying – i.e. allow a checkbox in symbol manager “use synthetic price history” that would download all available actual data, and then designate a related symbol – say GLD for UGLD, and a leverage multiplier (3x), and QT could create 2 files, one would be _UGLD.csv, the other would be _UGLD_SYN.csv. Both files would be used to construct backtests for any strategy that used those symbols, but only if the portfolio were configured in Portfolio Manager to “use synthetic prices when available”.
Another approach would be, instead of using stops and other calculations, a simple “phase transition” that allows one strategy to operate during say VIX < 20 markets, and another to immediately take over any time a simple parameter like that occurs, so we essentially have a simple rule around volatility that forces a “gear shift”. We would only really want to evaluate the gear shift strategy’s outcomes during the times when it is in force.
Of course this can also be done manually, by simply creating two different strategies. I would stick with a monthly reallocation on the primary, but perhaps switch to a weekly reallocation on the high vol strategy. It would still not respond to a single-day event, but it wouldn’t let you sit on accumulating losses for most of a month while you get slaughtered, because neither treasuries nor gold are currently behaving as effective hedges to market risk. They are only dropping “less quickly”. In this case, the only remaining “hedge” is a zero-loss asset, cash. So, we need a better way to introduce cash as an explicit stop-loss in cases like the current market.
I just read an article that compares the current environment to the 1987 and 1994 events, when there is a significant market correction, but bond yields are actually increasing, and therefore bond prices are also dropping. This is a very rare combination that isn’t accounted for in any of the QT models, because it breaks all of the assumptions the hedging approach is based upon. If ZIV were to be closed by Credit Suisse in the same way they’ve now closed XIV, the typical expectation would be for TMF to make up some or much of the loss. That has completely broken down.
If a VIX spike to 30 was sufficient to completely crash XIV, I am not certain ZIV is really a suitable investment vehicle at all at this point. We might be much better off focusing on SPXL/TQQQ or Nasdaq strategies. Unfortunately, the triple-leveraged growth strategies are amplifying market losses well beyond the actual correction, because the hedges in them have completely failed at the same time.
Therefore, I need an alternate strategy that takes over and uses a nicely constructed set of rules that prefer cash and reallocate on a perhaps weekly basis. It would avoid using explicit stops, but it would require some programming effort in QT to reflect as a single parent strategy with an overall performance value.
I just mean if we could model the existence of trailing stops that would trigger at any time, rather than only at the reallocation frequency. If there were “triggers” that we could design around VIX spikes or non-negative correlations between the assets we define as “hedges” (TLT/TMF/GLD/UGLD) and those we define as “risk” (ZIV/QQQ/TQQQ/SPY/SPXL/Nasdaq100), then we could test the effect they might have. They could trigger a move to cash until the next reallocation on whichever assets they are configured. In the trading platform, they would be implemented as one-triggers-other sales using trailing stops or other conditional orders.
I still think there should be provision for a ruleset in QT that would allow us to experiment with intra-allocation trailing stops based upon VIX and movements in the hedge/risk designated assets. At least we could test it. I’ve struggled for quite a while to find a way to create a “cash out” rule, but there are really only 2 settings in QT, “Volatility limit” and “Cash Sharpe Limit”.
Alternatively, maybe it would be a good idea to have a weekly reallocating and much more conservative strategy, but that would only be considered if volatility in the main risk strategy is over some limit.
Ok, so the premise of the whole momentum trading system is that there are asset classes that are anti-correlated over a monthly timeframe. That seems to work, except when it doesn’t, like in the last week or two. Now, what if the QT software had a way to test for the trailing correlations between your hedging assets. So, you designate certain investments as your hedges, and others as your risk assets, and the software computes their lookback correlation. When the correlation has been reliably and sufficiently negative, then allocate as expected. However, when the correlation is insufficient, below whatever threshold, then we substitute go ahead and allocate according to the normal rules, but we also add a cash stop. The rule would be enabled when both the hedge and the asset move downwards within a single monthly investment cycle by more than whatever threshold for pain we set. Is that a bad idea, or a good idea?08/23/2017 at 10:37 am in reply to: Using synthetic data or external data sources in QuantTrader #44825
I have now also added SPXL and TQQQ synthetic data, generated from SPY and QQQ, respectively. I looked at the relationship of the two over some time and they do seem to track pretty closely to 3x, so I used that value instead of 2.8x as in the TMF calculations. I’ll keep adding more synthetic data as I try to do longer-term analysis of other strategies. For now, I have:
and these 4 enable analysis back to 2004 for the main growth driver strategies MYRS, Nasdaq 100, UIS 3x, and perhaps a few others.08/22/2017 at 5:02 pm in reply to: Using synthetic data or external data sources in QuantTrader #44808
I just tested these synthetic price files in the latest version of QT and they work fine. The ZIV data is from Alex’s file above, just merged with up-to-date actuals. The TMF data is computed from -2.8x daily TLT returns starting from 4/15/2009.
I put simple test data into Excel that compounds at a consistent rate, and the scatter plot allows for an exponential curve to be fit to the line, and includes an R2 calculation. I had thought would only calculate for a straight line, but it looks like it can just as easily do it for a curve or even a polynomial. So, you wouldn’t need to use a logarithmic scale to plot your data, you can calculate R2 directly from “curved” data. Just thought it might be worth mentioning.
This may not be the correct forum to propose this, but do you think it would be worthwhile exploring a different kind of optimization? I think it would be very interesting to minimize the “time to recovery” as an alternative optimization strategy. In other words, any time the strategy achieves a “high water mark” in value, we measure the amount of time it requires for the strategy to exceed that level, regardless of volatility. Rather than minimizing volatility per se, we are minimizing the time to recovery for the strategy or portfolio. As soon as the previous high water mark is surpassed, a new one is set. The optimization would search for the lowest average TTR value in days.
I have no idea if it would produce good results, but it would most definitely be an interesting test. Thoughts?
I actually managed to get it to run on the entire list of S&P 500 stocks several times before it became unstable. It takes a while. I’m not 100% sure the program is multi-threaded and using all 4 CPU cores, if it isn’t then that would help, along with using a 64-bit architecture, so larger chunks of data could be processed in memory.
You really only need the few new symbols from [StockItems], and then copy/paste the updated $Nasdaq100 list from [StockLists] in the file I attached above over the current entry in your .ini file.
I’ve updated the Nasdaq 100 stock list from the Nasdaq website as of today.
All of the legacy symbols have been left in the stock list, and new symbols have been added. The attached text file includes only the necessary .ini file line items from the [StockItems] and [StockLists] tags.