Erros, bugs, perguntas - página 1887

 
Vladimir Karputov:

Vós, como eu vejo, não verificastes o código que vos mostrei. Coloquemos as coisas desta forma: primeiro verifica-se, depois volta-se a fazer a pergunta.

Não preciso de o verificar, posso ver que devolve o que deveria.

Estava a falar da primeira utilização da função

 
Alexandr Bryzgalov:

Não preciso de o verificar, posso ver que me devolve o que preciso

Estava a falar da primeira variante da utilização da função


Ok, então. Vamos da cauda.

1. PositionGetInteger:

A função devolve a propriedade solicitada de uma posição aberta previamente seleccionada utilizando a função...

Ou seja, antes de utilizar a PositionGetInteger, a posição deve ser seleccionada primeiro.


2. Seleccionamos a posição utilizando o PositionGetTicket:

Valor de retorno.

O bilhete de posição. No caso de uma execução mal sucedida, devolve 0.


E onde tem um cheque (após o laço) de que foi devolvido pelo PositionGetTicket? Não há verificação, e aí, a propósito, "zero" é devolvido - ou seja, PositionGetTicket foi accionado com um erro - o que equivale a seleccionar uma posição que não existe. Depois, sem verificar o resultado do PositionGetTicket, tenta-se obter a sua propriedade da posição inexistente. E aí, nas propriedades da posição inexistente, ou o lixo ou apenas dados de estruturas nulas.


Resumindo: sem verificar se o PositionGetTicket devolve "zero", não se pode ir mais longe.

 
Vladimir Karputov:


Ok, então. Vamos da cauda.

1. PositionGetInteger:

A função devolve a propriedade solicitada de uma posição aberta previamente seleccionada utilizando a função...

Ou seja, a posição deve ser primeiro seleccionada antes de se utilizar a PositionGetInteger.


2. Seleccionamos a posição utilizando o PositionGetTicket:

Valor de retorno.

O bilhete de posição. No caso de uma execução mal sucedida, devolve 0.


E onde tem um cheque (após o laço) de que foi devolvido pelo PositionGetTicket? Não há verificação, e aí, a propósito, "zero" é devolvido - ou seja, PositionGetTicket foi accionado com um erro - o que equivale a seleccionar uma posição que não existe. Depois, sem verificar o resultado do PositionGetTicket, tenta-se obter a sua propriedade da posição inexistente. E aí, nas propriedades da posição inexistente, ou o lixo ou apenas dados de estruturas nulas.


Para resumir: sem verificar o PositionGetTicket para devolver "zero", não se pode ir mais longe.

Muito obrigado, muito detalhado e útil.
 
Vladimir Karputov:


Ok, vamos assim. Vamos da cauda.

1. PositionGetInteger:

A função devolve a propriedade solicitada de uma posição aberta previamente seleccionada utilizando a função...

Ou seja, a posição deve ser primeiro seleccionada antes de se utilizar a PositionGetInteger.


2. Seleccionamos a posição utilizando o PositionGetTicket:

Valor de retorno.

O bilhete de posição. No caso de uma execução mal sucedida, devolve 0.


E onde tem um cheque (após o laço) de que foi devolvido pelo PositionGetTicket? Não há verificação, e aí, a propósito, "zero" é devolvido - ou seja, PositionGetTicket foi accionado com um erro - o que equivale a seleccionar uma posição que não existe. Depois, sem verificar o resultado do PositionGetTicket, tenta-se obter a sua propriedade da posição inexistente. E aí, nas propriedades da posição inexistente, ou o lixo ou apenas dados de estruturas nulas.


Resumindo: sem verificar o PositionGetTicket para o retorno do "zero", não se pode ir mais longe.

não precisa de se explicar )

Não é essa a questão.

leia correctamente: uma função pode devolver o mesmo valor para situações diferentes?

a função pode fazer isso?
 
Vladimir Karputov:

Para resumir: sem verificar PositionGetTicket para um retorno de "zero" não se pode avançar.

Pode

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Insectos, insectos, perguntas

fxsaber, 2017.05.12 11:19

é lógico fazer uma verificação (PositionGetInteger(POSITION_TICKET) > 0).
 
Alexandr Bryzgalov:

que a função para situações diferentes devolve o mesmo valor?

é correcto que a função faça isto?
Infelizmente, sim.
 
Alexandr Bryzgalov:

1. não precisa de se explicar).

não é essa a questão

2. leia-o correctamente: uma função pode devolver o mesmo valor para situações diferentes?

é correcto que uma função o faça?


1. É uma pessoa rude que também cometeu um erro no seu código, mas não o quer admitir.

2. A função funciona de forma absolutamente correcta. Porque ele (PositionGetInteger(POSITION_TYPE)) só pode devolver 2 valores - ou POSITION_TYPE_BUY ouPOSITION_TYPE_SELL. Mas sem seleccionar uma posição (e não a selecciona - não verifica o que foi exactamente seleccionado) para exigir algo de (PositionGetInteger(POSITION_TYPE)) é imprudente.


Conclusão: quando o seu código é escrito com um erro lógico - simplesmente não tem o direito de exigir algo das funções do sistema.

 
Vladimir Karputov:

Conclusão: quando o seu código é escrito com um erro lógico - simplesmente não tem o direito de exigir nada das funções do sistema.

Um bom exemplo é quando a pergunta nunca foi respondida.
 
Vladimir Karputov:


1. É uma pessoa mal-educada que cometeu um erro no código mas não o admite.

2. A função funciona de forma absolutamente correcta. Porque ele (PositionGetInteger(POSITION_TYPE)) só pode devolver DOIS valores - ou POSITION_TYPE_BUY ouPOSITION_TYPE_SELL. Mas sem seleccionar uma posição (e não a selecciona - não verifica o que foi exactamente seleccionado) para exigir algo de (PositionGetInteger(POSITION_TYPE)) é imprudente.


Conclusão: quando o seu código é escrito com um erro lógico, simplesmente não tem o direito de exigir algo das funções do sistema.

Lamento, não é culpa minha que alguém não consiga ver o problema.

O facto de que existe um erro deliberado no código é reconhecido.

E eu sei como consertá-lo.

Mas a questão é diferente.

 

Porque é que a função PositionGetInteger(POSITION_TYPE) devolve um valor de compra (igual a 0) em vez de um valor de erro (igual a 0) se os parâmetros de entrada não estiverem correctos?