[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 601

 
BeerGod:

https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page4#434230

La fonction isCloseLastPosByTake().

Cette fonction renvoie un drapeau pour fermer la dernière position par Take Profit. Le drapeau est levé - Vrai - TakeProfit a été déclenché. Drapeau abaissé - Faux - le poste a été fermé pour une autre raison. Une sélection plus précise des positions à prendre en compte est spécifiée à l'aide de paramètres externes :

  • sy - Nom de l'instrument de marché. Si vous définissez ce paramètre, la fonction ne prendra en compte que les positions de l'instrument spécifié. La valeur par défaut "" signifie tout instrument de marché. NULL signifie l'instrument actuel.
  • op - Opération commerciale, type de poste. Valeurs valables : OP_BUY, OP_SELL ou -1. La valeur par défaut -1 signifie une position quelconque.
  • mn - Identificateur de position, MagicNumber. La valeur par défaut -1 signifie n'importe quel identifiant.




Merci, je suis moi-même tombé sur les bibliothèques de KIM...(Le camarade Kim est apparemment comme le MARX du monde du forex - il a écrit CAPITAL...et nous le citons tous maintenant (c'est-à-dire que nous l'insérons dans nos EAs)) .... il y a des "drapeaux" de transactions récentes dans différentes variations...

sauf que je n'ai jamais utilisé # includ-....

Pouvez-vous expliquer en quelques mots ?

en haut j'écris # includ (nom du fichier mqh)

Mais dans le code ? où dois-je mettre la fonction ?

GetTypeLastClosePos () ;

et puis quoi ?

Qu'est-ce qui va me permettre de retrouver le type de poste ?

int GetTypeLastClosePos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), r=-1;

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

OrderType() ?

c'est-à-dire que si(OrderType() ==TRUE ) il faut faire ceci et cela... n'est-ce pas ?

 
En quoi les fonctions du testeur sont-elles différentes de celles du commerce en ligne ?
 
En théorie, le traitement des erreurs dans la communication avec le serveur commercial.
 
lottamer:


Merci, je suis moi-même tombé sur les Bibliothèques de KIM ... (Le Camarade KIM a probablement écrit les MAJUSCULES comme les MARQUES du monde du Forex ... et nous les citons tous maintenant (c'est-à-dire, nous les insérons dans nos Expert Advisors) ...) il y a des "drapeaux" de transactions récentes dans différentes variations...

sauf que je n'ai jamais utilisé # includ-....

Pouvez-vous expliquer en quelques mots ?

en haut j'écris # include (nom du fichier mqh)

Mais dans le code ? où dois-je mettre la fonction ?

GetTypeLastClosePos () ;

et puis quoi ?

Qu'est-ce qui va me permettre de retrouver le type de poste ?

OrderType() ?

c'est-à-dire que si(OrderType() ==TRUE ) il faut faire ceci et cela... n'est-ce pas ?

Les fonctions doivent être insérées après return(0) ;

La fonction GetTypeLastClosePos() renvoie 0 s'il y a eu un achat, et 1 s'il y a eu une vente, ou -1 s'il n'y a rien eu dans l'historique.

//+------------------------------------------------------------------+
//|                                                          123.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
if (isCloseLastPosByTake()==true) Comment("Профит"); else Comment("ХЗ");   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
 
BeerGod:

La fonction doit être insérée après return(0) ;

La fonction GetTypeLastClosePos() renvoie 0 s'il y a eu un achat et 1 s'il y a eu une vente, ou -1 s'il n'y a rien dans l'historique.



Je l'ai, merci.

Et pourtant, si la fonction se trouve dans un fichier #include, comment doit-elle être traitée ?

 
lottamer:


Je l'ai, merci.

Et pourtant, si la fonction est dans un fichier #include, comment s'en débarrasser ?


comment comprenez-vous #include?

Comme dans le doc ou à votre façon ?

 

J'ai besoin que le hibou place un ordre en attente exactement à l'ouverture d'une bougie sur D1.

J'ai écrit une fonction :

bool GetTimeToInput()
{
  if(TimeCurrent() == iTime(Symbol(),1440,0)
  {
    return(true);
  }
  else
    return(false);
}

Le compilateur fronce les sourcils :

'\end_of_program' - unbalanced left parenthesis E:\Insall'd soft's\Forex\Alpari NZ MT4\experts\Gann_2Days.mq4 (228, 4)

Tout le monde a des parenthèses. C'est étrange. Si cette fonction est commentée, le code se compile sans erreur. Qu'est-ce qui peut bien se passer ?

Ai-je raison d'écrire la fonction pour qu'elle s'ouvre uniquement au prix d'ouverture d'une bougie quotidienne?

 

hoz:

Les parenthèses de tout le monde sont là, c'est étrange.

non. vous avez le bon chien manquant dans la ligne if


et peut-être ne pas dire le mot "bizarre" quand il s'agit du compilateur. Bien sûr, il est difficile de voir la bûche dans son propre œil :)

Et ai-je réellement écrit la bonne fonction pour ouvrir uniquement au prix d'ouverture de la bougie du jour?

pas de
 
lottamer:


Les développeurs n'ont rien à voir avec cela. :__

Au lieu de ( Hour()>=10 || Hour()<20 ) vous auriez dû faire simple Hour()>=10 && Hour()<20

et tout a fonctionné


La question n'est pas que cela a fonctionné, mais que si l'aide est écrite correctement, cela ne devrait pas fonctionner.
 
sergeev:

comment comprenez-vous #include?

comme dans le Doka ou à votre façon ?


comme dans le Doka.

il y a un fichier.

Il y a une référence à ce sujet dans l'EE.

Il suffit de l'utiliser ENCORE dans n'importe quel endroit de l'EA, par exemple, de la manière suivante

si isCloseLastPosByTake()<0... ?