Eine Frage an MQL-Experten - Seite 16

 
artmedia70:

Gibt es ein solches Symbol?

Ich danke Ihnen vielmals!!! Ich hätte so eine Panne nie gefunden... In den Lehrbüchern steht eine Menge Mist, und ich schreibe einfach ab, ohne nachzuschauen...
 

Können Sie mir bitte sagen, wo der Fehler liegt? Warum sind die Ergebnisse so unterschiedlich?

//+------------------------------------------------------------------+
//|                                                       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);
}

Ergebnis:

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:

Können Sie mir bitte sagen, wo der Fehler liegt? Warum sind die Ergebnisse so unterschiedlich?

Ergebnis:

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


Um die Kontrolle zu erleichtern, wird die Funktion leicht abgeändert, um die Taktnummer zurückzugeben

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
  }
//+------------------------------------------------------------------+

Ergebnis

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


 

Explizite Initialisierung aller Variablen hinzugefügt

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);
  }

Ergebnis

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

Wir müssen es den Entwicklern zeigen. Mit den Funktionen stimmt etwas nicht

 

Ich habe festgestellt, dass der Code

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

in den Indikator eingesetzt wird, führt zu seltsamen Ergebnissen. Wenn beispielsweise die Registerkarte Chart geöffnet wird, auf die der Indikator zurückgesetzt wurde, sind die Ergebnisse der Höhe des Hauptdiagrammfensters korrekt.

Sobald ich jedoch das "native" Diagramm verlasse, wird das Ergebnis aus irgendeinem Grund gleich 75 (in anderen Fällen können die Ergebnisse natürlich anders ausfallen), aber der Wert der Diagramm-ID bleibt derselbe.

Wenn ich zum "nativen" Diagramm zurückkehre, sind die Höhenwerte wieder korrekt.

Eine große Bitte an die Entwickler und die "Eingeweihten", zu erklären, was hier die Besonderheit ist. Ist es wirklich so, wie es gedacht war? Ich kann es nicht glauben!

Wenn dies der Fall ist, schlagen Sie bitte den Code vor, der den richtigen Höhenwert für das native Diagramm angibt, wenn eine beliebige Registerkarte geöffnet ist.
 
Vinin:

Explizite Initialisierung aller Variablen hinzugefügt

Ergebnis

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

Sie müssen es den Entwicklern zeigen. Mit den Funktionen stimmt etwas nicht

Danke, dass Sie meiner Frage Ihre Aufmerksamkeit geschenkt haben. Es stellte sich heraus, dass die Ursache nur darin lag, dass zwei Variablen in der Funktion nicht explizit initialisiert waren. Ich muss alle Funktionen von Kim durchsehen und das Problem beheben.
 

Guten Tag.

Der EA-Code beinhaltet I.Kims f-i. Dazu müssen die "montierten" Bibliotheken aufgerufen werden. Der Code nach den "externen Paremetern" wird bereitgestellt:

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

Doch zufällig (nach dem gleichen Update von mt4 - EA nicht funktioniert) bemerkte ich einen seltsamen Eintrag in der "EA-Eigenschaften" Fenster, "Abhängigkeiten" Registerkarte:

Können Sie mir bitte sagen, was dieser Fehler bedeutet und wie ich ihn beheben kann (wenn beide Bibliotheken noch im Ordner Include vorhanden sind)? Was hat der Ordner "Libraries" damit zu tun?

 
Rita:

Guten Tag.

Der EA-Code beinhaltet I.Kims f-i. Dazu müssen die "montierten" Bibliotheken aufgerufen werden. Der Code nach den "externen Paremetern" wird bereitgestellt:

Doch zufällig (nach dem gleichen Update von mt4 - EA nicht funktioniert) bemerkte ich einen seltsamen Eintrag in der "EA-Eigenschaften" Fenster, "Abhängigkeiten" Registerkarte:

Können Sie mir bitte sagen, was dieser Fehler bedeutet und wie ich ihn beheben kann (wenn beide Bibliotheken noch im Ordner Include vorhanden sind)? Was hat der Ordner "Libraries" damit zu tun?


stderror.mqh importiert die Funktion ErrorDescription aus der Bibliothek stdlib.ex4, die sich im Ordner Libraries befindet, zusammen mit dem Quelltext. Prüfen Sie, ob Sie diese Datei dort haben, wenn nicht, holen Sie sie von einem anderen Terminal.
 

Beide Ordner (Incloud und Libraries) enthalten stdlib-Quellen. Vorsichtshalber habe ich sie aus dem Incloud-Ordner kopiert.

Der oben beschriebene Fehler wird jedoch weiterhin auf der Registerkarte "Abhängigkeiten" angezeigt. Vielleicht sollte man den Aufruf dieser Funktionen irgendwie ändern: Anstelle von:

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

Den Anruf auf eine andere Weise einstellen?

Oder wird es jetzt unmöglich sein, die Funktionen von I.Kim in der neuesten Version von mt4 zu nutzen?

 
Rita:

Beide Ordner (Incloud und Libraries) enthalten stdlib-Quellen. Vorsichtshalber habe ich sie aus dem Incloud-Ordner kopiert.

Der oben beschriebene Fehler wird jedoch weiterhin auf der Registerkarte "Abhängigkeiten" angezeigt. Vielleicht sollte man den Aufruf dieser Funktionen irgendwie ändern: Anstelle von:

Den Anruf auf eine andere Weise einstellen?

Oder wird es jetzt unmöglich sein, die Funktionen von I.Kim in der neuesten Version von mt4 zu nutzen?


Vergewissern Sie sich, dass die ausführbare Datei stdlib.ex4 im Ordner "Libraries" vorhanden ist, auch wenn sie anscheinend nicht von Kim stammt, sondern eine Standarddatei aus dem Lieferumfang ist.


Alternativ können Sie auch sehen, was die Kim-Funktion daraus macht, und herausfinden, was falsch ist.