Couple of things here. Firstly your parse tree of 10#trade is in the wrong order in the expression labeled (1). It should read (#;10;`trade)
q)value(#;10;`trade)
`trade`trade`trade`trade`trade`trade`trade`trade`trade`trade
q)value(10;#;`trade)
'length
[0] value(10;#;`trade)
Secondly, as you can see, evaluating that parse tree gives you a list of symbols, which breaks the functional select, since it expects a table or table name as the first parameter.
What you can do is run eval on that parse tree inside your functional select, which will give you your result. But this actually does more work than you need, as the result of eval is what you're looking for, without running the functional select. But running an eval on user supplied code is generally a bad idea, as it's subject to code injection.
q)?[eval(#;10;`trade);();0b;()]
What might work better for you instead is to consider the 5th parameter of a functional select: https://code.kx.com/q/basics/funsql/#rank-5. This behaves just like the # operator:
q)(10#trade)~select[10]from trade
1b
q)// functional form:
q)(10#trade)~?[`trade;();0b;();10]
1b