Чтение буферов индикатора, установленного на чарт - страница 5

 
Dmitry Fedoseev:
Какие заявления? Заявление в заголовке неверное. Проблем с чтением буферов нет. С чем проблемы - писал, и еще давала ссылку на этот пост. Может еще бегать за тобой и насильно впихивать? 

Агрессия обратнопропорциональна аргументации! О какой ссылке идет речь - не понял.

Были даны коды индикатора и советника. Показано, что через iCustom нельзя получить буферы в некоторых случаях. Так что заголовок не просто верен, он еще и доказан.

С iCustom-ограничениями другого рода - аналогично. Какой смысл в ваших "можно" и "не вижу проблем", если ничего более не говорится? Не встревайте тогда в ветке, раз никакого конструктива внести не в состоянии.

 
Невозможно написание советника, который бы получал значения буферов запущенных на чарте индикаторов с недефолтными входными параметрами. Поскольку iCustom реализован так, что требует прописывание своего вызова в ИСХОДНИКЕ для каждого индикатора.
 
comp:

Как обухом по голове такое заявление. Решил поискать индикаторы в кодобазе. Не нашел НИ ОДНОГО, в котором бы использовалось то, к чему привык: событийная модель + ООП.

Сложно сказать, чего больше: расстройства или разочарования от такого положения вещей. Индикаторы, оказывается, НЕОБХОДИМО писать примитивно.

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

Я ничего не имею против доступа к запущенным на графике индикаторам. И к структуре параметров тоже (в МТ5, кстати, она уже есть).

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

 
comp:
Невозможно написание советника, который бы получал значения буферов запущенных на чарте индикаторов с недефолтными входными параметрами. Поскольку iCustom реализован так, что требует прописывание своего вызова в ИСХОДНИКЕ для каждого индикатора.

я не знал

сова читает буфер 0

индюк может висеть на другом графике 

icomp   индюк 

ecomp  сова 

 

также из совы можно записть значения в буфер индюка 

Файлы:
icomp_v2.ex4  8 kb
ecomp_v2.ex4  6 kb
 

Пример скрипта, который выдает имена и входные параметры всех запущенных на чарте индикаторов

#property strict

string GetBetweenString( string &SourceString, const string BeginString, const string EndString = "" )
{
  string Str = SourceString;
  int Pos1 = 0;
  int Pos2 = 0;

  if (BeginString != "")
    Pos1 = StringFind(SourceString, BeginString);

  if (Pos1 >= 0)
  {
    Pos1 += StringLen(BeginString);

    Pos2 = StringFind(SourceString, EndString, Pos1);

    if (Pos2 != Pos1)
      Str = StringSubstr(SourceString, Pos1, Pos2 - Pos1);
    else
      Str = "";
  }

  SourceString = StringSubstr(SourceString, Pos2 + StringLen(EndString));

  return(Str);
}

string FileToString( const string FileName )
{
  string Res = "";

  const int handle = FileOpen(FileName, ::FILE_READ|::FILE_BIN);

  if (handle != INVALID_HANDLE)
  {
    uchar Array[];

    FileReadArray(handle, Array);

    Res = CharArrayToString(Array);

    FileClose(handle);
  }

  return(Res);
}

string GetIndicatorsData( const long Chart_ID = 0 )
{
  string Res = "Current chart:";

  const string FileName = ::WindowExpertName() + ".tpl";

  if (ChartSaveTemplate(Chart_ID, "..\\MQL4\\Files\\" + FileName))
  {
    string Str = FileToString(FileName);

    int PosName = StringFind(Str, "name=Custom Indicator");

    while (PosName > 0)
    {
      const string IndicatorName = GetBetweenString(Str, "<indicator>\r\nname=Custom Indicator\r\n<expert>\r\nname=", "\r\n");

      Res += "\n\nIndicator: " + IndicatorName;

      const int PosInputs = StringFind(Str, "<inputs>");
      PosName = StringFind(Str, "name=Custom Indicator");

      if (PosInputs > 0)
        if ((PosName < 0) || (PosName > PosInputs))
          Res += "\nInputs:\n" + GetBetweenString(Str, "<inputs>\r\n", "\r\n</inputs>");

      Res += "\n\nLast Null Buffer Value (ONLY Default Inputs) = " + (string)iCustom(Symbol(), Period(), IndicatorName, 0, 0);
    }
  }

  return(Res);
}

void OnStart( void )
{
  MessageBox(GetIndicatorsData());

  return;
}

 Этих данных должно быть достаточно, чтобы вычислить значения индикаторов. Но из-за "многоточия" iCustom невозможно это сделать.

 
pako:

я не знал

сова читает буфер 0

индюк может висеть на другом графике 

icomp   индюк 

ecomp  сова 

Исходники?
 
comp:
Исходники?
мотивации чета нет
 
comp:

Пример скрипта, который выдает имена и входные параметры всех запущенных на чарте индикаторов

 Этих данных должно быть достаточно, чтобы вычислить значения индикаторов. Но из-за "многоточия" iCustom невозможно это сделать.

вы хотите узнать какой индюк висит на графике и его параметры?

 название можете посмотреть

сколько и какие параметры тоже можете посмотреть

 

 и скрипт показывает правильно


название и сколько параметров

 

 
pako:

вы хотите узнать какой индюк висит на графике и его параметры?

Нет, я хочу понять, что не работает в вашем примере, потому что ваш советник не показывает изменяющиеся данные индикатора.

 
comp:

Нет, я хочу понять, что не работает в вашем примере, потому что ваш советник не показывает изменяющиеся данные индикатора.

показывает данные из буфера 0

что записани то и показывает 

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