Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 985
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
fazer { ... código de enchimento tampão
}
enquanto(estes dois valores não correspondem)
em resumo, obter os valores no laço até que coincidam, só depois executar o seguinte códigofazer { ... código de enchimento tampão
}
enquanto(estes dois valores não são os mesmos)
Em suma, obter os valores no laço, até que sejam os mesmos, só então executar o seguinte códigoA questão é que até um indicador funcionar, os dados (fluxo) não são passados para o outro, ou seja, o laço no indicador sem oOnCalculate deste indicador não ajudará. E assim que o OnCalculate estiver terminado, os dados são passados ao Consultor Especialista, e está errado.
Ou talvez eu não compreenda a sua ideia.Portanto, a questão é que até que um indicador funcione, os dados (fluxo) não são transferidos para outro, ou seja, o laço no indicador sem a terminação do OnCalculate deste indicador não vai ajudar.
recebe valores de amortecedores de outros indicadores um a um, se o seu número não for o mesmo, recebe-os novamente até que seja o mesmo, esqueça as correntes. Mas em geral, ninguém o faz desta forma - é muito lento
Portanto, a questão é que até que um indicador funcione, os dados (fluxo) não são passados para outro, ou seja, o laço no indicador sem o OnCalculate deste indicador não ajudará. Mas assim que o OnCalculate está terminado, os dados são passados ao Consultor Especialista, e estão errados.
Ou não compreendo a sua ideia.é necessário que a condição seja preenchida, então apenas os amortecedores serão preenchidos, como eu entendo (o número de barras nos amortecedores de outros indicadores será o mesmo)
cumprir à força todas as condições antes de preencher os amortecedores do indicador actual
ou devolvê-lo ao programador errado - porque devemos resolver os seus problemas no campo errado?
obtém-se os valores dos amortecedores de outros indicadores um a um, se o seu número não for o mesmo, obtém-se novamente até ser o mesmo, esquece os fluxos. mas em geral, ninguém o faz desta forma - é perversão de indicadores a partir de indicadores, muito lento
é necessário que a condição seja preenchida, então apenas os amortecedores serão preenchidos, como eu entendo (o número de barras nos amortecedores de outros indicadores será o mesmo)
Execução forçada de todas as condições antes que os amortecedores do indicador actual sejam preenchidos
ou devolvê-lo ao programador com uma mão má, porque devemos resolver os seus problemas no lugar errado?
Se o cálculo não estiver pronto a partir de outros indicadores, os valores serão zero, por isso não faz sentido forçar o preenchimento aqui, pode preencher os dados passados, mas com o mesmo efeito, pode solicitar dados não para a barra actual do indicador, mas para a barra passada, e então o código não deve ser alterado de todo.
Porque a situação no testador e na conta real é diferente, a simulação de Sono funciona de forma muito estranha, e o recálculo do indicador para 15 segundos escorrega apenas uma vez, enquanto que deve ocorrer a cada tique, ou a pedido, e ocorre não em 15 segundos, mas em 13, de acordo com o registo.
Além disso, o problema de sincronização é relevante, e seria bom acrescentar para tais situações a possibilidade de informar o indicador sobre a necessidade de passar o fluxo de dados para outros indicadores, sem os quais é impossível realizar mais cálculos - esta seria uma solução - o comando para passar o fluxo para outro indicador sem conclusão de cálculo.
Respectivamente, o Conselheiro Especialista deve esperar pelos dados do indicador e saltar ticks até que o cálculo completo seja feito; agora, ao tentar usar a declaração "enquanto", o resultado do cálculo fica suspenso/mais parado (ou seja, nada acontece, o testador fica ali parado), e isso também não é correcto.
É claro que informei o promotor, mas não tenho notícias dele há mais de um mês - o custo do freelancing.
a situação no testador e na conta real é diferente, a simulação do sono funciona de forma muito estranha, e o recálculo do indicador para 15 segundos ocorre apenas uma vez, enquanto que deve ocorrer a cada tique, ou a pedido, mas não em 15 segundos, mas em 13, de acordo com o registo.
Além disso, o problema de sincronização é relevante, e seria bom acrescentar para tais situações a possibilidade de informar o indicador sobre a necessidade de passar o fluxo de dados para outros indicadores, sem os quais é impossível realizar mais cálculos - esta seria uma solução - o comando para passar o fluxo para outro indicador sem conclusão de cálculo.
Respectivamente, o Conselheiro Especialista deve esperar pelos dados do indicador e saltar os ticks até ao fim do cálculo completo, mas agora, ao tentar usar adeclaração "enquanto" para esperar pelos resultados correctos do cálculo, congela/gota (ou seja, nada acontece, o testador apenas fica ali parado), e isto também não é correcto.
CaroArtyom Trishkin!
Espero sinceramente que, uma vez que determinou que as perguntas acima são para principiantes, já sabe a resposta e pode ajudar-me!
Estou à espera de uma resposta de um profissional.
CaroArtyom Trishkin!
Espero sinceramente que, uma vez que determinou que as perguntas acima são para principiantes, já sabe a resposta e pode ajudar-me!
Estou à espera de uma resposta de um profissional.
O único conselho que posso dar é o seguinte: o indicador deve sair OnCalculate() se não tiver recebido o número de barras requerido para o cálculo: if(rates_total<number of_bars required) return 0;
O Consultor Especialista deve verificar os dados recebidos do indicador, e se estes não forem iguais ao valor do indicador vazio, só então efectuar cálculos com os dados recebidos.
... ... ...
Só posso aconselhar: o indicador deve sair de OnCalculate() se não obtiver o número certo de barras para o cálculo: if(rates_total<number_of_bars required) return 0;
Obrigado pela dica, não há problema com a saída, mas não resolve a situação, fiz como um cálculo falhado por agora
E de alguma forma preenche os amortecedores e obtém dados de outros indicadores e os dados só são passados à EA quando uma condição é satisfeita. Ainda não verifiquei a exactidão dos dados, mas parece correcta. Ou talvez eu esteja errado e algo esteja definitivamente errado?
O Consultor Especialista deve verificar os dados recebidos do indicador e, se não for igual ao valor do indicador vazio, só então efectuar cálculos com os dados recebidos.
O Expert Advisor efectua cálculos um à chegada de uma nova barra, e respectivamente, a tentativa de esperar pelo valor correcto do indicador leva a uma paragem do testador.
... ... ...
1. é verdade.
2. e assim acontece. Este cálculo será correcto no próximo tick, mas quero receber o cálculo correcto no primeiro tick, porque o Expert Advisor não espera no loop por outros tick ou a expectativa não é comensurável com a minha paciência, ou seja, não é realista - há um erro.
3.
4. Claro que sim.
5. Sim, temos, mas o indicador precisa de receber dados de outros indicadores e esse é o problema!
6. 1-2. não é correcto colocar dados deliberadamente falsos no tampão indicador, apenas complicará a detecção de erro de algoritmo no código do Expert Advisor.
7. Estou a descrever tudo logicamente, mas não escrevi o indicador, por isso é-me difícil compreender qual é a razão, descrevi a manifestação razoável do indicador, nomeadamente a incapacidade de efectuar um cálculo sem receber valores tampão de outros indicadores, devido ao monopólio do fluxo de dados (os indicadores são calculados sequencialmente).
8. Já notei aqui e antes de não ser o autor, passei muito tempo - quase um dia - a identificar as razões.
9. E estou à procura de uma solução para o problema, além disso, se alguém se tiver confrontado com isto, pode rapidamente ajudar-me. Repito, nessa linha comecei a escrever por causa do Sono, e depois saíram as outras características do testador, que também acredito no erro.
Obrigado pela resposta.
Obrigado pela dica, não há problema com o resultado, mas não resolve a situação, até agora fiz como um cálculo falhado
E de alguma forma preenche os amortecedores e obtém dados de outros indicadores, os dados não são passados à EA até que a condição seja satisfeita. Ainda não verifiquei a exactidão dos dados, mas parece correcta. Ou talvez eu esteja errado e algo esteja definitivamente errado?
O Expert Advisor efectua o cálculo sozinho quando chega uma nova barra e, portanto, ao tentar esperar pelo valor correcto do indicador, leva a uma paragem do testador.
1.
E assim é. 2. Este cálculo será correcto no próximo tick, mas preciso de obter um cálculo correcto no primeiro tick, porque o meu Conselheiro Especialista não espera no loop por outros tick ou a expectativa não é comensurável com a minha paciência, ou seja, não é realista - há um erro.
3.
4. Claro que sim.
5. Sim, temos, mas o indicador precisa de receber dados de outros indicadores e esse é o problema!
6. 1-2. não é correcto colocar dados deliberadamente falsos no tampão indicador, apenas complicará a detecção de erro de algoritmo no código do Expert Advisor.
7. Estou a descrever tudo logicamente, mas não escrevi o indicador, por isso é-me difícil compreender qual é a razão, descrevi a manifestação razoável do indicador, nomeadamente a incapacidade de efectuar um cálculo sem receber valores tampão de outros indicadores, devido ao monopólio do fluxo de dados (os indicadores são calculados sequencialmente).
8. Já notei aqui e anteriormente que não sou o autor, passei muito tempo - quase um dia - a identificar as causas.
9. E estou à procura de uma solução para o problema, além disso, se alguém se tiver confrontado com isto, pode rapidamente ajudar-me. Repito, nessa linha comecei a escrever por causa do Sono, e depois saíram as outras características do testador, que também acredito no erro.
Obrigado pela resposta.
No OnInit() chamar a série cronológica do símbolo: iTime(Símbolo,Prazo,1);
Logo no início, em OnTick(), pedir a barra de tempo requerida das séries de tempo requeridas usando o iFunc() correspondente, ou se( iTime(Símbolo,Prazo,10)==0) retornar;
Neste caso, o Conselheiro Especialista não detectará um novo bar e esperará pelo próximo tick.
No OnInit() solicitámos os dados das séries cronológicas, activando assim a paginação de dados.
Em OnTick() verificamos se o histórico minimamente necessário está disponível para a EA e se ainda não estiver disponível, esperamos pelo próximo tick.
E até que todos os dados requeridos pelo Conselheiro Especialista sejam recebidos, este esperará pelo próximo tick.
Assim que todos os dados necessários forem bombeados e obtidos, o Conselheiro Especialista começará a trabalhar com a nova barra e com o histórico necessário.
Para manter os dados em série actualizados, é imperativo que sejam acedidos pelo menos uma vez de dois em dois minutos. Fazer um segundo temporizador durante cerca de um minuto e meio (90 segundos) e nele referir-se simplesmente a qualquer série de tempos do símbolo desejado, por exemplo iTime(Symbol,Timeframe,1); Sem verificar os dados recebidos - basta "agitar" o histórico. Então, todos os dados sobre o símbolo estarão sempre actualizados.