Strategy Evaluation using the Sharpe and Sortino Ratios

Successful traders approach trading with a clearly defined and thoroughly tested strategy. Most traders evaluate the hypothetical future performance of their strategy by measuring the profit or loss of the strategy run on historical data. But is measuring historical profitability enough? Historical profitability provides only a small piece of information about a trading strategy, while another factor that may be important to a trader is the riskiness of their strategy. The Sharpe Ratio and the Sortino Ratio are two methods of evaluating the risk of a strategy by comparing the returns to that of a risk-free investment.

The Sharpe Ratio

The Sharpe Ratio is calculated by dividing a strategy's excess return beyond the risk-free rate of return by the standard deviation of the returns. Generally measurements above 1 are considered preferable; the higher the better, as this would indicate the returns are achieved with limited volatility of the account equity.

The Sortino Ratio

The Sortino Ratio is a variation of the Sharpe ratio that removes upside volatility from the calculation by considering the standard deviation of the returns to the downside. The Sharpe Ratio considers the standard deviation of both positive and negative returns, so a strategy with extreme positive returns would be penalized the same way as a strategy with extreme negative returns. For s strategy intended to provide consistent returns, the Sharpe Ratio would be an important measurement. However, for a strategy without this limitation, the Sortino Ratio may be a better way to measure risk-adjusted returns.

Whether you are backtesting a strategy or evaluating historical returns of a strategy, the Sharpe and Sortino Ratios can be useful metrics of risk in relation to returns. For those using a Python-based backtesting or live trading system, the article also includes sample Python code for calculating these ratios.

Russell Shor

Russell Shor

Senior Market Specialist

Russell Shor (MSTA, CFTe, MFTA) is a Senior Market Specialist at FXCM. He joined the firm in October 2017 and has an Honours Degree in Economics from the University of South Africa and holds the coveted Certified Financial Technician and Master of Financial Technical Analysis qualifications from the International Federation…

View Profile

Disclosure

Any opinions, news, research, analyses, prices, other information, or links to third-party sites contained on this website are provided on an "as-is" basis, as general market commentary and do not constitute investment advice. The market commentary has not been prepared in accordance with legal requirements designed to promote the independence of investment research, and it is therefore not subject to any prohibition on dealing ahead of dissemination. Although this commentary is not produced by an independent source, FXCM takes all sufficient steps to eliminate or prevent any conflicts of interests arising out of the production and dissemination of this communication. The employees of FXCM commit to acting in the clients' best interests and represent their views without misleading, deceiving, or otherwise impairing the clients' ability to make informed investment decisions. For more information about the FXCM's internal organizational and administrative arrangements for the prevention of conflicts, please refer to the Firms' Managing Conflicts Policy. Please ensure that you read and understand our Full Disclaimer and Liability provision concerning the foregoing Information, which can be accessed here.

Risk Warning: Our service includes products that are traded on margin and carry a risk of total loss of your deposited funds. The products may not be suitable for all investors. Please ensure that you fully understand the risks involved.

${getInstrumentData.name} / ${getInstrumentData.ticker} /

Exchange: ${getInstrumentData.exchange}

${getInstrumentData.bid} ${getInstrumentData.divCcy} ${getInstrumentData.priceChange} (${getInstrumentData.percentChange}%) ${getInstrumentData.priceChange} (${getInstrumentData.percentChange}%)