Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1740
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
não dizer às pessoas o que devem fazer.
Você tem que se lembrar de seus dados e trabalhar com eles
Maxim, nessa situação, você não precisa se lembrar de nada. É muito mais seguro olhar apenas para a posição fechada anterior.
Você não precisa fazer nada para lembrar os dados e restaurá-los após uma situação anormal. Se o terminal estiver fechado, os dados de posição serão perdidos. Portanto, ao memorizá-los, você deve considerar imediatamente a possibilidade de sua rápida e eficaz restauração.
(Memorizar uma ordem nos comentários não seria considerado uma solução confiável - significaria confiar na vontade do corretor/negociante).
E o interessante é que, de qualquer forma, vai ler esses dados de algum lugar. Então, não seria mais fácil de ler diretamente da fonte?
como forçar o compilador a compilar para o MT4 e não para o MT5?
Maxim, nessa situação, você não precisa memorizar nada em nenhum lugar. É muito mais seguro olhar apenas para a posição fechada do passado.
Não é preciso fazer nada para lembrar os dados e depois restaurá-los após uma emergência. Se o terminal estiver fechado, os dados de posição serão perdidos. Portanto, ao memorizá-los, você deve considerar imediatamente a possibilidade de sua rápida e eficaz restauração.
(Memorizar uma ordem nos comentários não seria considerado uma solução confiável - significaria confiar na vontade do corretor/negociante).
E o interessante é que, de qualquer forma, vai ler esses dados de algum lugar. Então, não seria mais fácil de ler diretamente da fonte?
e depois segue "porque OnTimer não cabe em alguns segundos ou OnTick erra loucamente" :-)
Restaurar o estado uma vez na inicialização (seja lendo a partir de um arquivo ou do histórico/ambiente de navegação) e pronto... A última ordem junto com suas características é armazenada em uma variável e é sempre conhecida
e então o tema "porque OnTimer não se encaixa em alguns segundos ou OnTick falha de forma selvagem" segue :-)
Ao inicializar, restaurar o estado uma vez (seja lendo de um arquivo ou olhando através da história/ambiente) e pronto... A última ordem junto com suas características é armazenada em uma variável e é sempre conhecida
Para saber como a última posição foi fechada, você precisa encontrá-la. Afinal, enquanto estiver aberta, não há como registrar e lembrar como foi fechada, pois ainda está aberta.
É possível armazenar um bilhete da última posição aberta e usá-lo para determinar como foi fechado, mas ... Ao manipular com uma posição, enquanto ela está aberta, seu bilhete pode mudar. Por conseguinte, devemos implementar uma funcionalidade para reescrever o bilhete alterado. Tudo isso complica o código.
Eu apenas sugeri procurar a última posição fechada. E combina a busca de todas as posições ao reiniciar a EA e ler apenas os dados de uma posição ao fechar uma nova.
Afinal de contas, espero que todos entendam que não precisamos passar por todas as posições históricas, mas apenas a última. Ou seja, lembramos apenas uma variável do índice do laço - seu valor atual, e iniciamos um novo laço (quando o número de ordens históricas aumenta) a partir do valor desta variável, não a partir de zero. E o valor desta variável é escrito em OnInit() no início e reinício do Expert Advisor, assim como no fechamento de uma nova posição. Isto é, desta forma evitamos a necessidade de escrever e ler dados de posição e trabalhar com a unidade.
Acho que esta abordagem é a mais lucrativa, porque
1. Você só precisa lembrar o valor do índice de laço
2. Obter dados somente no momento necessário usando um acesso direto a uma ordem fechada usando seu índice
3. Você não precisa criar uma função de leitura/escrita
4. É mais rápido tanto para trabalhar como para escrever.
E, sim, concordo que você precisa conhecer todos os seus dados - eu mesmo o faço. Mas é desejável conhecê-los benéficos para o programa e para você mesmo.
Obrigado pela informação!
Se você tiver tempo, por favor responda como consertar:
Em um histórico de N velas há duas metas direcionadas de forma diferente: Close[N]+50*Point e Close[N]-50*Point.
Então há uma condição que o preço deve atingir uma das metas (se (Alto[i] >Fech[N]+50*Ponto) ou (se (Baixo[i]<Fech[N]-50*Ponto)
Quando a condição é atingida, a distância de Close[N] a High[i] é escrita em x[alto]=High[i] array.
Depois é atirado aleatoriamente para qualquer um dos gráficos a qualquer momento.
E ao verificar via Print(x[high]), 1-2 de cada dez valores mostram menos de 50! Um tem 12, o outro 49. Embora, é estritamente indicado+50*Point. 8-9 são corretas (mais de 50) e 1-2 são anormais. Não é através do testador, mas com um gráfico real eu coloco um Expert Advisor (sem nenhuma função comercial), mas com as acima mencionadas ele trabalha com o histórico e exibe resultados incorretos.
Quanto maior for o valor, menos erros ocorrem. Pensei que talvez fosse a propagação que interferisse, mas... Acho que não há uma propagação da história no MT4
Resolvido.
Não atualiza
Obrigado
Para descobrir como a última posição foi fechada, você tem que encontrá-la. Enquanto estiver aberto, não há como registrar e lembrar como foi fechado - ainda está aberto.
É possível armazenar um bilhete da última posição aberta e utilizá-lo para determinar como fechou, mas ... Ao manipular com uma posição, enquanto ela está aberta, seu bilhete pode mudar. Por conseguinte, devemos implementar uma funcionalidade para reescrever o bilhete alterado. Tudo isso complica o código.
Eu apenas sugeri procurar a última posição fechada. E combina a busca de todas as posições ao reiniciar a EA e lê os dados de apenas uma posição ao fechar uma nova.
Afinal de contas, espero que todos entendam que não precisamos passar por todas as posições históricas para isso, mas apenas a última. Ou seja, lembramos apenas uma variável do índice do loop - seu valor atual, e iniciamos um novo loop (quando o número de ordens históricas aumenta) a partir do valor desta variável, não a partir de zero. E o valor desta variável é escrito em OnInit() no início e reinício do Expert Advisor, assim como no fechamento de uma nova posição. Isto é, desta forma evitamos a necessidade de escrever e ler dados de posição e trabalhar com a unidade.
Acho que esta abordagem é a mais lucrativa, porque
1. Você só precisa lembrar o valor do índice de laço
2. Obter dados somente no momento necessário usando um acesso direto a uma ordem fechada usando seu índice
3. Você não precisa criar uma função de leitura/escrita
4. É mais rápido tanto para trabalhar como para escrever.
E, sim, concordo que você precisa conhecer todos os seus dados - eu mesmo o faço. Mas conhecê-los é desejável para o benefício do programa e para você mesmo.
Não notei que o bilhete de uma posição muda, enquanto ela está aberta. Normalmente é igual ao bilhete da primeira encomenda, que abriu esta posição.
A última fechou - e se houver mais de uma EA negociando no símbolo, mais a negociação manual?Não notei que o bilhete de uma posição muda enquanto ela está aberta. Normalmente é o mesmo que o bilhete do primeiro pedido que abriu a posição.
Último fechado - mas e se houver mais de uma negociação EA no símbolo, mais a negociação manual?Um preenchimento ou fechamento parcial, e o bilhete é diferente. Temos que determinar de qual bilhete se originou qual, e reescrever o lembrado. Entretanto, não está claro de qual plataforma estamos falando - ambas são ligeiramente diferentes, mas ainda é preciso manter o controle.
A "última fechada pertencente a esta EA" é o que se entende.