Une question pour les experts MQL - page 16

 
artmedia70:

Existe-t-il un tel symbole ?

Merci beaucoup ! !! Je n'aurais jamais trouvé une telle faille... Ils écrivent beaucoup de conneries dans les manuels scolaires, et je ne fais que copier sans regarder...
 

Pourriez-vous me dire où se trouve l'erreur ? Pourquoi les résultats sont-ils différents ?

//+------------------------------------------------------------------+
//|                                                       TestFr.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double FrUpz=0;
   double FrUp1 = GetFractal("0", 0, 1, MODE_UPPER);
   double FrUp2 = GetFractal("0", 0, 2, MODE_UPPER);
   double FrUp3 = GetFractal("0", 0, 3, MODE_UPPER);
   Print("# FrUp1=",FrUp1);
   Print("# FrUp2=",FrUp2);
   Print("# FrUp3=",FrUp3);
   for(int z=1;z<=3;z++)
      {
       FrUpz = GetFractal("0", 0, z, MODE_UPPER);
       Print("z=",z," FrUpz=",FrUpz);
      } 
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal(string sy="0", int tf=0, int nf=0, int mode=MODE_UPPER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;
  for (i=3; i<k; i++) {
    if(mode==MODE_LOWER){
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(iLow(sy,tf,i));
     } 
    }
    if(mode==MODE_UPPER){
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(iHigh(sy,tf,i));
      }
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}

Résultat :

2014.02.17 19:56:38.828 TestFr EURUSD,M15 : z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15 : z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15 : z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15 : # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15 : # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15 : # FrUp1=1.37083

 
khorosh:

Pourriez-vous me dire où se trouve l'erreur ? Pourquoi les résultats sont-ils différents ?

Résultat :

2014.02.17 19:56:38.828 TestFr EURUSD,M15 : z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15 : z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15 : z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15 : # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15 : # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15 : # FrUp1=1.37083


Pour faciliter le contrôle, la fonction est légèrement modifiée pour retourner le numéro de la barre.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal(string sy="0",int tf=0,int nf=0,int mode=MODE_UPPER) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0;
   int    i,k=iBars(sy,tf),kf;
   for(i=3; i<k; i++) 
     {
      if(mode==MODE_LOWER)
        {
         f=iFractals(sy,tf,MODE_LOWER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
      if(mode==MODE_UPPER)
        {
         f=iFractals(sy,tf,MODE_UPPER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
     }
   Print("GetFractalBar(): Фрактал не найден");
   return(-1);
  }
//+------------------------------------------------------------------+

Résultat

2014.02.17 21:45:57.409 TestFr GBPUSD,H1 : z=3 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1 : z=2 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1 : z=1 FrUpz=13.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1 : # FrUp3=24.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1 : # FrUp2=17.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1 : # FrUp1=13.0


 

Ajout d'une initialisation explicite de toutes les variables

double GetFractal(string sy="0",int tf=0,int nf=0,int mode=MODE_UPPER) 
  {
   if(sy=="" || sy=="0") sy=Symbol();
   double f=0;
   int    i=0,k=iBars(sy,tf),kf=0;
   for(i=3; i<k; i++) 
     {
      if(mode==MODE_LOWER)
        {
         f=iFractals(sy,tf,MODE_LOWER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
      if(mode==MODE_UPPER)
        {
         f=iFractals(sy,tf,MODE_UPPER,i);
         if(f!=0) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if(kf>nf) return(i);
           }
        }
     }
   Print("GetFractalBar(): Фрактал не найден");
   return(-1);
  }

Résultat

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : # FrUp1=13.0

Il faut montrer aux développeurs. Quelque chose ne va pas dans les fonctions

 

J'ai remarqué que le code

Print(ChartID()," ",ChartGetInteger(ChartID(),CHART_HEIGHT_IN_PIXELS,0))

placé dans l'indicateur produit des résultats étranges. Par exemple, si l'onglet graphique est ouvert, sur lequel l'indicateur a été réinitialisé, les résultats de la hauteur de la fenêtre graphique principale sont corrects.

Cependant, dès que je quitte le graphique "natif", le résultat, pour une raison quelconque, devient égal à 75 (bien sûr, dans d'autres cas, les résultats peuvent être différents), mais la valeur de l'ID du graphique reste la même.

Lorsque je retourne au graphique "natif", les valeurs de hauteur deviennent correctes.

Nous demandons aux développeurs et à ceux qui sont au courant d'expliquer ce qui se passe ici. C'est vraiment comme ça que ça devait se passer ? ! Je n'y crois pas !

Si c'est le cas, veuillez suggérer le code qui donne la valeur de hauteur correcte pour le graphique natif lorsqu'un onglet est ouvert.
 
Vinin:

Ajout d'une initialisation explicite de toutes les variables

Résultat

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1 : # FrUp1=13.0

Il faut montrer aux développeurs. Quelque chose ne va pas dans les fonctions

Merci d'avoir prêté attention à ma question. Il s'avère que la cause était uniquement due au fait que deux variables de la fonction n'étaient pas explicitement initialisées. Il faut que je regarde toutes les fonctions de Kim et que je répare ça.
 

Bon après-midi.

Le code EA implique le f-i de I.Kim. Ce qui implique d'appeler les bibliothèques "montées". Le code après les "paremètres externes" est fourni :

//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

Cependant, accidentellement (après la même mise à jour de mt4 - EA ne fonctionne pas) j'ai remarqué une entrée étrange dans la fenêtre "propriétés EA", onglet "dépendances" :

Pouvez-vous me dire ce que signifie cette erreur et comment la corriger (si les deux bibliothèques sont toujours présentes dans le dossier Include) ? Quel est le rapport avec le dossier "Bibliothèques" ?

 
Rita:

Bon après-midi.

Le code EA implique le f-i de I.Kim. Ce qui implique d'appeler les bibliothèques "montées". Le code après les "paremètres externes" est fourni :

Cependant, accidentellement (après la même mise à jour de mt4 - EA ne fonctionne pas) j'ai remarqué une entrée étrange dans la fenêtre "propriétés EA", onglet "dépendances" :

Pouvez-vous me dire ce que signifie cette erreur et comment la corriger (si les deux bibliothèques sont toujours présentes dans le dossier Include) ? Quel est le rapport avec le dossier "Bibliothèques" ?


stderror.mqh importe la fonction ErrorDescription de la bibliothèque stdlib.ex4, qui se trouve dans le dossier Libraries, ainsi que la source. Vérifiez si vous avez ce fichier là, sinon, récupérez-le depuis un autre terminal.
 

Les deux dossiers (Incloud et Libraries) contiennent des sources stdlib. Juste au cas où, j'ai ajouté-copié depuis le dossier Incloud.

Mais l'erreur décrite ci-dessus est toujours affichée dans l'onglet "dépendances". Peut-être changer d'une manière ou d'une autre l'appel de ces fonctions : Au lieu de :

//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

Régler l'appel d'une autre manière ?

Ou sera-t-il impossible d'utiliser les fonctions de I.Kim dans la dernière version de mt4 maintenant ?

 
Rita:

Les deux dossiers (Incloud et Libraries) contiennent des sources stdlib. Juste au cas où, j'ai ajouté-copié depuis le dossier Incloud.

Mais l'erreur décrite ci-dessus est toujours affichée dans l'onglet "dépendances". Peut-être changer d'une manière ou d'une autre l'appel de ces fonctions : Au lieu de :

Régler l'appel d'une autre manière ?

Ou sera-t-il impossible d'utiliser les fonctions de I.Kim dans la dernière version de mt4 maintenant ?


Assurez-vous que le fichier exécutable stdlib.ex4 se trouve dans le dossier Libraries, même s'il ne semble pas être celui de Kim, c'est un fichier standard de la livraison.


Sinon, voyez ce que la fonction Kim en retire et trouvez ce qui ne va pas.

Raison: