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

 
solnce600:
Welcher Knopf bringt Sie zum Lächeln oder zum Aufmuntern?

Urri wusste das nicht, und ich kenne den Knopf auch nicht, aber manchmal wedeln wir mit dem Schwanz ... :)))
 
lottamer:

2 Stunden Versuch, ein Teststück zu schreiben, um verschiedene Bedingungen weiter zu testen.

Funktioniert nicht!

Bitte geben Sie mir den Fehler an.

Der Punkt ist, dass Aufträge nach 2pp in ihrer eigenen Richtung geöffnet werden.

öffnet Verkauf und endet...



Alles scheint logisch richtig zu sein! Nur Achtung - alle Variablen müssen über dem Anfang deklariert werden, auch die in Klammern.
 
hoz:


Ich frage mich, warum es hier eine Bedingung gibt?


Es gibt eine while-Schleife, die im Prinzip unendlich sein könnte, daher wurden Maßnahmen ergriffen, um es einfacher zu machen, den EA aus dem Chart zu nehmen oder ihn auszuschalten.

Es ist besser, den Start abzubrechen, wenn etwas schief geht, als eine Schleife zu fahren. Beim nächsten Ticken wiederholen Sie es.

 
lottamer:

Kims Funktion hat den Parameter time ="Datum und Zeit in Sekunden seit 1970".

Ich habe 2 Varianten ausprobiert.

und beide ergeben einen Gewinn nicht für den aktuellen Tag, sondern einen vollen Gewinn über die gesamte Geschichte....

Der aktuelle Tag beginnt am Anfang des aktuellen D1-Balkens (iTime (NULL, PERIOD_D1, 0)), aber Sie suchen nicht nach einfachen Wegen? :)))
 
hoz:

Ich verstehe nicht ganz die Logik, eine separate Funktion zu schreiben. Schließlich dient die Funktion RefreshRates() selbst der Aktualisierung von Daten vordefinierter Variablen. Und Bid und Ask sind vordefinierte Variablen. Wenn die Funktion RefreshRates() vordefinierte Variablen aktualisiert, warum dann eine zusätzliche Funktion schreiben?

Es gibt da eine Besonderheit:

bool RefreshRates( )

Aktualisieren Sie die Daten in vordefinierten Variablen und Zeitreihen-Arrays. Diese Funktion wird verwendet, wenn ein Expert Advisor oder ein Skript über einen längeren Zeitraum Berechnungen durchgeführt hat und aktualisierte Daten benötigt. Sie gibt TRUE zurück, wenn die Daten aktualisiert wurden, andernfalls FALSE. Die Daten dürfen nicht aktualisiert werden, nur weil sie dem aktuellen Zustand des Client-Terminals entsprechen. Expert Advisors und Skripte arbeiten mit ihrer eigenen Kopie der historischen Daten. Die Kopie der Daten des aktuellen Symbols wird beim ersten Start des Expert Advisors oder Skripts erstellt. Bei jedem nächsten Start des Expert Advisors (das Skript wird einmal ausgeführt und ist nicht von eingehenden Ticks abhängig) wird die ursprünglich erstellte Kopie aktualisiert. Während der Expert Advisor oder das Skript läuft, können ein oder mehrere neue Ticks eintreffen, so dass die Daten veraltet sein können.

Die Daten werden auch nicht sofort aktualisiert. Dies muss kontrolliert werden.

 
Zhunko:

Es gibt da eine Besonderheit:

bool RefreshRates( )

Aktualisieren Sie die Daten in vordefinierten Variablen und Zeitreihen-Arrays. Diese Funktion wird verwendet, wenn ein Expert Advisor oder ein Skript über einen längeren Zeitraum Berechnungen durchgeführt hat und aktualisierte Daten benötigt. Sie gibt TRUE zurück, wenn die Daten aktualisiert wurden, andernfalls FALSE. Die Daten dürfen nicht aktualisiert werden, nur weil sie dem aktuellen Zustand des Client-Terminals entsprechen. Expert Advisors und Skripte arbeiten mit ihrer eigenen Kopie der historischen Daten. Die Kopie der Daten des aktuellen Symbols wird beim ersten Start des Expert Advisors oder Skripts erstellt. Bei jedem nächsten Start des Expert Advisors (das Skript wird einmal ausgeführt und ist nicht von eingehenden Ticks abhängig) wird die ursprünglich erstellte Kopie aktualisiert. Während der Expert Advisor oder das Skript läuft, können ein oder mehrere neue Ticks eintreffen, so dass die Daten veraltet sein können.

Die Daten werden auch nicht sofort aktualisiert. Dies muss kontrolliert werden.


Ausgehend von der angegebenen Referenz nehmen wir den ASK-Preis. Wenn wir RefreshRates() ausführen, werden die Daten in den Arrays der vordefinierten Variablen aktualisiert. Wenn sich der ASC-Preis geändert hat,übernimmt ASC nach der Ausführung vonRefreshRates() den neuen Wert. Und wenn das der Fall ist:

Die Daten dürfen nicht nur deshalb aktualisiert werden, weil sie mit dem aktuellen Zustand des Client-Terminals übereinstimmen.

dann hat sich der ASC-Wert nicht geändert. Daher wird der vorherige ASK-Wert für die Berechnung verwendet, da er sich nicht verändert hat.

Denn wennRefreshRates() den Wert TRU zurückgibt, bedeutet dies, dass die Daten erfolgreich aktualisiert wurden. Meinen Sie nicht auch?

 
hoz:


Ausgehend von dieser Referenz, nehmen wir den ASC-Preis. Wenn wir RefreshRates() ausführen, werden die Daten in den Arrays der vordefinierten Variablen aktualisiert. Wenn sich also der ASC-Preis geändert hat,übernimmt ASC nach der Ausführung vonRefreshRates() den neuen Wert. Und wenn es so läuft:

dann hat sich der ASC-Wert nicht geändert. Daher wird der vorherige ASK-Wert für die Berechnungen verwendet, da er sich nicht verändert hat.

Denn wennRefreshRates() den Wert TRU zurückgibt, hat es die Daten erfolgreich aktualisiert und wir brauchen sie nicht zu überprüfen! Meinen Sie nicht auch?

Nein. Sie kann FALSE zurückgeben, und die Daten sind dann frisch.

Der einzige Grund, warum die Daten nicht aktualisiert werden, ist, dass sie dem aktuellen Zustand des Client-Terminals entsprechen.

Sie müssen eine Anzeige finden, die Ihnen sagt, dass die Daten frisch sind. Sie kann für verschiedene Aufgaben unterschiedlich sein.
 
Zhunko:

Nein. Sie kann FALSE zurückgeben, und die Daten sind dann frisch.

Es gibt also einen offensichtlichen Fehler in der Dokumentation? Und der Dokumentation kann man nicht trauen?

Zhunko:

Sie müssen einen Hinweis finden, der es Ihnen erlaubt, davon auszugehen, dass die Daten frisch sind. Sie kann für verschiedene Aufgaben unterschiedlich sein.

Nehmen wir an, es handelt sich um den ASK-Preis. Wir haben zwei Variablen:

ASC - Wert nachRefreshRates() abfragen.

_ASK - Wert der zuletzt bekannten Frage.

_____________________________________________________________________________________

Das ist schwer zu sagen. Was könnte hier das Zeichen sein? Es gibt zwei Varianten:

1. Der Wert der vordefinierten Variablen hat sich geändert. RefreshRates() gibt True zurück.

2. Der Wert der vordefinierten Variablen hat sich nicht geändert. RefreshRates() gibt False zurück.

Wenn wir uns die andere Seite ansehen, die Suche nach einem Zeichen. Es gibt 2 Möglichkeiten:

1. Der Wert der vordefinierten Variablen hat sich geändert. D.h. in unserem Fall: Ask = ASC

2. Der Wert der vordefinierten Variablen hat sich nicht geändert. D.h. Fragen = _ASK

Es gibt entweder einen geänderten Wert oder einen unveränderten Wert, eine andere Möglichkeit gibt es nicht. Was wollen Sie dann tun?

 
hoz:

Es gibt also einen eklatanten Fehler in der Dokumentation? Und der Dokumentation kann man nicht trauen?

Nehmen wir an, es handelt sich um den ASK-Preis. Wir haben 2 Variablen:

ASC - Wert nachRefreshRates() abfragen.

_ASK - Wert der zuletzt bekannten Frage.

_____________________________________________________________________________________

Das ist schwer zu sagen. Was könnte hier das Zeichen sein? Es gibt zwei Varianten:

1. Der Wert der vordefinierten Variablen hat sich geändert. RefreshRates() gibt True zurück.

2. Der Wert der vordefinierten Variablen hat sich nicht geändert. RefreshRates() gibt False zurück.

Wenn wir uns die andere Seite ansehen, die Suche nach einem Zeichen. Es gibt 2 Möglichkeiten:

1. Der Wert der vordefinierten Variablen hat sich geändert. D.h. in unserem Fall: Ask = ASC

2. Der Wert der vordefinierten Variablen hat sich nicht geändert. D.h. Fragen = _ASK

Es gibt entweder einen geänderten Wert oder einen unveränderten Wert, eine andere Möglichkeit gibt es nicht. Wie wollen Sie dann vorgehen?

Die Unterlagen sind alle in Ordnung. Es ist genau beschrieben, und genau darauf habe ich Sie hingewiesen.

TRUE wird zurückgegeben, wenn die Daten aktualisiert wurden, andernfalls wird FALSE zurückgegeben. Der einzige Grund, warum die Daten nicht aktualisiert werden können, ist, dass sie dem aktuellen Zustand des Client-Terminals entsprechen.

Diese Funktion sagt also nur, dass neue Daten empfangen wurden.

Ich weiß nicht, wie Sie den Rest machen wollen. Ich überprüfe Daten vom Server (MarketInfo()) mit Null-Bar. Ich warte, bis sie gleich sind. Das bedeutet übrigens nicht, dass es keine "Lücke" in der nächsten Geschichte gibt. Es können leicht 1, 2 oder 3 Takte oder mehrere Takte fehlen, und der Null-Balken wird da sein. Manchmal kommen sie danach. Manchmal auch nicht.

 
Zhunko:

D.h. diese Funktion sagt, dass neue Daten eingetroffen sind, aber das war's auch schon.

Wenn also neue Daten hinzukommen, ist es das, was wir brauchen, nicht wahr?
Zhunko:

Ich überprüfe die Daten vom Server (MarketInfo()) mit dem Null-Bar. Ich warte darauf, dass sie auch so werden. Übrigens ist das keine Garantie dafür, dass es keine "Lücke" in der nächsten Geschichte gibt. Es können leicht 1, 2 oder 3 Takte oder mehrere Takte fehlen, und der Null-Balken wird da sein. Manchmal kommen sie später. Manchmal aber auch nicht.

Nun, ja, wir brauchen die Daten des 0-ten Balkens. MarketInfo() bezieht Daten aus dem Null-Balken, das war's. Warum sollten wir sie mit etwas anderem überprüfen?
Zhunko:

Übrigens ist damit nicht garantiert, dass es in der nächsten Geschichte kein "Loch" gibt. Es können leicht 1, 2 oder 3 Takte oder mehrere Takte fehlen, und die Null wird da sein. Manchmal kommen sie später. Manchmal aber auch nicht.

Selbst wenn es eine Lücke in der Historie gibt, hat dies keinen Einfluss auf die aktuellen Berechnungen. Es hätte zu der Zeit, als es ein Loch gab. 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 grabe ich tief, aber ich möchte verstehen, wie ich mich besser verhalten kann.

Du, Vadim, hast gesagt, dass ich die Funktion oben falsch geschrieben habe, ich werde sie noch einmal duplizieren, mit zusätzlichen Zeilen:

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?

Grund der Beschwerde: