Erreurs, bugs, questions - page 73

 
Swan:

ou aucune dérogation n'est nécessaire, ou demande, offre par le symbole de position à demander

La fonction PositionGetSymbol sélectionne automatiquement une position pour la suite des opérations.

En fait, PositionGetSymbol fournit une sélection séquentielle et PositionSelect une sélection directe.

Документация по MQL5: Торговые функции / PositionGetSymbol
Документация по MQL5: Торговые функции / PositionGetSymbol
  • www.mql5.com
Торговые функции / PositionGetSymbol - Документация по MQL5
 
Swan:

ou vous n'avez pas besoin de rechercher une position, ou une demande, une offre par un symbole de position

Il s'est avéré que PositionGetInteger(POSITION_TYPE) est utilisé sans sélection par PositionSelect. Ce qui, en fait, n'est pas bon (comme me l'a rappelé Slava)... :)

stringo:

La fonction PositionGetSymbol sélectionne automatiquement une position pour la suite des opérations.

En fait, PositionGetSymbol fournit une sélection séquentielle et PositionSelect une sélection directe.

Sur cette base, il fallait appliquer exactement PositionGetSymbol dans la boucle, et ensuite s'intéresser à tout le reste...
 

Eh bien, si vous utilisez la télépathie, alors if(PositionSelect(Symbol())) vous devez le mettre à la place de loop :)

Il est préférable de vérifier si LevelProfit-LevelWLoss n'est pas inférieur à SymbolInfoInteger(Symbol,SYMBOL_TRADE_STOPS_LEVEL).

Et ces doubles sont comparés de manière incorrecte...

Sinon, cela devrait fonctionner)


ps : je ne suis pas sûr, mais pour la modification de sl/tp, la déviation>0 ne sera pas bonne.

 

ObjectGetInteger() avec l'identifiant OBJPROP_TIME ne fonctionne pas correctement

Pour reproduire l'erreur, créez un objet "Rectangle" nommé "1".

Exécutez le script ci-dessous pour afficher les quatre coordonnées d'ancrage de notre rectangle fraîchement créé nommé "1".

void OnStart()
{ 
  Comment(ObjectGetDouble(0,"1",OBJPROP_PRICE,0),"   ",
          StringToTime   (IntegerToString(ObjectGetInteger(0,"1",OBJPROP_TIME, 0))),"\n",
          
          ObjectGetDouble(0,"1",OBJPROP_PRICE,1),"   ",
          StringToTime   (IntegerToString(ObjectGetInteger(0,"1",OBJPROP_TIME, 1))));

}

Nous voyons que les coordonnées de prix sont définies correctement, mais pas les coordonnées de temps :


Документация по MQL5: Графические объекты / ObjectGetInteger
Документация по MQL5: Графические объекты / ObjectGetInteger
  • www.mql5.com
Графические объекты / ObjectGetInteger - Документация по MQL5
 
joo:

ObjectGetInteger() avec l'identifiant OBJPROP_TIME ne fonctionne pas correctement

Pour reproduire l'erreur, créez un objet "Rectangle" nommé "1".

Exécutez le script ci-dessous pour afficher les quatre coordonnées d'ancrage de notre rectangle fraîchement créé nommé "1".

Nous voyons que les coordonnées de prix sont définies correctement, mais pas les coordonnées de temps :



Sentez la différence

  Comment(ObjectGetDouble(0,"1",OBJPROP_PRICE,0),"   ",
          datetime(ObjectGetInteger(0,"1",OBJPROP_TIME, 0)),"\n",
          
          ObjectGetDouble(0,"1",OBJPROP_PRICE,1),"   ",
          datetime(ObjectGetInteger(0,"1",OBJPROP_TIME, 1)));
 
joo:

ObjectGetInteger() avec l'identifiant OBJPROP_TIME ne fonctionne pas correctement

Pour reproduire l'erreur, créez un objet "Rectangle" nommé "1".

Exécutez le script ci-dessous pour afficher les quatre coordonnées d'ancrage de notre rectangle fraîchement créé nommé "1".

Nous voyons que les coordonnées de prix sont définies correctement, mais pas les coordonnées de temps :



Voici le script.

//+------------------------------------------------------------------+
//|                                                       123123.mq5 |
//|                                  2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string msg="";
//---
   msg+=DoubleToString(ObjectGetDouble(ChartID(),"123456",OBJPROP_PRICE,0),_Digits)+" "+
        TimeToString(ObjectGetInteger(ChartID(),"123456",OBJPROP_TIME,0),TIME_DATE|TIME_MINUTES)+"\n";
   msg+=DoubleToString(ObjectGetDouble(ChartID(),"123456",OBJPROP_PRICE,1),_Digits)+" "+
        TimeToString(ObjectGetInteger(ChartID(),"123456",OBJPROP_TIME,1),TIME_DATE|TIME_MINUTES)+"\n";
   Comment(msg);
  }
//+------------------------------------------------------------------+

Et voici le résultat.

 
stringo:

Sentez la différence

Merci, je sens la différence.

Vous avez explicitement défini le type de valeur comme étant une date.

et j'ai utilisé la conversion de données.

Mais cela ne signifie-t-il pas que la construction

StringToTime   (IntegerToString(

ne fonctionne pas correctement ?

 
joo:

Merci, je sens la différence.

Vous avez explicitement défini le type de valeur comme étant une date.

et j'ai utilisé la conversion de données.

Mais cela ne signifie-t-il pas que la construction

Ne fonctionne-t-il pas correctement ?

Non pas que ce soit mal. Ces actions sont tout simplement inutiles.

Consultez l'aide de la fonction StringToTime() et vous comprendrez pourquoi le résultat est incorrect.

Документация по MQL5: Преобразование данных / StringToTime
Документация по MQL5: Преобразование данных / StringToTime
  • www.mql5.com
Преобразование данных / StringToTime - Документация по MQL5
 
joo:

Merci, je sens la différence.

Vous avez explicitement défini le type de valeur comme étant un temps de date.

et j'ai utilisé la conversion de données.

Mais cela ne signifie-t-il pas que la construction

ne fonctionne pas correctement ?

Pas exactement. En convertissant IntegerToString, vous avez reçu une chaîne de type "12345612345", tandis que StringToTime devrait entrer une chaîne formatée comme "2010.07.29 08:10".

Cependant, vous nous avez montré notre erreur. Dans votre cas, nous aurions dû renvoyer la date 1970.01.01 00:00 et soulever l'erreur last_error.

 
stringo:

Pas exactement. En convertissant IntegerToString, vous avez reçu une chaîne de type "12345612345", tandis que StringToTime devrait recevoir une chaîne formatée comme "2010.07.29 08:10".

Cependant, vous nous avez montré notre erreur. Dans votre cas, nous aurions dû renvoyer la date 1970.01.01 00:00 et soulever l'erreur last_error.

Alors, mon message n'est pas vain, comme je le pensais déjà ?
Raison: