Fehler, Irrtümer, Fragen - Seite 2222

 
Alexander:

Stabile Wiedergabe ? Welches Gebäude?

Ja, das Problem ist reproduzierbar. Version 1870.
 

Frage.

Angenommen, ich arbeite mit mehreren Symbolen in einem Expert Advisor oder Indikator bzw. mit allen Symbolen, die im Fenster Market Watch angezeigt werden.

Die Aufgabe besteht darin, den Moment zu erwischen, in dem ein neues Tick auf einem der Symbole erscheint.

Bislang sehe ich nur ein paar Möglichkeiten:
  1. Durch einen Timer mit Abfrage aller Symbole. (natürlich kann man nur den neuen Wert vonTimeCurrent() abfragen, aber in diesem Fall wird der Fehler 1 Sekunde betragen, da diese Funktion einen Wert in Sekunden zurückgibt)
  2. bei jedem Symbol in OnTick (oder OnCalculate), um ein benutzerdefiniertes Ereignis durch EventChartCustom zu erzeugen

Der Nachteil der ersten Option ist, dass sie in Bezug auf Ressourcen und Datenrelevanz nicht optimal ist. OnTimer wird hauptsächlich im Leerlauf hämmern, und wenn es ein neues Angebot einfängt, wird der Fehler der Ankunftszeit gleich der Periodizität des Timers sein.

Der Nachteil der zweiten Variante ist die Schwerfälligkeit, vor allem wenn es Dutzende von Symbolen gibt.

Verstehe ich das richtig, dass es keine anderen (einfacheren und eleganteren) Möglichkeiten gibt? Oder liege ich (hoffentlich) falsch?

 
Nikolai Semko:

Frage.

Angenommen, ich arbeite mit mehreren Symbolen in einem Expert Advisor oder Indikator bzw. mit allen Symbolen, die im Fenster Market Watch angezeigt werden.

Die Aufgabe besteht darin, den Moment zu erwischen, in dem ein neues Tick auf einem der Symbole erscheint.

Bislang sehe ich nur ein paar Möglichkeiten:
  1. Durch einen Timer mit Abfrage aller Symbole. (natürlich können Sie nur den neuen Wert vonTimeCurrent() abfragen, aber in diesem Fall wird der Fehler 1 Sekunde betragen, da diese Funktion einen Wert in Sekunden zurückgibt)
  2. bei jedem Symbol in OnTick (oder OnCalculate), um ein benutzerdefiniertes Ereignis durch EventChartCustom zu erzeugen

Der Nachteil der ersten Option ist, dass sie in Bezug auf Ressourcen und Datenrelevanz nicht optimal ist. OnTimer wird hauptsächlich im Leerlauf hämmern, und wenn es ein neues Angebot einfängt, wird der Fehler der Ankunftszeit gleich der Periodizität des Timers sein.

Der Nachteil der zweiten Variante ist die Schwerfälligkeit, vor allem wenn es Dutzende von Symbolen gibt.

Verstehe ich das richtig, dass es keine anderen (einfacheren und eleganteren) Möglichkeiten gibt? Oder liege ich (hoffentlich) falsch?

Vielleicht hilft das? https://www.metatrader5.com/ru/terminal/help/trading_advanced/custom_instruments

Synthetische Instrumente mit Echtzeit-Kursen

Die Handelsplattform ermöglicht es Ihnen, synthetische Finanzinstrumente zu erstellen - Instrumente, die auf einem oder mehreren bestehenden Instrumenten basieren. Sie müssen lediglich eine Formel zur Berechnung der Kurse festlegen, und die Plattform generiert die Ticks des synthetischen Instruments in Echtzeit und erstellt auch dessen Minutenverlauf.
Wie es funktioniert

Sie erstellen ein synthetisches Instrument und legen die Formel für dieses Instrument fest.
Die Plattform berechnet ihre Ticks mit einer Frequenz von 10 Mal pro Sekunde (und nur dann, wenn sich der Preis von mindestens einem Instrument in der Formel ändert).
 
SEM:

Vielleicht hilft das? https://www.metatrader5.com/ru/terminal/help/trading_advanced/custom_instruments

Synthetische Instrumente mit Echtzeit-Kursen

Die Handelsplattform ermöglicht es Ihnen, synthetische Finanzinstrumente zu erstellen - Instrumente, die auf einem oder mehreren bestehenden Instrumenten basieren. Sie müssen lediglich die Formel für die Berechnung der Kurse angeben, und die Plattform generiert die Ticks des synthetischen Instruments in Echtzeit und erstellt dessen Minutenverlauf.
Wie es funktioniert

Sie erstellen ein synthetisches Instrument und legen die Formel für dieses Instrument fest.
Die Plattform berechnet ihre Ticks mit einer Frequenz von 10 Mal pro Sekunde (und nur dann, wenn sich der Preis von mindestens einem Instrument in der Formel geändert hat).

Ja, natürlich hat auch diese Variante ein Recht auf Leben. Danke!
Aber eigentlich ist es die gleiche Variante wie meine Variante Nr. 1 mit einer Periodizität von 100 ms und mit den gleichen Nachteilen.

Option 2 scheint mir jedoch vernünftiger zu sein.

Übrigens ist mir eingefallen, dass die Option 2 hier bereits diskutiert wurde.


 
Nikolai Semko:

Ja, natürlich hat auch diese Variante ein Recht auf Leben. Ich danke Ihnen!
Im Wesentlichen handelt es sich jedoch um die gleiche Variante wie die obige Variante Nr. 1 mit einer Zeitspanne von 100 ms.

Wäre es nicht einfacher, einen EA mit dem Symbol zu verknüpfen, mit dem er arbeitet? Öffnen Sie dann alle Symbole und wenden Sie die Vorlage mit diesem EA auf jeden Chart an.

for(int i=PositionsTotal()-1;i>=0;i--)
     {
      if(PositionGetSymbol(i)==Symbol())
        {
         //Код
        };

     }
 
SEM:
Wäre es nicht einfacher, einen EA mit dem Symbol zu verknüpfen, mit dem er arbeitet? Öffnen Sie dann alle Symbole, und wenden Sie für jedes Diagramm eine Vorlage mit diesem EA an.

Es ist klar, dass dies möglich ist. Die Angelegenheit ist, dass ich nicht etwas wissen, und es ist möglich, den genauen Zeitpunkt der Ankunft des Kurses für ein anderes Symbol durch den Code von nur einem Multi-Währung EA zu verfolgen.
Aber es scheint, dass Variante 2 über benutzerdefinierte Interrupts die einzige vernünftige Lösung ist.

 
Nikolai Semko:

Ja, es ist klar, dass es so gemacht werden kann. Die Frage ist, dass ich nicht weiß, etwas, und es ist möglich, den genauen Zeitpunkt der Ankunft des Kurses für ein anderes Symbol durch den Code von nur einem Multi-Währung Expert Advisor zu fangen.
Aber es scheint, dass Variante 2 über benutzerdefinierte Interrupts die einzige vernünftige Lösung ist.

Umsetzung.

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.01.28
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Nikolai Semko:
  1. über Timer mit Abfrage aller Zeichen. (Natürlich könnten Sie auch einfach den neuen Wert vonTimeCurrent() abfragen, aber in diesem Fall würde der Fehler 1 Sekunde betragen, da diese Funktion einen Wert in Sekunden zurückgibt).

Gehe ich recht in der Annahme, dass es keine anderen (einfacheren und eleganteren) Möglichkeiten gibt? Oder (so hoffe ich) irre ich mich?

Millisekunden-Timer + SymbolInfoTick() liefert die Zeit in Millisekunden.

 
fxsaber:

Umsetzung.

Ja, ich habe diesen Link zu Ihrer Umsetzung bereits in Beitrag 22214 angegeben. Ich sage es noch einmal: Ich halte diese Variante für die bisher vernünftigste. Und es scheint, dass es im Hinblick auf die minimale CPU-Belastung und die Relevanz des resultierenden Zeitpunkts eines neuen Ticks keine bessere Implementierung gibt.
 
Nikolai Semko:
  1. через таймер c опросом всех символов. (можно, конечно, только опрашивать новое значение функции TimeCurrent(), но в этом случае погрешность будет равна 1 секунде, т.к. эта функция возвращает значение в секундах)

Я правильно понимаю, что других вариантов (более простых и изящных) не существует? Или (надеюсь) я не прав?

Millisekunden-Timer + SymbolInfoTick() liefert die Zeit in Millisekunden.

Alexey Kozitsyn:

Millisekunden-Timer + SymbolInfoTick() liefert die Zeit in Millisekunden.

Es ist die Variante 1. Ich meinte ein solches Konstrukt (Millisekunden-Timer + SymbolInfoTick() Schleife). Ich habeTimeCurrent() erwähnt, weil es"die Ankunftszeit des letzten Kurses für jedes im Market Watch-Fenster verfügbare Symbol" zurückgibt, nicht nur für das aktuelle Symbol, aber leider gibt es nur Sekunden zurück, was für Ticks sehr unhöflich ist.
Objektiv gesehen ist die Variante mit Benutzerinterrupts sinnvoller, weil man nicht ständig eine Schleife mit der teuren SymbolInfoTick-Funktion organisieren muss, auch wenn die Kurse schlafen und damit den Prozessor mit Leerlaufzeit belasten. Außerdem kann der Fehler bei der Berechnung eines neuen Ticks gleich der Periodizität des Zeitgebers sein, und alle Ticks gehen zwischen der Ausführung von OnTimer verloren, wenn diese Ticks mehr als 1 betragen.
SZZ Wir sprechen über mql5. Auf mql4 funktionieren die Benutzerunterbrechungen nicht richtig. Daher kann das mql4 nur den Timer verwenden.