Errores, fallos, preguntas - página 1396

 
Ilya Malev:
Hice MathRand en el ejemplo sólo para demostrar cómo funciona la escala. En el original tenía el cálculo de los niveles numéricos allí utilizando la metodología de algún autor de comercio. Al principio queríamos hacerlos de 1 a 5, pero incluso MT4 no consiguió la escala adecuada incluso con esos valores en el buffer con DRAW_NONE. Después de hacerlas negativas y fijar el mínimo en 0, el problema estaba resuelto. Al portar el indicador a MT5 parecía que esta solución tampoco funcionaría. Tuve que multiplicar por Punto como dijo Voldemar.

Por cierto, me olvidé por completo. ))

Pruébalo así:

   SetIndexBuffer(0,buffer1,INDICATOR_DATA);
   SetIndexBuffer(1,buffer2,INDICATOR_CALCULATIONS);

INDICADOR_CÁLCULOS >>>

 
Karputov Vladimir:
Tu ejemplo está torcido y no quieres arreglarlo. Lo comprobaré cuando lo arregle.

Lo arreglaría si fuera un código de uso real. Pero este código fue creado sólo para demostrar el problema, lo que ha hecho con éxito. Es una pérdida de tiempo limpiarlo, porque no afectará al resultado.

 
Anatoli Kazharski:

Por cierto, me olvidé por completo. ))

Pruébalo así:

Probado tanto si indicator_plots=1 como conINDICATOR_CALCULATIONS

la segunda lectura del buffer simplemente desaparece de la ventana de datos, independientemente de PlotIndexSetInteger(1, PLOT_SHOW_DATA, true);

 
Anatoli Kazharski:

Puedes intentar reportar el error a servicedesk y esperar una respuesta allí.

Lo he hecho. Si responden, te lo haré saber). Sin embargo, dudo que sea un error. Así lo descubrirás.
 
Ilya Malev:

Probado ambos con indicator_plots=1 yINDICATOR_CALCULATIONS

las lecturas del segundo buffer simplemente desaparecen de la ventana de datos, independientemente de especificar PlotIndexSetInteger(1, PLOT_SHOW_DATA, true);

Pero el problema de la escala se resuelve de esta manera. Por lo tanto, se puede crear una solicitud a servicedesk, que sólo añadir la capacidad de mostrar tales búferes en la ventana de datos.

Y también puedes intentar hacerlo así:

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int    id,      // идентификатор события
                  const long   &lparam, // параметр события типа long
                  const double &dparam, // параметр события типа double
                  const string &sparam) // параметр события типа string
  {
   if(id==CHARTEVENT_MOUSE_MOVE)
     {
      int      subwin =WRONG_VALUE; // Номер окна, в котором находится курсор
      datetime time   =NULL;        // Время соответствующее координате X
      double   level  =0.0;         // Уровень (цена) соответствующий координате Y
      //---
      if(ChartXYToTimePrice(0,(int)lparam,int(dparam),subwin,time,level))
        {
         int bars_total=Bars(Symbol(),Period(),time,TimeCurrent());
         //---
         Comment("x: ",lparam,"; y: ",(int)dparam,"; subwin: ",subwin,"; time: ",time,"; level: ",level,"\n",
                 "indicator value: ",buffer2[bars_total]);
        }
     }
  }

//---

En OnInit() hay que añadir:

void OnInit()
  {
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
  }
 
Anatoli Kazharski:

Así que puedes crear una petición a servicedesk para que simplemente añada la capacidad de mostrar dichos buffers en la ventana de datos.

Acabo de describir el problema, la lógica de los valores del buffer DRAW_NONE es, por definición, diferente de la lógica de los valores renderizados, no son valores gráficos, y por lo tanto escalar con ellos en mente no es lógico. Cómo quieran resolver el problema, o si quieren dejarlo como está, no es asunto mío.

 
Ilya Malev:

Acabo de describir el problema, la lógica de los valores del buffer DRAW_NONE es por definición diferente a la lógica de los valores renderizados, no son valores gráficos y por lo tanto escalar con ellos en mente no es lógico. Y cómo quieran resolver este problema o quieran dejarlo como está no es de mi incumbencia.

¿No es adecuada la opción del post anterior? Por si acaso se deja todo como está. )

Archivos adjuntos:
Test.mq5  4 kb
 
Anatoli Kazharski:

¿No es adecuada la opción del post anterior? Sólo en caso de que las cosas sigan como están. )

Por supuesto que gracias por el consejo, si quisiera idear alguna muletilla también se me ocurriría algo, pero en primer lugar nos sentimos cómodos mirando los valores de la ventana de datos. En segundo lugar, deberíamos utilizar el valor de este buffer del indicador en otros indicadores y Asesores Expertos, y algo me dice que si hacemos un buffer para los cálculos, será imposible obtener sus valores a través de iCustom.

Como resultado, hemos resuelto el problema multiplicando el segundo valor del buffer por Punto

 
Ilya Malev:

Acabo de describir el problema, la lógica de los valores del buffer DRAW_NONE es por definición diferente a la lógica de los valores renderizados, no son valores gráficos y por lo tanto escalar con ellos en mente no es lógico. Cómo quieran resolver este problema, o si quieren dejarlo como está, no es asunto mío.

Todo depende de dónde quiera que se muestren los valores. Si se establece la visualización en una ventana separada, no importa si los valores calculados del buffer no son visibles. Todos los valores seguirán entrando en esta ventana. En consecuencia, la balanza puede romperse.

No es lógico, estoy de acuerdo, pero es poco probable que se arregle.

 
Ilya Malev:

Por supuesto gracias por el consejo, si quisiera hacer alguna muletilla, también se me ocurriría algo, pero antes de nada nos sentimos cómodos mirando los valores en la ventana de datos. Y en segundo lugar, necesitamos utilizar este valor del buffer del indicador en otros indicadores y Asesores Expertos, y algo me dice que si hacemos un buffer para los cálculos, será imposible obtener sus valores a través de iCustom.

Pruébalo. Es posible sacar los valores del buffer de color. Así que también es posible sacarlo del buffer de cálculo. Al fin y al cabo, tiene un índice, es decir, es teóricamente posible referirse a él.
Razón de la queja: