Important: There is no guarantee that our strategies will have the same performance in the future. We use backtests to compare historical strategy performance. Backtests are based on historical data, not real-time data so the results we share are hypothetical, not real. There are no guarantees that this performance will continue in the future. Trading futures is extremely risky. If you trade futures live, be prepared to lose your entire account. We recommend using our strategies in simulated trading until you/we find the holy grail of trade strategy. To see the most recent backtest of all ATS strategies, along with strategy description links, click here.
When we first started, I published 10 strategies that barely had a profit factor greater than 1.05. Today, we have 75+ strategies, and the average profit factor is well over 2.00.
For an overview of progress, you can review the updates below.
I’ll provide the next quarterly update in January.
A common question I receive is: Why is a simulated live forward test better than a backtest?
No historical data set is ever going to be better than live data. When you use historical data you lose data; literally. The further back you go, the more data you lose. It takes a great deal of resources to simulate reality, even one as simple as the NQ market, but that’s where we are in the hunt. Historical data is also prone to gaps. There are arguments to be had for the use of raw or refined data; the former comes straight from the exchange, while the latter is tampered with, but closer to reality. I lean toward the latter argument, but this is a moot point if you’re using live data.
So the best approach is to use the backtest to point you in the right direction and the forward test to see if that direction is right. The glorious thing is that you don’t have to fund an account to do so—you can use a simulated account on live data until you’ve found that perfect strategy (or strategies). What I’m about to share with you is how I created my own forward test.
How To Create Your Own Forward Test
Before I get into how I created my forward test, I want to provide a quick overview of my experience with creating and running a forward test over the last year.
I started the forward test in January of 2023 and it continues today. Clearly, it has become my favorite tool for learning more about how automated strategies operate. Just like in permaculture, you have to observe something before you can understand it.
I’ve observed many things including:
which strategies are correlated with one another
which strategies are on a hot run and which are running cold
which instruments are in hot markets and which are in cold or stagnant markets
which strategies are more robust that others
which strategies trade well in certain markets
You may say that you can test any of these by looking at the backtest, which is true. The issue is that the data you’re using in the backtest is of a lower quality than live data; data is lost in translation, and the result is inaccurate backtests and lost account funds. If you ask me, this is why so many people lose money—they go from backtest to real money without a forward test.
Not all backtests are inaccurate. In fact, my goal over the last year and half has been to lean into those elements in strategies that are more efficient and/or easier for the simulation to handle. The hope being that it will produce more accurate backtests.
Now let’s get into the steps I used to set up my own forward test using Ninjatrader.
Find a virtual server located as close to the exchange where the asset you’re trading is located. I know some of you don’t feel this step is necessary. What I have found is that it is very difficult to create an environment that you can count on to run 24/7. I can’t tell you how many times I’ve created a portfolio of strategies only to have some type of system issue that requires me to rebuild the portfolio. It is a truly humbling experience. The virtual server mitigates this risk. I use ChartVPS—they are great. I’ve used others that weren’t. My favorite feature that has saved me countless hours is the back-up feature. Every day, ChartVPS backs up the server. If my machine crashes, I can use the latest back-up. It can be done manually or with help. Support is very quick. It’s like having your very own back office.
You want to download and run NT8 from within this virtual server. The best virtual server is one that is never down (read: zero downtime). Even more important is that they respond to you within 5 minutes if you do have an issue.
If you trade on your own account, you might need to purchase a second account from your brokerage so you can run both accounts simultaneously without one instance bumping the other out. You may also need to buy another data package. I use NT brokerage. If you contact NT brokerage, they will walk you through the process.
You also need to be mindful of RAM. Your provider should have a way for you to monitor your resource usage in real-time. Look at peak hours to know your minimum requirements.
You will need to create a backup file of your current settings and import it onto the new server. Then, copy and paste the backup file onto the new server to import. Here's how to copy your existing NinjaTrader workspace, charts, indicators, etc. NinjaTrader Documentation for exporting a backup: https://ninjatrader.com/support/helpGuides/nt8/creating_a_backup_archive.htm
If the strategies aren’t included in the backup file, you will need to import our (or your own) strategies into NT8 on the virtual server. Ninjatrader download instructions are listed below for downloading our strategies from the Strategy Description:
Click on the link within the strategy description to download the file from G drive.
Download the Strategy to your desktop, keep them in the compressed .zip file.
From the NinjaTrader Control Center window, select the menu Tools > Import > NinjaScript Add-On
Select the downloaded file from your desktop
After you find a virtual server, download NT8, and import strategies, but before you connect to your account to set the strategy up, you will need to create simulated accounts to run the strategy on. This can be done when you are connected, but you will need to disconnect and then reconnect before the accounts can be used.
All accounts come with one simulated account preset called SIM, but you can create as many as you want. If you click the “create a simulated account” link above, it will take you to a quick tutorial on creating new simulated accounts.
I like for accounts to have the same name as the strategy it will be run on, i.e. SimAccount2_NQ_50min_5_30_SLTP. You want to get as specific as possible to the variation. You can also set starting account size to the cumulative max drawdown or max MAE (whichever is higher) of the strategy if you’re running for greater accuracy.
Now you can connect and start running the strategy. If you’ve never run a strategy before, NT8 provides a great overview here. Even if you’ve run a strategy before, this is an overview of what options you have available to you.
There are two main ways to run a strategy: from a chart and from the Strategies tab. I use both, but I prefer the Strategies tab.
The best time to start getting set up is after the market closes on Friday evening. You need to make sure everything is ready to go by Sunday at 6pm (EST).
Monitor your strategies closely. You want to begin with the end in mind (as the saying goes). That means you want to start thinking like a portfolio manager. Everything about the forward test should be real/live except for the account value. Compare the performance against the backtest on a daily basis at first and track their performance over time like I’m doing. I’ve set up an automated email for a trade performance report. That email goes to an email address dedicated to trade performance reports. I requested this to 1) verify that the daily trade performance report is working properly 2) maintain a daily record of trade performance in case the database becomes corrupted. This actually happened, which is why I added this step.
Once you get set up, you want to develop a strategy to run the portfolio. Running a simulated account will help to develop your own management style. These are some things you need to think about:
What happens if you get kicked out of a strategy? This can happen for many reasons, but it usually happens when you have two conflicting strategies on the same contract. This is why I use the same strategy on multiple instruments, but not the same instrument on multiple strategies. If you need help with this, shoot me an email.
What happens if the strategy falls out of sync? There are many reasons that a strategy may be out of sync. This is usually due to a disconnect between the account position and the strategy position. You can learn more about what it is and how to fix it here. If you need help with this, shoot me an email.
What’s your rollover strategy? Rollover is tricky. In my regular trading, I roll with contract volume. That is, the contract with the highest volume is the one I’m trading. Ninjatrader has an automated rollover system, but it’s static. You’ll want to close out of the application once a week for rollovers to update automatically. I’ve found that many more errors occur during rollover. Until the rollover system is more dynamic, I’m going to turn all strategies off during the last two weeks of major contract expiration dates (four times a year — triple witching) to “manage” the portfolio. In other words, no strategies are running for two weeks running up to triple witching. This might change in the future.
What happens if the virtual server shuts down?
Contact the provider immediately. If they don’t respond in 5 minutes, ask for a refund and find another provider. Don’t wait until this happens to test the 5 minute response rule.
What happens if your local computer goes offline? Nothing. This is why you have the strategies set up on a dedicated virtual server. If your local computer goes offline, it will not impact the performance of your strategies, but you should have some way to sign on to NT8 through another device, ie phone, tablet.
When you start the strategy, do you enter the trade immediately or do you wait until the strategy is flat? This is up to you. It is among the many options you have when you first set the strategy up. All of our strategies are set to wait until the strategy is flat, but I haven’t conducted any tests to see if one is better than the other from a performance perspective. Some of you have also said that calculating on each tick is better than calculating on bar close. I don’t know if that’s the case, but it certainly requires more resources to run. Here’s a screenshot of the default view for most of our strategies:
Do you want a strategy that closes at the end of the session or end of week? Some strategies have a better performance when run continuously through the week (read: you don’t automatically close all positions at session close). This also depends on the market and/or exchange. The futures market closes every day for one hour. If you want to hold your position through that close, you will need to add the cost of overnight margin to your starting account balance (i.e., cumulative max drawdown + initial margin). You can learn more about the impact of futures margin on automated trading here.
I’m sure I left something out, but those are the basics.
The more you live-test on simulated accounts, the more you’ll develop your own sense for what works. If I missed something or if you have any other questions, please let me know. I’d prefer it if you would add your question/comment below so we can create a working document, but if you’re uncomfortable with that I’m okay with a direct email as well.
I also want to say congrats to Xa on his new job. That makes two assistants that have been picked off in the last year—I’m sad to see you go (and a bit upset because I don’t want to train anyone else), but honored to have worked with you as long as I did.
Now, I’m going to say something for subscribers only. This is how I get double value out of my forward tests: