Erros, bugs, perguntas - página 1886

 
Vladimir Karputov:


Então, qual é a questão?

Onde se pode ver que sob o número "i" existe uma posição com bilhete de sucção, para símbolo de sucção e tal? Em geral, para além da simples saída do número de sequência, também se emite o bilhete e o símbolo.


É normal que para situações diferentes, uma função dê o mesmo valor?

ZS: a propósito, havia uma pergunta no correio.

O ponto é, se eu seleccionar comprar, a função(PositionGetInteger(POSITION_TYPE)) retorna 0

E se seleccionar uma posição inexistente, a função também retornará 0

 
Alexandr Bryzgalov:
É normal que para situações diferentes uma função dê o mesmo valor?


O que são "situações diferentes"? E fazer como recomendei acima:

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

Insectos, insectos, perguntas

Vladimir Karputov, 2017.05.12 11:15

...

Em geral, para além da simples saída do número de sequência, também se emite o bilhete e o símbolo.


 
Alexandr Bryzgalov:

Eu sei que preciso de verificar, mas as coisas podem acontecer...

PositionGetInteger

A função devolve a propriedade solicitada de uma posição aberta, previamente seleccionada usando a funçãoPositionGetSymbol ouPositionSelect. A propriedade da posição deve ser do tipo data/hora, int. Existem 2 variantes da função.

1. Devolve directamente o valor do imóvel.

longGetInteger(
ENUM_POSITION_PROPERTY_INTEGERpropriedade_id// identificador da propriedade
);

2. Devolve verdadeiro ou falso, dependendo do sucesso da função. Se bem sucedido, o valor da propriedade é colocado na variável alvo, que é passada por referência ao último parâmetro.

boolPositionGetInteger(
ENUM_POSITION_PROPERTY_INTEGERproperty_id,// identificador da propriedade
longo&long_var//tomar o valor do bem
);

Parâmetros

property_id

O identificador [in] da propriedade da posição. O valor pode ser um dos valores de enumENUM_POSITION_PROPERTY_INTEGER.

long_var

[Variável do tipo longo, tomando o valor do bem solicitado.

Valor devolvido

Valor da tipografia ao longo da vida. Em caso de execução falhada, devolve 0.

A situação com o majestoso é mais fina. Portanto, é lógico fazer uma verificação (PositionGetInteger(POSITION_TICKET) > 0).
Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:
A situação é mais subtil com a magia. Portanto, é lógico fazer uma verificação (PositionGetInteger(POSITION_TICKET) > 0).

Sim, é bom fazer uma verificação.

Mas quando se escreve uma função, tenta-se sempre assegurar que ela devolve um valor diferente em situações diferentes.

Penso que é incorrecto que o mesmo valor saia da função em situações diferentes.
 
Alexandr Bryzgalov:

mas quando se escreve uma função, tenta-se sempre obter um valor diferente para situações diferentes.

Esta é a razão pela qual a Magia é mencionada. O que devolver em caso de erro PositionGetInteger(POSITION_MAGIC) ?
 
fxsaber:
Esta é a razão pela qual a Magic o mencionou. O que devolver em caso de erro PositionGetInteger(POSITION_MAGIC) ?
0 - posição aberta manualmente. correcto?
 
Alexandr Bryzgalov:

Não há problema se uma função dá o mesmo valor para situações diferentes?

ZS: a propósito, havia uma pergunta no correio.

o ponto é, se eu seleccionar comprar, a função(PositionGetInteger(POSITION_TYPE)) retorna 0

e se seleccionar uma posição inexistente, a função também retornará 0


Assim, a primeira chamada é utilizada quando se GARANTE uma posição (como tem no laço). E aqui está a segunda forma de chamada

bool  PositionGetInteger( 
   ENUM_POSITION_PROPERTY_INTEGER  property_id,     // идентификатор свойства 
   long&                           long_var         // сюда примем значение свойства 
   );

para os casos em que a posição é seleccionada a partir do nada.


Faça isso e acredite no que obtém na variável "resultado" - tudo se encaixa no lugar:

//+------------------------------------------------------------------+
//|                                                         posi.mq5 |
//|                                                      sanyooooook |
//|                                                 http://sn-bot.ru |
//+------------------------------------------------------------------+
#property copyright "sanyooooook"
#property link      "http://sn-bot.ru"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int tot=PositionsTotal();
   for(int i=0;i<tot;i++)
     {
      ulong OrderTicket_=PositionGetTicket(i);
      long cmd=PositionGetInteger(POSITION_TYPE);
      if(OrderTicket_>0 && cmd<=POSITION_TYPE_SELL)
         Print("N",i,"cmd=",cmd);

     }
   ulong OrderTicket_=PositionGetTicket(100);
   long cmd=-3;
   bool result=PositionGetInteger(POSITION_TYPE,cmd);
   if(result)
      Print("N100 cmd=",cmd);
  }
//+------------------------------------------------------------------+
 
Alexandr Bryzgalov:
0 - a posição é aberta manualmente. correcto?
Sim. Mas qualquer outro valor também será enganador.
 
Vladimir Karputov:


Assim, a primeira chamada é utilizada quando se GARANTE uma posição (como tem no laço). E aqui está a segunda forma de chamada

para os casos em que a posição é seleccionada a partir do nada.


Faça isto e acredite no que obtém na variável "resultado" - tudo se encaixa no lugar:

não é essa a questão, é que a função devolve o mesmo valor para situações diferentes.

Eu sei como verificar.

a questão original era se é de todo normal?

SZY: um erro pode ser cometido involuntariamente e depois, em código 100000, cansar-se-á de o procurar.

O quê? Não tem de cometer erros? )

 
Alexandr Bryzgalov:

não é esta a questão, mas a função retorna o mesmo valor para situações diferentes.

Eu sei como verificá-lo

A questão era originalmente sobre se isto é de todo normal?


Vós, como eu vejo, não verificastes o código que vos mostrei. Que tal isto: verifica-se primeiro, depois volta-se a fazer a pergunta.