Ошибки, баги, вопросы - страница 2148

 
Andrey Khatimlianskii:

Это подтверждено?

Нет, конечно. Все, что здесь написал - самостоятельный вывод.

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

Это неправда. И главное, правдой даже быть не могло.

Запустите вручную этот индикатор на двух одинаковых чартах

int OnCalculate( const int, const int, const int, const double &[] )
{
  Print(ChartID());
  
  return(0);
}

Если бы расчетные части совпадали, то не было бы распринтовки разной. Думаю, на 90% в озвученных выводах все правильно.

 
Nexxtor:

Авторы справки, или языка MQL5, смотря у кого руки из ***растут, как же вы достали!!!

В IndicatorCreate() сказано:

parameters_cnt

[in]  Количество параметров, передаваемых в массиве parameters_array[]. Элементы массива имеют специальный тип структуры MqlParam. По умолчанию нулевое значение - параметры не передаются. Если указано ненулевое количество параметров, то параметр parameters_array является обязательным. Можно передавать не более 256 параметров.


Вот скажите, вы лично это проверяли??? То, что индикатор с 256 параметрами вызовется???


Исправляйте!!!

У вас не запускается? Покажите код, который не запустился.

И, пожалуйста, поменьше эмоций, и побольше дела.

 
fxsaber:

Это неправда. И главное, правдой даже быть не могло.

Запустите вручную этот индикатор на двух одинаковых чартах

Если бы расчетные части совпадали, то не было бы распринтовки разной.

Очень сложный вывод для меня.

Почему индикаторы должны видеть один чарт? Потому что на основании ChartID может быть построен алгоритм индикатора???

 
fxsaber:

Советники на OBJ_CHART точно не запускаются (точнее, не работают). Поэтому по таймеру, похоже, нормально. Возможно, там все события не работают.

Советники на OBJ_CHART запускаются и прекрасно работают. Обрабатывают только OnChartEvent (кастомный)  и могут генерить свои кастомные события для других графиков.

 
Andrey Khatimlianskii:

Почему индикаторы должны видеть один чарт?

iCustom-индикаторы не имеют своего чарта. Даже когда добавлены на какой-то чарт.

Потому что на основании ChartID может быть построен алгоритм индикатора???

Да, Chart-функции и евенты, примененные к своему графику (ручные/шаблонные индикаторы), могут быть задействованы для любых действий.

 

Ошибка в Документации

ChartNavigate

Осуществляет сдвиг указанного графика на указанное количество баров относительно указанной позиции графика.

bool  ChartNavigate(
   long  chart_id,     // идентификатор графика
   int   position,     // позиция
   int   shift=0       // значение сдвига
   );

Параметры

chart_id

[in]  Идентификатор графика. 0 означает текущий график.

position

[in]  Позиция графика, относительно которой будет произведено смещение. Значение может быть одним из значений перечисленияENUM_CHART_POSITION.

 
Andrey Barinov:

Советники на OBJ_CHART запускаются и прекрасно работают. Обрабатывают только OnChartEvent (кастомный)  и могут генерить свои кастомные события для других графиков.

Проверил. Советник Experts\Test.mq5

class CUSTOM
{
public:  
  CUSTOM()
  {
    Print(__FUNCSIG__);
    
    Print(EventSetTimer(1) && EventChartCustom(0, 0, 0, 0, NULL) &&
          MarketBookAdd(_Symbol) && 
          ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, true) &&
          ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, true) &&
          ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true) &&
          ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true) &&
          ChartNavigate(0, CHART_BEGIN, 100) &&
          ObjectCreate(0, __FILE__, OBJ_VLINE, 0, 0, 0) &&
          ObjectDelete(0, __FILE__));
    
  }
  ~CUSTOM() { Print(__FUNCSIG__); }
};

const CUSTOM InitDeinit;

void OnTick() { Print(__FUNCSIG__); }
void OnInit() { Print(__FUNCSIG__); }
void OnDeinit( const int ) { Print(__FUNCSIG__); }
void OnChartEvent( const int id, const long&, const double&, const string& ) { Print(__FUNCSIG__ + " " + (string)id) ; }
void OnTimer() { Print(__FUNCSIG__); }
void OnBookEvent( const string& ) { Print(__FUNCSIG__); }


Скрипт

#include <fxsaber\Expert.mqh>  // https://www.mql5.com/ru/code/19003

void OnStart()
{
  if (ObjectCreate(0, __FILE__, OBJ_CHART, 0, 0, 0))
  {
    MqlParam Params[1];
    Params[0].string_value = "Experts\\Test.ex5";

    Print(EXPERT::Run(ObjectGetInteger(0, __FILE__, OBJPROP_CHART_ID), Params));
  }
}


Результат

Test3 (EURUSD,M1)       true
Test (EURUSD,M1)        void CUSTOM::CUSTOM()
Test (EURUSD,M1)        true
Test (EURUSD,M1)        void OnInit()
Test (EURUSD,M1)        void OnChartEvent(const int,const long&,const double&,const string&) 9
Test (EURUSD,M1)        void OnChartEvent(const int,const long&,const double&,const string&) 1000
Test (EURUSD,M1)        void OnChartEvent(const int,const long&,const double&,const string&) 9
Test (EURUSD,M1)        void OnChartEvent(const int,const long&,const double&,const string&) 9
Test (EURUSD,M1)        void OnChartEvent(const int,const long&,const double&,const string&) 9
Test (EURUSD,M1)        void OnDeinit(const int)
Test (EURUSD,M1)        void CUSTOM::~CUSTOM()


Вывод про советники на OBJ_CHART

  • Работают OnInit, OnDeinit, глобальный конструктор/деструктор и OnChartEvent.
  • Не работают OnTimer, OnTick и OnBookEvent.
  • Из евентов ловит только CHARTEVENT_CHART_CHANGE и кастомные.
  • Через OnChartEvent+EventChartCustom советника можно создавать "события" для OnTimer и OnTick, но не OnBookEvent.
 
В глюкотрейдере 5 не правильно работает #property tester_file при указании FILE_COMMON файл не открывается на агенте
 
Anton Ohmat:
В глюкотрейдере 5 не правильно работает #property tester_file при указании FILE_COMMON файл не открывается на агенте

Ну так не из Common-папки (общая для Терминала и локальных Агентов), а из Песочницы берется файл.

 
fxsaber:

Ну так не из Common-папки (общая для Терминала и локальных Агентов), а из Песочницы берется файл.

я на своих удаленных серверах тестирую - не работает. Запуск получается сделать только если на локальной машине в директории МТ лежат файлы, COMMON на оптимизацию не уходит


tester_file

string

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