Bug MQL5 quando se trabalha com acesso iClose/iOpen timeseries, etc. - página 3

 
Por exemplo, dado que os desenvolvedores são claramente profissionais, especialistas em arquitetura e otimização de velocidade, não deve ser difícil para eles escrever tal função da maneira correta e incluí-la na biblioteca padrão, pelo que os usuários agradecidos ficarão extremamente gratos.
 
Renat Fatkhullin:

Pense onde os dados (mais é garantido) estarão disponíveis, quando seus indicadores atrasarem tremendamente o recebimento/laying ticks, gastando centenas de milissegundos ou mesmo segundos por um tick. Como resultado, nenhuma CPU é suficiente a tempo para processar os carrapatos, o que se traduz em um déficit acumulado e um correspondente atraso no histórico do gráfico.

Quando você pede "dar garantido", é muito provável que seja um pedido de "não quero saber nada, quero continuar escrevendo como eu quero, não quero pensar em desempenho e fechaduras, apenas dar"?


Quando você tiver milhões de barras à sua disposição, pense no desempenho de seus indicadores e dos de outras pessoas. Um indicador mal escrito e caro pode facilmente atrasar as atualizações de seu símbolo.

Comece medindo o tempo de resposta OnCalculate em microssegundos. Em seguida, divida 1 segundo pelo tempo médio de resposta do tick para obter o rendimento máximo do indicador em tick por segundo.

Isto é imediatamente sóbrio.

Vamos deixar apenas uma marca (uma nova barra) para o novo tipo de processamento de dados pelo indicador na versão proposta. Aqueles que gostam de múltiplos recálculos de barras zero e o graal na barra zero devem aproveitar a versão existente. Adicione uma nova função ao OnInit - iOnCalculate - uma alça para uma das funções da TF / OnCalculate no indicador, como o iCustom, mas está um pouco mais perto, os amortecedores do indicador no OnCalculate devem estar ligados à alça iOnCalculate. Nas funções indicadoras como OnCalculate, envie apenas uma nova barra de seleção. Para o terminal, nada mudará, a lógica básica da OnCalculate será a mesma, o corpo principal do indicador será adicionado, por exemplo OnMain. (Agora tudo é feito pelo(s) indicador(es), anexado ao indicador principal como um recurso e chamado a partir dele em uma nova barra).

 
transcendreamer:


Você nem sempre precisa de supervelocidade, a usabilidade também é muito importante, hoje em dia escrever indicadores multimoedas é como "pôr o sol à mão", mesmo no MT4 era mais fácil, porque você sempre podia conseguir através das funções i, mesmo que devagar, mas você podia conseguir, mas no MT5 você pode conseguir ou não, e ainda precisa fazer você mesmo um código especial.

Vamos pular as teorias.

Basta enviar um exemplo para ser reproduzido e veremos o horror que existe em torno de seu caso. Até agora parece uma total desconsideração pelo desempenho, escondendo indicadores de retardo assassino e tentando lançar uma sombra.

 
Renat Fatkhullin:

Vamos pular as teorias.

Basta dar um exemplo para reproduzir e veremos que horror envolve seu caso. Até agora parece uma total desconsideração pelo desempenho, escondendo os indicadores de retardo assassino e tentando colocar uma sombra sobre ele.


O exemplo no anexo, não é o código acabado, está incompleto em alguns lugares, mas é possível executá-lo, eu também anexo um modelo por conveniência,

Vou lhe dizer imediatamente, não sou um programador, com certeza o código não é ótimo, sou um economista humanitário, realmente sofri em MT5, sofri menos em MT4,

Eu realmente quero uma função simples e confiável que construa uma matriz sincronizada, como descrito acima https://www.mql5.com/ru/forum/289897/page2#comment_9363454.

Não estou reclamando, não estou pedindo para escrever meu indicador, só quero (não só eu, por sinal) uma função padrão agradável.


EDIT: corrigiu os anexos

Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
  • 2018.11.14
  • www.mql5.com
Общее обсуждение: Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
Arquivos anexados:
 
Renat Fatkhullin:

Faça o que eu aconselhei, por favor.

Caso contrário, você precisa de materiais completos para reprodução a 100%.

Sua atitude em relação aos relatos de insetos é estranha. Não é como se eu fosse pago para provar nada. Descrevi a situação o melhor que pude.

O problema não sou apenas eu, o problema apareceu após sua 30ª atualização, mas ainda assim você insinua que eu sou um tolo e é tudo culpa minha alguns indicadores de lentidão.

Eles não foram lentos por um ano antes disso?

Aqui está um exemplo de código que fica pendurado após 25 minutos na M30:

//+------------------------------------------------------------------+
//|                                                      Feezzzz.mq5 |
//|                                   Copyright 2018, Dray Stanislav |
//|                               https://www.mql5.com/ru/users/fan9 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Dray Stanislav"
#property link      "https://www.mql5.com/ru/users/fan9"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
    datetime CM1_T[1];
    if(CopyTime(_Symbol,PERIOD_M1,0,1,CM1_T)==-1){
      Comment("\n\n CopyTime return -1");
      return;
    }
    Comment("\n\n CopyTime : "+TimeToString(CM1_T[0],TIME_DATE | TIME_SECONDS));   
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---
   
  }
//+------------------------------------------------------------------+

E aqui está o resultado:

1

 
transcendreamer:


O exemplo no anexo, ainda não está completo, em alguns lugares não está escrito, mas é possível rodar, eu também anexo um modelo por conveniência,

posso prometer que não sou um programador, com certeza o código não é ótimo, sou um economista humanitário, realmente sofro no MT5, sofri menos no MT4,

Eu realmente quero uma função simples e confiável que construa uma matriz sincronizada, como descrito acima https://www.mql5.com/ru/forum/289897/page2#comment_9363454.

Não estou reclamando, não estou pedindo por problemas,

Não estou reclamando, não estou pedindo para escrever meu indicador para mim, eu só quero (não só eu, por sinal) uma função padrão agradável.


EDIT: corrigiu os anexos

Obrigado, vamos verificar agora.
 
Stanislav Dray:

Sua atitude em relação aos relatos de insetos é estranha. Não é como se eu fosse pago para provar nada. Descrevi a situação o melhor que pude.

O que escrevi anteriormente neste tópico não se qualifica de forma alguma como um relatório de bug.

Tudo seguiu o padrão de reclamações sem nenhum detalhe técnico. Foi somente depois de minhas consultas que os detalhes começaram a surgir.

 
Stanislav Dray:

Sua atitude em relação aos relatos de insetos é estranha. Não é como se eu fosse pago para provar nada. Descrevi a situação o melhor que pude.

O problema não sou apenas eu, o problema surgiu após sua 30ª atualização, mas ainda assim você insinua que eu sou um tolo e culpa alguns indicadores retardados.

Eles não foram lentos por um ano antes disso?

Aqui está um exemplo de código que fica pendurado após 25 minutos na M30:

E aqui está o resultado:


Enviado para

2018.11.14 17:33:32.570 Experts expert Feezzzz (USDCHF,M30) loaded successfully

Agora são 18,10 Tudo está funcionando.


 
transcendreamer:


O exemplo anexado não é o código acabado, é subscrito em alguns lugares, mas ainda está funcionando, e também estou anexando um modelo por conveniência,

Vou lhe mostrar o código e o trabalho imediatamente:

  1. As funções CopyXXX nos indicadores não esperam pelo download completo de dados síncronos, mas fornecem o que está disponível. Caso contrário, os indicadores teriam congelado tudo completamente.

  2. Aparentemente há um problema com o acompanhamento, se todos os dados não foram sincronizados na primeira vez.
    É necessário mudar para um modo suave "Vou esperar cuidadosamente pelo sucesso do download". Por exemplo, a OnCalculate não é chamada.

  3. O mau é que uma inicialização global com a carga máxima é colocada no OnInit onde o indicador conta e espera por um tempo muito longo.
    Neste caso, a atualização dos gráficos deste símbolo é bloqueada e muitos outros participantes têm que esperar e não receber novos dados. O indicador não deve levar recursos por muito tempo. É melhor esticar a longa inicialização passo a passo/símbolo de inicialização na OnCalculate, contando passo a passo.

  4. Este indicador bombeia cerca de 800 MB de dados históricos através da rede para sincronização.

  5. O indicador tem 512 linhas de desenho que são explicitamente alocadas para memória. Isto é extremamente caro. Apenas 100 linhas são utilizadas.

  6. O código é mal legível


 
Stanislav Dray:

Sua atitude em relação aos relatos de insetos é estranha. Não é como se eu fosse pago para provar nada. Descrevi a situação o melhor que pude.

O problema não sou apenas eu, o problema surgiu após sua 30ª atualização, mas ainda assim você insinua que eu sou um tolo e culpa alguns indicadores retardados.

Eles não foram lentos por um ano antes disso?

Aqui está um exemplo de código que fica pendurado após 25 minutos na M30:

E aqui está o resultado:

Eu coloquei o código para funcionar. Até o momento, tudo bem.

Um arquivo sem corpo, a propósito.