Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Мне нужно передать на вход индикатора произвольные данные. Для этого я использую пользовательский индикатор-обертку и глобальные переменные терминала. Для того чтобы протестировать это решение я создал два индикатора SMA, первый использует входные данные индикатора обертки, другой работает как обычно. При запуске в метатрейде значения индикаторов не совпадают, происходит отставание первого индикатора от второго. Может кто-нибудь подскажет как сделать так, чтобы этого не было?
Код советника выглядит примерно так
int handle_wrapper;
int handle_SMA1;
int handle_SMA2;
int onInit()
{
handle_wrapper = iCustom(_Symbol, _Period, "wrapper");
handle_SMA1 = iMA(_Symbol, _Period, 9, 0, MODE_SMA, handle_wrapper);
handle_SMA2 = iMA(_Symbol, _Period, 9, 0, MODE_SMA, PRICE_CLOSE);
}
void OnTick()
{
CopyRates(_Symbol, _Period, 0, 1, latest_rates);
const double C = latest_rates[0].close;
GlobalVariableSet("arg", C);
CopyBuffer(handle_SMA1, 0, 0, 1, indicator_data);
const double SMA1 = indicator_data[0];
CopyBuffer(handle_SMA2, 0, 0, 1, indicator_data);
const double SMA2 = indicator_data[0];
Print("SMA1 = ", SMA1, "SMA2 = ", SMA2);
}
Код обертки
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
const int first = prev_calculated == 0 ? begin : prev_calculated - 1;
const double value = GlobalVariableGet("arg");
for (int i = first; i < rates_total; i++)
{
output[i] = value;
}
return(rates_total);
}