StockFetcher Forums · General Discussion · How to use ROI . . .<< 1 2 >>Post Follow-up
31 posts
msg #36795
Ignore costner
7/8/2005 5:12:39 PM

I have heard complaints on this site that the ROI in backtesting is not accurate. Although this is true, I find it to be a very valuable percentage.

I believe the roi is calculated as follows ..

Take the average of all winning and losing percentages, and multiply them by the # of trading days in the year.

Now although this is not an accurate roi, it is very valuable as a number to compare to other formulas you are backtesting. If your formula does not show a good roi % number, then your formula is simply not that good for trading.

I would prefer that instead of this roi calculation that we simply got the average percentage gain or loss. But since we do not have that, I recommend using the roi for that purpose, because that is exactly what it is.

ROI = (average gain or loss %) x 247

So although it is a bigger number than we need it is still representative of whether our formula is a moneymaker or not.

Of course keep in mind when using this number ...the more stocks your filter finds, the more you can trust this "roi" result.

Also before you throw out your filter because you get no good returns, first make sure you have done your best to have a good exit strategy built into your filter.

Here is a good generic exit filter

close is 3 percent lower than high one day ago

LONG ...
close is 3 percent higher than low one day ago

Well that is my two cents for today.

31 posts
msg #36830
Ignore costner
7/10/2005 11:37:26 PM

Do you all agree with my statement "then your formula is simply not that good for trading?"

interested in other opinions.

259 posts
msg #36834
Ignore corsino
7/11/2005 12:24:14 AM

Your question is somewhat interesting and not "all" will agree with anything.
One thing I find interesting is that most filters advertised as magical have low ROI's. Some have negative ROI's. Of course, some filters are based on theories which, although popular, may be faulty. Other filters are concocted by day traders which probably don't actually use them in their day trading. Day traders typically are glued to their Level II systems and just watch which heavily-traded stock is volatile enough so that with good timing, they can get in and out that same day with a profit (actually, sometimes within minutes). So a yearly ROI or a W/L ratio is meaningless to them.
I'm not a day-trader but am reluctant to use a filter with a very low ROI, but specially with a low W/L ratio, and usually delete them so as not to waste my time. But also, I'm reluctant to use somebody else's filter unless I modify it to my taste. Generally, I prefer a filter with an ROI of several hundred percent AND a W/L ratio between 55 and 60, if it supplies a reasonable number of picks. I then look at their charts and check to see if there's any news, to try to judge what their short-term chances are.

31 posts
msg #36837
Ignore costner
7/11/2005 7:13:31 AM

You sound like a guy that lives somewhere withing the bollinger bands of reality. I am more of a swing trader than day, so I do not know a lot about what they look for on there level 2's. Anyway, I feel the same as you about the ROI's. Money management, I will agree is extremely important, but I think finding good stocks to trade is equally important. If a filter shows good gains backtested over two seperate time frames, then that is a filter to include.

No matter how much you like rsi's or macdaddys or what have you, my view is throw emotion out the window and use what shows good backtesting results.

I have found that backtesting the most recent year is best. It seems the market is a growing entity, and it changes it's mood and reactions from year to year. But I still find it valuable to backtest other timeframes to make sure your results are not a complete anomoly. Especially if your backtesting produces a small amount of results.

What would be impressive? How about

80 plus stocks with
1000% or more roi and
70% or more winners and
good liquidity -- reasonable trading volume so you can get in and out easily.

Yeah baby! That would be impressive!!

259 posts
msg #36839
Ignore corsino
7/11/2005 11:01:31 AM

Well, most of your percentages are a little higher than the filters I use , except for the number of stocks. I like filters that usually have two or three stocks a day.
I agree that money management is very important, but it starts with the selection of stocks that have a fighting chance of going up. I'd rather have consistent small winners and not have to depend on an occasional big winner to save my hide.

31 posts
msg #36847
Ignore costner
7/11/2005 7:18:29 PM

Very wise statements, corsino. I completely agree.

If you are not trading you are not making money. So you need enough stocks to trade with per week. And roi is only worth something if the stocks can be liquidated. So all these 1000% plus roi filters that get posted are often worthless due to lack of liquidity. For this reason I do not use mininum average volume, instead I use minimum dollar volume. Because it is the dollars that count. "Are there enough dollars being traded to buy in and sell out of my trade without a problem?"

As I said I use Dollar volume thusly ...

set{vol30,average volume(30)}

and AvDollTradVol30 > 500000

So this figure above represents stocks trading at a 30 day average of $500,000 dollars a day. I am figuring that if I am going to trade $5000 on a trade, that 5000 x 100 may be a good enough for easy liquidation.

"I am not certain that this ratio is the best (100 to 1), any advice would be appreciated on that subject."

But I am certain that if you applied this formula to many of the hi roi's posted, they would fall apart do to lack of liquidity.

Now you have my definition of what I meant by good liquidity in the post above. A great filter must be liquid.

Give me a high roi filter with my liquidity cammands above added, plus 80 plus stocks returned

12 posts
msg #36868
Ignore cocky_pusher
7/12/2005 12:29:05 PM

Are these instructions ready to be copy pasted?

set{vol30,average volume(30)}

and AvDollTradVol30 > 500000

6,364 posts
msg #36869
Ignore TheRumpledOne
7/12/2005 1:13:13 PM

Average dollar trade volume is a great addition to the Stock Dashboard Display:


/* your filter code goes below this line */

ADTV above 500000

sort column 5 descending

/* STOCK DASHBOARD DISPLAY for newbies and old pros */

set{E36b,days(ema(3) is above ema(6),100)}
set{E36a,days(ema(3) is below ema(6),100)}
set{E3xE6, E36a - E36b}

set{E50200b,days(ma(50) is above ma(200),100)}
set{E50200a,days(ma(50) is below ma(200),100)}
set{M50xM200, E50200a - E50200b}

set{E1326b,days(ema(13) is above ema(26),100)}
set{E1326a,days(ema(13) is below ema(26),100)}
set{E13xE26, E1326a - E1326b}

set{CCb,days(close is above close 1 day ago,100)}
set{CCa,days(close is below close 1 day ago,100)}
set{CxC, CCa - CCb}

set{E5b,days(close is above ema(5),100)}
set{E5a,days(close is below ema(5),100)}
set{CxE5, E5a - E5b}

set{E50b,days(close is above ma(50),100)}
set{E50a,days(close is below ma(50),100)}
set{CxM50, E50a - E50b}

set{E200b,days(close is above ma(200),100)}
set{E200a,days(close is below ma(200),100)}
set{CxM200, E200a - E200b}

set{T10, count(10 day slope of the close above 0,1)}
set{T60, count(60 day slope of the close above 0,1)}
set{T200, count(200 day slope of the close above 0,1)}

Set{a1, T200 * 1}
Set{a2, T60 * 10}
Set{a3, T10 * 100}

Set{aa, a1 + a2}
Set{TREND, aa + a3}

set{v, volume 1 day ago}
set{volinc, volume - v}
set{volpc, volinc / v}
set{volpct, volpc * 100}

set{VolZ, days(volume < 1,100)}
set{VolUp, days(volume is below volume 1 day ago,100)}
set{VolDn, days(volume is above volume 1 day ago,100)}
set{VolCnt, VolUp - VolDn}

set{vck1, volume 1 day ago }
set{vck, volume / vck1 }
set{vdbl, days(vck < 2, 100)}

set{PARBuy, count(close crossed above Parabolic SAR, 5) }
set{DMIBuy, count( di(14) Difference crossed above 0 , 5) }
set{DMIBuyX, count( di(14) Difference above 0 , 1) }

set{PARSell, count(close crossed below Parabolic SAR, 5) }
set{DMISell, count( di(14) Difference crossed below 0, 5) }
set{DMISellX, count( di(14) Difference below 0, 1) }

set{PARSBuy1, PARBuy * DMIBuy}
set{PARSBuy, PARSBuy1 * DMIBuyX}

set{PARSSell1, PARSell * DMISell}
set{PARSSell, PARSSell1 * DMISellX}

set{PARSTrade, PARSBuy + PARSSell}

set{HiOp, high - open}

set{WRb,days(Williams %R(10) is above Williams %R(10) 1 day ago,100)}
set{WRa,days(Williams %R(10) is below Williams %R(10) 1 day ago,100)}
set{WRxWR, WRa - WRb}

set{vol30,average volume(30)}

and add column VolCnt
and add column Vdbl
and add column volpct

and add column HiOp
and add column Trend

and add column CxC {CxC_}
and add column CxE5 {CxE5}

and add column E3xE6 {E3xE6}
and add column E13xE26 {E13xE26}

and add column CxM50
and add column CxM200
and add column M50xM200

add column rsi(2)
add column weekly rsi(2)

add column PARSBuy
add column PARSSell

add column WRxWR

add column ADTV

and draw RSI(2)
and draw ema(5)

and draw Williams %R(10)

and draw Parabolic SAR
and draw +di(14)
and draw -di(14)
and draw adx(14)
and draw di(14) difference



31 posts
msg #36879
Ignore costner
7/12/2005 6:20:39 PM

Yes they are ready for copy paste.

RumpledOne, are you saying there is already a foumula on SF for this purpose?

Also, I am a little confused as to your posting. What does your filter accomplish?

Thanks for the help.

31 posts
msg #36880
Ignore costner
7/12/2005 6:29:14 PM

RumpledOne, nevermind, I jumped the gun on my question.

By the way, I'm liking those "add" commands, is it possible to use them to add columns in backtesting??

Thanks again.

StockFetcher Forums · General Discussion · How to use ROI . . .<< 1 2 >>Post Follow-up

*** Disclaimer *** does not endorse or suggest any of the securities which are returned in any of the searches or filters. They are provided purely for informational and research purposes. does not recommend particular securities., Vestyl Software, L.L.C. and involved content providers shall not be liable for any errors or delays in the content, or for any actions taken based on the content.

Copyright 2018 - Vestyl Software L.L.C.Terms of Service | License | Questions or comments? Contact Us
EOD Data sources: DDFPlus & CSI Data Quotes delayed during active market hours. Delay times are at least 15 mins for NASDAQ, 20 mins for NYSE and Amex. Delayed intraday data provided by DDFPlus

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.