Good features are stationary, comparable across instruments, and available at the moment of decision. Raw price fails all three; a 20-day z-score of price relative to its own moving average passes all three.
Typical families: trend and momentum measures over several horizons, volatility ratios, volume and liquidity measures, spread and microstructure measures, cross-sectional ranks within the universe, and calendar context. Cross-sectional ranking is especially useful because it removes market-wide moves for free.
The discipline that matters is availability. For every feature, write down the exact timestamp at which its value is final and assert that the model only reads it after that time. Half of all spectacular machine-learning backtests die honestly at this step.
Related: normalisation, data-leakage, label, feature-importance