Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 682

 

Ich habe ein großes Programm mit der gleichen Art von Objekten. Ich meine viele Arten. Sie werden jedoch in verschiedenen Modulen des Programms wiederholt. Und in den Protokollen werden nach Abschluss der Tests beispielsweise xxx nicht gelöschte Objekte angezeigt. Und so weiter auf mehrere Arten.

Wie kann ich herausfinden, wo ich Objekte nicht lösche? Gibt es ein Toolkit für diese Aufgabe?

 
mbjen:

Ich habe ein großes Programm mit der gleichen Art von Objekten. Ich meine viele Arten. Sie werden jedoch in verschiedenen Modulen des Programms wiederholt. Und in den Protokollen werden nach Abschluss der Tests beispielsweise xxx nicht gelöschte Objekte angezeigt. Und so weiter auf mehrere Arten.

Wie kann ich herausfinden, wo ich Objekte nicht lösche? Gibt es ein Toolkit für diese Aufgabe?

Fehler des Baujahrs 1930.

 
Der Test-EA öffnete irgendwie BUYSTOP unter dem Preis! Jetzt kann ich den Auftrag nicht einmal mehr manuell abschließen. Wie ist das überhaupt möglich?
Dateien:
 

Ich war überrascht zu sehen, dass MQl5 OpenCL unterstützt

Hat denn niemand in dieser Zeit einen Optimierer für Roboter geschrieben, so dass Millionen von Durchläufen nicht Jahrhunderte, sondern zumindest Jahre dauern würden? :)

 
Igor Makanu:

Das bedeutet, dass Sie bei jedem Tick den von Ihnen eingereichten Code zählen und die VariablenSredRazmax undSredRazmin nicht initialisieren.

Es ist eine gute Angewohnheit, Variablen zu initialisieren, bevor man sie benutzt - das wird an den Universitäten gelehrt, es reduziert die Zeit, die man braucht, um Bugs zu finden ;)

Ich initialisierte sie am Anfang, und in dem Kommentar können Sie ein anderes Array Element für Element zu sehen (zu überprüfen und 0 nicht ändern, so dass die Formel funktionieren sollte,) Hier ist der vollständige Code:

//+------------------------------------------------------------------+
//|                                                           01.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 1
//#property indicator_color1 Red
//#property indicator_width1 1

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;
extern int nn=30;

int shift, ww=0;
double zz, SredRazmax, SredRazmin, Sredn; 
double HZZ[];


int OnInit()
  {
//--- indicator buffers mapping
    SetIndexBuffer(0, HZZ);
 // SetIndexStyle(0, DRAW_SECTION);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
  for(shift = 0; shift <= Bars-1; shift++)
  {
      zz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift);
           if(zz > 0.0)
           {
           HZZ[ww]=zz;
           ww++;          
           }
  }
   
  
       for(ww=0;ww<=nn;ww++)
       {
      if(HZZ[ww]>HZZ[ww+1]){SredRazmax += HZZ[ww];}     
      if(HZZ[ww]<HZZ[ww+1]){SredRazmin += HZZ[ww+1];}
      
       
  Comment("Средний размах = ", (SredRazmax-SredRazmin)/nn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 
        }      
   
//---------------------------------------------+
//расчет среднего значения           
//---------------------------------------------+      

   //    for(ww=0;ww<=nn;ww++){
   //    if(HZZ[ww]>HZZ[ww+1]){Sredn += HZZ[ww]-HZZ[ww+1];}     
   //    if(HZZ[ww]<HZZ[ww+1]){Sredn += HZZ[ww+1]-HZZ[ww];}
       
 // Comment("Средний размах = ", Sredn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); 

            
         
     
       
//--- return value of prev_calculated for next call
    return(0);

  }
 
Artyom Trishkin:

Fehler aus Build 1930.

Was ist das? Ich habe MT4. Build 1090.

 
mbjen:

Was ist das? Ich habe MT4. Build 1090.

Ein mit new erstelltes Objekt muss entweder an ein Objekt-Array angehängt oder in OnDeinit() selbst gelöscht werden.
 
Dmitry Belov:

Ich habe sie am Anfang initialisiert, und der Kommentar gibt ein anderes Array Element für Element aus (um zu prüfen, ob sich Look und 0 nicht ändern, so dass die Formel funktionieren sollte,) Hier ist der vollständige Code:

Sie haben sie nicht am Anfang oder irgendwo anders initialisiert, sondern nur deklariert

Ich schrieb vor der Verwendung, d.h. wenn Sie Variablen SredRazmax, SredRazmin, Sredn sind Summen von Array-Werte, dann richtig zu berechnen die Summe, müssen Sie die Variable Null und weitere Array-Werte hinzufügen und speichern Sie sie in dieser Variable

d.h.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
    SredRazmax = 0.0;
    SredRazmin = 0.0;
    Sredn = 0.0;
    .....

Und die zweite, was Sie eine Frage haben, in den Indikator jeder Tick wirdOnCalculate() aufrufenund es bedeutet, dass Sie ständig zählen die Spitzen der ZigZag bei jedem Tick, dh etwa 40-60 mal pro Sekunde

 
Artyom Trishkin:
Ein mit new erstelltes Objekt muss entweder an ein Objekt-Array angehängt oder mit OnDeinit() selbst gelöscht werden.

Ich danke Ihnen für die Erleuchtung. Aber Sie sollten wenigstens meine Frage lesen.

 
mbjen:

Ich danke Ihnen für die Erleuchtung. Aber Sie sollten wenigstens meine Frage lesen.

Das habe ich und ich habe geantwortet.