Erros, bugs, perguntas - página 2898

 

Mensagem para os criadores. O script Python fica pendurado ao receber dados através de copy_rates_from_pos em determinadas circunstâncias.

Deixem-me explicar a situação. O corretor tem cerca de 4k instrumentos.
Faço a selecção primária dos instrumentos, pesquisando-os e filtrando-os de acordo com certas regras.

Num dos instrumentos do terminal não há historial (ou seja, na vigilância do mercado e na lista de símbolos, o instrumento está presente, mas os dados estão vazios).

Ao tentar executar o guião: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
o guião apenas fica pendurado. Não ajuda tentar ou verificar a ausência de nenhum, uma vez que o erro em si não ocorre, tudo fica pendurado nesta linha.

Se eu tentar executar: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
, ou seja, especificar o número de barra inicial a partir de 0, não pendura e devolve uma tabela vazia.

Adenda. Também encontrei um problema semelhante quando PRIMEIRO recupero dados através de copy_rates_from_pos com o número de barras solicitadas, mais do que há na história. Também o guião está pendurado. Não existe tal erro no segundo pedido. É por isso que parece ser difícil repetir o erro (talvez, apenas apagando toda a história do símbolo).

Posso estar errado ou ter perdido alguma coisa, mas parece ser um erro, uma vez que a função deve ou devolver os dados ou cometer um erro.

 
Alexander Mikheev:

Caros programadores, se eu estiver enganado ou não tiver considerado algo, por favor corrijam-me.

Quer que alguém dedique algum tempo a escrever um código fonte baseado nos seus dados e testá-lo em diferentes servidores comerciais?

Isso não vai acontecer. Respeitar o tempo dos outros: fornecer dados completos para reproduzir o problema - fonte, servidor, configuração da máquina e assim por diante.


A fonte é concisa e com comentários, para que não se perca tempo a analisar o que aí foi escrito. Diga o que queria obter e o que conseguiu.

 
fxsaber:

Um arquivo ZIP protegido por palavra-passe.

Os arquivos fechados são suportados em MQL?

 
Stanislav Korotky:

Os arquivos fechados são suportados em MQL?

Não sei.

 
suncrypto:

Mensagem para os criadores. O script Python fica pendurado ao receber dados através de copy_rates_from_pos em determinadas circunstâncias.

Deixem-me explicar a situação. O corretor tem cerca de 4k instrumentos.
Faço a selecção primária dos instrumentos, pesquisando-os e filtrando-os de acordo com certas regras.

Num dos instrumentos do terminal não há historial (ou seja, na vigilância do mercado e na lista de símbolos, o instrumento está presente, mas os dados estão vazios).

Ao tentar executar o guião: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
o guião apenas fica pendurado. Não ajuda tentar ou verificar a ausência de nenhum, uma vez que o erro em si não ocorre, tudo fica pendurado nesta linha.

Se eu tentar executar: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
, ou seja, especificar o número de barra inicial a partir de 0, não pendura e devolve uma tabela vazia.

Adenda. Também encontrei um problema semelhante quando PRIMEIRO recupero dados através de copy_rates_from_pos com o número de barras solicitadas, mais do que há na história. Também o guião está pendurado. Não existe tal erro no segundo pedido. É por isso que parece ser difícil repetir o erro (talvez, apenas apagando toda a história do símbolo).

Talvez me tenha enganado sobre alguma coisa ou me tenha escapado alguma coisa, mas parece ser um erro, uma vez que a função deve ou devolver os dados ou cometer um erro.

Reproduzido, corrigido.

 
TesterHideIndicators(false) deixou de funcionar;
 
suncrypto:

Mensagem para os criadores. O script Python fica pendurado ao receber dados através de copy_rates_from_pos em determinadas circunstâncias.

Deixem-me explicar a situação. O corretor tem cerca de 4k instrumentos.
Faço a selecção primária dos instrumentos, pesquisando-os e filtrando-os de acordo com certas regras.

Num dos instrumentos do terminal não há historial (ou seja, na vigilância do mercado e na lista de símbolos, o instrumento está presente, mas os dados estão vazios).

Ao tentar executar o guião: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 1, analysis_days),
o guião apenas fica pendurado. Não ajuda tentar ou verificar a ausência de nenhum, uma vez que o erro em si não ocorre, tudo fica pendurado nesta linha.

Se eu tentar executar: rates_d1 = mt5.copy_rates_from_pos(curSymbol.name, mt5.TIMEFRAME_D1, 0, analysis_days),
, ou seja, especificar o número de barra inicial a partir de 0, não pendura e devolve uma tabela vazia.

Adenda. Também encontrei um problema semelhante quando PRIMEIRO recupero dados através de copy_rates_from_pos com o número de barras solicitadas, mais do que há na história. Também o guião está pendurado. Não existe tal erro no segundo pedido. É por isso que parece ser difícil repetir o erro (talvez, apenas apagando toda a história do símbolo).

Posso estar errado ou ter perdido alguma coisa, mas parece ser um erro, uma vez que a função deve ou devolver os dados ou cometer um erro.

Fixo, estará no próximo beta
 
Aleksey Vyazmikin:
TesterHideIndicators(false) deixou de funcionar;

TesterHideIndicator define a bandeira de visibilidade para os indicadores que são criados posteriormente.

Não altera a bandeira de visibilidade dos indicadores anteriormente criados.

Pode verificar com o seguinte perito

//+------------------------------------------------------------------+
//|                                     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()
  {
  }
//+------------------------------------------------------------------+

No visualizador e no gráfico aberto após o teste simples, o indicador MACD não é visível, a Média Móvel é visível

Portanto, funciona como pretendido

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

Erro de compilação. Alguma ideia?



Utilizar explicitamente a declaração de desreferenciação

//+------------------------------------------------------------------+
//| 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
}

Anteriormente pesquisei esta questão, foi isto que encontrei:

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

Sergey Dzyublik, 2020.04.04 21:46

Bug MT5(build 2375) erro de compilação ao chamar uma função através do seu ponteiro, quando é utilizada uma série de apontadores para uma função:

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