[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 404

 
hoz:
1. Nun, wenn neue Daten eingetroffen sind, ist es das, was wir brauchen, nicht wahr?
2. Nun, ja, wir brauchen natürlich Daten ab Takt 0. MarketInfo() bezieht Daten aus dem Null-Balken, das war's. Warum sollte man sie dann mit etwas anderem vergleichen?

3. selbst wenn es eine Lücke in der Geschichte gibt, hat dies keinen Einfluss auf die aktuellen Berechnungen. Es hätte zu der Zeit, als das Loch da war, Auswirkungen gehabt. D.h., wenn wir den aktuellen Ask erhalten, interessiert es uns nicht wirklich, was die Preise vor einigen Balken waren (ich meine nicht formal, sondern in Bezug auf den aktuellen Moment in Bezug auf eine bestimmte Marktvariable, denn die Funktion RefreshRates() wird den Trick in Bezug auf den aktuellen Moment in der Zeit auf dem 0-ten Balken tun!

Natürlich habe ich tief gegraben, aber ich möchte verstehen, wie ich mich besser verhalten kann.

4. Du, Vadim, hast mir gesagt, dass ich die Funktion oben falsch geschrieben habe:

double fGet_TradePrice(int fi_price,       // Цена: 0 - Bid; 1 - Ask
                       string fs_symbol)   // валютная пара
{
 double ld_price = 0.0;
   
switch (fi_price)
 {
  case 0:
   {
    if (fs_symbol == Symbol())
     {
      RefreshRates(); // Зачем этот тормоз без обработки возвращаемого значения?
      ld_price = Bid;
     }
    else ld_price = MarketInfo(fs_symbol, MODE_BID); // <-- Этого достаточно.
   } 
  case 1:
   {
    if (fs_symbol == Symbol())
     {
      RefreshRates(); // Зачем этот тормоз без обработки возвращаемого значения?
      ld_price = Ask;
     }
    else ld_price = MarketInfo(fs_symbol, MODE_ASK); // <-- Этого достаточно.
   }
 }
if (ld_price != 0) return(ld_price); // Некорректно! Что функция будет возвращать, если цена равна нулю?
}

Was ist Ihrer Meinung nach falsch daran?

1. Wenn es keine Daten gibt, wir aber nichts darüber wissen? Sie gibt FALSE zurück. Wie sollte dies bewertet werden? Keine Daten oder ein Fehler, oder sind noch Daten vorhanden?
2. Um das Problem des 1. Punktes zu lösen, müssen Sie sich abstimmen.
3. Sie berücksichtigen nicht die Dynamik des Prozesses. Schalten Sie den Computer und das Terminal ein. Alle Daten scheinen eingegangen zu sein. Alles konzentrierte sich auf den Nullstrich. Signale werden gefunden. Das Geschäft ist abgeschlossen. Es hat sich herausgestellt, dass nicht alle Daten eingegangen sind. Fünf Minuten später erhielten wir die fehlenden Balken mit den Nummern 1,2,3,4,5. Das Signal ist verschwunden. Was ist zu tun?

4. Ich habe sie rot markiert. Ein möglicher Fehler bei der Auswahl eines falschen Bezeichners im Schalter wird noch nicht behandelt. Ich habe oben geschrieben, wie es gemacht werden sollte.

Es ist sinnlos, RefreshRates() aufzurufen, ohne auf das Ergebnis zu warten. Es kann lange Zeit ausfallen.

 
Hallo zusammen. Ich habe eine solche Frage. Da ich mehrere Konten führe (zwei bei einer Maklerfirma und eines bei einer anderen), verwende ich Best Copier, das ist sehr praktisch. Er wird auf einem Konto (dem Exporteur) auf einem beliebigen Chart installiert und in andere Konten (Importeure) kopiert, auf denen dieser EA ebenfalls auf demselben Chart installiert ist (wenn Sie ihn im Importeur auf mehrere Charts setzen, wird er so viele Aufträge öffnen). Einmal, als ich die Arbeit mit ihm auf einer der Maklerfirmen überprüfen wollte und ein Demokonto einrichtete), in einem wunderbaren Moment wurde es spontan auf mehrere Charts gesetzt und natürlich öffnete es so viele Aufträge. Dann habe ich nicht weiter darauf geachtet und dachte, es sei eine Panne des Terminals dieser Maklerfirma. Dann habe ich lange Zeit auf den oben genannten Konten gehandelt und nichts dergleichen ist passiert. Aber gestern, gerade während der Veröffentlichung der Nachrichten, ist eine solche Situation auf einem der Konten (für eine andere Brokerfirma, nicht die mit installiertem Exporter) wieder aufgetreten. 6 Charts wurden automatisch von Beratern platziert und das Interessanteste war, dass 16 Orders auf ein Symbol eröffnet wurden. Warum passiert das und was ist der Grund dafür? Ist dies ein Nachteil des Expert Advisors selbst oder ein anderer Grund? Gibt es eine Möglichkeit, das Problem zu beheben? Vielen Dank im Voraus.
 
// Зачем этот тормоз без обработки возвращаемого значения?

Wer stellt so eine Frage?
 
hoz:

Was ist Ihrer Meinung nach falsch daran?


Es ist nicht falsch, es ist nur unklar.

Das Ende:

 if (ld_price != 0)
return (ld_price); 

Wenn ld_price = 0 ist, gibt die Funktion von sich aus 0 zurück. Deshalb brauchen wir keinen Scheck.

Dies ist eine Panne:

 if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Bid;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_BID);

Auch unnötig. Sie können MraketInfo() in allen Fällen verwenden.

Am Ende wird die Funktion zur Funktion MarketInfo() in ihrer reinen Form (wenn man alles Unnötige entfernt).

 

Im Prinzip sind das theoretisch die richtigen Orte:

RefreshRates();
ld_price = Bid;
RefreshRates();
ld_price = Ask;

Es ist egal, was RefreshRates() zurückgibt, wichtig ist, dass die Ask- und Bid-Variablen die neuesten dem Terminal bekannten Werte haben.

 

Hallo!

Was ist der Grund für die unterschiedlichen Ergebnisse des Testers für denselben EA?

Die getestete Periode, das Währungspaar und der Zeitrahmen sind die gleichen, aber die heute erzielten Ergebnisse unterscheiden sich stark von den vorherigen, der EA hat aufgehört, Long-Positionen zu eröffnen.

Ob es an den Terminalkursen liegt oder am Wochenende, weiß ich nicht. Vielleicht können mir die sachkundigen Leute die Augen für den offensichtlichen Grund öffnen?

 
skyjet:

Hallo!

Was ist der Grund für die unterschiedlichen Ergebnisse des Testers für denselben EA?

Die getestete Periode, das Währungspaar und der Zeitrahmen sind die gleichen, aber die heute erzielten Ergebnisse unterscheiden sich stark von den vorherigen, der EA hat aufgehört, Long-Positionen zu eröffnen.

Ob es an den Terminalkursen liegt oder am Wochenende, weiß ich nicht. Vielleicht können mir die sachkundigen Leute die Augen für den offensichtlichen Grund öffnen?


Selbst zwei nacheinander durchgeführte Tests können sehr deutlich voneinander abweichen. Der Broker ändert den Spread und der Test wird mit einem anderen Spread durchgeführt. Eine Änderung um einen Punkt reicht aus.

Wenn ein früherer Test schon lange zurückliegt, haben sich die Einstellungen vielleicht gelockert.

 
Zhunko:

1. Wenn es keine Daten gibt und es gleichzeitig all diese Daten gibt, wir aber nichts darüber wissen? Sie gibt FALSE zurück. Wie ist dies zu interpretieren? Gibt es keine Daten oder einen Fehler, oder gibt es Daten?

Ich kann Sie nicht verstehen. Gehen wir der Reihe nach vor... Wir rufen RefreshRates() auf, es kommen keine Daten herein... Aber es gibt Daten. Was wir hier haben, ist ein Chaos. Wenn die Daten nicht gekommen sind, sind sie nicht verfügbar oder sie wurden nicht aktualisiert, weil sich die Marktvariable nicht geändert hat... Es gibt nur zwei Möglichkeiten.

Wenn sie nach dem Aufruf vonRefreshRates() TRU zurückgibt, wurden die Daten aktualisiert. Wenn FELS zurückgegeben wird, wurden die Daten entweder nicht aktualisiert, weil ein Fehler aufgetreten ist, oder sie wurden nicht aktualisiert, weil die Daten frisch sind und nicht aktualisiert werden müssen.

Daher verstehe ich, dass dies wie folgt gesehen werden kann:RefreshRates() prüft Daten, wenn die Daten nicht neu sind, werden die Daten, die nicht neu sind, d.h. sich nicht geändert haben, nicht aktualisiert, und wenn sie neu sind, werden sie aktualisiert. Sie können sich also nur auf das Flag verlassen, das vonRefreshRates() zurückgegeben wird. Haben Sie noch andere Möglichkeiten?

Zhunko:

2. Sie müssen sich abstimmen, um das Problem des 1. Punktes zu lösen.

Das haben Sie gesagt:

Ich stimme die Daten vom Server (MarketInfo()) mit dem Nullbar ab. Ich warte darauf, dass es ihnen genauso ergeht.

Nun MarketInfo() zieht von Null bar, wie es ist... Was meinen SIE mit dem oben Gesagten?

Zhunko:

3. Sie berücksichtigen nicht die Dynamik des Prozesses. Er schaltete den Computer und das Terminal ein. Alle Daten scheinen eingegangen zu sein. Alles lief auf den Nullstrich zu. Signale werden gefunden. Das Geschäft ist abgeschlossen. Es hat sich herausgestellt, dass nicht alle Daten eingegangen sind. Fünf Minuten später erhielten wir die fehlenden Balken mit den Nummern 1,2,3,4,5. Das Signal ist verschwunden. Was ist zu tun?

Ich habe beschlossen, sie erneut zu aktualisieren. Was aber, wenn wir RefreshRates() aufrufen und die Daten langsam aktualisiert werden? D.h. einige der Berechnungen werden mit bestimmten Marktdaten und einige mit anderen Daten durchgeführt... Was dann?

Zhunko:

4. Rot markiert. Auch ein möglicher Fehler bei der Auswahl des falschen Bezeichners im Schalter wird nicht behandelt. Ich habe oben geschrieben, wie es gehandhabt werden sollte.

Es ist sinnlos, RefreshRates() aufzurufen, ohne auf das Ergebnis zu warten. Es kann lange Zeit ausfallen.

Hm. Nun, wenn wir darauf warten, könnte sich das Zitat ändern... Gibt es hier eine Zweibahnstraße?

RefreshRates(); // Warum diese Bremse ohne Rückgabewertverarbeitung?

Sie erwähnen es mehrmals, aber es gibt immer noch keine konkreten Angaben. Ich meine, diese Funktion wird in der Regel nur vor dem Code verwendet, in dem die Marktdatenvariablen verwendet werden, und das war's. Sie denken nicht wirklich darüber nach. Aber ich habe darüber nachgedacht und beschlossen, herauszufinden, wie man es richtig machen kann. Um sicher zu sein, dass dieser und jener Ansatz tatsächlich richtig ist und unter allen normalen Bedingungen funktioniert.

Also Vadim, was meinst du mit diesem Ausdruck:

"

Warum diese Bremse ohne Verarbeitung des Rückgabewertes?"

Wie können sie verarbeitet werden? Ich habe meine Logik oben geschrieben, aber keine Antwort erhalten. Ich habe es ziemlich genau und ohne Varianten beschrieben.

 
Integer:


Es ist nicht falsch, es ist nur unklar.

Das Ende:

if (ld_price != 0)
    return (ld_price); 

Wenn ld_price = 0 ist, gibt die Funktion von sich aus 0 zurück. Eine Überprüfung ist daher nicht erforderlich.

Warum sollte ich das tun? Sie müssen nur "else" hinzufügen, damit die Funktion einen anderen Wert zurückgibt, der "Kein Preis" bedeuten würde. Das erscheint logisch. Als ich die Funktion warf, dachte ich mehr an die vorherige Logik und achtete nicht auf ihr Ende. Und ich verstehe nicht, warum die Funktion 0 von sich aus 0 zurückgibt...
Ganzzahlig:


Das ist die Aufschlüsselung:

if (fs_symbol == Symbol())
{
    RefreshRates();
    ld_price = Bid;
}
else
    ld_price = MarketInfo(fs_symbol, MODE_BID);

Es ist auch nicht notwendig. Sie können MraketInfo() in allen Fällen verwenden.

Am Ende wird die Funktion zu einer reinen MarketInfo()-Funktion (wenn man alles Unnötige entfernt).


Und warum dann überhaupt fragen (wenn wir speziell über den Kaufpreis sprechen), wenn wir immer MarketInfo(fs_symbol, MODE_ASK) verwenden können? Denn wenn man es so betrachtet, kann man durch die Bezugnahme auf Ask nicht sicher sein, dass es zu diesem Zeitpunkt korrekt ist?
 
Integer:

Es spielt keine Rolle, was die Funktion RefreshRates() zurückgibt, wichtig ist, dass die Variablen Ask und Bid die neuesten dem Terminal bekannten Werte haben.


In der Praxis brauchen wir etwas anderes, soweit ich das verstanden habe. Und wir brauchen den letzten Ask- und Bid-Server und keine lokalen Terminals. Oder?

Deshalb habe ich hier eine Diskussion begonnen, um ein für alle Mal zu verstehen, wie man es logischer und korrekter organisieren kann. Denn in der Theorie ist das richtig, aber in der Praxis...

Grund der Beschwerde: