Como verificar se um pedido é selecionado - página 7

 
tara:

Espanha também:)
A Espanha é do sul e Barcelona tem um clima muito ameno sem frio e calor insuportável, e a própria cidade é muito bonita e compacta, então eu, como moscovita, gostei muito!
 

O TS quer tirar proveito de uma característica não documentada do MT4. A função OrderSelect() cria um ponteiro (TC o chama de "ordem selecionada") que é global para a EA (script). Os dois roteiros a seguir ilustram isso

O ponteiro criado por este procedimento chamado está disponível no procedimento de chamada:

int start()
{
   ordsel();
   Print( OrderTicket( ) );
   return(0);
}
void ordsel()
{
   OrderSelect( 1, SELECT_BY_POS, MODE_HISTORY );
   Print( OrderTicket( ) );
}

2013.02.17 02:50:48 111 EURUSD,H1: razão uninit 0
2013.02.17 02:50:48 111 EURUSD,H1: 18338793
2013.02.17 02:50:48 111 EURUSD,H1: 18338793
2013.02.17 02:50:48 111 EURUSD,H1: carregado com sucesso

O ponteiro criado está disponível no procedimento chamado:

int start()
{
   OrderSelect( 1, SELECT_BY_POS, MODE_HISTORY );
   Print( OrderTicket( ) );
   ordsel();
   return(0);
}
void ordsel()
{
   Print( OrderTicket( ) );
}

2013.02.17 02:56:10 111 EURUSD,H1: razão uninit 0
2013.02.17 02:56:10 111 EURUSD,H1: 18338793
2013.02.17 02:56:10 111 EURUSD,H1: 18338793
2013.02.17 02:56:10 111 EURUSD,H1: carregado com sucesso


Mas é um pouco assustador usá-lo.

 
tara:
Você deveria se casar, irmão.
Para quê? Muita gente vive aqui sem registro e com crianças. Por que pagar todos os tipos de taxas? Então eu já tive tudo, então não há necessidade.
 
Ant_TL:

Bem, aparentemente todos aqui são super legais, mas temo que se eu começar a me concentrar nos aspectos legais de tudo isso, vou receber um martelo na cabeça do Sr. FAQ, que sem dúvida também é legal. Portanto, graças a todos que participaram da discussão, o tema pode provavelmente ser encerrado, já que ninguém está interessado nesta questão, exceto eu.

Talvez, o nome do tópico fosse enganoso, deveria ter sido chamado"Como verificar se a ordem atual em mql4 está selecionada atualmente" ou algo parecido. Caso contrário, alguns educadores precisam fazer perguntas até o nível dos baldes.


1) Eu acho que é a sua"beleza" que faz seus olhos regar.

2) Se você continuar a ser rude, você receberá exatamente o que chama de "martelo de banimento" para fins educacionais.

3) Sua mensagem (em negrito) foi entendida sem nenhum "soletrar" desde a página 2 e eu (como para aqueles que estão no tanque) já respondi não. Não existe tal mandado, se você quiser ter um, cuide dele você mesmo e com bastante antecedência.

4) Você pode escrever programas tão longos quanto quiser, mas se tiver uma lacuna de conhecimento e quiser preenchê-la às custas da sociedade (que é para isso que este fórum serve), então tente se comportar decentemente.

 
Mislaid:

O TS quer tirar proveito de uma característica indocumentada do MT4. A função OrderSelect() cria um ponteiro (TC o chama de "ordem selecionada") que é global para a EA (script). Como demonstrado nos dois roteiros a seguir

Mas é assustador usá-lo.

Por que indocumentado e por que estranho? Isto sempre funciona, exceto para bibliotecas personalizadas, porque aparentemente este "ponteiro" é global apenas dentro de um EA ou de um módulo de script, e um módulo de biblioteca tem seu próprio ponteiro.

 
FAQ:

3) Sua mensagem (em negrito) já está clara sem "soletrar" a partir da página 2, e eu (como para os que estão no tanque) já respondi não. Não existe tal mandado, se você quiser ter um, cuide dele você mesmo e com bastante antecedência.

4) Você pode escrever programas tão longos quanto quiser, mas se tiver uma lacuna de conhecimento e quiser preenchê-la às custas da sociedade (que é para isso que este fórum serve), então tente se comportar decentemente.

Que outro mandado não existe? Não tenho nenhuma lacuna no conhecimento, essa é a sua ficção. Chamei a atenção para um problema, que eu acho que é uma lacuna no mecanismo de trabalhar com pedidos em mql4, isso é tudo. Se algumas funções funcionam com uma ordem em destaque, deve ser possível verificar se uma ordem está em destaque ou não, de modo a não gerar um erro. Entendo que é possível fazer muletas, memorizar a seleção da ordem em uma dúzia de lugares, passar um parâmetro para não cometer um erro, e assim por diante.

FAQ:

2) Se você continuar sendo rude, certamente terá o que você chama de "martelo de banimento" para fins educacionais.

O fato de seu amigo Bori ter sido rude comigo por várias páginas obviamente passou por seus olhos aguçados. Você está sendo seletivo.

 
Ant_TL:

Que outro mandado não existe? Não tenho nenhuma lacuna em meu conhecimento, essa é sua ficção. Eu apontei o problema, que eu acho que é uma lacuna no mecanismo de trabalhar com pedidos em mql4, isso é tudo. Se algumas funções funcionam com uma ordem selecionada, precisamos ser capazes de verificar se uma ordem é selecionada ou não, para não gerar um erro. Entendo que podemos fazer muletas, lembrar de selecionar uma ordem em uma dúzia de lugares, enviar um parâmetro para não cometer um erro, e assim por diante.

Não há espaço em mql4. O estado da ordem selecionada pode mudar durante qualquer operação com ordens: abrir/fechar, tomar/pararar, executar/apagar uma ordem pendente, ou fechar parcialmente uma ordem. Portanto, não precisamos memorizar e transmitir nada. Você nunca deve contar com o fato de que o estado não mudou. Uma ordem pode ser selecionada, mas não é mais a mesma.
 
Mislaid:
Não há espaço em mql4. O estado de uma ordem selecionada pode mudar durante qualquer operação com ordens: abrir/fechar, tomar/pararar, executar/apagar uma ordem pendente, ou fechar parcialmente uma ordem. Portanto, não devemos memorizar e transmitir nada. Você nunca deve contar com o fato de que o estado não mudou. Uma ordem pode ser selecionada, mas não é mais a mesma.

Apontei para uma situação específica: temos um laço principal que funciona com os pedidos. E há uma série de funções auxiliares que são utilizadas neste loop, que também funcionam com pedidos. A lógica do laço principal não deve ser quebrada após estas funções serem chamadas. Isto significa que se uma função auxiliar afeta o trabalho com ordens, ela deve se lembrar do estado do "ponteiro" no momento de sua chamada e devolvê-lo ao estado em que se encontrava quando foi terminado. Mas não pode fazer isso sem muletas e gerando erros. Esta é exatamente uma lacuna aqui.

De fato, como escrevi no primeiro post, ignorar a necessidade de controlar o estado "ponteiro" em funções auxiliares pode levar a erros difíceis de serem detectados.

 
Ant_TL:

Apontei para uma situação específica: temos um laço principal que funciona com os pedidos. E há uma série de funções auxiliares que são utilizadas neste loop, que também funcionam com pedidos. A lógica do laço principal não deve ser quebrada após estas funções serem chamadas. Isto significa que se uma função auxiliar afeta o trabalho com ordens, ela deve se lembrar do estado do "ponteiro" no momento de sua chamada e devolvê-lo ao estado em que se encontrava quando foi terminado. Mas não pode fazer isso sem muletas e gerando erros. Esta é exatamente uma lacuna aqui.

Na verdade, como escrevi no primeiro post, ignorar a necessidade de monitorar o estado "ponteiro" em funções auxiliares pode levar a erros difíceis de serem detectados.

Suponha que você tenha passado seu EA para alguém. Você não sabe se ele tem outros EAs trabalhando, talvez ele mesmo comercialize suas próprias mãos.

Talvez, você tenha terminado este EA e começado a escrever um novo. É aqui que o antigo vai apresentar uma falha.

 
Mislaid:

Suponha que você tenha passado seu EA para alguém. Você não sabe, talvez ele tenha outros EAs trabalhando, ele troca suas próprias mãos.

Talvez você tenha terminado este EA e começado a escrever um novo. É aí que o antigo vai apresentar uma falha.

Desculpe-me? O que isso tem a ver com quem eu dei ao Consultor Especialista? Você acha que o estado do "ponteiro" é influenciado por qualquer ação de outros EAs e do terminal? O "ponteiro" (o bilhete da ordem atualmente selecionada) é uma variável de nível de módulo. Seria bom acessá-la sem a possível geração de erros 4105, que é o que venho escrevendo sobre todo este tempo

Razão: