As I said bitcoin days destroyed would have to be a part of the function. So that transactions of money that just been transacted recently would weigh a lot less. Only when the last transaction of the money was older than some barrier would the transaction weigh in 100% on the total velocity. The time barrier could be set to something like 3 hours, but it would be better to set it dynamically based on the last total velocity. I know the number would not be completely precise, but I think it would still be more so than the velocity when calculated in the real world.
Also a single dude cheating would mean less and less, as more and more people get a hold of money.
Sorry, but this is very very poor. There is no way this is tracking the velocity of money. You are missing all the microtransactions that could be real, and suddenly a guy moves his saved bitcoins (lots of them) to another address and your function would give you a big velocity of money when the guy could be sending it to himself. You are not tracking the velocity of money. The pseudo-anonimity of Bitcoin makes it impossible to track.