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
Aqui está o código a ler a partir de um ficheiro:
PorquêFileReadString() ?
Pode usarFileReadArray(), depois não precisa de fazer um loop.
PorquêFileReadString() ?
Não seria melhor usarFileReadArray(), então não há necessidade de fazer um loop.
Rosh:
Escrever valores de equidade num ficheiro. Em seguida, construir indicador por estes valores. Contudo, o ficheiro de dados tem de ser movido manualmente porque durante os testes os ficheiros são escritos na pasta Agent_name/MQL5/Files.
Só agora é que percebi como tudo é complicado.
Mas manualmente não é claramente a solução para esta questão, uma vez que estamos a falar de centenas de testes.
E parece: no início há dados disponíveis, mas - oh, Milagre! - o programa é concebido de tal forma, que não há possibilidade de os salvar de alguma forma e em algum lugar até que sejam extraídos e utilizados de forma programática!
Não sou um programador profissional, mas esta situação é difícil de compreender.
Enorme documentação..., vastas possibilidades de construção, ao que parece, tudo e mais alguma coisa..., gestão da memória, OOP, e aqui, de forma fundamentalmente simples e criticamente necessária (que, espero, já expliquei) - um impasse.
...E no entanto... Pergunta!
Não há possibilidade de escrever em modo de teste em algumas matrizes de programas de seta forçada, que posteriormente poderiam ser utilizadas para a construção de um indicador?
Incluindo a possibilidade de passar através de uma variável global um ponteiro para uma tal matriz?
E qual é o problema do armazenamento e transferência de dados entre a fase de teste e o momento do trabalho principal, não em termos de implementação actual, mas em princípio?
Renat mencionou centenas de megabytes de dados, mas, em primeiro lugar, porque devemos sempre recarregar dados quando podemos prever tal possibilidade apenas a pedido explícito do programador e, em segundo lugar, a quantidade de dados em termos da tarefa em mãos é muito menor e ascende a alguns milhares de dígitos.
Mais uma vez declaro que do ponto de vista de um utilizador, a opção de transferência manual de ficheiros durante testes múltiplos (e o mercado, devido à sua complexidade, requer testes múltiplos) é absolutamente inconveniente e pouco promissor, enquanto que estou pronto a argumentar com qualquer pessoa que a dinâmica dos indicadores de conta na sua correlação directa com a dinâmica dos preços na história dos testes é uma das mais importantes em geral.
Qual é a questão de estender a visibilidade no modo principal de operações de abertura de ficheiros em modo de leitura à pasta dos ficheiros de teste? O que seria mesmo uma ameaça hipotética neste caso?
E qual é a questão de não poder forçar o armazenamento dos dados necessários entre o modo principal e o modo de teste na RAM?
Utilize dll para escrever e ler ficheiros a partir de pastas arbitrárias em disco. Basta mover as funções de escrita e leitura do ficheiro para a dll e pronto.
...E no entanto... Pergunta!
Não há possibilidade de escrever no modo de teste em algumas matrizes de programas de seta forçada, que subsequentemente poderiam ser usadas para construir um indicador?
Tente colocar a bandeira FILE_COMMON ao abrir o ficheiro - https://www.mql5.com/ru/docs/constants/io_constants/fileflags
Identificador
Valor
Descrição
FILE_COMMON
4096
Localização de um ficheiro na pasta partilhada de todos os terminais dos clientes. Esta bandeira é utilizada ao abrir ficheiros (FileOpen()), copiar ficheiros (FileCopy(), FileMove()) e verificar a existência de ficheiros (FileIsExist())
Tente especificar a bandeira FILE_COMMON ao abrir um ficheiro - https://www.mql5.com/ru/docs/constants/io_constants/fileflags
Execute este guião e veja onde ele escreve
joo, Rash, obrigado!
A opção pasta partilhada parece mais... integrado.
A única coisa que surpreende é que ao executar este código, uma mensagem sobre a escrita mal sucedida é exibida dentro do indicador, embora a escrita em si ainda esteja feita. Mais - ainda uma questão em aberto, como e quando é exactamente melhor escrever os dados (separadamente para cada tick, mas é de recursos intensivos, ou mesmo no final - todo o array, mas com o array a escrever algo ainda não está bem claro e, além disso, é difícil de entender como o OnCalculated irá funcionar neste caso para a sua extracção - no segundo, acontece a passagem já depois dos testes?)
E outra questão, um pouco fora de tópico, mas sobre a questão já abordada ontem.
Inserido em OnTick e em OnCalculated:
mas após a conclusão do teste apesar da presença de objectos relacionados com posições de abertura e fecho (setas e linhas - visíveis no Terminal: Gráficos>Objectos>Objectos Lista de Objectos), o valor de retorno é 0 por alguma razão.É melhor escrever para o ficheiro o mais raramente possível, por isso é melhor fazê-lo como uma matriz inteira. Os valores devem ser medidos não mais do que uma vez por minuto, caso contrário, haverá problemas com a sua exibição no gráfico (além disso, será uma utilização excessiva de recursos). Ou seja, no final da corrida. Mas também é possível:
O algoritmo é o seguinte:
1) Dirigir o perito no testador.
2) Medido o valor de interesse.
3) Registado o valor no ficheiro.
4) Escrever fiel a um ficheiro separado, o que significa que registámos um novo valor.
5) Iniciar um loop infinito, a condição de saída é falsa no ficheiro da bandeira.
6) Num gráfico separado, o script lê o ficheiro com a bandeira, se houver um novo valor, desenha um risco no gráfico, escreve em falso no ficheiro.
Este é, grosso modo, o modo visual de teste no testador.
Espere um pouco, o concurso terá terminado, talvez sejam apresentadas soluções mais elegantes e bonitas.
joo, Rash, obrigado!
A opção pasta partilhada parece mais... integrado.
A única coisa surpreendente é que ao executar este código dentro do indicador exibe uma mensagem de escrita falhada, embora a própria escrita seja feita.
Não recebo qualquer resultado desse tipo. Experimente:
Não percebo nada disso. Deve experimentar:
Rosh
Não consigo compreender qual é a razão, mas ao contrário dos meus indicadores, quando começo com os seus, recebo uma mensagem:Agora fiz um Expert Advisor simples semelhante, baseado no vosso código, que deve escrever todos os valores de Equidade em ficheiro (alterei apenas a saída de todos os valores, incluindo zero bytes escritos, tornei as variáveis globais, e dividi a abertura e escrita do ficheiro em OnInit e OnTick), mas embora não seja escrito nenhum erro e o ficheiro seja criado, os registos e o ficheiro estão vazios.