We are working to make this page better. If you have any questions or comments let us know!
Assumptions of Backtesting
As mentioned previously, backtesting comes with lots of assumptions. As we simulate historical actions and inject our own, we assume that our actions have no effect on what would have actually occured with the pool. Things like adding liquidity or swapping tokens have an impact on the token price. Past performance does not guarantee future results, and we cannot guarantee that swap activity will continue as it did in the backtesting period. Liquidity Providers may place their liquidity differently as well. In the test, we do all token swaps as 'exact amounts in' (as opposed to 'exact amounts out') to ensure we do not move the price to the limit. You will see that some transactions fail; this is normally due to LPs attempting to mint a position with liquidity amounts that are no longer viable due to the tick difference. While this definitely impacts testing, this is the closest we can realistically simulate events on the pool.
Because of this, it is best to use pools with high liquidity and simulate using smaller tokens amounts to create less of a discrepancy with the historic path. While this makes it hard to accurately scale an app to have a significant amount of liquidity in it, small token amounts should still give accurate returns. The main benefit of scaling is reducing the relative gas costs: when a vault's liquidity increases, gas costs generally remain constant and yield increases. While its reasonable to calculate realistic breakevens and APYs for larger amounts, keep in mind that things do not scale linearly. Check out this Desmos Graph which goes into more detail.
On the search to find apps that work well and produce consistent high returns, it is important to keep a few things in mind. There are some time periods that will give great results for providing liquidity, and there are some that will be terrible. If one token's price goes up significantly relative to another's, the best possible app would simply hold that token over a period of time. You can make an app for that too, but for LPing this isn't the goal. Make sure that while developing and testing apps you simulate all sorts of market conditions. For example: bear markets, bull markets, neutral markets, periods of high volume, periods of low volume, etc. The returns will most likely vary over the course of a year. Do your best to maximize returns in all seasons, and beware of overfitting. Overfitting is a statistical error where a model is tuned too closely to its training data, to the point it has a negative impact on it's performance with all other data. Test your apps against different pools and asset behavior to see what suits them best. The opportunities are endless for adapting to market conditions and the incentives are great. Good luck!