Errores, fallos, preguntas - página 2898

 

Mensaje a los desarrolladores. El script de Python se cuelga al recibir datos a través de copy_rates_from_pos bajo ciertas circunstancias.

Permítanme explicar la situación. El broker tiene unos 4k instrumentos.
La selección primaria de los instrumentos la hago buscando y filtrando según ciertas reglas.

En uno de los instrumentos del terminal no hay historial (es decir, en la vigilancia del mercado y en la lista de símbolos, el instrumento está presente, pero los datos están vacíos).

Al intentar ejecutar el script: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
el script simplemente se cuelga. No sirve de nada probar o comprobar si hay alguno ya que el error en sí no se produce, todo se queda colgado en esta línea.

Si intento ejecutar: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
, es decir, especificar el número de barra inicial desde 0, no se cuelga y devuelve una tabla vacía.

Adenda. También encontré un problema similar cuando recupero PRIMERO los datos a través de copy_rates_from_pos con el número de barras solicitadas, más de las que hay en el historial. También el script se cuelga. No existe tal error en la segunda solicitud. Por eso parece difícil que se repita el error (quizás, sólo borrando todo el historial del símbolo).

Puede que me equivoque o se me haya pasado algo por alto, pero parece un error ya que la función debería devolver los datos o dar un error.

 
Alexander Mikheev:

Estimados desarrolladores, si me equivoco o no he tenido en cuenta algo, por favor corregidme.

¿Quiere que alguien se tome el tiempo de escribir un código fuente basado en sus datos y probarlo en diferentes servidores comerciales?

No va a suceder. Respete el tiempo de los demás: proporcione todos los datos para reproducir el problema: fuente, servidor, configuración de la máquina, etc.


La fuente es concisa y con comentarios, para que no pierdas tiempo analizando lo que allí se escribió. Di lo que querías conseguir y lo que has conseguido.

 
fxsaber:

Un archivo ZIP protegido por contraseña.

¿Son compatibles los archivos bloqueados con MQL?

 
Stanislav Korotky:

¿Son compatibles los archivos bloqueados con MQL?

No lo sé.

 
suncrypto:

Mensaje a los desarrolladores. El script de Python se cuelga al recibir datos a través de copy_rates_from_pos bajo ciertas circunstancias.

Permítanme explicar la situación. El broker tiene unos 4k instrumentos.
La selección primaria de los instrumentos la hago buscando y filtrando según ciertas reglas.

En uno de los instrumentos del terminal no hay historial (es decir, en la vigilancia del mercado y en la lista de símbolos, el instrumento está presente, pero los datos están vacíos).

Al intentar ejecutar el script: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
el script simplemente se cuelga. No sirve de nada probar o comprobar si hay alguno ya que el error en sí no se produce, todo se queda colgado en esta línea.

Si intento ejecutar: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
, es decir, especificar el número de barra inicial desde 0, no se cuelga y devuelve una tabla vacía.

Adenda. También encontré un problema similar cuando recupero PRIMERO los datos a través de copy_rates_from_pos con el número de barras solicitadas, más de las que hay en el historial. También el script se cuelga. No existe tal error en la segunda solicitud. Por eso parece difícil que se repita el error (quizás, sólo borrando todo el historial del símbolo).

Quizás me equivoqué en algo o se me pasó algo por alto, pero parece ser un error ya que la función debe devolver los datos o dar un error.

Reproducido, corregido.

 
TesterHideIndicators(false) ha dejado de funcionar;
 
suncrypto:

Mensaje a los desarrolladores. El script de Python se cuelga al recibir datos a través de copy_rates_from_pos bajo ciertas circunstancias.

Permítanme explicar la situación. El broker tiene unos 4k instrumentos.
La selección primaria de los instrumentos la hago buscando y filtrando según ciertas reglas.

En uno de los instrumentos del terminal no hay historial (es decir, en la vigilancia del mercado y en la lista de símbolos, el instrumento está presente, pero los datos están vacíos).

Al intentar ejecutar el script: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
el script simplemente se cuelga. No sirve de nada probar o comprobar si hay alguno ya que el error en sí no se produce, todo se queda colgado en esta línea.

Si intento ejecutar: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
, es decir, especificar el número de barra inicial desde 0, no se cuelga y devuelve una tabla vacía.

Adenda. También encontré un problema similar cuando recupero PRIMERO los datos a través de copy_rates_from_pos con el número de barras solicitadas, más de las que hay en el historial. También el script se cuelga. No existe tal error en la segunda solicitud. Por eso parece difícil que se repita el error (quizás, sólo borrando todo el historial del símbolo).

Puede que me equivoque o se me haya pasado algo por alto, pero parece un error ya que la función debería devolver los datos o dar un error.

Arreglado, estará en la próxima beta
 
Aleksey Vyazmikin:
TesterHideIndicators(false) ha dejado de funcionar;

TesterHideIndicator establece la bandera de visibilidad para los indicadores que se crean posteriormente.

No cambia la bandera de visibilidad de los indicadores creados anteriormente.

Puede consultar al siguiente experto

//+------------------------------------------------------------------+
//|                                     TestTesterHideIndicators.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

int ExtHandleMacd;
int ExtHandleEma;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   TesterHideIndicators(true);
   ExtHandleMacd=iMACD(NULL,0,12,26,9,PRICE_CLOSE);
   TesterHideIndicators(false);
   ExtHandleEma=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  }
//+------------------------------------------------------------------+

En el visualizador y en el gráfico abierto después de la prueba simple, el indicador MACD no es visible, la media móvil es visible

Por lo tanto, funciona como se pretende

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Комбинация флагов видимости объекта определяет таймфреймы графика, на которых объект отображаем. Для установки/получения значения свойства OBJPROP_TIMEFRAMES можно использовать функции ObjectSetInteger()/ObjectGetInteger...
 
DMITRII PECHERITSA:
Error - funcionamiento incoherente de los punteros (5.00, 2650)

Error de compilación. ¿Alguna idea?



Utilice la sentencia de dereferencia explícitamente

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   C201022_090654 c_1(* new C201022_090641); //works
   C201022_090654 c_3(* new C201022_092325(1)); //works
//---'new' - parameter passed as reference, variable expected
   C201022_090654 c_2(* new C201022_090641(1)); //not works
                      ^
  }
 

A100:
Ошибка при компиляции:

typedef void (*fn)();
void f() {}
fn g() { return f; }
oid OnStart()
{
        g()(); //Error: ')' - expression expected
}

Previamente he investigado esta cuestión y esto es lo que he encontrado:

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

Sergey Dzyublik, 2020.04.04 21:46

Bug MT5(build 2375) error de compilación al llamar a una función a través de su puntero, cuando se utiliza un array de punteros a una función:

#define  PRINT(x) ; Print(#x, ":", string(x))

void test(){
   PRINT(__FUNCSIG__);
}

template<typename T>
void call(T f_ptr){
   f_ptr();
}


template<typename T>
class A{
public:
   T arr_1[1];
   
   typedef void (*ff)();
   ff arr_2[1];  
   
   
   T test_1(){
      return arr_1[0];
   } 
   
   ff test_2(){
      return arr_2[0];
   } 
   
   T operator[](int index){
      return arr_1[index];
   }
};

void OnStart(){
   typedef void (*ff)();
   ff arr[1];
   arr[0] = test;   
   
   ff f_ptr = arr[0];
   f_ptr();             //Ok
   call(arr[0]);        //Ok
   arr[0]();            //Compile Error: ')' - expression expected   
   
   
   A<ff> a;             
   a.arr_1[0] = test;
   a.arr_2[0] = test;
   
   
   a.arr_1[0]();        //Compile Error: ')' - expression expected   
   a.arr_2[0]();        //Compile Error: ')' - expression expected   
   
   a.test_1()();        //Compile Error: ')' - expression expected   
   a.test_2()();        //Compile Error: ')' - expression expected   
   
   a[0]();              //Ok ???
}