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

 
Алексей Барбашин:

void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); An dieser Stelle versuche ich, den Zeiger zu zerstören }


Es ist nicht ganz klar, was genau hier zerstört werden kann. Kein Wunder, dass der Speicher leckt. Was ist ein Zeiger? Ein Zeiger ist ein Verweis auf die Speicheradresse, an der die erstellte dynamische Variable gespeichert ist. In der Tat rufen Sie die Prozedur auf, um einen Zeiger auf die Klassenvariable zu erhalten. In dieser Prozedur wird das Klassenobjekt erstellt und im Speicher abgelegt, dann wird der Zeiger an die Funktion zurückgegeben, um die Zecken zu erhalten und.... wird zerstört, wenn Sie die Funktion verlassen. Beachten Sie, dass der Zeiger zerstört wird, der Speicher aber nicht gelöscht wird! Und mit jedem neuen Tick wird mehr und mehr Speicherplatz verbraucht! Um diesen Punkt in Ihrem Code zu vermeiden, sollten Sie zunächst die Abkürzung entfernen und den Zeiger in eine andere Variable setzen:TickReturn* temptick =returntick(period, 1);// Holen Sie sich den Zeiger und setzen Sie ihn in eine Variable int timeis = temptick.curtime; // Abrufen des gewünschten Wertes aus dem Objekt über den Zeiger ...... delete temptick; // Zerstören des Zeigers und Löschen des Speichers

Und bevor man den Zeiger zerstört, sollte man überprüfen, ob er korrekt ist, um den Löschfehler zu vermeiden.

Im Großen und Ganzen würde ich mich nicht mit den Zeigern und der Klasse im Besonderen herumschlagen, da die Aufgabe in Wirklichkeit viel einfacher ist und die Klasse nicht verwendet werden muss. Erstellen Sie eine Struktur mit den erforderlichen Feldern, deklarieren Sie eine globale Variable mit dem Typ dieser Struktur, erstellen Sie eine Funktion, um die Informationen in dieser Struktur bei jedem Tick zu aktualisieren, und verwenden Sie sie, um zu sammeln, was Sie brauchen, denn die Variable wird global sein, Sie werden sie nicht in Funktionen verwenden müssen und Sie werden keine Zeiger benötigen.


Danke, ich erinnerte mich, warum ich zur Kurzschrift gewechselt habe, die Variable wird in Schleifen nicht aktualisiert (offensichtlich wird die Funktion nicht aufgerufen) und ich muss für jeden Nieser eine neue erstellen und sie dann löschen. Auf jeden Fall ist es einfacher, Returntick auf Switch umzustellen.

 
Vitaly Muzichenko:

Senden einer Post-Request an den Server mit der Kontonummer

Auf dem Server wird die eingehende Nummer mit allen Zeilen in der CSV-Datei abgeglichen, und wenn es eine Übereinstimmung gibt, wird von dieser Zeile in der Datei eine Antwort an das Terminal gesendet. Es bleibt nur noch, die Antwort des Servers im Terminal zu lesen und auf dem Diagramm anzuzeigen.

Im Allgemeinen ist es einfacher, solche Dinge in MySQL zu implementieren als in einer Datei.


Danke für die Antwort, Vitaly!

Ich versuche seit drei Tagen, es zu verstehen, aber es kommt nichts dabei heraus (ich bin ein Anfänger - am Anfang meiner Karriere)...

Können Sie es genauer beschreiben? Ich wollte Ihnen nur ein Beispiel geben...

Entschuldigung für mein Unverständnis...

 

Und noch eine Frage...

Ich wollte, dass der Beam eine Linie vom aktuellen Preis bis zum Ende des Tages bis zum Ende des Niveaus (23:59) (white2) zeichnet, aber er zeichnet bis zum Ende des Tages (wie erforderlich), aber nicht auf dem Niveau (white2), und geht tief hinunter auf den Rand Chart.

Ich gebe eine beliebige Stufe ein (rot1, rot2 usw.), aber es strahlt immer noch bis ins Unendliche nach oben oder unten. Habe ich es richtig geschrieben, dass Beam immer vonHigh[0] startet, d.h. bei einer neuen Kerze zu einer neuen Kerze wechselt (d.h. dem Preis folgt) oder zeichnet es Beam nur einmal? Die Ebenen werden aus CSV geholt. Bitte helfen Sie...

if(уровни==Daily)
        {
         double red1 = d_input[0];
         double red2 = d_input[1];
         double blue1 = d_input[2];
         double blue2 = d_input[3];
         double white = d_input[4];
         double signal= d_input[5];
         double z_1 = d_input[6];
         double z_2 = d_input[7];
         double white2 = d_input[8];
                 
         t0 = дата_уровней + 1*PeriodSeconds(PERIOD_M1);
         t1 = дата_уровней + 24*PeriodSeconds(PERIOD_H1);

         Draw_Level("red1", red1, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("red2", red2, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("blue1", blue1, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("blue2", blue2, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("white", white,c_day_3, STYLE_SOLID,2);
         Draw_Level("white2", white2,c_day_3, STYLE_DOT,0);
        
         Draw_Level("green1",z_1, c_day_4, STYLE_SOLID,2);
         Draw_Level("green2",z_2,c_day_3, STYLE_DOT,2);
               
        string name = "Ray";
         int window = 0, time1 = (int)Time[0], time2 = (int)StrToTime(txt_data+" 23:59");
          double price1 = High[0], price2= white2;
         
          ObjectCreate(name, OBJ_TREND, window, time1, price1, time2, price2);
          ObjectSet(name, OBJPROP_COLOR, clrAqua);
          ObjectSet(name, OBJPROP_RAY_RIGHT, false);
          ObjectSet(name,OBJPROP_WIDTH,1);
          ObjectSet(name,OBJPROP_STYLE,2);
              
        
        if(показ_не отработанных)
            if(!check_white_level(дата_уровней,white))
               draw_line(t0,white,c_day_3);
                 else(Draw_Level("white", white,c_day_3, STYLE_SOLID,1));// меняет толщину белой при достижении ценой
                
        }
 
MosheDayan:

Und noch eine Frage...

Ich wollte, dass der Beam eine Linie vom aktuellen Preis bis zum Ende des Tages bis zum Ende des Niveaus (23:59) (white2) zeichnet, aber er zeichnet bis zum Ende des Tages (wie erforderlich), aber nicht auf dem Niveau (white2), und geht tief hinunter auf den Rand Chart.

Und wenn ich es auf eine der Stufen (rot1, rot2 usw.) stelle, strahlt es immer noch nach oben oder unten ins Unendliche. Ebenen aus CSV erhalten. Bitte um Hilfe...

Ermitteln Sie den Wert von white2 mit Alert oder Print(überprüfen Sie ihn).
 
STARIJ:
Überprüfen Sie den Wert von white2 mit Alert oder Print.
Alert schreibt sofort "EURUSD ErrorFileOpen() for write" und alle Level des aktuellen Tages verschwinden... Die Pegel von gestern und alle vorherigen sind noch da... Also... Der Strahl auf dem Spot beginnt dort, wo er sollte, und geht bis zum gestrigen white2-Level, aber nicht am Ende des Tages, und heute kann ich vertikal nach unten sehen, dass er auf dem gestrigen white2-Level stoppt.
 
MosheDayan:
Ich habe versucht, es mit Alert zu überprüfen und schrieb sofort "EURUSD Fehler FileOpen() zum Schreiben" und alle Ebenen des aktuellen Tages verschwinden... Die Pegel von gestern und alle vorherigen sind noch da... Also... Der Strahl auf dem Spot beginnt dort, wo er sollte, und geht bis zur Höhe des gestrigen white2, aber nicht am Ende des Tages, und heute senkrecht nach unten kann man visuell sehen, dass er auf der Höhe des gestrigen white2 aufhört.

Warum müssen Sie auf die Datei zugreifen? Sie haben den Wert white2 und geben ihn mit Alert("white2 = ", white2) aus, bevor Sie ihn verwenden;

 
STARIJ:

Sie haben den Wert von white2 und geben ihn mit Alert("white2 = ", white2) aus, bevor Sie ihn verwenden;

Danke für die Klarstellung.... Hier ist der Inhalt: weiß2 = 0,0

p.s. Ich bin derjenige, der dumm ist... White2 = 0,0 ist für andere Währungspaare, die keine Niveaus in CSV haben. Aber es gibt Ebenen für EURUSD in CSV und Alert zeigt sie gestern (white2 1.1720) und heute (white2 1.1810).

Der Strahl beginnt, wo er sollte, aber er geht auf das Niveau des gestrigen white2 bei 1,1720, anstatt des heutigen white2 bei 1,1810 und er geht nicht am Ende des Tages 23:59, aber heute hält er am gestrigen white2, d.h. 1,1720.

 

etwas Unverständliches

eine Funktion beschrieben

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow");

Alert("NextTick=",NextTick);

//---------------------------


//---------------------------

Alert("NextTick=",NextTick);

Alert("end IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

eine Nachricht vor dem durch ein Semikolon ausgedrückten Körper erhalten {

Frage: Welches Semikolon wird erwartet?

Bitte erklären Sie ...

 
buyanov:

etwas Unverständliches

eine Funktion beschrieben

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow");

Alert("NextTick=",NextTick);

//---------------------------


//---------------------------

Alert("NextTick=",NextTick);

Alert("end IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

eine Nachricht vor dem durch ein Semikolon ausgedrückten Körper erhalten {

Frage: Welches Semikolon wird erwartet?

Bitte erklären Sie...


void IsBelow()

 
buyanov:

etwas Unverständliches

eine Funktion beschrieben

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow");

Alert("NextTick=",NextTick);

//---------------------------


//---------------------------

Alert("NextTick=",NextTick);

Alert("end IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

eine Nachricht vor dem durch ein Semikolon ausgedrückten Körper erhalten {

Frage: Welches Semikolon wird erwartet?

Bitte erklären Sie ...

Die Antwort finden Sie hier
Функции - Основы языка - Справочник MQL4
Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Функции - Основы языка - Справочник MQL4
Grund der Beschwerde: