Mt4 Ende der Unterstützung. - Seite 44

 
Реter Konow:

Und jetzt sagen Sie mir: Habe ich die Aufgabe erfüllt?

Sie (sowohl Peter als auch die Gegner) gehen die Sache von der falschen Seite an! Die Aufgabe kann in beide Richtungen erledigt werden!

Ein Assembler wird kommen und sagen, dass er es noch effektiver machen kann, und das mit einem noch geringeren Verbrauch von Computerressourcen!

Aber was ist der Sinn davon?

Meiner Meinung nach sollten wir nur dann über Effizienz nachdenken, wenn es uns an Geschwindigkeit oder Speicherplatz mangelt. Wenn man genug davon hat, ist es wichtiger, dass das System einfach zu warten und zu ändern ist. Auch wenn dies zu Lasten der Geschwindigkeit des Programms und des verwendeten Speichers geht.

Russische Namen stören mich nicht, das Einzige, was mich stört, ist, dass ich an Präfixe gewöhnt bin, so dass man den Typ der Variablen sofort an ihrem Aussehen erkennen kann. Und Russisch oder Englisch Bezeichner - der Unterschied ist nicht groß (1C - es gibt eine Menge von Russisch).

Aber am meisten überrascht mich der freiwillige Verzicht auf einen Debugger. Das ist nur Masochismus... Ich kann verstehen, wenn es keinen Debugger gibt (früher gab es kein Debugging für historische Daten) - man muss sich drehen, Debug-Meldungen ausgeben, Protokolle erstellen... Aber wenn Sie einen Debugger haben, ist es viel bequemer und effizienter, mit ihm zu arbeiten!

 
George Merts:

Sie (sowohl Peter als auch die Gegner) gehen die Sache von der falschen Seite an! Die Aufgabe kann in beide Richtungen erledigt werden!

Ein Assembler wird kommen und sagen, dass er es noch effektiver machen kann, und das mit einem noch geringeren Verbrauch von Computerressourcen!

Aber was ist der Sinn davon?

Meiner Meinung nach sollten wir nur dann über Effizienz nachdenken, wenn es uns an Geschwindigkeit oder Speicherplatz mangelt. Wenn man genug davon hat, ist es wichtiger, dass das System einfach zu warten und zu ändern ist. Auch wenn dies zu Lasten der Geschwindigkeit des Programms und des verwendeten Speichers geht.

Russische Namen stören mich nicht, das Einzige, was mich stört, ist, dass ich an Präfixe gewöhnt bin, so dass man den Typ der Variablen sofort an ihrem Aussehen erkennen kann. Und Russisch oder Englisch Bezeichner - der Unterschied ist nicht groß (1C - es gibt eine Menge von Russisch).

Aber am meisten überrascht mich der freiwillige Verzicht auf einen Debugger. Das ist nur Masochismus... Ich kann verstehen, wenn es keinen Debugger gibt (früher gab es kein Debugging für historische Daten) - man muss sich drehen, Debug-Meldungen ausgeben, Protokolle erstellen... Aber wenn Sie einen Debugger haben, ist es viel bequemer und effizienter, mit ihm zu arbeiten!

George, ich hatte keine Ahnung, wie man einen Debugger benutzt. Ich wusste nicht einmal, wofür es war, und habe mich auch nicht gefragt, wofür. Hier gibt es also keinen Masochismus. Und jetzt ist es zu spät.
 

Peter, du hast die Aufgabe ersetzt. Ihre Lösung wird manchmal benötigt, aber sehr selten, und nicht nur in dieser Form, sondern ähnlich.

Häufiger ist eine andere Aufgabe - das Erscheinen neuer Balken sollte an verschiedenen Stellen des Programms verfolgt werden. Daher ist die Übergabe eines Symbols und eines Zeitrahmens in Funktionen und die Suche nach ihnen in Arrays keine gute Lösung. Da die Funktion isNewBar eine statische Variable hat, müssen wir für jedes Zeitrahmensymbol eine Kopie der Funktion erstellen. Es ist möglich, eine Variable für den letzten Zeitrahmen per Referenz an die Funktion zu übergeben.

Aber es gibt eine ideale Variante mit OOP - es erstellt ein eigenes Objekt für jedes Symbol - Zeitrahmen.

Dies ist, wenn wir nicht berücksichtigen, dass die Funktion isNewBar überhaupt nicht benötigt wird, nur um Stereotyp von nichts zu tun.

 
Dmitry Fedoseev:

Peter, du hast die Aufgabe ersetzt. Ihre Lösung wird manchmal benötigt, aber sehr selten, und nicht nur in dieser Form, sondern ähnlich.

Häufiger sollte eine andere Aufgabe - das Erscheinen neuer Balken - an verschiedenen Stellen des Programms verfolgt werden. Daher ist die Übergabe eines Symbols und eines Zeitrahmens an Funktionen und die Suche nach ihnen in Arrays keine gute Lösung. Da die Funktion isNewBar eine statische Variable hat, müssen wir für jedes Zeitrahmensymbol eine Kopie der Funktion erstellen. Es ist möglich, eine Variable für den letzten Zeitrahmen per Referenz an die Funktion zu übergeben.

Aber es gibt eine ideale Variante mit OOP - es erstellt ein eigenes Objekt für jedes Symbol - Zeitrahmen.

Das heißt, wenn wir nicht bedenken, dass die isNewBar-Funktion überhaupt nicht benötigt wird, ist es rein zu Müll, von nichts zu tun.

Ich habe nichts geändert. Ich habe diese Aufgabe auf eine andere Weise gelöst. Ihrer Logik folgend, muss ich zwangsläufig zur Notwendigkeit von OOP kommen. Aber egal, wie Sie es betrachten, Sie können meine Lösung sicher verwenden. Jede Funktion kann zu jeder Zeit und an jeder Stelle des Programms auf das globale Array zugreifen, um ein neues Bar-Ereignis für ein beliebiges Symbol und einen beliebigen Zeitrahmen zu finden.

Es spielt keine Rolle, wie viele Symbole und wie viele Zeitrahmen es gibt - in meiner Lösung erhöht ihre Anzahl nicht die Belastung des Systems. Schauen Sie sich einfach das Feld an - ob es ein neues Bar-Ereignis gibt oder nicht.

Sie können die Liste der Symbole reduzieren, wenn Sie sie nicht aus dem Marktbericht übernehmen, sondern manuell in das Array Symbols[] eingeben. Ich bitte Sie.


Hinzugefügt:

Übrigens: Die Funktion New_bar() gibt es nicht mehr. Das hat sich wirklich als unnötig herausgestellt. Sie hatten Recht.

 
Реter Konow:

Meine Aufgabe war es, neue Bar-Ereignisse für eine Reihe von Symbolen in einer Reihe von Zeitrahmen ohne OOP abzurufen, und zwar in einem kurzen und effizienten Code.

Und jetzt sagen Sie mir: Habe ich die Aufgabe erfüllt?

Auf jeden Fall JA. Aber!!! Zufällig wurde mein Vorschlag ein wenig verdreht, so dass Sie ihn so verstanden haben, wie Sie ihn verstanden haben. Im Devisenhandel sind Sie nur an den Daten interessiert, die Sie hier und jetzt benötigen. Ich brauche die Informationen über ein Symbol und den aktuellen Zeitraum, das ist alles - die anderen interessieren mich nicht. Wir brauchen die Informationen für ein anderes Symbol und einen bestimmten Zeitraum, dann sollte derselbe Code sie erhalten. Und es besteht keine Notwendigkeit, das System mit dem Empfang von Informationen zu überlasten, die jetzt nicht benötigt werden.

Es ist nicht deine Schuld, es ist einfach passiert. Ich habe versucht, dich aufzuhalten, aber ich konnte es nicht.

 
Dmitry Fedoseev:

Peter, du hast die Aufgabe ersetzt.

Er hat nicht umgeschaltet. Es war die Art und Weise, wie der Satz umschrieben wurde, dass er ihn so verstanden hat.

 
Alexey Viktorov:

Auf jeden Fall JA. Aber!!! Zufälligerweise wurde mein Vorschlag ein wenig verdreht, so dass Sie ihn so verstanden haben, wie Sie ihn verstanden haben. Im Devisenhandel sind Sie nur an den Daten interessiert, die Sie hier und jetzt benötigen. Ich brauche die Informationen über ein Symbol und den aktuellen Zeitraum, das ist alles - die anderen interessieren mich nicht. Wir brauchen die Informationen für ein anderes Symbol und einen bestimmten Zeitraum, dann sollte derselbe Code sie erhalten. Und es besteht keine Notwendigkeit, das System mit dem Empfang von Informationen zu überlasten, was jetzt nicht notwendig ist.

Es ist nicht deine Schuld, es ist einfach so passiert. Ich habe versucht, dich aufzuhalten, aber ich konnte es nicht.

Kein Problem - schreiben Sie einfach die Beschreibungen der benötigten Symbole in das Array Symbols[].

Datensatz aus OnInit() entfernen:

   for(int a1 = 0; a1 < All_symbols; a1++)
     {
      Symbols[a1] = SymbolName(a1 + 1,true); 
      //Возможно, нумерация символов в обзора рынка идет с нуля.
      //Тогда: Symbols[a1] = SymbolName(a1,true);
     }

Und Array im globalen Bereich initialisieren:

Symbols[3] = {"EURUSD","AUDUSD","GBPUSD"};

Und entfernen Sie unnötige Zeitrahmen aus dem Array Timeframes[];

int    Timeframes[3] = {PERIOD_M1,PERIOD_M5,PERIOD_M15};

Ändern Sie die Variable.

int    All_Timeframes = 3;

Und ändern Sie die Variable All_Symbols:

int    All_symbols = 3;

Auf diese Weise erhalten Sie nur Ereignisse für die richtigen Symbole und die richtigen Zeiträume.

Hinzugefügt:

Entfernen Sie auch die Einstellung der Array-Größe aus OnInit(), da Sie die Anzahl der Symbole kennen:

   //-------------------------------------------------------------   
   All_symbols = SymbolsTotal(true);
   //---------------------------------------------------------   
   ArrayResize(Symbols,All_symbols);
   //---------------------------------------------------------
   ArrayResize(All_bars_table,All_symbols);
   //---------------------------------------------------------
 
Реter Konow:

Ich habe nichts ersetzt. Ich habe dieses Problem einfach anders gelöst. Ihrer Logik folgend, musste ich zwangsläufig auf die Notwendigkeit von OOP kommen. Aber egal, wie Sie es betrachten, Sie können meine Lösung sicher verwenden. Jede Funktion kann zu jeder Zeit und von jedem Ort im Programm auf das globale Array zugreifen, um ein neues Bar-Ereignis für ein beliebiges Symbol und einen beliebigen Zeitrahmen zu finden.

Es spielt keine Rolle, wie viele Symbole und wie viele Zeitrahmen es gibt - in meiner Lösung erhöht ihre Anzahl nicht die Belastung des Systems. Schauen Sie sich einfach das Feld an - ob es ein neues Bar-Ereignis gibt oder nicht.

Sie können die Liste der Symbole reduzieren, wenn Sie sie nicht aus dem Marktbericht übernehmen, sondern manuell in das Array Symbols[] eingeben. Ich bitte Sie.


Hinzugefügt:

Übrigens: Die Funktion New_bar() ist verschwunden. Das hat sich wirklich als unnötig erwiesen. Sie hatten Recht.


Wenn ja, wie fett hervorgehoben - in den Mülleimer.

 
Dmitry Fedoseev:

Wenn sie fett hervorgehoben sind, kommen sie in den Papierkorb.

Und warum?
 
Реter Konow:

Kein Problem, schreiben Sie einfach die Namen der gewünschten Symbole in das Array Symbols[] und schon sind Sie fertig.

Eintrag aus OnInit() entfernen:

Und Array im globalen Bereich initialisieren:

Und entfernen Sie unnötige Timeframes aus dem Timeframes[]-Array;

Ändern Sie die Variable

Und ändern Sie die Variable All_Symbols:

Auf diese Weise erhalten Sie nur Ereignisse für die benötigten Symbole und die benötigten Zeitspannen.


Peter, hören Sie auf. Ich brauche keine andere Funktion, um einen neuen Balken zu definieren, außer meiner eigenen. Nun, es ist einfach so, dass all Ihre harte Arbeit unnötig geworden ist, tut mir leid.