#twitter-follow { border: 0;position: fixed; top: 240px; left:0;} #live-support { border: 0;position: fixed; top: 370px; left:0;} #knowledge-base { border: 0;position: fixed; top: 170px; left:0;}

Updated on 2012-01-31

Today's trading system will be based on the composite function and rank method. This system will ensure that your portfolio gets the best performing securities, based on a metric of your choice (The Sharpe ratio in this example).

The trading system that we are going to implement here consists of:

- Considering medium and large capitalized stocks
- Ranking the list of stocks by their Sharpe ratio
- Selling stocks whose rank increases above 40

The buy and sell process is done on a monthly basis (at the beginning of the month)

No stop rules (stop loss, trailing...) or money management rules are defined.

For instructions on how to create a trading system, please look at this post: Example of a trading system implemented in QuantShare Software

Another example of trading strategy implementation:

Medium and Large Cap Stocks

If you have access to a market capitalization or number of outstanding shares database then you can create a trading rule that gets data from this database and compares it value with "\$1 billion". Below that level, a stock is considered to be a small cap stock.

filter1 = GetData("market_cap", "market_cap") < 1000; // Assuming your database name is "market_cap" and numbers are expressed in millions.

If you do not have access to such database, you can create a trading rule based on the price and volume fields:

filter1 = close * sma(volume, 10) > 500000;

The average trading volume in dollars must be higher 500,000. The rule will reject cheap/penny stocks as well as many small cap stocks.

Sharpe Ratio Indicator

The Sharpe ratio of the last three months can be obtained by typing:

a = sharpe(close, 75); // There are about 25 trading days in a month

The Sharpe ratio is a risk-adjusted measure calculated using the standard deviation and excess return (Excess return is ignored here when calculating this ratio for individual stocks).

Ranking Stock by their Sharpe Ratio

Besides computing indices and market indicators, the composite function (comp) is able to rank assets based on any indicator or metric of your choice.

The function syntax is very simple:

b = comp(a, "rank");

The above indicator will return the rank of each stock based on the three month Sharpe ratio.
The stock that has the highest Sharpe ratio gets the first rank and the stock that has the lowest Sharpe ratio gets the last rank (which is equal to the total number of analyzed assets).

In this trading strategy, we want to rank medium and large cap companies only and for this reason, we must pass the filter criterion we have created earlier to the composite function.

b = comp(a, "rank", 1, filter1);

The third parameter is used to group results (by sector, industry or market for example). It was disabled by passing it a fixed numeric value of "1".

Create a stock index or a trading indicator using the composite tools
Diversify your portfolio by investing in stocks from various industries

How to create market indicators using the composite function - Part 1, Part 2, Part 3

The idea here is to rebalance the portfolio once per month. At the beginning of each month, we must sell securities whose rank has increased and purchase those whose rank has decreased.

To detect a new month, we can compare the current bar month with the previous bar month:

newmonth = month() != ref(month(), 1);

The "ref" function is used to reference a previous bar value.

We can use the same idea to rebalance weekly using "week()" function or yearly using "year()" function.

How to Buy the Top 20

Ranking data are stored in variable "b". Investing in the top 20 consists of buying stocks that have a rank lower or equal to 20.

buy = b <= 20 and newmonth;

We have also added the new month rule so that the buying process is performed on a monthly basis.

How to Sell a Stock whose Rank Increases Above 40

The sell rule consists also of comparing the rank of each stock with the "40" threshold.

sell = b > 40 and newmonth;

filter1 = close * sma(volume, 10) > 500000;
a = sharpe(close, 75);
b = comp(a, "rank", 1, filter1);
newmonth = month() != ref(month(), 1);

buy = b <= 20 and newmonth;
sell = b > 40 and newmonth;

The purpose of this post is to show you how to implement a trading system using QuantShare trading software.