Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 763
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
Parece que sim em ciclos, e pode prescindir da função
Obrigado.
No entanto, removida a função - os travões permanecem.... maldição.
Obrigado.
No entanto, removida a função - os travões permanecem.... Maldição.
Uma vez comecei a reescrever o programa de 4=>5, depois em 4, substituí todas as construções como Low[1], Time[0] e outras por outras modernas, ou seja,CopyLow,CopyTime, o programa tornou-se mais rápido mesmo em 4. Não utilizo agora construções antigas, apenas novas. Assim, o código é facilmente transportável para a plataforma 5ª, basta alterar as funções de negociação
Assim que comecei a reescrever o programa de 4=>5 e depois substituí todas as construções como Low[1], Time[0] e outras por outras modernas, ou seja,CopyLow,CopyTime, o programa tornou-se mais rápido mesmo em 4. Não utilizo agora construções antigas, apenas novas. Assim, o código é facilmente transportável para a plataforma 5ª, basta alterar as funções de negociação
Opreenchimento da matriz em cada espirro não é um consumo de recursos?
Talvez faça sentido copiar a informação para a matriz na abertura do bar, e depois levá-la a partir daí à medida que o código se desdobra? Eu negoceio na abertura de bares.
Opreenchimento de uma matriz com cada espirro não consome recursos?
Talvez faça sentido copiar a informação para uma matriz quando uma barra abre e depois levá-la de lá à medida que o código avança? Eu negoceio na abertura de bares.
O conjunto pode ser preenchido numa nova barra, consumirá menos recursos. Se trabalhar com iLow[1] em vários locais, deve guardá-lo numa variável uma vez e lê-lo em vez da matriz.
Suponha que isto
Depois trabalhamos com a variávelTIME_0 eTIME_1 em vez deTM[0] eTM[1].O Array pode ser enchido numa nova barra, serão necessários menos recursos. Se trabalhar com iLow[1] em vários locais, por exemplo, é desejável escrevê-lo uma vez numa variável, e ler a variável em vez da matriz.
Suponhamos que sim
Mas mesmo assim, o MT4 é muito mais rápido - estou desapontado.
Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial
Insectos, insectos, perguntas
Aleksey Vyazmikin, 2017.07.21 15:07
Porque estás a fantasiar? Compreendi a sua ideia, e confirmei que funciona, e terá efeito se o pedido for feito uma vez e se se souber quantas barras são necessárias para a EA funcionar.
Ou talvez tenha sugerido a utilização da estrutura de uma forma diferente? Então por favor explique, mas não se ofenda!
Sem fantasias. Se precisar de obter 2 ou mais parâmetros de um candelabro, então usando as funções das suas mensagens/perguntas teremos de chamar estas funções separadamente para cada parâmetro do candelabro. Ou seja, 2 ou mais vezes para produzir Copy***(), mas usando CopyRates() só é necessário uma chamada de Copy.
Quanto ao número a copiar, essa é outra questão. Talvez devêssemos primeiro calcular a barra que contém o valor do indicador requerido e depois copiá-la. Se bem me lembro, foi dito sobre uma quantidade desconhecida para copiar. De que tipo de fantasia estamos a falar?
Em casos extremos, podemos copiar, digamos, 10 barras e procurar entre elas. Se não for encontrado, copiamos outras 10 barras. A cópia é uma operação demorada, é mais barato copiar uma matriz.
Em geral, há muitas variações. Não se pode escrever tudo isso em documentação e não será mais documentação. Ensinam isto nas aulas de programação. Mas, infelizmente, nem todos os professores são capazes de o fazer e nem todos os alunos o querem compreender nas aulas. E o início é logo nas aulas de aritmética nos graus 2-5, quando o professor requer uma explicação detalhada do problema. Mas aqui os problemas são os mesmos.
Nada de coisas extravagantes. Se precisar de obter 2 ou mais parâmetros de um candelabro, então utilizando as funções das suas mensagens/perguntas deve chamar estas funções separadamente para cada parâmetro de candelabro. Ou seja, 2 ou mais vezes para produzir Copy***(), mas utilizando CopyRates() precisará apenas de uma chamada de CopyRates().
Quanto ao número a copiar, essa é outra questão. Talvez devêssemos primeiro calcular em que barra está disponível o valor requerido do indicador, e depois copiá-lo. Se bem me lembro, foi dito sobre uma quantidade desconhecida para copiar. De que tipo de fantasia estamos a falar?
E, como último recurso, podemos copiar, digamos, 10 barras e pesquisar através delas e, se não o encontrarmos, copiamos outras 10 barras. A cópia é uma operação bastante dispendiosa; seria mais barato pesquisar através da matriz.
Há muitas variantes neste caso. Tudo isto não pode ser escrito na documentação; na verdade, não será mais documentação. Ensinam isto nas aulas de programação. Mas, infelizmente, nem todos os professores sabem como fazê-lo e nem todos os alunos o querem compreender nas aulas. E o início é logo nas aulas de aritmética nos graus 2-5, quando o professor requer uma explicação detalhada do problema. Mas aqui os problemas são os mesmos.
Sobre fantasia - foi uma resposta à sua afirmação "Em vez de tentar compreender o que foi dito, para descobrir o que se obtém, faz-se algumas objecções incríveis", e não ao facto de a versão que ofereceu ser do campo da fantasia.
Compreendo perfeitamente o seu conceito, e ele foi incorporado na resposta que lhe foi dada.
No entanto, não compreendo bem como se propõe trabalhar com uma quantidade desconhecida de dados - pode dar-me um exemplo sob a forma de código?
Por favor, ajude na auditoria e optimização do indicador usando este link https://www.mql5.com/ru/code/16805 - o problema é que o indicador começa a abrandar muito quando aparece um grande número de barras - ele aparece quando se testa.
Quero saber como fazê-lo funcionar para que não seja calculado em cada tick, mas apenas na abertura do bar? O método do Expert Advisor não é adequado - após o primeiro tique todos os valores desaparecem e aparecem apenas na barra seguinte...
Sobre fantasia - foi uma resposta à sua afirmação "Em vez de tentar compreender o que foi dito, para descobrir o que funcionaria, são lançadas algumas objecções incríveis", e não que a opção que propôs seja do reino da fantasia.
Compreendo perfeitamente o seu conceito, e ele foi incorporado na resposta que lhe foi dada.
Contudo, não compreendo bem como se propõe lidar com uma quantidade desconhecida de dados - pode dar-me um exemplo sob a forma de código?
A resposta foi dada antes...
Alexey Viktorov:
Como último recurso, pode copiar, digamos, 10 barras de cada vez e procurá-la. Se não a encontrar, copia outras 10 barras de cada vez. A cópia é uma operação dispendiosa, é mais barato pesquisar através da matriz.
Mas é melhor não tentarmos obter o número máximo de barras da matriz, mas tentarmos fazer com uma cópia.
Não vou escrever uma amostra de código. Um programador normal só precisa de uma dica. Aqui está um algoritmo de amostra:
Assim, é possível encontrar duas intersecções numa cópia e um ciclo, se necessário. Não há sequer necessidade no ArraySetAsSeries() porque ao encontrar a travessia é possível e, na minha opinião, é melhor lembrar a hora do bar e não o seu número. Embora, conhecendo a hora do bar, não haja dificuldade em determinar o seu número.
Pergunta: O que é mais rápido, um ciclo com cópia do buffer do indicador por 1 valor e cópia da barra alta por 1 e comparação desses valores ou uma única cópia de um determinado montante e comparação dos valores das duas matrizes um com o outro?
Escrevi isto ontem mesmo:
Tarefa:
em cada tick obter elementos "InpCountCopy" abertos, altos, baixos, fechados e tempo.
Implementação:
Características:
Pode escolher como verificar: em OnTick ou em OnTimer (1 segundo).