Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 403

 
Link_x:

Et si vous devez démonter la fonction, vous n'auriez pas dû couper l'en-tête de la fonction, qui contient des informations importantes.

Renvoie le type de la dernière position ouverte ou -1 - cela signifie que s'il n'y a pas de positions fermées, alors lorsque la fonction est appelée, sa valeur sera égale à -1.

sy - nom de l'instrument (paire de devises)

mn - numéro magique. Si nous mettons -1, la fonction renverra le type du dernier ordre fermé, quel que soit le nombre magique.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней открытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
 
Link_x:
Réponse point par point, désolé.
1 - génie de la programmation ?
2 - pour être juste, rien n'est superflu sauf les excréments et autres produits de décomposition (opinion franche, prête à être débattue, mais dans un autre fil :) ).
3 - tout s'explique maintenant. :)
4 - tellement vrai. Je sais. Je me suis un peu "trompé" et j'ai tapé avec la fonction "OrderSend".

Merci de contribuer au modèle "Analyse syntaxique de la brique fonctionnelle". :)

1. Évitons les sarcasmes, d'accord ? Il a rendu votre apprentissage confortable et facile. Qu'est-ce que le génie a à voir avec ça ?
2. Argumentatif.
3. vous ne comprenez rien, à en juger par vos commentaires dans le code.
4. Ça arrive.

int GetTypeLastClosePos(string sy="", int mn=-1) {    
   datetime t;                                        // Переменная хранит время закрытия
   int      i, k=OrdersHistoryTotal(), r=-1;          // Объявление переменных i - индекс k - количество ордеров в истории r - будет хранить тип ордера
   if (sy=="0") sy=Symbol();                          // Если в функцию в качестве значения символа передан NULL, то будет использоваться текущий символ графика
   for (i=0; i<k; i++) {                              // Цикл по истории от нуля до OrdersHistoryTotal()
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { // Если ордер с индексом i выбран в истории
// ---------------------- определение нужного нам ордера ордера ---------------------               
         if ((OrderSymbol()==sy || sy=="") &&         // если переданный символ совпадает с символом ордера или передано значение по-умолчанию
             (mn<0 || OrderMagicNumber()==mn)) {      // если передано значение по-умолчанию или магик ордера равен переданному в функцию значению
            if (OrderType()==OP_BUY || OrderType()==OP_SELL) { // если это или Buy или Sell
// --------------------- определение последнего закрытого ордера --------------------               
               if (t<OrderCloseTime()) {                       // если значение, записанное в t меньше времени закрытия ордера
                  t=OrderCloseTime();                          // запоминаем значение времени закрытия выбранного ордера для следующего сравнения
                  r=OrderType();                               // запоминаем тип ордера
                  }                                            // Конец блока определения времени закрытия.
               }                                               // Конец блока обработки найденного нужного ордера по типу (одного из возможных)
            }                                                  // Конец блока проверки по символу и магику
         }                                                     // Конец блока обработки выбранного ордера
      }                                                        // Идём проверять следующий ордер (если i всё ещё меньше k)
// -- после прохода в цикле по всей истории в r будет лежать тип ордера или -1 (если не нашли ничего) --               
   return(r);                                                  // возвращаем результат поиска (либо тип ордера, либо -1)
}                                                              // Аминь. 

Sur le point 2, un exemple :

int GetTypeLastClosePos(string sy, int mn) {    
   datetime t;                                        // Переменная хранит время закрытия
   int      i, k=OrdersHistoryTotal()-1, r=-1;        // Объявление переменных i - индекс k - количество ордеров в истории r - будет хранить тип ордера
   for (i=k; i>=0; i--) {                             // Обратный цикл по истории от OrdersHistoryTotal()-1 до нуля 
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { // Если ордер с индексом i выбран в истории
// ---------------------- определение нужного нам ордера ордера ---------------------               
         if(OrderMagicNumber()!=mn) continue;         // если магик не тот - идём выбирать следующий ордер в истории
         if(OrderSymbol()!=sy)      continue;         // если переданный символ не равен символу ордера - идём выбирать следующий ордер в истории
         if (OrderType()>1)         continue;         // если это не Buy и не Sell - идём выбирать следующий ордер в истории
// --------------------- дальше имеем выбранный нужный нам ордер --------------------        
// -------------------------- определяем время его закрытия -------------------------               
         if (t<OrderCloseTime()) {                    // если значение, записанное в t меньше времени закрытия ордера
            t=OrderCloseTime();                       // запоминаем значение времени закрытия выбранного ордера для следующего сравнения
            r=OrderType();                            // запоминаем тип ордера
            }                                         // Конец блока определения времени закрытия.
         }                                            // Конец блока обработки выбранного ордера
      }                                               // Идём проверять следующий ордер (если i всё ещё больше k)
// -- после прохода в цикле по всей истории в r будет лежать тип ордера или -1 (если не нашли ничего) --               
   return(r);                                         // возвращаем результат поиска (либо тип ордера, либо -1)
}                                                     // Аминь. 

Il y a moins de choses inutiles

 
Link_x:

Voici un exemple d'utilisation pratique d'une fonction personnalisée :

.
Merci.
Vous devez donc appliquer le nom de la fonction pour l'utiliser, et la variable "r" elle-même est définie pour déterminer la valeur de cette fonction !
Voici une petite découverte pour moi ! ^^
Merci encore, Yuri. :)


Pour une dernière précision, c'est possible :

?


Vos exemples ne sont pas corrects. Lorsque vous appelez une fonction qui a des paramètres, vous devez donner les valeurs de ces paramètres entre parenthèses, séparées par des virgules. Sachez également que des valeurs ne sont pas attribuées à toutes les fonctions. Si le type de fonction est void, il n'a aucune signification et est destiné à effectuer une action ou à calculer des variables. Dans ce dernier cas, vous devez connaître les noms de ces variables pour utiliser les résultats de la fonction.

 
Link_x:

if(GetTypeLastClosePos == OP_BUY)

Le compilateur vous donnera une erreur sur cette ligne indiquant que la variable n'est pas déclarée.

tu devrais au moins faire ça :

if(GetTypeLastClosePos() == OP_BUY)
 
artmedia70:

Sur le point 2, un exemple :

Il y a moins d'articles inutiles



Désolé pour cette question stupide, mais pourquoi cherchez-vous dans tout l'historique pour trouver la dernière commande clôturée ? Tu trouves la première du bout et tu sors directement, je suppose.
 
Roger:


Désolé pour cette question idiote, mais pourquoi fouillez-vous dans l'histoire pour trouver la dernière commande clôturée ? Vous trouvez le premier en partant du bout et vous sortez immédiatement, si je comprends bien.
Une fois, il y a eu une discussion sur un problème lorsque l'historique était stocké sous la forme dans laquelle l'utilisateur l'avait trié. Par conséquent (pour être sûr), la recherche se fait exactement de cette manière.
 
artmedia70:
Il y a eu une fois une discussion sur un problème où l'historique était stocké tel que l'utilisateur le triait. Par conséquent (pour être sûr), la recherche se fait exactement de cette manière.

L'utilisateur peut uniquement trier l'historique pour une perception visuelle, les numéros de position dans l'historique ne peuvent pas être modifiés.
 
Roger:
L'utilisateur peut uniquement trier l'histoire visuellement, les numéros de position dans l'histoire ne peuvent pas être modifiés.

C'est une bonne chose. Mais c'était différent avant. Maintenant, je ne chercherai plus d'informations sur le forum - c'était il y a longtemps. Alors je me suis demandé, et si ça se reproduisait ? Je préfère passer les commandes que d'obtenir un résultat erroné.
 
Roger:
L'utilisateur peut uniquement trier l'histoire visuellement, les numéros de position dans l'histoire ne peuvent pas être modifiés.

En fait, on ne peut que souhaiter l'ordre dans le testeur.
 
TheXpert:
En fait, on ne peut que souhaiter l'ordre dans le testeur.


Je n'ai pas remarqué, mais bon, je ne vais pas discuter. Faites la profondeur 10-20, ça devrait suffire. Mais toute l'histoire... C'est un peu trop, à mon avis.
Raison: