Ist es möglich, viele "Oder"-Zeichen (||) in Bedingungen zu vermeiden, die dieselbe Aktion verursachen? - Seite 4

 

borilunad:

Die komplexesten Berechnungen verlangsamen sich nicht so sehr wie Funktionen, die bei jedem Tick die verschiedenen erforderlichen Marktdaten und offenen Positionen überprüfen.

Die Wahrheit ist, dass MarketInfo eines der schlimmsten Testprobleme darstellt. In solchen Fällen schreibe ich in der Regel in zwei Blöcken, wenn möglich, und mache "echte" Abfragen nur für den echten Handelsmodus. Dies ist z. B. für nicht gemessene Daten (im Prüfer) besonders effektiv:

int spread;

int init()
{
...

   if(IsTesting())
   {
      spread = MarketInfo(Symbol(),MODE_SPREAD);
   }

...
 
}

int start()
{
...

   if (!IsTesting())
   {
      spread = MarketInfo(Symbol(),MODE_SPREAD);
   }

...
}

Sie können auch im Block if(!IsTesting()) alle Arten von RefreshRates(), Abfragen an MODE_BID und MODE_ASK (die durch Quick Bid und Ask ersetzt werden) und so weiter senden.

 
alsu:

Die Wahrheit ist, dass MarketInfo eines der schlimmsten Testprobleme darstellt. In solchen Fällen schreibe ich in der Regel in zwei Blöcken, wenn möglich, und mache "echte" Abfragen nur für den echten Handelsmodus. Dies ist z. B. für nicht gemessene Daten (im Prüfer) besonders effektiv:

Sie können auch im Block if(!IsTesting()) alle Arten von RefreshRates(), Abfragen an MODE_BID und MODE_ASK (die durch Quick Bid und Ask ersetzt werden) und so weiter senden.

Ich meine nicht die Funktion MarketInfo, die ich am Anfang meines Starts habe, sondern die Funktionen, die verschiedene Parameter des Marktes und der offenen Positionen prüfen, die in den für die Durchführung von Aktionen erforderlichen Bedingungen angegeben sind. Außerdem benötige ich MODE_BID und MODE_ASK nicht, da ich immer Bid und Ask verwende.
 
pako:

Herzlichen Dank, Pako! Wie konnte ich das nicht erraten, es ist so einfach! Ich werde jetzt zu Abend essen und dann tun, was ich kann, und die Geschwindigkeit der Passage überprüfen.

Und das verstehe ich nicht, was Sie meinen. Woher haben Sie diese Zahlen? Und wenn Sie an kurzen Variablennamen interessiert sind, ziehe ich kurze Namen langen vor. Oder was sonst? Ja, mir ist gerade aufgefallen, dass Sie zwei Klammern vor clo und am Ende nach clo in meine Formel eingefügt haben. Das ist überhaupt nicht nötig, es stört die Berechnung. Aber trotzdem vielen Dank!

<--- 10.444 = 8.087 > 3.908 ist das in welcher Sprache?

Gemacht, überprüft, es funktionierte, aber das Ergebnis hat mir noch nicht gefallen, praktisch nicht die Zeit des Laufes zu reduzieren! Morgen werde ich versuchen, alles zu tun, was ich kann, vielleicht wird sich dann etwas ändern.

Aber egal, die Hauptsache ist, dass ich dank Ihnen, Pako, Aleksey, Victor und anderen eine weitere wichtige Methode zum Schreiben von Code gelernt habe, für die ich sehr dankbar bin!

 

In solchen Fällen verwende ich eine Funktion.

Zum Beispiel:

...
if (Request()) Action;

bool Request()
{
 if (A) return(true);
 if (B) return(true);
 if (C) return(true);
 if (D) return(true);
 return(false);
}
 
borilunad:
Ich verwende immer Bid und Ask.

Dann brauchen Sie RefreshRates()))
 
icas:

In solchen Fällen verwende ich eine Funktion.

Zum Beispiel:

So wie ich es verstehe, haben Sie die Möglichkeit, alle Bedingungen zu erfüllen, während ich nur eine Bedingung habe, und selbst wenn mehrere Bedingungen erfüllt werden, was unwahrscheinlich ist, weil sie sehr unterschiedlich sind, wird es nicht dazu kommen, weil eine Bedingung ausgelöst wird. Wenn ich mich geirrt habe, begründen Sie das, ich bin immer froh, etwas Neues zu hören! Danke!
 
alsu:

Dann brauchen Sie RefreshRates()))
Ja, ich habe RefreshRates() am Anfang, oder ist das nicht genug?
 
borilunad:
Ja, ich habe RefreshRates() am Anfang, oder ist das nicht genug?
Es hängt alles davon ab, wie lange die Berechnung dauert. Es kann vorkommen, dass während dieser Zeit der Preis aktualisiert wurde und somit Ask und Bid irrelevant werden. Daher ist es besser, RefreshRates() zusätzlich vor der Ausführung von Trades aufzurufen (genauer gesagt, vor der Preisberechnung für sie).
 
borilunad:
Ja, ich habe RefreshRates() am Anfang von Start, oder ist das nicht genug?
Es macht keinen Sinn, RefreshRates zu Beginn von Start zu verwenden, da Ask und Bid noch nicht obsolet geworden sind.
 
alsu:
Das hängt davon ab, wie lange die Berechnungen dauern. Es kann vorkommen, dass der Kurs während dieses Zeitraums aktualisiert wurde und somit Ask und Bid irrelevant werden. Deshalb ist es besser, RefreshRates() zusätzlich aufzurufen, bevor man Trades ausführt (oder besser gesagt, bevor man die Preise dafür berechnet).

Sie brauchen also RefreshRates() vor jeder Reihe von Bedingungen? Denn ich dachte, es gibt auch RefreshRates() in jeder ausführenden Funktion, wo es auf Fehler prüft, um die Reihenfolge zu wiederholen, und das ist genug. Dann werde ich versuchen, mehr RefreshRates() einzufügen und sehen, was passiert! Danke!

Und Pap'e Yozh auch meinen Dank!