There are way more typehints than necessary here, and the ones you do have are placed such that I'm not entirely sure they are doing any good - you really are supposed to hint the name in a let, not the value. That is, (let [^Observer obs (...)] ...), not (let [obs ^Observer (...)] ...). In many cases both of these will work, but the former is much "safer". It's also true that you should strongly prefer reify over proxy here, both for performance and because proxy is discouraged when you can possibly avoid it.
I don't know what neural network library you're using, so you may need a single typehint on the argument to createStockMarketNeuralNetwork, but the rest are serving no purpose except to confuse anyone who reads your code - it's even possible that excessive typehints will confuse the compiler into writing slower code, if you choose hints that aren't accurate. So instead of placing them at random throughout your code, switch to the reify approach sw1nn suggests, and then set *warn-on-reflection* to true and see what, if any, reflection is an issue. Below is a version of this code with reify, and after removing all the typehints that I know make no difference:
(let [obs (reify java.util.Observer
(update [this o arg]
(println arg)))
^StockPriceNeuralNetwork network (NeuralNetworkFactory/createStockMarketNeuralNetwork ^java.util.List [obs])]
(.trainForTime network))