Fonctions utiles de KimIV - page 121

 

Il y a une erreur dans la fonction https://forum.mql4.com/ru/38949/page5#434241.

Cela devrait être comme ceci

double PriceOpenNearPos(string sy="", int op=-1, int mn=-1) {
  double mi, oop=0, p;
  int    i, k=OrdersTotal(), pp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderType()==OP_BUY)  mi=MarketInfo(OrderSymbol(), MODE_ASK);
            if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
            p=MarketInfo(OrderSymbol(), MODE_POINT);
            if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
            if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
              pp=MathAbs(OrderOpenPrice()-mi)/p;
              oop=OrderOpenPrice();
              if(pp==0) break;
            }
          }
        }
      }
    }
  }
  return(oop); 

}

Veuillez retélécharger.

 

Bonjour à tous !

Lors de la correction des Expert Advisors (en raison des mises à jour de MQL), il s'est avéré que de nombreuses fonctions d'Igor Kim ne fonctionnent plus. Cela inclut les plus populaires. Par exemple,

NumberOfPositions - Renvoie le nombre de positions.

ExistPositions - Renvoie l'indicateur d'existence des positions.

Une autre fonction, que j'ai mentionnée hier dans le fil de discussion : la fonction NumberOfBarCloseLastPos().
Cette fonction renvoie le nombre de barres pour fermer la dernière position.

Lorsque j'affiche le commentaire sur le graphique de Strategy Tester, je constate que les fonctions renvoient des valeurs constantes (-1 et/ou 0) tout le temps, malgré l'existence de transactions (actuelles et fermées). Il semble que l'EA ne voit pas les conditions définies par ces fonctions dans son code.

En outre, les fonctions dites "exécutables" cessent de fonctionner, par exemple, un ensemble de fonctions permettant de fermer des positions : ClosePosBySelect (cette fonction ferme une position préalablement sélectionnée) et les fonctions associées :
ClosePositions - Fermer les positions au prix du marché, etc.

Veuillez indiquer quels types de bogues se trouvent dans ces fonctions et ce qui doit être corrigé, au moins en utilisant l'une d'entre elles -NumberOfPositions - qui renvoie le nombre de positions?

 
Rita:

Bonjour à tous !

Lors de la correction des Expert Advisors (en raison des mises à jour de MQL), il s'est avéré que de nombreuses fonctions d'Igor Kim ne fonctionnent plus. Cela inclut les plus populaires. Par exemple,

NumberOfPositions - Renvoie le nombre de positions.

ExistPositions - Renvoie l'indicateur d'existence des positions.

Une autre fonction, que j'ai mentionnée dans la branche hier : la fonction NumberOfBarCloseLastPos().
Cette fonction renvoie le nombre de barres pour fermer la dernière position.

Lorsque j'affiche le commentaire sur le graphique de Strategy Tester, je constate que les fonctions renvoient des valeurs constantes (-1 et/ou 0) tout le temps, malgré l'existence de transactions (actuelles et fermées). Il semble que l'EA ne voit pas les conditions définies par ces fonctions dans son code.

En outre, les fonctions dites "exécutables" cessent de fonctionner, par exemple, un ensemble de fonctions permettant de fermer des positions : ClosePosBySelect (elle ferme une position préalablement sélectionnée) et
ClosePositions - Fermer les positions au prix du marché, etc.

Veuillez m'indiquer quels types de problèmes sont apparus dans les fonctions et ce qui doit être corrigé, en prenant au moins l'une d'entre elles comme exemple -NumberOfPositions - Renvoie le nombre de positions?

NumberOfPositions() fonctionne bien pour moi ! Vraiment, je continue à travailler avec MQL4 sans plus ! Si vous écrivez dans une langue actualisée, je suppose que tout doit être adapté à cette langue ou que vous devez vous mettre en freelance ! Tout est commercialisé avec une force terrible maintenant ! Je suis de tout cœur avec vous !

Si vous pouvez d'une manière ou d'une autre intégrerNumberOfPositions(), alors ExistPositions() n'est pas nécessaire ! Vous pouvez le vérifier de cette façon :

if(NumberOfPositions() > 0) //вместо if(ExistPositions() == true)
----------------------------//или
if(NumberOfPositions() == 0)//вместо if(ExistPositions() == false)

Bonne chance !

 
borilunad:

NumberOfPositions() fonctionne bien pour moi ! C'est vrai, je continue à travailler avec MQL4 sans plus ! Si vous écrivez dans une langue actualisée, je suppose que tout doit être adapté à cette langue ou que vous devez vous mettre en freelance ! Tout est commercialisé avec une force terrible maintenant ! !

Je ne viens pas souvent ici, donc je ne sais pas, que signifie "MQL4 sans les pros" ?

Pensez-vous que ceux qui peuvent répondre ici ne le font pas dans le but de forcer un visiteur à payer pour répondre à une question simple de freelance?

Je me demande combien les programmeurs-commerçants locaux coûteraient pour réparer cette fonction I.Kim afin qu'elle fonctionne dans la dernière version de mt4 avec le MQL mis à jour :

//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  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) kp++;
          }}}}}
  return(kp);
}
Je vous rappelle que Comment( NumberOfPositions(NULL, -1, Magic) ) ; - renvoie constamment -1 même si l'EA a ouvert des positions.
 
Rita:

Je ne viens pas souvent ici, donc je ne sais pas ce que signifie " MQL4 sans les pros " ?

Pensez-vous que ceux qui peuvent répondre ici ne le font pas dans le but de forcer un visiteur à payer pour répondre à une question simple de freelance?

Je me demande combien les programmeurs-commerçants locaux coûteraient pour réparer cette fonction I.Kim afin qu'elle fonctionne dans la dernière version de mt4 avec le MQL mis à jour :

Je vous rappelle que Comment( NumberOfPositions(NULL, -1, Magic) ); retournera toujours -1, même si l'EA a ouvert des positions.

NULL comme paramètre de fonction signifie qu'il n'y a pas de paramètres.

Ce serait mieux)Comment( NumberOfPositions(Symbol(), -1, Magic)) ;

 
Rita:

Je ne viens pas souvent ici, donc je ne sais pas ce que signifie " MQL4 sans les pros " ?

Pensez-vous que ceux qui peuvent répondre ici ne le font pas dans le but de forcer un visiteur à payer pour répondre à une question simple de freelance?

Je me demande quel serait le coût de la correction d'une telle fonctionnalité pour les programmeurs commerciaux :

Je vous rappelle que la sortie de Comment( NumberOfPositions(NULL, -1, Magic) ) ; montre que -1 est toujours renvoyé, même si l'EA a ouvert des positions.

Mise à jour de MQL4++, comme on l'appelle ici !

Ma fonction renvoie le nombre correct de positions ! Mais vous avez une erreur dans Comment() ! Je suis sûr que la fonction fonctionne !

Essayez comme ça :

int start()// или что у Вас там, как в обновлённом MQL4


  int BuyPos = NumberOfPositions(Symbol(),OP_BUY, Magic); //это вызов этой функции, чтобы знать, сколько у Вас баев
  int SellPos = NumberOfPositions(Symbol(),OP_SELL,Magic);//а это для селлов



  Comment("Buy ",BuyPos," Sell ",SellPos);

De cette façon, vous verrez tout exactement sur le graphique, appliquez les variables BuyPos et SellPos pour vérifier les conditions ! Voyez comment je l'ai :

      if(BuyPos == 0 && SellPos == 0) 
      {
// и так далее ...

Bonne chance !

 

Merci, borilunad et vadynik, pour le conseil !

En effet, la fonction fonctionne ! Je vous remercie humblement pour ce conseil utile: https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

 
borilunad:

Tout est commercialisé avec une force terrible maintenant ! Je suis de tout cœur avec vous !

Boris, tu n'as pas honte de dire ça ? Comptez le nombre de pages que vous avez écrites pour essayer de vous aider. Et c'est votre remerciement à tous ceux qui vous ont aidé ? Je ne me souviens pas de tous, mais Artem (artmedia70) s'est gentiment occupé de votre problème et a obtenu en retour...
 
Rita:

Voici une alternative. La fonction n'est appelée que si le nombre de commandes a changé. En outre, il peut être appelé si le type de commande a changé.

// переменные глобального уровня
int Total[6];
int ot;

void OnTick()
{
 if(ot != OrdersTotal())
  CountTrades();

  Comment("Ордеров BUY ", Total[OP_BUY], "\n"
        , "Ордеров SELL ", Total[OP_SELL], "\n"
        , "Ордеров BUYLIMIT ", Total[OP_BUYLIMIT], "\n"
        , "Ордеров SELLLIMIT ", Total[OP_SELLLIMIT], "\n"
        , "Ордеров BUYSTOP ", Total[OP_BUYSTOP], "\n"
        , "Ордеров SELLSTOP ", Total[OP_SELLSTOP], "\n"
}
void CountTrades()
{/*********************Подсчёт открытых ордеров**********************/
  ArrayInitialize(Total, 0);
           int type, total = OrdersTotal(); ot = 0;
            for(int i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               {
                type = OrderType();
                 Total[type] += 1;
                ot++;
               }
             }
}/*******************************************************************/
 
Rita:

Merci, borilunad et vadynik, pour le conseil !

En effet, la fonction fonctionne ! Je vous remercie humblement pour ce conseil utile: https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

Merci ! Mais la prochaine fonction qui vous est proposée risque d'avoir des ratés car elle est écrite en MQL4++ !
Raison: