Erreurs, bugs, questions - page 1886

 
Alexandr Bryzgalov:
Est-il normal que pour différentes situations, une même fonction donne la même valeur ?


Qu'est-ce qu'une "situation différente" ? Et faites comme je l'ai recommandé ci-dessus :

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

Vladimir Karputov, 2017.05.12 11:15

...

En général, outre la simple édition du numéro de séquence, vous éditez également le ticket et le symbole.


 
Alexandr Bryzgalov:

Je sais que je dois vérifier, mais des choses peuvent arriver...

PositionGetInteger

La fonction renvoie la propriété demandée d'une position ouverte, préalablement sélectionnée à l'aide de la fonctionPositionGetSymbol ouPositionSelect. La propriété position doit être de type datetime, int. Il existe 2 variantes de cette fonction.

1. Renvoie directement la valeur de la propriété.

longGetInteger(
ENUM_POSITION_PROPERTY_INTEGERproperty_id// identifiant de la propriété
) ;

2. Renvoie vrai ou faux selon le succès de la fonction. En cas de succès, la valeur de la propriété est placée dans la variable cible, qui est passée par référence au dernier paramètre.

boolPositionGetInteger(
ENUM_POSITION_PROPERTY_INTEGERproperty_id,// identifiant de la propriété
long&long_var//prend la valeur de la propriété
) ;

Paramètres

identifiant de la propriété

L'identifiant [in] de la propriété position. La valeur peut être l'une des valeurs de l'enumENUM_POSITION_PROPERTY_INTEGER.

long_var

[out] Variable de type long, prenant la valeur de la propriété demandée.

Valeur retournée

Valeur du typelong. En cas d'échec de l'exécution, retourne 0.

La situation avec le majic est plus mince. Il est donc logique de procéder à une vérification (PositionGetInteger(POSITION_TICKET) > 0).
Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:
La situation est plus subtile avec la magick. Il est donc logique de faire une vérification (PositionGetInteger(POSITION_TICKET) > 0).

Oui, c'est bien que vous deviez vérifier.

Mais lorsque vous écrivez une fonction, vous essayez toujours de faire en sorte qu'elle renvoie une valeur différente dans différentes situations.

Je pense qu'il est incorrect que la même valeur sorte de la fonction dans différentes situations.
 
Alexandr Bryzgalov:

mais lorsque vous écrivez une fonction, vous essayez toujours d'obtenir une valeur différente pour différentes situations.

C'est la raison pour laquelle la magie est mentionnée. Que retourner en cas d'erreur PositionGetInteger(POSITION_MAGIC) ?
 
fxsaber:
C'est la raison pour laquelle Magic l'a mentionné. Que retourner en cas d'erreur PositionGetInteger(POSITION_MAGIC) ?
0 - position ouverte manuellement. correct ?
 
Alexandr Bryzgalov:

Est-il possible qu'une fonction donne la même valeur pour différentes situations ?

ZS : il y avait une question dans le post d'ailleurs.

le fait est que, si je sélectionne acheter, la fonction (PositionGetInteger(POSITION_TYPE)) renvoie 0.

et si vous sélectionnez une position inexistante, la fonction retournera également 0


Le premier appel est donc utilisé lorsque vous avez GARANTI une position (comme dans la boucle). Et voici la deuxième forme d'appel

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

pour les cas où le poste est sélectionné de façon impromptue.


Faites-le et croyez ce que vous obtenez dans la variable "résultat" - tout se met en place :

//+------------------------------------------------------------------+
//|                                                         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 - la position est ouverte manuellement. correct ?
Oui. Mais toute autre valeur sera également trompeuse.
 
Vladimir Karputov:


Le premier appel est donc utilisé lorsque vous avez GARANTI une position (comme dans la boucle). Et voici la deuxième forme d'appel

pour les cas où le poste est sélectionné de façon impromptue.


Faites-le et croyez ce que vous obtenez dans la variable "résultat" - tout se met en place :

ce n'est pas la question, c'est que la fonction renvoie la même valeur pour différentes situations.

Je sais comment le vérifier.

la question initiale était de savoir si c'est normal du tout ?

SZY : une erreur peut être commise involontairement et alors dans 100000 codes vous serez fatigué de la chercher.

Quoi ? Tu n'as pas à faire d'erreurs ? )

 
Alexandr Bryzgalov:

ce n'est pas la question, mais la fonction renvoie la même valeur pour différentes situations.

Je sais comment le vérifier

La question était à l'origine de savoir si cela était normal ?


Vous, comme je le vois, n'avez pas vérifié le code que je vous ai montré. Que diriez-vous de ceci : vous vérifiez d'abord, puis vous posez à nouveau la question.
 
Vladimir Karputov:

Vous, comme je le vois, n'avez pas vérifié le code que je vous ai montré. Disons-le ainsi : vous vérifiez d'abord, puis vous posez à nouveau la question.

Je n'ai pas besoin de le vérifier, je peux voir qu'il renvoie ce qu'il devrait.

Je parlais de la première utilisation de la fonction