Tuesday, April 24, 2007

I Get Questions

Jørgen said:

I've been trying to develop an rsi(2) swing trading system now for a while, perhaps some of my findings could be useful to you and I hope you might have some suggestions to how I can improve it.

Buy criteria:
rsi(2) < 5 and volume(not average volume) > 150000

Sell criteria:
when rsi(3) crosses over rsi(5)

Annual ROI from this hypothetical system depends on what the buyprice/sellprice are. If I set it to buy and sell at open, the ROI for the last 3 years is over 180% and set to average price for that day, around 160%. Max drawdown in that period is 23%. It seems to work best on AMEX stocks, why do you think this is?

One of my other questions to you is what price I can realistically set the buy/sellprice to? If the stock gains 10% in the first market hour, I would probably not catch it. I don't have realtime and I'd prefer not to have to spend much time daytrading, so some way to 'set and forget' this system would be the best option for me. I could maybe have a predefined buy level, so if the stock goes below that during the following day I buy it, but I'm unsure as to how I should calculate the buy stop level. Any thoughts?

A lot to work with.

First - the RSI approach is valid but it is missing some elements - for example - what is the price range that you feel most comfortable in? For example if you are trading a small account you might want to use my range of 15 to 35 dollar stocks. Lower priced stocks are generally too cheap for anything other than nickel and dime day trades or long term "I believe in them" trades. Higher priced stocks won't allow you to accumulate the necessary weight to make any real money.

Second - while a single day's volume is OK to make a selection it seldom tells you anything except that the insiders dumped a bunch. You really need to have a consistent high level of volume to ensure that the stock is liked over a period of time and not just one day out of a hundred.

Third - why cut off at RSI(2) < 5? Why not use what we've already tested and found worthwhile on this site - RSI(2) < 2? It outputs plenty of selections and you can be pretty sure that they are ready to bounce.

I've re-written your RSI method as follows -

show stocks where rsi(2) < 2
and volume > 150000
and close is between 15 and 35
and average volume(90) > 500000

This obtains 61% win rate, a 59% ROI (annualized) and a 1.61% reward/risk ratio. These aren't bad but another filter I'm currently exploring -

show stocks where close is between 15 and 35
and average volume(90) > 500000
and close crossed above cma(s2,6) within the last 2 days

Obtains a 66% win percentage, a 78% ROI and 2.05% reward/risk over the exact same test period.

I like using RSI based systems to find stocks that might be depressed enough to buy but there has to be other indicators involved as well. Even for day trades - in day trading the RSI(2) < 2 indicator is very powerful, but it becomes even more powerful when coupled with a tweezer bottom or pivot point or other support point.

Take the price you get. If you think the stock is going to go up over a period of days then pay the price and take the ride. If it goes up 10% at the open wait until it comes back a bit or until the close to make the buy.

Trading is more about risk than anything else. If you want a "set and forget" system then I'd leave the short term indicators (RSI) in the can and look at price based methods - a simple system such as the blow off bottom (BOB) that I posted about earlier today makes more sense. Or perhaps a pivot point based system. Or perhaps the old Donchian channel method. Any of these together or separately will get you stocks on the verge of a run and early enough in the process so you can garner the shank of the move. And then you can use candlesticks to inform your exit point. The sticks always tell you when the run is done.

I use pivot points or the ATR to determine a stop level. When I first enter a trade I usually set the stop very close to the buy point - if the trade goes against me right away I want out. After that I use a pivot point and change it on a daily basis or a multiple of the ATR and trail that. Most often my stops are mental because I don't like to let the market know what I plan to do.


Jørgen said...

A very interesting read Marlyn, thank you for taking the time to examine my code.
I've been having trouble recreating your results, and I'm curious as to how long the periods are that you test for? I'm not good enough at trading to know in what periods not to trade, so I like to see how a system performs over several years when I test.

Ive done some new backtests and here are my results:
from 2004-2007

show stocks where rsi(2) < 2
and volume > 150000
and close is between 15 and 35
and average volume(90) > 500000

gives me win rate: 63% and ROI: 6%

show stocks where rsi(2) < 5
and volume > 150000
and close is between 15 and 35
and average volume(90) > 500000

gives me win rate: 64% and ROI: 8%

similar to what I've been using:
show stocks where rsi(2) < 5
and volume > 150000
and close is between 1 and 15
and average volume(5) > 150000

gives me win rate: 65% and ROI: 104%

So lowering volume and minimum stock price adds winners to this system - but I'm not sure if it will work other than in theory.
I might try this system out for a while and see if its profitable even with these low volume stockpicks.

I look forward to reading more of your blog in the days and weeks ahead.

Jørgen T.

Marlyn Trades said...

All of my testing is in a 4 month window - the market changes dynamically every 20 to 40 days or so. Long term testing is not very useful. What do I care what worked 3 years ago - I'm trading now.

Once I adopt a test period I use it for several months and then I step forward one month. My current test period is 11/06/06 to 03/06/07 which encompasses 80 trading days. It is an extremely tough test period - the previous one yielded a much higher win rate and ROI in general.

In May I will step forward to 12/06/06 - 04/06/07 (or 80 trading days from 12/06/06). At that time I will back test all of my useful filters and compare them against the previous test period results. This is what I call a "sanity check" - it ensures that I understand what the normal yield will be for filters tested in that period.

If you use my test periods you should achieve my results.