Hello Leandro,
If you say dynamic languages don't have metaprogramming capabilities, you just don't have any idea of what a dynamic language really is.
If you say you can do metaprogramming at runtime you just don't have any idea of what I want to do with metaprogramming. For example:
unit carrying types: check for unit errors (adding feet to seconds) at compile time. I can be sure there are no unit error without knowing if I've executed every possible code path.
Domain specific compile time optimizations: Evaluate a O(n^3) function so I can generate O(n) code rather than write O(n^2) code. If you do that at runtime, things get slower, not faster.
Any language that doesn't have a "compile time" that is evaluated only once for all code and before the product ships, can't do these.