[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 110

 
paladin80:
Ищу совета у коллективного разума. Поставил вот я советник на демо и немного подкорректировал его код. (1) Чтоб подменить его в МТ4, могу ли я просто приостановить его действие (не закрывая МТ4), в папке .../experts/ заместить на новый (под тем же названием), и потом снова на верхней панели МТ4 разрешить торговлю советникам? (2) Или же надо закрыть МТ4 и как обычно перенести советник в .../experts/ и перетащить на график?

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

Иначе советник сидит в памяти и даже удаление его файла ex4 не приведет к его удалению с чарта.

 

Боброго времени суток.

Можно как-нибудь свойства indicator_minimum и indicator_maximum менять когда захочется, а не константно препроцессору один раз задавать? В доках ничего путного не нашел.

 
Solree:

Боброго времени суток.

Можно как-нибудь свойства indicator_minimum и indicator_maximum менять когда захочется, а не константно препроцессору один раз задавать? В доках ничего путного не нашел.

В настройках индикатора, вкладка "общие". Программно средствами MQL - никак.
 
alsu:
В настройках индикатора, вкладка "общие". Программно средствами MQL - никак.
Жаль... Спасибо за ответ.
 
alsu:
В настройках индикатора, вкладка "общие". Программно средствами MQL - никак.
Можно. Только криво. Через дополнительный буфер. Правда задать минимум меньше рабочего будет нельзя.
 
Zhunko:
Можно. Только криво. Через дополнительный буфер. Правда задать минимум меньше рабочего будет нельзя.
И максимум выше заданного заранее тоже не выйдет))
 
alsu:
И максимум выше заданного заранее тоже не выйдет))

Zhunko:
Можно. Только криво. Через дополнительный буфер. Правда задать минимум меньше рабочего будет нельзя.

почему? если это все внутри и программно (прогером) контролируется, то меняй и контролируй как тебе угодно.

Хош обрезай значения на EMPTY, или наоборот раздвигай буфера шире.

 
sergeev:

почему? если это все внутри и программно (прогером) контролируется, то меняй и контролируй как тебе угодно.

Хош обрезай значения на EMPTY, или наоборот раздвигай буфера шире.

Отвечал для буфера.

У меня один буфер, который отвечает за вертикальную развёртку. Линии вывожу графическими объектами. Поэтому всё масштабируется, как надо в обе стороны.

 
А чуть подробней про это можно? Кусок кода с этим, если не трудно :)
 
Добрый вечер, возник еще вопрос. Вот часть кода:
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 1
#property indicator_width2 1

extern string Symbol1.Name = "EURUSD";     // Название инструмента 1
extern bool   Symbol1.Reverse = false;     // Является ли инструмент 1 реверсивным (с обратной корреляцией) 
                                           // по отношению к остальным инструментам
extern string Symbol2.Name = "EURUSD";     // Название инструмента 2
extern bool   Symbol2.Reverse = false;     // Является ли инструмент 2 реверсивным (с обратной корреляцией) 

extern int MA.Slow = 80;                   // Период медленной МА

// Буферы для отображения данных
double Buf1[];    // Первый инструмент
double Buf2[];    // Второй инструмент

// Параметры графических объектов        
string Label.Name = "label";  
int wndNum;                                // Номер подокна индикатора
string wndName;                            // Наименование окна
string oSymb1,oSymb2;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() { 
  // Задаем имена графическим объектам
  oSymb1=Symbol1.Name;
  oSymb2=Symbol2.Name;

  // Формируем свойства графиков индикатора
  IndicatorBuffers(2);
  
  SetIndexStyle(0,DRAW_LINE);
  SetIndexBuffer(0,Buf1);
  SetIndexLabel(0,Symbol1.Name);

  SetIndexStyle(1,DRAW_LINE);
  SetIndexBuffer(1,Buf2);
  SetIndexLabel(1,Symbol2.Name);

  return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()  {
  // Удаляем все графические объекты
  DeleteObject(oSymb1);
  DeleteObject(oSymb2); 
  return(0);  
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
  // Подсчет количества баров для построения индикатора
  int limit; int counted_bars=IndicatorCounted();
  if(counted_bars<0) return(-1);
  if(counted_bars>0) counted_bars--; 
  limit=Bars-counted_bars;
  
  // Определяем параметры окна индикатора
  wndNum=WindowFind(WindowExpertName());
  wndName=WindowExpertName()+wndNum; 
  //------------------------------------------------------------------ 
  // Отрисовка ценовых линий: рисуем и синхронизируем по наличию баров
  for(int i=0; i<limit; i++) { 
    Buf1[i]= iMA(Symbol1.Name,0,MA.Slow,0,MODE_SMA,PRICE_CLOSE,i); }
    
  for (i=0; i<limit; i++) {
    Buf2[i]= iMAOnArray(Buf1,0,MA.Slow,0,MODE_SMA,i); }
Как сделать, чтобы Buf1 вообще не отображался в окне индикатора?