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

 
ramis866:
Подскажите кто нибудь как пользоваться советниками
Просмотрите справку: настройка и запуск советников.
 
Парни! При смене таймфрейма перезапускается советник. В результате чего он возвращает всю свою нарисосанную графику в вид по умолчанию. Как запретить перезапуск при смене таймфрейма?
 
net:
Парни! При смене таймфрейма перезапускается советник. В результате чего он возвращает всю свою нарисосанную графику в вид по умолчанию. Как запретить перезапуск при смене таймфрейма?

Может быть лучше в советнике поправить нюанс, чтобы нарисованная им графика корректно отображалась после смены ТФ?  

 
net:
Парни! При смене таймфрейма перезапускается советник. В результате чего он возвращает всю свою нарисосанную графику в вид по умолчанию. Как запретить перезапуск при смене таймфрейма?

Запретить нельзя. И нужно ли сохранять графику? Ведь для каждого таймфрейма графика все построения могут кардинально меняться. Для примера возьмите индикатор MACD на разных периодах графика.  А если графические построения очень нужны - то нужно менять логику советника. 

 Советник и индикатор после смены периода графика обязаны перезапускаться - такова логика функции OnInit() - обработчика события Init:

Init

Сразу же после того, как клиентский терминал загрузит программу (эксперт или пользовательский индикатор) и запустит процесс инициализации глобальных переменных, будет послано событие Init, которое обрабатывается функцией OnInit(), если она есть. Это событие также генерируется после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или пользовательского индикатора. Советник также инициализируется после смены счета. Для скриптов событие Init не генерируется.

 
barabashkakvn:

Запретить нельзя. И нужно ли сохранять графику? Ведь для каждого таймфрейма графика все построения могут кардинально меняться. Для примера возьмите индикатор MACD на разных периодах графика.  А если графические построения очень нужны - то нужно менять логику советника. 

 Советник и индикатор после смены периода графика обязаны перезапускаться - такова логика функции OnInit() - обработчика события Init:

Не совсем согласен. Перезапускаться - это, конечно, обязательно, но! Ради экономии ресурсов, как раз для мультитаймфреймовых индикаторов/советников при большом количестве графических объектов - можно и обойти кое-какие части инициализации, в частности перерасчет уже построенного. Т.е. если по логике (что я лично считаю правильным) после деинициализации графические построения удаляются, то нужно обработать причину смены ТФ (не удаляя построений). При желании, лучше настроить видимость объектов по ТФ без перестроения самих объектов.
 
Tapochun:
Не совсем согласен. Перезапускаться - это, конечно, обязательно, но! Ради экономии ресурсов, как раз для мультитаймфреймовых индикаторов/советников при большом количестве графических объектов - можно и обойти кое-какие части инициализации, в частности перерасчет уже построенного. Т.е. если по логике (что я лично считаю правильным) после деинициализации графические построения удаляются, то нужно обработать причину смены ТФ (не удаляя построений). При желании, лучше настроить видимость объектов по ТФ без перестроения самих объектов.
Всё в руках программиста.
 

Не подскажите как найти минимальное значение переменной с типом double из буферов iCustom,их 8.

Думаю что это решается массивом но как записать не знаю.

Help plz! 

 

Здрасть всем, и халявщикам и профи, перечитывать все мемуары форума нет времени, потихоньку  по принципу паркура познаем MQ.............

Вообщем текущия проблема  : Скачал из примера панельку, адаптировал в своем советнике, теперь задача  эту панельнку включать и отключать в настройках

и так в коде 

в переменных пописываю  :

 input bool           vkl       =false;//удалить панель

дальше объясняю

if  //

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Вывести в журнал причину деинициализации
   Print(GetDeinitReasonText(reason));
//--- При удалении с графика
   if(reason==REASON_REMOVE)
      //--- Удалить все объекты с графика, которые относятся к информационной панели   
      DeleteInfoPanel();
      
     
  }

 

  DeleteInfoPanel(); 

 if (vkl=false);

----------------

то ошибка то еще что нибуть он меня не понимает)) 

вообщем подскажите если не в напряг примером  как правильно сделать  ,,или покажите где фаил с примером ,найти

Файлы:
 
alhoya:

Не подскажите как найти минимальное значение переменной с типом double из буферов iCustom,их 8.

Думаю что это решается массивом но как записать не знаю.

Help plz! 

После того как получен хэндл пользовательского индикатора с помощью iCustom, нужно в OnCalculate() скопировать значение из исследуемого буфера пользовательского индикатора в Ваш буфер с помощью CopyBuffer. Останется в Вашем буфере найти минимальное значение при помощи ArrayMinimum.
 
aleks557:

...

Для того, что бы что-то удалить, это что-то сначала нужно создать.

void DeleteInfoPanel()
  {
   DeleteObjectByName("InfoPanelBackground");   // Удалить фон панели
   DeleteObjectByName("InfoPanelHeader");       // Удалить заголовок панели
//--- Удалить свойства позиции и их значения

И ещё: при изменении свойств эксперта (во входных параметрах Вы выставили условие true - захотели удалить эксперта) Вам не даёт удалить панель это условие:

void OnDeinit(const int reason)
  {
//--- Вывести в журнал причину деинициализации
   Print(GetDeinitReasonText(reason));
//--- При удалении с графика
   if(reason==REASON_REMOVE)
      //--- Удалить все объекты с графика, которые относятся к информационной панели   
      DeleteInfoPanel();

  }

 Это условие сработает только при удалении эксперта с графика.

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