Lectura de los búferes de los indicadores fijados en el gráfico - página 5

 
Dmitry Fedoseev:
¿Qué declaración? La afirmación del título es incorrecta. No hay problemas con los topes de lectura. Con lo que los problemas - escribió, y todavía dio un enlace a este post. ¿Debo seguir corriendo detrás de ti y obligarte a hacerlo?

La agresividad es inversamente proporcional a la argumentación. No entiendo cuál es el enlace en cuestión.

Se dieron códigos de indicadores y de EA. Se ha demostrado que en algunos casos no se pueden obtener buffers a través de iCustom. Así que el titular no sólo es correcto, sino que está probado.

Con las restricciones de iCustom de otro tipo, es similar. ¿Qué sentido tiene su "se puede" y "no veo ningún problema" si no se dice nada más? No te metas en el hilo entonces, ya que eres incapaz de aportar nada constructivo.

 
Es imposible escribir un Asesor Experto que reciba los valores del buffer de los indicadores que se ejecutan en un gráfico con parámetros de entrada no predeterminados. Porque iCustom está implementado de tal manera, que requiere escribir su propia llamada en el SOURCE para cada indicador.
 
comp:

Es como una patada en la cabeza hacer una declaración así. Decidí buscar indicadores en kodobase. No he encontrado NINGUNO que utilice lo que estoy acostumbrado: modelo dirigido por eventos + OOP.

Es difícil decir qué es más: la frustración o la decepción por este estado de cosas. Resulta que los indicadores son realmente primitivos para escribir.

Muéstrame un ejemplo en el que se necesite un modelo de eventos combinado con la entrega de datos a un EA.

No tengo nada en contra del acceso a los indicadores que se ejecutan en un gráfico. Y a la estructura de parámetros también (por cierto, MT5 ya lo tiene).

Pero, una vez más, trato de insinuar que estás abordando la tarea desde el lado equivocado. No hay necesidad de clavar clavos con un microscopio, es para otra cosa.

 
comp:
Es imposible escribir un Asesor Experto que reciba los valores del buffer de los indicadores que se ejecutan en un gráfico con parámetros de entrada no predeterminados. Debido a que iCustom está implementado de tal manera, requiere escribir su propia llamada en el SOURCE para cada indicador.

No lo sabía.

búho lee el buffer 0

el indy puede colgar en un gráfico diferente

icomp el indicador

ecomp owl

también es posible escribir valores de owl en el buffer del indicador

Archivos adjuntos:
icomp_v2.ex4  8 kb
ecomp_v2.ex4  6 kb
 

Ejemplo de un script que muestra los nombres y parámetros de entrada de todos los indicadores que se ejecutan en un gráfico

#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;
}

Estos datos deberían ser suficientes para calcular los valores de los indicadores. Pero debido a la "elipsis" de iCustom es imposible hacerlo.

 
pako:

No lo sabía.

búho lee el buffer 0

el indy puede colgar en un gráfico diferente

icomp el indicador

ecomp owl

¿Fuentes?
 
comp:
¿Las fuentes?
No hay motivación.
 
comp:

Un ejemplo de script que muestra los nombres y parámetros de entrada de todos los indicadores que se ejecutan en un gráfico

Estos datos deberían ser suficientes para calcular los valores de los indicadores. Pero debido a la "elipsis" de iCustom es imposible hacerlo.

¿quieres saber qué indicador está en el gráfico y sus parámetros?

puede ver el nombre

cuánto y qué parámetros se pueden ver

y la secuencia de comandos muestra el


nombre y cuántos parámetros

 
pako:

¿quieres saber qué indicador está en el gráfico y sus parámetros?

No, quiero entender qué es lo que no funciona en tu ejemplo, porque tu EA no muestra datos cambiantes del indicador.

 
comp:

No, quiero entender qué es lo que no funciona en tu ejemplo porque tu EA no muestra datos cambiantes del indicador.

muestra los datos del buffer 0

muestra los datos del buffer 0.

Razón de la queja: