Особенности языка mql5, тонкости и приёмы работы - страница 16

 
Andrey Dik:
а нельзя ли сделать так, что бы по команде "Открыть график" во вкладке "Бэктест" после тестирования на открывшийся график автоматически добавлялись все индикаторы, которые использовались в советнике, с соответствующими параметрами?

Пока нет.

Пока можете сохранить шаблон‌ визуального тестирования и применить его в клиентском терминале

 
Slawa:

Пока нет.

Пока можете сохранить шаблон‌ визуального тестирования и применить его в клиентском терминале

а если в советнике в OnDeinit делать

ChartSaveTemplate ()


‌с именем tester.tpl то после открытия чарта по команде "Открыть график" получится то что требуется?

 
Andrey Dik:

а если в советнике в OnDeinit делать

ChartSaveTemplate ()


‌с именем tester.tpl то после открытия чарта по команде "Открыть график" получится то что требуется?

Нет. ChartSaveTemplate будет сохранять шаблон в локальную папку Files тестерного агента

Имелось в виду ручное сохранение шаблона из визуализатора через главное меню‌.

Tester.tpl работает только в одну сторону - от клиентского терминала к визуализатору‌

 
Slawa:

Нет. ChartSaveTemplate будет сохранять шаблон в локальную папку Files тестерного агента

Имелось в виду ручное сохранение шаблона из визуализатора через главное меню‌.

Tester.tpl работает только в одну сторону - от клиентского терминала к визуализатору‌

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

значит нужна штатная возможность открытия графика после тестирования сразу с индикаторами.‌

ЗЫ. В тестере не работает. делаю так:

//——————————————————————————————————————————————————————————————————————————————
void OnDeinit (const int reason)
{
  if(ChartSaveTemplate(0, "testersdfsdfsdfsdf"))
    Print (__FUNCTION__ + ": Шаблон сохранён");
  else
    Print (__FUNCTION__ + ": Шаблон НЕ сохранён");
    
  EventKillTimer ();
}
//——————————————————————————————————————————————————————————————————————————————

//——————————————————————————————————————————————————————————————————————————————
double OnTester ()
{
  if(ChartSaveTemplate(0, "testersdfsdfsdfsdf"))
    Print (__FUNCTION__ + ": Шаблон сохранён");
  else
    Print (__FUNCTION__ + ": Шаблон НЕ сохранён");
  return (-DBL_MAX);
}
//——————————————————————————————————————————————————————————————————————————————

‌результат:

2017.03.07 12:22:15.422    Core 1    2017.03.06 23:58:59   OnTester: Шаблон НЕ сохранён
2017.03.07 12:22:15.422    Core 1    final balance 1129.18 USD
2017.03.07 12:22:15.422    Core 1    OnTester result -1.797693134862316e+308
2017.03.07 12:22:15.422    Core 1    2017.03.06 23:58:59   OnDeinit: Шаблон НЕ сохранён

 
void OnStart()
  {
   int indic = iCustom(Symbol(), Period(), "Examples\\ATR", 7, PRICE_CLOSE, clrGreen);
   ChartIndicatorAdd(0, 1, indic);  
   Sleep(10000);
  }

Цвет индикатора таким способом задать не получается.

Так почему же некоторые уверяют "это не баг, а фича"?‌

Впрочем официальный ответ меня полностью удовлетворил:

Мы подумаем над тем, как менять цвет и стиль индикатора из MQL5-программы.

А пока используйте входные переменные типа color для задания цвета индикатору‌

 
Roffild:
void OnStart()
  {
   int indic = iCustom(Symbol(), Period(), "Examples\\ATR", 7, PRICE_CLOSE, clrGreen);
   ChartIndicatorAdd(0, 1, indic);  
   Sleep(10000);
  }

Цвет индикатора таким способом задать не получается.

Так почему же некоторые уверяют "это не баг, а фича"?‌

Впрочем официальный ответ меня полностью удовлетворил:

Потому что через хэндл индикатора (через рассчётную часть) свойства отображения (рисовательной части) задать невозможно. Баг - это когда что-то написано по-одному, а работает совсем по-другому.

Здесь нужен другой подход. Доступ к индикатору по короткому имени, как в группе функций ChartIndicatorXXX. Что-то типа ChartIndicatorSetInteger(chart_id,sub_window,indicator_name,PROP_COLOR,mod,value)‌

Мы уже думали над этим, но пока руки не дошли‌

 

Зачем через хэндл задавать что-то? Установка цвета происходит в самом индикаторе через свойство PLOT_LINE_COLOR.

indicator_colorN задаёт лишь изначальный цвет, который меняется через ‌ PLOT_LINE_COLOR.

indicator_colorN ничем не отличается от input при вызове индикатора с последующей установкой через PLOT_LINE_COLOR.

Через хэндл вообще нельзя позволять менять ‌ такие свойства.

Да и indicator_buffers пора уже позволять задавать динамически.‌

 
Roffild:

Зачем через хэндл задавать что-то? Установка цвета происходит в самом индикаторе через свойство PLOT_LINE_COLOR.

indicator_colorN задаёт лишь изначальный цвет, который меняется через ‌ PLOT_LINE_COLOR.

indicator_colorN ничем не отличается от input при вызове индикатора с последующей установкой через PLOT_LINE_COLOR.

Через хэндл вообще нельзя позволять менять ‌ такие свойства.

Да и indicator_buffers пора уже позволять задавать динамически.‌

‌Про хэндл можно и не упоминать. Я сам же и сказал, что через хэндл нельзя задавать рисовательные свойства. И объяснил, почему

Не забывайте, что кроме кастомных индикаторов есть ещё и встроенные, которым тоже надо менять цвет после программного добавления на график.

 

Я предлагаю только расширить функции вызова индикатора:

iCustom(... inputs, PRICE_CLOSE,
         [color color1, int width1, int style1]... );

iAlligator(... params, PRICE_CLOSE,
         [color color1, int width1, int style1]... );
Больше ничего добавлять не нужно.

 
Roffild:

Я предлагаю только расширить функции вызова индикатора:

Эээ зачем если его все равно не видно?
Причина обращения: