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

 

Eine solche Frage. Wie kann ich jetzt optimieren? Das Grundgerüst des Expert Advisors sieht nun wie folgt aus:

init(){
        //если файл истории не существовал, формируем заголовок
}

start(){
        //ловим тики
        //смотрим, сколько прошло секунд с последнего вызова start():
                //если 1 или больше, то---(блок свеч)---
                        //запоминаем, сколько прошло секунд
                        //---(блок выбора режима)---
                        //формируем RateInfo - столько раз, сколько прошло секунд
                //если 0, то---(блок теней)---
                        //редактируем RateInfo - столько раз, сколько прошло секунд в прошлый раз
}

//---(блок выбора режима)---
//флаги в экстерне - все бычьи, все медвежьи или любые
//если все бычьи, то в close всегда ask
//если все медвежьи, то в close всегда bid
//Если любые, то
        //если текущий бид меньше предыдущего, то медвежья
        //в любом другом случае бычья

Ich habe open-close in Variablen und entfernt den zweiten Block FileSeek, die unnötig geworden ist, fügte Auswahl der Candlestick-Stil (alle bullish, alle bearish, jeder), fügte Schatten, wenn die nächste asc oder bid ist höher oder niedriger als die vorherige hoch und niedrig, fügte Tracing mit dem Druck, die durch ein Flag in der Kopfzeile aktiviert wird, kommentiert alles mit Links zu Zeilennummern, versucht, Code lesbar zu machen, um das Forum. Ich habe auch Zeilennummern zum Drucken hinzugefügt.

Jetzt schauen Sie:

Oben ist ein Tick-Zeitrahmen, unten ein zweiter Zeitrahmen. Die Schatten (Schwänze) entstehen, wenn zwei Ticks in einer Sekunde gefangen wurden und sich der Geld- oder Briefkurs von dem vorherigen unterscheidet. Die Zecke funktioniert wie ein Uhrwerk. Der zweite Tick verzögert sich, d. h., es wird mehr Zeit für die Verarbeitung des Ticks aufgewendet als der minimale Zeitabstand zwischen den Ticks beträgt. Deshalb frage ich, wie der Code optimiert werden kann. Ich füge den Code bei und wiederhole, dass ich alles überkompensiert habe. Wenn Sie überprüfen möchten, wie es funktioniert - Sie setzen es als EA auf Minuten, dann in autonomen Suche und öffnen Sie 'sec'+Instrument Name.

Dateien:
hhi.jt.mq4  29 kb
 
david2:
Wie kann diese Funktion in Ihrem EA implementiert werden? Wenn ein TP oder SL bei einem der Bay Orders ausgelöst wird, sollten alle Bay Orders geschlossen werden.

Wenn Sie über Programmiererfahrung verfügen, hier ein Tipp:

1. Zählen Sie nach der Eröffnung eines Kaufauftrags die Anzahl der Kaufaufträge.

2. Ihre Nummer in einer globalen Variablen speichern

Überprüfen Sie beim nächsten Tick, ob die Anzahl der Kaufaufträge geringer ist als die des vorherigen Ticks, und schließen Sie dann alle Kaufaufträge.

Es gibt Funktionen, die die Anzahl der Aufträge nach der Art der offenen Position und nach der Schließung von Positionen einer ausgewählten Art (Kauf oder Verkauf) in der Kodobase berechnen.

Viele nützliche Features in den Funktionen von Kim

 

Über die Konvertierung von Variablentypen.
Der Wert des doppelten Koeffizienten K wird in der Zeilenbeschreibung als Text angegeben (K=0,573).
Während der Codeausführung hat sich der Wert des Koeffizienten K mehrmals geändert.
Nun möchte ich die Variable double Z mit dem Wert K=0.573 multiplizieren, nachdem ich die Zeilenbeschreibung string ObjectDescription(string name) extrahiert habe.
Ist es möglich, eine Variable vom Typ String in eine Variable vom Typ Double in MQL zu konvertieren, um wieder 0,573 zu erhalten. Wenn möglich, geben Sie mir bitte den Link.
Herzliche Grüße. Schurkin.

 
Shurkin:

Ist es möglich, eine Variable vom Typ String in MQL in eine Variable vom Typ Double umzuwandeln, um wieder 0,573 zu erhalten. Wenn möglich, geben Sie mir bitte einen Link.
.

https://docs.mql4.com/ru/convert/StrToDouble
 
08:05:30 Sec.TF AUDUSD,M1: 15
08:05:31 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:35 Tick.tf AUDUSD,M1: 0
08:05:38 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:40 Tick.tf AUDUSD,M1: 0
08:05:41 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:43 Tick.tf AUDUSD,M1: 0
08:05:51 GMT AUDUSD,M1: 15062
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:55 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:57 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 16
08:05:59 Tick.tf AUDUSD,M1: 0
08:06:00 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:09 GMT AUDUSD,M1: 10156
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:17 Tick.tf AUDUSD,M1: 0
08:06:18 Tick.tf AUDUSD,M1: 0
08:06:26 GMT AUDUSD,M1: 5078
08:06:27 Tick.tf AUDUSD,M1: 0
08:06:28 Tick.tf AUDUSD,M1: 0
08:06:30 Tick.tf AUDUSD,M1: 31

08:06:32 GMT AUDUSD,M1: 15

Teil des Protokolls mit Millisekunden-Timer in beiden Codes (Tick- und Sekunden-Zeitrahmen). Das Einzige, was mir bisher einfällt, ist, die Zyklen ganz abzuschaffen, d. h. ein oder mehrere Ticks pro Sekunde, unabhängig davon, wie viele Sekunden seit dem letzten Tick vergangen sind - es ist immer eine Kerze. Wenn es eine Sekunde und so weiter Ticks pro Sekunde - ein Kerzenständer mit Schatten. Aber dann gibt es eine zweite TF mit "Löchern" und bei High[15] nehme ich an, dass ich nicht den Wert von asc von vor 15 Sekunden nehmen werde...

 
hoz:

Ich habe mich gefragt, wie man eine Funktion schreibt. Die Idee ist, dass, wenn N Kerzen in eine bestimmte Richtung zurücklaufen, die Anzahl der Kerzen berechnet werden soll. ABER. Hierfür gibt es mehrere Bedingungen, genauer gesagt wird es im Laufe der Zeit eine Liste von ihnen geben.

Nehmen wir zum Beispiel an, der Trend ist abwärts gerichtet,... ...geht ein Pullback nach oben. Ich möchte, wenn 5 Candlesticks nach oben ging, und jede Kerze war bullish, und, zum Beispiel, die Größe der einzelnen Candlestick war größer alsi_sizeOfCurrBar, und einige andere Bedingungen, dann Ausgabe der Anzahl der kontinuierlich bullish Bars, und geben Sie einige Ergebnis von der Funktion.

Wie schreibt man ihn am besten? Im Moment habe ich angefangen zu schreiben, und ich verstehe, dass ich es durch eine Schleife von Balken laufen lassen sollte, und irgendwie sollte ich die Ansicht in der Tiefe der Geschichte nicht durch eine feste Anzahl von Balken begrenzen, sondern durch Balken, mit den Parametern, die wir in den Bedingungen interessiert sind.

Hier ist, was ich habe, bekommen:

Im Moment gehen wir nur vom vorletzten Takt bis zum Takt mit Index 6, also 5 Takte hintereinander. Aber ich möchte, dass mein Expert Advisor nur nach den Bars sucht, die bullish sind, und nicht nach allen Bars in einer Reihe. Wie kann sie angemessen umgesetzt werden?

Ich habe gewissermaßen korrekt nach Größe gefiltert.

Nun, wenn alles bereits geschrieben ist, wird der Zähler am unteren Ende bereits die Anzahl der fortlaufenden Balken mit den Parametern nht,etvsvb berechnen und wenn es genug solcher Balken gibt, dann wird ein Wert der Funktion zurückgegeben.

Wie immer originell: Zählen von Balken "von unten"...

for (int i=Bars-1; i>=Bars-6; i--)
 
Zhunko:

Es gibt viele verschiedene Möglichkeiten:

1. Über eine globale Variable.

2. Über Datei.

3. über iCustom().

4. Über die globalen Grafikvariablen.

5. Kartierung. Sie können Daten von einem Terminal zu einem anderen Terminal übertragen. Oder in einem Terminal, um Daten von einem Fenster zu einem anderen Fenster zu übertragen, ohne die Einschränkungen der globalen MT4-Variablen.


Was davon funktioniert am schnellsten?
 
gyfto:

Was davon funktioniert am schnellsten?
5. Kartierung.
 
hoz:
Im Druck hat sie einen Wert von 1 und 2... Was zum Teufel ist hier eigentlich los?
Print("i = ", i, "; up = ", cnt, "; cnt = ", cnt);

Nur Unaufmerksamkeit. Im Allgemeinen ist bool hier 4 Byte groß, was nicht bedeutet, dass es nur die Werte 0 und 1 annehmen kann. C++ boolearn ist 1-Byte. Ich persönlich verwende bool in der Binärarithmetik in switch(), wenn ich mehrere Auswahlen treffen muss, im Vertrauen darauf, dass es immer 0 oder 1 ist)) Zum Beispiel so:

bool f1, f2, f3, f4//флаги

switch(8*f4+4*f3+2*f2+f1){
   case 0:
   ...
   case 15:
}//без default
 
gyfto:

Eine solche Frage. Wie kann ich jetzt optimieren? Das Grundgerüst des Expert Advisors sieht nun wie folgt aus:

Ich habe open-close in Variablen und entfernt den zweiten Block FileSeek, die unnötig geworden ist, fügte Auswahl der Candlestick-Stil (alle bullish, alle bearish, jeder), fügte Schatten, wenn die nächste asc oder bid ist höher oder niedriger als die vorherige hoch und niedrig, fügte Tracing mit dem Druck, die durch ein Flag in der Kopfzeile aktiviert wird, kommentiert alles mit Links zu Zeilennummern, versucht, Code lesbar zu machen, um das Forum. Ich habe auch Zeilennummern zum Drucken hinzugefügt.

Jetzt schauen Sie:

Oben ist ein Tick-Zeitrahmen, unten - Sekunden. Die Schatten (Schwänze) entstehen, wenn zwei Ticks in einer Sekunde gefangen wurden und sich der Geld- oder Briefkurs von dem vorherigen unterscheidet. Die Zecke funktioniert wie ein Uhrwerk. Der zweite Tick verzögert sich, d. h., es wird mehr Zeit für die Verarbeitung des Ticks aufgewendet als der minimale Zeitabstand zwischen den Ticks beträgt. Deshalb frage ich, wie der Code optimiert werden kann. Ich füge den Code bei und wiederhole, dass ich alles überkompensiert habe. Wenn Sie überprüfen möchten, wie es funktioniert - Sie setzen es als EA auf Minuten, dann in autonomen Suche und öffnen Sie 'sec'+Instrument Name.

Ich habe mich nicht mit der Logik befasst, aber irgendetwas sagt mir, dass es einige zusätzliche Berechnungen gibt. Vor anderthalb Jahren löste ich das gleiche Problem mit dem Sammeln von Kursen und der Bildung von M1-Kerzenhaltern mit Kahlschlag zu Beginn der astronomischen Minute.
Wenn Sie daran interessiert sind, können Sie sich einige Momente der reinen Optimierung Ihres Codes (Datei) ansehen. Wenn wir ernsthaft über Optimierung sprechen, müssen Sie die Laufzeit des Codes messen. ;)
Dateien:
hhi.jt_c_.mq4  23 kb