Erros, bugs, perguntas - página 2458

 

Ao mudar de MQL4 para MQL5, encontrei uma falha:

Código:

ResetLastError();

int ObjTotal = ObjectsTotal(0);

int Error = GetLastError();

regressa:

ObjTotal = 0.

Erro = 4022

O que é este erro e porque não é mencionado na documentação?

Experimentei diferentes variantes: ObjectsTotal(0, -1, -1), ObjectsTotal(ChartID(), 0, OBJ_TREND), etc.

O resultado é o mesmo.

Como fazê-lo funcionar?

Terminal: MetaTrader 5, Versão 5.00 build 2025.
 
Игорь Евдокимов:

Conselho: Se quiser perguntar algo, insira o código COMPLETO, e não um pedaço dele.

Qual é o objectivo: qualquer pessoa pega no seu código e executa-o por conta própria. E quase ninguém olha para o código volumoso - o código volumoso é desrespeitoso.

Exemplo do seu código:

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError();
   int ObjTotal=ObjectsTotal(0);
   int Error=GetLastError();
   Print("ObjectsTotal: ",ObjTotal,", GetLastError: ",Error);
//---
  }
//+------------------------------------------------------------------+

Execute-o num gráfico que não tenha quaisquer objectos gráficos. Resultado:

2019.05.10 13:26:59.169 1 (EURUSD,H1)   ObjectsTotal: 0, GetLastError: 0

Ou seja, não há erro.


Utilização do terminal:

2019.05.10 13:25:35.665 MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
2019.05.10 13:25:35.668 Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3712 / 8077 Mb, Disk: 77 / 415 Gb, GMT+2
2019.05.10 13:25:35.668 C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
Arquivos anexados:
1.mq5  2 kb
 
Vladimir Karputov:

Um conselho: se quiser perguntar algo, insira o código COMPLETO, e não uma peça.

Obrigado pelo conselho, é o que vou fazer.

No entanto, a questão permanece em aberto.

Clarificação: se o pedaço de código do post anterior estiver na função OnDeinit() do indicador, o resultado é este:

2019.05.10 14:08:20.105 PtS (EURUSD,H1) ObjectosTotal: 0, GetLastError: 4022

Se executar o mesmo código após apagar o indicador do gráfico, como o script (1.mq5 do post anterior), obtemos

2019.05.10 14:08:33.609 1 (EURUSD,H1) ObjectosTotal: 8575, GetLastError: 0

Por favor, ajude-me a compreender a razão.

Cavalheiros desenvolvedores! Que erro é este que não está na documentação?

 
Vladislav Andruschenko :

erro no testador de estratégia durante a optimização.

"tarefa rejeitada pelo agente testador "

Por exemplo, se a moeda da sua conta for EUR,

  • EURJPY Sem problemas
  • Erro em GBPJPY


Se a moeda da sua conta for USD

  • USDCAD Sem problemas
  • USDJPY Sem problemas
  • Erro no EURAUD


aparece quando outros pares de moedas são utilizados no código.

No meu exemplo está a utilizar o cálculo do lote dinâmico



ou seja, quando a EA está a solicitar o preço de outra moeda.

@Vladislav Andruschenko

Olá, obteve alguma resposta ou solução para este problema?

 
Vladimir Pastushak:

Quando o horário/período é alterado, o PBB recebe um valor de 10, independentemente do valor que tenha especificado no campo de entrada.

No momento da reinicialização, é como se fosse a primeira corrida.

Há duas maneiras de resolver o seu problema

1 - Armazenar o valor PBB em variáveis globais e obter o período a partir daí.

2 - Quando o OnChartEvent dispara, reinicialize o indicador MA e obtenha uma nova pega...

Verifiquei todas as opções. Não funciona.

Falha na MQL5.

Não inicializa novos valores. Apenas com introdução de parâmetros no PBB_=. Nenhuma outra opção. Isto não é de todo bom.

 
Uladzimir Izerski:

Verifiquei todas as opções. Não funciona.

Falha no programa MQL5.

Os novos valores não são inicializados. Apenas com input int PBB_= parâmetro. Nenhuma outra opção. Isto não é de todo bom.

Tudo está bem na MQL, só não compreende o que está a fazer no seu código e como tudo funciona...

Mais uma vez, quando se chamaChartSetSymbolPeriod(0,_Symbol,_Period);

Está a reinicializar tudo por defeito...

Em alternativa, tente o inite para solicitar um valor do seu campo de texto.

Quando se inicia o indicador pela primeira vez, tudo é criado e quando se alteram os dados no campo, ele chamará nova unidade e definirá o valor do seu campo de texto...

 
Vladimir Pastushak:

Tudo está bem na MQL, só não se compreende o que se está a fazer no código e como tudo funciona...

Mais uma vez, quando se chamaChartSetSymbolPeriod(0,_Symbol,_Period);

Está a reinicializar tudo por defeito...

Em alternativa, tente o inite para solicitar um valor do seu campo de texto.

Depois da lógica, o primeiro início do indicador, tudo é criado, mas quando alterar os dados no campo, haverá uma nova chamada na unidade e definição de valores do seu campo de texto...

Tentei com o campo de texto e através da GlobalVariable, mas nunca tentei nada. É tão silencioso como num tanque.

Noutras variantesOnCalculate trabalha sem problemas.

 
Uladzimir Izerski:

Tentei tanto a partir de um campo de texto como através da GlobalVariable e tudo o mais que tentei. É tão silencioso como um tanque.

A outra versão da OnCalculate funciona sem problemas.

Isso significa que está a fazer algo de errado

 
Quando acedo à minha conta abre-se uma janela que diz que não devo ler as "filas" não preparadas, embora diga que a autorização permite a ligação à conta...O que devo fazer?
 
Vladimir Pastushak:

Então está a fazer algo de errado.

Já afixou o código.

Se sou inepto, alguém deve ser um profissional. Ainda não o vejo.

Aceito o vosso esforço para encontrar uma resposta. Há mais do que isso. Ou seja, a nível dos criadores.

Razão: