Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 337

 
Artyom Trishkin:

C'est un sentiment étrange que vous avez. Je vous ai juste montré comment rester simple - sans variables inutiles.


Donc je suis fatigué et il est temps pour moi d'aller me reposer - dormir, oui.

 

Bonjour, quelle est la fonction de la fenêtre de l'indicateur dans l'Expert Advisor ?

 
Nauris Zukas:

Bonjour ! Quelles fonctions dans l'Expert Advisor pouvez-vous rendre la fenêtre de l'indicateur ?


Appeler un indicateur vide depuis le conseiller expert.

 
Alekseu Fedotov:

Appelez un indicateur vide de l'expert.

Merci !

 
Vitaly Muzichenko:

Trouvez le code dont vous avez besoin ici


Bonjour, j'ai utilisé la fonction pour déterminer le prix du dernier ordre de vente ouvert.

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}

Mais lorsque je le colle dans mon EA, j'obtiens une erreur de compilation dans la condition de la fonction "sy" - token inattendu.

=' - jeton inattendu 252 18

valeur l requise 1 1

conversion implicite de 'chaîne' en 'nombre' 252 19

'=' - valeur l requise 252 18

= - l'expression du type 'void' est illégale 252 18

op' - jeton inattendu 252 28

'=' - jeton inattendu 252 30

valeur l requise 1 1

OP_SELL' - utilisation illégale de l'opération 252 31

perte éventuelle de données due à la conversion de type 252 30

'=' - valeur l requise 252 30

= - l'expression du type 'void' est illégale 252 30

mn' - jeton inattendu 252 44

'=' - jeton inattendu 252 46

valeur l requise 1 1

1 - utilisation d'une opération illégale 252 48


Il me semble que tout devrait être correct ! S'il vous plaît, conseillez-moi, je l'ai copié et je n'ai rien changé.


 
vikzip:

Bonjour, j'ai utilisé la fonction pour déterminer le prix du dernier ordre de vente ouvert.

Mais lorsque je le colle dans un EA, j'obtiens une erreur de compilation dans la condition de la fonction "sy" - jeton inattendu.

=' - jeton inattendu 252 18

valeur l requise 1 1

conversion implicite de 'chaîne' en 'nombre' 252 19

'=' - valeur l requise 252 18

= - l'expression du type 'void' est illégale 252 18

op' - jeton inattendu 252 28

'=' - jeton inattendu 252 30

valeur l requise 1 1

OP_SELL' - utilisation illégale de l'opération 252 31

perte éventuelle de données due à la conversion de type 252 30

'=' - valeur l requise 252 30

= - l'expression du type 'void' est illégale 252 30

mn' - jeton inattendu 252 44

'=' - jeton inattendu 252 46

valeur l requise 1 1

1 - utilisation d'une opération illégale 252 48


Il me semble que tout devrait être correct ! S'il vous plaît, conseillez-moi, je l'ai copié et je n'ai rien changé.


J'ai besoin de retourner le type de fonction

PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
double PriceS(string sy="0", int op=OP_SELL, int mn=-1) {
 
vikzip:


Je pense que tout devrait être correct !?? Veuillez me conseiller, je l'ai copié et n'ai rienchangé.



Et l'en-tête de la fonction, et n'a pas copié le type de fonction


La fonction ressemble à l'origine à ceci :

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает цену открытия последней открытой позиций.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t=0;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
'op' - unexpected token Армата.mq4 248 28 'OP_SELL' - illegal operation use Армата.mq4 248 31 'mn' - unexpected token Армата.mq4 248 44 
double PriceS(string sy="", int op=OP_SELL, int mn=-1) {             //Цена последнего открытого Селл ордера
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
Alekseu Fedotov
:


Et l'en-tête de la fonction, et n'a pas copié le type de fonction


La fonction ressemble à l'origine à ceci :


Alekseu Fedotov:

un en-tête de fonction, et n'ont pas copié le type de fonction


La fonction ressemble à l'origine à ceci :


Correct, l'exemple disait aussi. Si j'ai bien compris, vous pouvez sélectionner le type de commande, ce que j'ai fait.

  • Op- Opération commerciale, type de poste. Valeurs valides :OP_BUY,OP_SELL ou-1. La valeur par défaut de-1 signifie une position quelconque.
Puis j'ai rendu la fonction globale en la plaçant avant start. Mais si je renvoie le type double juste avant le nom de la fonction, une erreur se produit. Dites-moi pourquoi !

PriceS' - la fonction ne peut être déclarée que dans la portée globale 252 10

J'ai compris que la fonction doit être globale !

Traduit l'erreur dans le traducteur il dit

La fonction ne peut être définie que dans la portée globale. Si je comprends bien le sens de ces mots, elle doit être définie globalement et donc ne pas la faire précéder de double. Il n'est pas clair pourquoi une erreur est générée sur sy même si je ne fais que copier le modèle.

sy' - signe inattendu 248 17 '=' - signe inattendu 248 19 l-valeur requise 1 1

Puis-je rendre sy global ? et même erreur avec les autres variables déclarées dans la fonction.

'op' - jeton inattendu 248 28 'OP_SELL' - utilisation illégale de l'opération 248 31 'mn' - jeton inattendu 248 44

 
vikzip:


C'est vrai, c'était aussi écrit dans l'exemple. Si j'ai bien compris, il est possible de sélectionner le type de commande, ce que j'ai fait.

  • op- Opération commerciale, type de poste. Valeurs valides :OP_BUY,OP_SELL ou-1. La valeur par défaut de-1 signifie une position quelconque.
Puis j'ai rendu la fonction globale en la plaçant avant start. Mais si je renvoie le type double juste avant le nom de la fonction, une erreur se produit. Dites-moi pourquoi !

PriceS' - la fonction ne peut être déclarée que dans la portée globale 252 10

J'ai compris que la fonction doit être globale !

Traduit l'erreur dans le traducteur dit


Placez la fonction en dehors de la fonction de démarrage

Et dans le corps de la fonction de démarrage, appelez-la comme ceci :

PriceOpenLastPos(); //текущий символ  любая последняя поз.


PriceOpenLastPos(Symbol(),OP_SELL);//текущий символ  OP_SELL   без магика


PriceOpenLastPos(Symbol(),OP_BUY);//текущий символ   OP_BUY  без магика

3 paramètres magik, séparés par des virgules, mettez le vôtre ou 0

 
Alekseu Fedotov:

Placez la fonction en dehors de la fonction de démarrage

Dans le corps de la fonction de démarrage, vous l'appelez comme ceci :

3 paramètres magik, séparés par des virgules, mettez le vôtre ou 0


Merci beaucoup ! !! Dès que j'ai placé la fonction en dehors de la fonction de démarrage, toutes les erreurs ont disparu !!!

Raison: