Erros, bugs, perguntas - página 624

 
ivandurak:

Ficheiro de erro de carregamento no Expert Advisor. Encontrar 10 diferenças. O primeiro código refere-se ao guião, o segundo ao Expert Advisor, são idênticos Ctrl-C Ctrl-V. O código funciona no guião, não funciona no Expert Advisor.

Para encontrar 10 diferenças, é necessário consultar o código de abertura de ficheiros. (e adicionar a este código aberto saída de código de erro em caso de falha)

Segundo, se quiser testar a EA com este ficheiro adicione a linha #property tester_file "KitMaRsi.csv" ao código EA

 
Olá. Na MQL4, o erro ERR_HISTORY_WILL_UPDATED(4066) pode ocorrer ao executar um programa. A função GetLastError() retorna o código de erro. Tem um erro semelhante na MQL5? Pesquisei aquihttps://www.mql5.com/ru/docs/constants/errorswarnings/errorcodes mas não encontrei nada semelhante.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения - Документация по MQL5
 
Druide:
Olá. Na MQL4, ao executar um programa, pode ocorrer o erro ERR_HISTORY_WILL_UPDATED(4066), cujo código é devolvido pela função GetLastError(). Tem um erro semelhante na MQL5? Pesquisei aquihttps://www.mql5.com/ru/docs/constants/errorswarnings/errorcodes mas não encontrei nada semelhante.

Não vou dizer nada sobre o erro. O próprio terminal assegura que os dados estão sincronizados, pode sincronizar (carregar) os dados e verificar se o histórico está sincronizado ou não.

A organização do acesso aos dados é descrita aqui (há um exemplo de guião de carregamento de histórico).

Funções que podem ser necessárias: SeriesInfoInteger e SymbolIsSynchronized

 
awkozlov:

A troca com as variáveis de carácter parece não funcionar.

Em vez de:

'Tipo' - tipo de expressão de troca ilegal
Comprar' - a expressão constante não é integral


Utilizar identificadores em vez de texto. O que seria mais simples e mais lógico...

//Что-то типа такого (или свои идентификаторы). Написать функцию конвертирующую текст в идентификатор и обратно (при необходимости) достаточно просто.
//Да и выглядит это более профессионально в конечном итоге.
  switch(type)
  {
  case ORDER_TYPE_BUY: {direction = type;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
  case ORDER_TYPE_SELL: {direction = type; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
  default: {return(lot_value);}
  }

  switch(type)
  {
  case OP_BUY: {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
  case OP_SELL: {direction = RDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
  default: {return(lot_value);}
  }
 
awkozlov:

A troca com as variáveis de carácter parece não funcionar.

Em vez disso:

'tipo' - tipo de expressão de troca ilegal
Comprar' - a expressão constante não é integral

Tenho de o desenhar assim:

Não é tão claro e está torto.

Funciona bem em outras línguas.

Devo escrevê-lo de outra forma?

Fui eu que fiz isto.

#define  OP_BUY               0
#define  OP_SELL              1
#define  OP_BUYLIMIT          2
 
Interesting:

Não vou dizer nada sobre o erro. O próprio terminal assegura que os dados estão sincronizados, pode sincronizar (carregar) os dados e verificar se o histórico está sincronizado ou não.

A organização do acesso aos dados é descrita aqui (há um exemplo de guião de carregamento do histórico).

Funções que podem ser necessárias: SeriesInfoInteger e SymbolIsSynchronized

Obrigado! Já está.
 

Existem analogias de bibliotecas como stdlib.mqh, WinUser32.mqh, stderror.mqh em MQL5, em particular, eu estou interessado na função PostMessageA?

 

Ao optimizar com vários agentes, os resultados são apresentados no gráfico pela ordem em que são processados, ou seja, alternando. É possível fazer a ordem em que os resultados são exibidos de acordo com a selecção dos parâmetros, como foi no MT4? Isto é, o resultado que viria mais tarde seria inserido na ordem correcta. Só estou a dizer que não é conveniente seguir tendências e regularidades durante a optimização e os resultados só podem ser analisados depois de os cálculos serem feitos.

++: Trata-se de optimização com força bruta total - não faz naturalmente sentido em genética.

 
Konstantin83:

Descrição no manual

De facto, a

bool ObjectCreate(
long chart_id, // identificador do gráfico
string nome, // nome do objecto
Tipo ENUM_OBJECT, // tipo de objecto
intn win, // window index);


Obrigado, corrigido.
 
x100intraday escreveu https://www.mql5.com/ru/forum/1111/page610#comment_130250:

Vamos executar o código de exemplo iFractals da ajuda no M1, que utiliza a segunda - completa - forma de chamada de função OnCalculate(). Mas antes disso, dentro desta função, vamos corrigir

para

para não perder de vista uma única linha com a saída (se a deixarmos como está, visualmente 1 será sempre visível, porque outros valores são raros e imediatamente substituídos por 1, pelo que parece que 1 é sempre exibido) Após o tempo de execução, vemos que os valores não unitários ocorrem a cada minuto, ou seja, em cada nova barra, o que indica inequivocamente que o indicador é redesenhado a cada minutototalmente apesar do facto de o código utilizaralgoritmo económico. Os cépticos podem adicionar várias linhas de código, desenhando, digamos, linhas verticais em cada fractal e depois retirá-las após o primeiro desenho e esperar que o conjunto completo das mesmas linhas apareça após um minuto com uma nova barra. Qualquer coisa sobre terminar apenas o último fractal ou linha está fora de questão, por alguma razão.

Sim, de facto, o indicador do exemplo na função iFractals() actualiza os seus amortecedores de indicador com valores do indicador incorporado. A segunda condição na linha (destacada em amarelo) é "de culpa" por isto:

//--- если это первый запуск вычислений нашего индикатора или изменилось количество значений в индикаторе iFractals
//--- или если необходимо рассчитать индикатор для двух или более баров (значит что-то изменилось в истории)
   if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
     {

Explicação: em cada tick estes dois valores são comparados e há uma atribuição no final da função

//--- запомним количество значений в индикаторе Fractals
   bars_calculated=calculated;

E a diferença entre eles pode surgir em espírito:

  1. o próprio histórico, sobre o qual o indicador fractal é calculado, foi alterado (paginação do histórico pelo utilizador)
  2. ocorrência de um novo evento de bar

Neste caso, a separação dos dois eventos não é feita, descobriu que. Ainda não posso dizer se vamos corrigir este exemplo para que não tenhamos tais perguntas.