Errores, fallos, preguntas - página 2148

 
Andrey Khatimlianskii:

¿Está confirmado?

No, claro que no. Todo lo escrito aquí es una conclusión independiente.

Recuerdo que Renat o Slava dijeron que los indicadores no se duplican, aunque se ejecuten manualmente. El hash de los parámetros coincide: se utiliza la misma parte de cálculo.

Esto no es cierto. Y lo más importante, ni siquiera podría ser cierto.

Ejecute este indicador manualmente en dos gráficos idénticos

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

Si las partes de cálculo fueran las mismas, no habría repeticiones diferentes. Creo que el 90% de las conclusiones expresadas son correctas.

 
Nexxtor:

Ayuda a los autores, o al lenguaje MQL5, según quién tenga las manos fuera de ***, ¡¡¡sois muy molestos!!!

IndicatorCreate() dice:

parámetros_cnt

[in] Número de parámetros pasados en la matriz parameters_array[]. Los elementos del array tienen un tipo especial de estructuraMqlParam. El valor por defecto es cero - no se pasan parámetros. Si se especifica un número de parámetros distinto de cero, el parámetroparameters_array es obligatorio. Puede pasar hasta 256 parámetros.


Dígame, ¿lo ha comprobado personalmente? Que el indicador con 256 parámetros sea llamado???


¡Arréglalo!

¿No funciona? Muéstrame el código que no se ejecuta.

Y por favor, menos emoción y más negocio.

 
fxsaber:

No es cierto. Y lo que es más importante, ni siquiera podría ser cierto.

Ejecute este indicador manualmente en dos gráficos idénticos

Si las partes calculadas fueran las mismas, no habría una impresión diferente.

Una conclusión muy difícil para mí.

¿Por qué los indicadores deben ver el mismo gráfico? Porque se puede construir un algoritmo indicador basado enChartID???

 
fxsaber:

Los EAs en OBJ_CHART ciertamente no funcionan (o mejor dicho, no funcionan). Así que por el temporizador, parece que está bien. Tal vez todos los eventos no están funcionando allí.

Los Asesores Expertos en OBJ_CHART se inician y funcionan bien. Sólo manejan OnChartEvent (personalizado) y pueden generar sus eventos personalizados para otros gráficos.

 
Andrey Khatimlianskii:

¿Por qué los indicadores deben ver el mismo gráfico?

Los indicadores iCustom no tienen su propio gráfico. Incluso cuando se añade a algún gráfico.

Porque se puede construir un algoritmo indicador basado en ChartID???

Sí, las funciones gráficas y los eventos aplicados a su gráfico (indicadores manuales/plantillas) pueden utilizarse para cualquier acción.

 

Error en la documentación

ChartNavigate

Mueve el gráfico especificado en el número de barras especificado en relación con la posición del gráfico especificada.

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

Parámetros

chart_id

[en] ID de la carta. 0 significa el gráfico actual.

posición

[in] Posición del gráfico en relación con la cual se desplazará el gráfico. El valor puede ser uno de los valores del enumENUM_CHART_POSITION.

 
Andrey Barinov:

Los Asesores Expertos en OBJ_CHART se ejecutan y funcionan bien. Sólo manejan OnChartEvent (personalizado) y pueden generar sus propios eventos personalizados para otros gráficos.

Comprobado. Expert\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__); }


Guión

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


Resultado

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()


Conclusión sobre los asesores expertos en OBJ_CHART

  • Funcionará en OnInit, OnDeinit, constructor/destructor global y OnChartEvent.
  • OnTimer, OnTick y OnBookEvent no funcionan.
  • Sólo se capturan los eventos CHARTEVENT_CHART_CHANGE y los eventos personalizados.
  • A través de OnChartEvent+EventChartCustom EA puede crear "eventos" para OnTimer y OnTick, pero no OnBookEvent.
 
En glucotrader 5 la #propiedad tester_file no funciona correctamente cuando se especifica FILE_COMMON, el archivo no se abre en el agente
 
Anton Ohmat:
En glucotrader 5 la propiedad tester_file no funciona correctamente cuando se especifica FILE_COMMON, el archivo no se abre en el agente

Pues bien, el archivo no se toma de la carpeta Common (común para los Agentes de Terminal y locales), sino de Sandbox.

 
fxsaber:

Bueno, no desde la carpeta común (común para el Terminal y los Agentes locales), sino desde el Sandbox.

Lo pruebo en mis servidores remotos: no funciona. Ejecutar es posible hacer sólo si la máquina local en el directorio MT mentira archivos, COMÚN en la optimización no va


archivo_de_prueba

cadena

Nombre del archivo para el probador, especificando la extensión, entre comillas dobles (como una cadena constante). El archivo especificado se pasará al probador para que trabaje. Los archivos de entrada para las pruebas, si son necesarios, deben especificarse siempre

Razón de la queja: