I have the same problem and have yet to find a perfect solution.
There are two other options, each with their own problems...
1. Monitor the prices such that you wait until they go near your limit price
and then submit the Limit order.
The issue of having too many Limit orders filled can still occur as orders may
be filled quicker than your program can react, but at least you'll have a fewer
number of Limit orders placed as it is less likely that all prices will
approach your target price and if they do you can constrict the number of Limit
orders issued.
The disadvantage is that you are less likely to get your order filled if the
market moves quickly and if there isn't sufficient volume.
2. Use OCA (Once Cancels All) orders. Where you create a group of orders and if
one of them fills the others cancel. Works great if you only want 1 order
filled, but I suspect that like me you want to hold several open positions.
I've yet to test this particular approach, but what you could do is create a
number of OCA groups by splitting your watchlist of stocks into sub groups that
matches the number of concurrent open poitions you wish to have.
This of course brings up new problems where all the action for the day may only
happen in one group, so instead of filling 3 orders (1 from each group) you
only filled 1 and the remaing opportunities were missed as they occured in the
group that was already filled. You can attempt to mitigate this by doing some
statistical analysis of the watchlist and trying to evenly distribute the
stocks that have previously shown a higher probability of reaching your Limit
price from their current price. But even with this approach I'm still dubious
about its likelihood of success.