Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1311

 
Sprut 185:

Спасибо за участие.

К сожалению функция  ObjectSet***  не подошла для моей задачи.

С проблемой разобрался сам с помощью функции OnDeinit().

теперь всё работает - как надо.

Но ведь в вашем вопросе есть такие слова

Sprut 185:

Помогите пожалуйста справиться с одной проблемой! 

Я только учусь писать коды и в связи с этим прошу Вас быть снисходительными к моей не грамотности.

  

Помогите разобраться с функцией OnChartEvent, которая при изменении тайм фрейма, или изменении настроек в меню индикатора - будет обновлять графические объекты на графике, а при закрытии индикатора - будет полностью удалять с графика все графические объекты - этого индикатора. 

Я так понял, что надо сперва удалить графические объекты, а потом обратно создать. Но, если объекты удалены, то доступ к его свойствам уже отсутствует и тогда,  как по новой создать эти объекты....... , или я что то не понимаю ? А может быть есть другой способ - обновления графических объектов на графике?

Прошу Вас написать пример с комментариями, как это сделать.

И для того, чтобы не удалять, достаточно просто изменить нужное свойство объекта одной из функций ObjectSet*** .

А что касается удаления всех объектов……… Надо быть очень осторожным удаляя все без разбору… Среди объектов на графике могут находиться объекты созданные руками или другим советником\индикатором. Если вас устраивает вариант с удалением объектов, то уж обратите внимание на удаление по префиксу. Правда и создавать надо с префиксом. Это не сложно.

 
Какой результат выдаёт функция 

iSpread ?


Смотрю он примерно похож значению спреда если сделать запрос баров в Символах/Бары в терминале.

При этом естественно эти значения не соответствуют реальным значениям выдаваемым SYMBOL_SPREAD.

Почему такая разница? И какой такой нереальный спред выдаётся по iSpread ?

 
Aleksei Skrypnev:
Какой результат выдаёт функция 

iSpread ?


Смотрю он примерно похож значению спреда если сделать запрос баров в Символах/Бары в терминале.

При этом естественно эти значения не соответствуют реальным значениям выдаваемым SYMBOL_SPREAD.

Почему такая разница? И какой такой нереальный спред выдаётся по iSpread ?

Минимальный спред в баре. 

Для проверки я добавил один буфер - он берет данные с индикаторного массива spread[] и для текущего бара выводит на экран комментарий - результат iSpread


Как запускать инструкция здесь: Spread Control

Spread Control
Spread Control
  • www.mql5.com
Просмотр спреда
Файлы:
 

Приветствую!

Подскажите такой момент: почему переменная "ATR14" не меняется?  И как сделать чтобы видеть её изменение?

void OnTick()
{

double ATR14=iATR(NULL,PERIOD_CURRENT,14);

Comment(
 
      "ATR14==: ",ATR14,"\n");
}
 
Alexey Belyakov:

Приветствую!

Подскажите такой момент: почему переменная "ATR14" не меняется?  И как сделать чтобы видеть её изменение?

Потому, что в MQL5 хендл индикатора (и он, кстати имеет тип int) создаётся ОДИН раз и делается это в OnInit.

А для получения данных с индикатора используется CopyBuffer.

 
Vladimir Karputov:

Потому, что в MQL5 хендл индикатора (и он, кстати имеет тип int) создаётся ОДИН раз и делается это в OnInit.

А для получения данных с индикатора используется CopyBuffer.

Такс, ну допустим 

double  ATR14m[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
  
  
void OnDeinit(const int reason)
  {
//---  
  }


void OnTick()
{
CopyBuffer(ATR14,0,0,3,ATR14m);



Comment(

      "ATR14==: ",ATR14,"\n");

}



Ничего не изменилось

 
Alexey Belyakov:

Приветствую!

Подскажите такой момент: почему переменная "ATR14" не меняется?  И как сделать чтобы видеть её изменение?

вот тут пример естьhttps://www.mql5.com/ru/docs/indicators/iatr

Документация по MQL5: Технические индикаторы / iATR
Документация по MQL5: Технические индикаторы / iATR
  • www.mql5.com
iATR - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Belyakov:

Такс, ну допустим 

Ничего не изменилось

У Вас почти получилось. Рекомендую массив именовать 'array_atr', а не 'ATR14m'. Тогда Вы быстрее увидите свою ошибку в вызове 'Comment'.

 
Vladimir Karputov:

У Вас почти получилось. Рекомендую массив именовать 'array_atr', а не 'ATR14m'. Тогда Вы быстрее увидите свою ошибку в вызове 'Comment'.

double  array_atr[];   

int ATR14;

int OnInit()
  {
ATR14=iATR(NULL,PERIOD_CURRENT,14);
  return(0);   
  }
   
void OnDeinit(const int reason)
  {
//---  
  }

void OnTick()
{


CopyBuffer(ATR14,0,0,3,array_atr);

Comment(

      "ATR14==: ",array_atr,"\n");

}

Изменил и получаем ошибку: " 'array_atr' - invalid array access "


 
Vladimir Karputov:

У Вас почти получилось. Рекомендую массив именовать 'array_atr', а не 'ATR14m'. Тогда Вы быстрее увидите свою ошибку в вызове 'Comment'.

Вы считаете, что если детский горшок назвать ночной вазой, то что-то изменится?

Там такое непонимание, что я не осмелился даже попытаться что-то подсказать… Для понимания надо раз 50 прочесть документацию…

Причина обращения: