[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 406

 
Bid und Ask enthalten die Werte zum Zeitpunkt des Starts der Funktion Star(). Die Funktion MarketInfo() liefert die aktuellen (jüngsten) Werte. Die Funktion RefreshRates() aktualisiert die Bid- und Ask-Variablen.
hoz:

1. Ja, ich bin nur überarbeitet, also habe ich etwas Dummes geschrieben...

2. Lang ist ein relativer Begriff. Schlagen Sie vor, dass wir die Geschwindigkeit der Durchschnittsberechnung messen?

Wenn wir davon ausgehen, wie Sie geschrieben haben, dass das Terminal dem letzten Wert der Marktdatenvariablen, in unserem Fall dem Preis, entspricht, bedeutet dies, dass das Terminal die Marktumgebungsvariablen selbständig aktualisiert, wenn eine Verbindung mit dem Server besteht,

4 Daraus folgt, dass die Funktion RefreshRates() unnötig ist. Aber das ist nicht so, denn die Funktion ist vorhanden, was bedeutet, dass die Preise nicht immer aktualisiert werden, richtig?

Ich streite nicht, ich frage, ich vertrete meinen Standpunkt. Bitte beachten Sie das!


2. Wo haben Sie das gesehen und wie sind Sie zu diesem überraschenden Schluss gekommen?

3. Ja. Stellen Sie sich vor, wenn Sie sich das Marktübersichtsfenster ansehen, wie die Zahlen dort unaufhörlich hin und her springen.

4. Den Variablen Bid und Ask werden (vom Terminal) die Werte zugewiesen, die sie zum Zeitpunkt der Ausführung der Funktion Start hatten. Unabhängig davon, wie lange die Funktion ausgeführt wird, bleiben die Werte in Bid und Ask gleich. Deshalb brauchen wir RefreshRates() oder wir sollten MarketInfo() verwenden.

 
hoz:

Wenn die Anfrage also lokal und nicht an den Server gerichtet ist, dann sollte diese Funktion sofort funktionieren! Und es wurde oben gesagt, dass die Funktion RefreshRates() möglicherweise keine Zeit hat, die Marktumfelddaten zu aktualisieren...

Wo wurde das gesagt und von wem? Es gibt überhaupt kein Problem.
 
hoz:


Wenn es also kein neues Häkchen gibt, ändert sich der Preis nicht... und natürlich sind die vorherigen Preise weiterhin gültig. Es gibt also keinen Grund, die Dinge zu verkomplizieren!

Und Vadim schrieb oben, dass es notwendig sei, diesen Punkt zu überprüfen. Aber es lag keine Logik in seinen Worten, und auch keine Argumentation. Es ist seltsam... Ich füge also überall RefreshRates() ein, und in diesem Moment werden die zuletzt bekannten Daten aus dem Terminal anstelle der vorherigen verwendet, und alles läuft wie es soll. VorausgesetztRefreshRates() gibt TRU zurück. Wenn es False ist, bedeutet das, dass sich die Daten nicht geändert haben und mit früheren Preisen funktionieren... Liege ich mit meiner Argumentation richtig?

Es stellt sich heraus, dass es nicht nötig ist, sich die Mühe zu machen. Rufen Sie einfachRefreshRates() auf und alles wird mit aktuellen Daten funktionieren...


Das ist richtig
 
Roger:
Haben Sie es mit break;
versucht?
Das Lehrbuch sagt uns, dass der Betreiber
break; 

unterbricht die while-, for- oder switch-Anweisungen. In meinem Fall gibt es keine solchen Betreiber. Es gibt eine Reihe von if-Anweisungen, die an einem bestimmten Punkt unterbrochen werden müssen.

Versuchen Sie auf jeden Fall Folgendes:

if (условие)
        {                                          
        Opn_B=true;
        Cls_S=true;   
        break;                    
        } 
Es meldet einen Fehler: break" - "break" oder "continue" wird nur innerhalb eines Zyklus verwendet.
 
Integer:
Bid und Ask enthalten die Werte zum Zeitpunkt des Starts der Funktion Star(). Die Funktion MarketInfo() liefert die aktuellen (jüngsten) Werte. Die Funktion RefreshRates() aktualisiert die Bid- und Ask-Variablen.


2. Wo haben Sie das gesehen und wie sind Sie zu diesem überraschenden Schluss gekommen?

3. Ja. Stellen Sie sich vor, Sie sehen im Marktübersichtsfenster, wie die Zahlen unaufhörlich hin und her springen.

4. Den Bid- und Ask-Variablen werden (vom Terminal) die Werte zugewiesen, die zum Zeitpunkt des Starts der Funktion Start vorhanden sind; unabhängig davon, wie lange die Funktion ausgeführt wird, bleiben die Werte in Bid und Ask gleich. Daher benötigen wir RefreshRates() oder verwenden MarketInfo().


1. Ja, d.h. nach start() haben wir 1 Tick Zeit, um alles zu berechnen, andernfalls, wenn wir keine Zeit haben, müssen wir aktualisieren. Das macht Sinn.

2. Sie haben es wortwörtlich geschrieben:

Ganzzahlig:

Wenn es lange Berechnungen macht, können Sie RefreshRates() verwenden.

3 Das ist es, was ich meine.

 
Integer:

Wo, wann und von wem wurde das gesagt? Es gibt überhaupt kein Problem.


Hier auf der Seite:

https://www.mql5.com/ru/forum/142582/page404 Vadim hat dies geschrieben,

Zhunko

RefreshRates(); // Warum diese Bremse ohne Verarbeitung des Rückgabewerts?

Das hat mich verwirrt, um ehrlich zu sein...

 
hoz:


Hier auf der Seite:

https://www.mql5.com/ru/forum/142582/page404 Vadim hat dies geschrieben,

Das hat mich verwirrt, um ehrlich zu sein...

Ich werde es mir am Montag ansehen. Ich könnte falsch liegen.

==================================

Wie auch immer, ohne RefreshRates() werden meine EAs nicht funktionieren. Ich mache sie in Schleifen. Daher ist RefreshRates() zwingend erforderlich.

Die anfängliche Auferlegung der Geschichte erfolgt auf der Grundlage dieses Prinzips. Dann lade ich es regelmäßig wieder auf. Ansonsten entstehen "Lücken" in der Historie, mit der der Expert Advisor arbeitet. Ich weiß nicht, warum das so ist. Ich habe versucht, RefreshRates() für das Paging zu verwenden. Das funktioniert nicht immer. Ich habe das Problem oben beschrieben. Manchmal kommt nur der letzte Takt an.

Wenn ein Chart eines Instruments geöffnet ist, gibt es immer eine Historie dazu. In diesem Fall hat es nie Fehler gegeben. Das "Loch" erschien, wenn die Karte des gewünschten Instruments nicht geöffnet war.

 
Forexman77:
Im Lehrbuch steht, dass der Betreiber

unterbricht die while-, for- oder switch-Anweisungen. In meinem Fall gibt es keine solchen Betreiber. Es gibt eine Reihe von if-Anweisungen, die an einem bestimmten Punkt unterbrochen werden müssen.

Versuchen Sie es auf jeden Fall auf diese Weise:

Es wird ein Fehler gemeldet: break" - "break" oder "continue" wird nur innerhalb eines Zyklus verwendet.

Wenn Sie nach GoTo suchen, gibt es keinen solchen Operator, aber wie die Praxis zeigt, brauchen Sie ihn nicht. Um Ihnen eine Lösung empfehlen zu können, müssen Sie Ihr Ziel sehen. Zeigen Sie mir Ihren Algorithmus in allgemeiner Form.

 
Roger:

Wenn Sie einen GoTo-Operator suchen, gibt es so etwas nicht, aber wie die Praxis zeigt, brauchen Sie auch keinen. Um eine Lösung empfehlen zu können, müssen Sie Ihr Ziel sehen. Zeigen Sie mir Ihren Algorithmus in allgemeiner Form.

Danke, ich habe bereits einen Weg gefunden, das Problem zu lösen.
 
Forexman77:
Danke, ich habe bereits einen Weg gefunden, das Problem zu lösen.

Hier... und das tun viele Leute... Sie stellen eine Frage, die auch für andere Anfänger von Interesse sein könnte. Dann finden sie eine Lösung, und anstatt sie zu zeigen, sagen sie: "Oh, vielen Dank, ich habe alles gefunden und erledigt, ihr müsst nicht die ganze Woche Angst vor mir haben... " ... und sie denken, das sei das Ende... Und die Lösung für dieses Problem wurde nie aufgezeigt. Und es geht immer weiter und weiter... Der nächste kommt mit der gleichen Frage zurück.

Sagen Sie mir nur, was an Ihrem Algorithmus so furchtbar geheim ist und wie man ihn löst, dass Sie, sobald man Sie bittet, den Algorithmus in allgemeiner Form zu zeigen, um Ihnen zu helfen, sich sofort wieder abmelden, dass alles ein "Salzkorn" ist?

Dann stellen Sie keine unnötigen Fragen, wenn Sie nicht an die anderen Fragesteller denken... oder finden Sie selbst eine Lösung (gut gemacht!!!) und zeigen Sie sie anderen...