Erros, bugs, perguntas - página 1124
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Embora ambas as estruturas tenham o mesmo tamanho e se copiam uma na outra sem perdas, ainda recebemos um aviso.
Portanto, isso é óptimo. Não é assim tão difícil fazer uma casta óbvia. E descobrir onde atribuir o quê quando os insectos começam a rastejar não é muito agradável.
Cópia da candidatura para SR:
Versão terminal e bit
910 32 bit
Descrição do problema
Olá, caros programadores!
Na MQL5 várias funções do sistema, tais comoCopyRates,CopyTime,CopyOpen, etc., destinam-se a receber dados de séries cronológicas.
Quando se chama qualquer uma destas funções, as séries de tempos solicitadas são carregadas para a RAM dentro do parâmetro "Max barras no gráfico".
No entanto, a combinação de factores tais como:
1. Histórico suficientemente profundo disponível no símbolo ou totalmente carregado a partir do servidor.
2. O parâmetro "Max bars in chart" é "Unlimited".
3. São solicitados dados do menor período de tempo M1.
Uma quantidade muito grande de memória está a ser consumida.
O problema é exacerbado pelo facto de a lógica do programa que executa MQL5 (por exemplo, se for um Expert Advisor com várias moedas ou um indicador)
podem ser estabelecidos para o acesso alternativo a dados de baixo nível de prazos de vários símbolos (por exemplo, pesquisa única).
Como resultado, o consumo de RAM aumenta muitas vezes.
Получение данных нужного таймфрейма из промежуточных данных
Os ficheiros de serviço no formato HCC desempenham o papel da fonte de dados para construir os dados de preços pelos prazos solicitados no formato HC. Os dados no formato HC são séries cronológicas que são preparadas ao máximo para um acesso rápido. São criados apenas a pedido de um gráfico ou programa mql5 no volume que não exceda o parâmetro "Max barras nos gráficos", e são guardados para posterior utilização em ficheiros com a extensão hc.
Para poupar recursos, os dados sobre o período de tempo são carregados e armazenados na RAM apenas quando necessário.Em caso de ausência prolongada de pedidos, os dados são descarregados da RAM, sendo guardados num ficheiro. Os dados para cada período de tempo são preparados independentemente dos dados prontos para outros períodos de tempo. As regras para a preparação e disponibilidade de dados são as mesmas para todos os prazos. Ou seja, apesar de a unidade de armazenamento de dados no formato HCC ser a barra de minutos, a disponibilidade dos dados no formato HCC não significa a disponibilidade e acessibilidade dos dados no formato HC para o período de tempo M1 no mesmo volume.
A recepção de novos dados do servidor provoca a actualização automática dos dados de preços usados em formato HC para todos os períodos de tempo e o recálculo de todos os indicadores, que os utilizam explicitamente como dados de entrada para cálculo.
O tempo do processo destacado em amarelo na citação citada da documentação é bastante grande: cerca de meia hora (as minhas observações).
Como resultado, todas as séries de tempos solicitadas "amontoam-se" em "RAM" sem qualquer razão.
Se a "RAM" não for "borracha E o "voraz" Expert Advisor/indicador necessita cada vez mais de séries temporais, o terminal não tem mais nada a fazer
excepto para um "despejo" urgente de séries de tempos em excesso de volta ao ficheiro (cache). Assim, nesta reposição de emergência, o terminal pode repor as séries cronológicas para
um "cache partido", ou seja, perderá "uma boa metade" dos dados. E da próxima vez que esta série temporal for acedida, o terminal carrega esta "cache quebrada" como uma cache normal.
Como resultado, o gráfico terminal exibe as séries temporais necessárias com um enorme buraco na história.
Resultado esperado
A linguagem MQL5 tende a poupar recursos do ambiente de execução. Um exemplo disto é o seguinte:
1. a funçãoArrayFree
2. FunçãoresourceFree
3.eliminar operador
4. Parâmetro"barras máximas nos gráficos
É possível adicionar uma função do sistema à funcionalidade da linguagem MQL5 que forçaria o terminal a realizar operações com as séries de tempos que já não são utilizadas?
Se não houver um gráfico aberto com esta série temporal, no final do tempo?
Por exemplo, uma função:
bool SeriesFlush(
string symbol_name, // имя символа
ENUM_TIMEFRAMES timeframe, // период
);
Isto permitiria:
1. não se preocupar com o transbordo de RAM.
2. não se preocupe com as "caches partidas" das quais só se pode livrar apagando manualmente os ficheiros *.hc quando o terminal é desligado.
3. não tem de depender do modo bit do seu sistema operativo e do tamanho da memória principal.
4. ao desenvolver um produto de software, não utilizar "muletas" que tentem contornar as desvantagens descritas acima.
Cópia da candidatura para SR:
Pode dizer-me como obter dados indicadores com uma compensação positiva? Estou interessado em dados sobre -1 barra?
Para o fazer, é necessário conhecer as definições de compensação para a linha indicadora de interesse. Este é um exemplo do indicador técnicodo iAlligator
Isto é uma compensação, não um cálculo indicador para o futuro.
Cópia da candidatura para SD:
Versão terminal e modo bit
910 32 bit
Descrição do problema
Olá, caros programadores!
Uma das recomendações para melhorar a qualidade do código na concepção de loops com um grande número de iterações
é incorporar a verificação de uma paragem forçada de um programa MQL5 utilizando o sistema
Função do sistemaIsStopped();
Contudo, na prática, esta verificação não funciona em indicadores (funciona em scripts e Expert Advisors)
Aqui está o código curto indicador que mostra a essência do problema:
Se tentar remover este indicador do gráfico, o processo de "calcular o indicador" não irá parar como tal,
embora devesse, por causa da verificação da bandeira de paragem do programa.
Pode descobrir isto facilmente monitorizando o processo terminal.exe no Task Manager. Num processador de quad core
é cerca de 25% da carga de CPU. Além disso, a carga terminal não diminui em nada ao longo do tempo até o
encerramento do terminal. E mesmo após o processo de encerramento do terminal.exe, o processo ainda fica pendurado no gestor. E, parece que sim,
que é descarregado pelo sistema operativo como "pendurado".
Resultado esperado
Por favor, resolva este problema.
Para o fazer, é necessário conhecer as definições de compensação para a linha indicadora de interesse. Este é um exemplo do indicador técnicodo iAlligator
Isto é uma compensação, não o cálculo do indicador para o futuro.
Tenho um cálculo futuro, mas utilizo uma compensação para o fazer, como calcular -1 barra do Expert Advisor?
Se alguém precisar, use CopyBuffer(Handle_original,0,-2,10,Data_Ind )
Exactamente, tenho um cálculo no futuro, mas para fazer uma compensação, como é que leio -1 barra do Expert Advisor?