Back to Community
Robinhood PennyStock Rotation (Using PsychSignal Data) - 100%+/Year

The following was successfully live - traded in the month of September with positive results that reflect those of the backtest.

YES: I know that this will not work with most commission models, this was designed specifically to be used with Robinhood (which it was).
Robinhood's less than exceptional execution time did not effect the algorithms live performance - likely because all orders were placed as limit orders.

Trading schedule:
Open trades at market close
Close trades at market open

Returns come from pre-market and post market movements.
This algorithm is very early alpha, using only SMA's in calculations. I stopped developing it when Quantopian decided to stop supporting interaction with brokers.

I may continue to develop this, if I do, I will combine all of my research notebooks into one and post that as well.

Clone Algorithm
Backtest from to with initial capital
Total Returns
Max Drawdown
Benchmark Returns
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
# Backtest ID: 59e548c2758ead40fbb1847b
There was a runtime error.
16 responses

By the way, notice the smooth consistent upwardness, a good of example of how to think about Sharpe, very high at +15.

This is awesome. I've never seen a return like this with such a low max downdraw and high sharpe/sortino.

@Jacob, this is awesome. Thanks for sharing. So if I'm reading this correctly it basically holds overnight high volume securities that have growing bullish sentiment? I'm surprised how effective it is!
Do you have any intention to port this? Stocktwits probably has an api , right?

I also spent Sept frantically testing a penny stock strategy with similar backtest stats, but ran into problem after problem until the order history grew so large it crashed the sync process between q and RH.

I have not been able to review any live trades, but I am sure there is still an issue with fills and penny stocks - much like the results Charles Witt got between his backtest and live trading due to volume/fill.

@Tyler this algo screens for liquidity -- I don't see it being am issue.

I see a lot of partial fills/zero fills in the log.

I think it has more to do with how quantopian fills the backtest vs the actual volume for that bar/entry point.

@Tyler because of limit orders, that's to be expected. Real execution could even be better. This algo is putting ~$100 ($10000/~100) in stocks with supposedly at minimum $3.2million daily dollar volume. Drop in a bucket. Liquidity should not be an issue.

My own tests with penny stocks a big problem I ran into was my algo would place a limit order at a certain price but there would be no more bids at that price. But I assume that was reflected in the backtest as well. Jacobs algo cancels unfilled orders and tries again.

I think the takeaway with this algorithm is that it proves the validity of a hypothesis, a very reliable and profitable one at that. Order execution could be tweaked and improved. But the premise is quite sound.

@jacob Btw, I didn't know you could do volume>1000000 ... I thought you need either .latest or take an sma or something along those lines.

Man, this would be a tax nightmare with so many buys/sells going through!

But with the amount of trades you could probably call this a business...

@Jacob, Hi & many thanks. Output looks EXTREMELY impressive. I look forward to going through it in detail. Cheers, best wishes, Tony.

How are you guys still able to support live trading through quantopian?

I can't speak for anyone else, but personally i didn't trade thru Quantopian, so recent changes have no impact for me.

This algorithm reminds me of the usual problem we have seen many times in this forum with greatly performing algorithms that work well only with low volume stocks. They work well when backtesting but not in live trading. This is because the current slippage model doesn't simulate well low volume stocks and because there is a longstanding bug. If someone feels like adding an additional filter to the pipeline (Q1500US, Q3000US or even increasing the volume filter to 'volume>10000000') and see if the stellar results persist, that it would be interesting to know and we could then trust the results. Having live traded this algorithm only one month doesn't confirm much

Thanks for your comment. As i'm new here & haven't had time to read all the posts, there's lots that you have seen & i haven't yet.

I have 2 different sets of interests, one aligned with Quantopian in terms of algos for funds, the other in terms of personal trading, and i'm careful not to confuse the two. Trading low volume, relatively illiquid stocks can be a viable strategy for personal trading, especially in stocks about which one has some specialist knowledge (in my case resource stocks), as long as one remains fully aware of the limitations. Personally I don't think increasing the volume filter is the best answer, but certainly having a valid slippage model is a key part of getting it right. I looked at this topic (outside of Quantopian) in the context of options and avoiding option series where the bid-ask spread is so wide that they can almost never become profitable trades. Although bid-ask is very dependent on the market-maker and supply-demand variability, i did find some rough-but-reasonable first order approximations to typical bid-ask spread in % as a function of dollar-volume liquidity in the underlying. Presumably it should not be too difficult for Q to allow users to input their own models of % slippage as a function of average daily dollar-volume liquidity. Who should I address this issue to at Q?

Agree about the 1-month part. "Necessary but not sufficient condition", but at least a good start.

@Tony I agree with what you say. To be clear I am just saying that the value of a backtest is lost when we are trading low volume stocks because they are not well modelled. If your algorithm works with high volume stocks is very likely you can get the same performance in live trading, otherwise you simply don't know. It might work or it might not, but we cannot say that from the backtest results unfortunately.

Regarding the creation of a custom slippage model it is very easy do to, we have the API for that. I did many times to make my backtests more reliable for live trading purpose

@Luca and Tony....This may or may not be relevant to what you are discussing. I did notice that results go down significantly when you increase the amount of money you start back test with. I also noticed some worse fills. Ex: Starting with $100k I saw a fill in stock @ 4.77 When I increased starting capital to $500k ,and had to sell more shares, the fill was @4.12. Is it possible the program understands where it can get fills ?

@mitch tullman
Hi Mitch, thanks. i'm not yet familiar enough with it to know exactly how the program actually handles the impact of volume on price, but what you describe is certainly consistent with what one should expect, and with how things behave in reality with low volume stocks, i.e. sell a few shares and get a good price, then that buyer has taken all he/she wants and so disappears, and the next buyer along says "no, i won't pay that much", and so the price you can get drops because there just isn't anyone else there to buy at that time. It's even worse with options!