Just pass a different symbol or timeframe
Every indicator function and copy function takes a symbol and a timeframe. iMA(_Symbol, PERIOD_D1, 200, ...) gives you a daily average on an hourly chart. No special API, no request.security equivalent — just different arguments.
Why traders do this
A higher timeframe gives you regime: are we broadly trending up or down? Trade only in the direction of the higher timeframe and you filter out a large share of whipsaws. This is the single highest-value addition to most beginner systems.
The repainting trap, in practice
Read the higher timeframe at shift 0 and you are reading a bar that has not closed. On a daily filter read from an hourly chart, that daily value will keep changing all day. Your backtest — computed after the fact — will show the final value, while live you saw the evolving one. The backtest looks better than reality, always. Use shift 1.
CopyRates for raw bars
When you need open/high/low/close rather than an indicator value, use CopyRates(symbol, timeframe, 0, count, rates[]) into a MqlRates array. It works across symbols and timeframes identically.
Synchronising across symbols
When you scan several symbols, they will not have bars aligned — one may not have ticked recently. Either accept and handle missing data, or explicitly wait for the bar you need. Do not assume every symbol has a fresh bar just because the one on your chart does.
Performance
Reading ten symbols on every tick is expensive. Gate your multi-symbol work on a timer or on new bars, and cache results where you can. The Strategy Tester will thank you.