Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1473

 
Alexey Viktorov:

Ich habe ein Fraktal als Beispiel genannt. Und wie Sie das Minimum (in Ihrem Fall) definieren, ist ein militärisches Geheimnis... oder ein völliges Missverständnis dessen, was gefragt wird.

Mein Code besteht aus mehreren Strings und man kann mit bloßem Auge sehen, wie das Minimum definiert ist

Das Minimum ist durch die gelben Linien definiert

void OnTick()//484
{
if (Bid<LoU)
LoU=Bid;
//**************************************************************||TimeCurrent()==1262568096
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Print("---------------------КАЖДЫЙ ТИК ------Tick---------=     "    ,   Tick);
Pr=LoU;
LoU=Bid;
}
}
 
MakarFX:

Sie brauchen die Balken nicht zu zählen

Nach der Eröffnung des Auftrags wird der Variablen der Wert Low[0] (Minimum des aktuellen Balkens) zugewiesen, und nach dem Schließen des Balkens wird der Variable ein neuer Wert zugewiesen, wenn der Wert Low[1] niedriger als die Variable ist,

Wenn nicht, wird der alte Wert beibehalten, d. h. das Minimum.

Diesen Algorithmus habe ich schon lange verstanden und verwendet.... d.h. Minima nicht auf einem Tick, sondern auf einem Candlestick prüfen. Aber ich denke, es gibt einen viel wirtschaftlicheren Algorithmus, nämlich den, den ich letztes Mal beschrieben habe, bei dem man die Minima nicht vorher, sondern nachher prüft. Aber ich weiß nicht, wie ich schnell und wirtschaftlich die Anzahl der Kerzen von BIDA bis zur fünfzigsten Kerze zählen kann. Ja, bis zur fünfzigsten Kerze weiß ich, wie man die Anzahl der Kerzen zählt. So zählen Sie die Anzahl der Kerzen bis zur Kerze mit dem niedrigsten LOU . Das heißt, von BIDA zu dieser Kerze

 
ANDREY:

Mein Code besteht aus mehreren Zeilen und zeigt, wie das Minimum mit bloßem Auge definiert wird

Das Minimum ist durch die gelben Linien definiert.

Wo liegt also das Problem? Hier kommt es darauf an, wie die LoU-Variable deklariert wird. Wenn es sich um die globale Ebene handelt, gut. Wenn es eine lokale Variable ist, muss sie statisch sein. Und wenn man bei jedem Tick die Differenz zwischen dem aktuellen Preis und dem Preis in dieser Variablen überprüft, sind die Kosten für die Mikrosekunden so gering, dass es keinen Sinn macht, darüber zu sprechen.

 
ANDREY:

Diesen Algorithmus habe ich schon lange verstanden und verwendet.... d.h. Minima nicht auf Tick, sondern auf Candlestick prüfen. Aber ich denke, es gibt einen viel wirtschaftlicheren Algorithmus, nämlich den, den ich letztes Mal beschrieben habe, wenn man nicht vor dem Minimum prüft, sondern nachdem es erscheint. Aber ich weiß nicht, wie ich schnell und wirtschaftlich die Anzahl der Kerzen von BIDA bis zur fünfzigsten Kerze zählen kann. Ja, bis zur fünfzigsten Kerze weiß ich, wie man die Anzahl der Kerzen zählt. So zählen Sie die Anzahl der Kerzen bis zur Kerze mit dem niedrigsten LOU . Das heißt, von BIDA zu dieser Kerze.

Darin steckt eine abnorme Logik ... Warum sollte man 50 Takte zählen? Und wenn es nicht 50 sind?

 
ANDREY:

Diesen Algorithmus habe ich schon lange verstanden und verwendet.... d.h. Minima nicht auf Tick, sondern auf Candlestick prüfen. Aber ich denke, es gibt einen viel wirtschaftlicheren Algorithmus, nämlich den, den ich letztes Mal beschrieben habe, wenn man nicht vor dem Minimum prüft, sondern nachdem es erscheint. Aber ich weiß nicht, wie ich schnell und wirtschaftlich die Anzahl der Kerzen von BIDA bis zur fünfzigsten Kerze zählen kann.

Was auch immer Sie sich ausdenken, die Prüfung wird bei jedem Tick durchgeführt - dies ist ein Merkmal der Funktion OnTick().

 
MakarFX:

Unabhängig davon, welche Prüfung Sie sich einfallen lassen, wird sie bei jedem Tick durchgeführt - dies ist ein Merkmal der Funktion OnTick().

Es ist eine Sache zu prüfen und eine andere, das Minimum zu finden...

 
Alexey Viktorov:

Wo liegt also das Problem? Die Hauptsache ist, wie die LoU-Variable deklariert wird. Wenn es auf globaler Ebene ist, ist es in Ordnung. Wenn es eine lokale Variable ist, muss sie statisch sein. Und wenn man bei jedem Tick die Differenz zwischen dem aktuellen Preis und dem Preis in dieser Variablen überprüft, wird sie so gering sein, dass es keinen Sinn macht, darüber zu sprechen.

Danke für die neuen und wertvollen Informationen für mich..... Ich wusste das nicht.

 
Alexey Viktorov:

Das hat eine abnorme Logik... Warum sollte man 50 Takte zählen? Und wenn es nicht 50 sind?

50 ist für den abstrakten Fall. Es kann 20 oder 150 oder 3 oder 1 sein. Gemeint ist, wie man weiß, wie viele Balken zwischen dem aktuellen BIDE und dem lokalen Tiefststand liegen ...., falls zwischen diesem BIDE und dem lokalen Tiefststand 30 Punkte liegen, die zur Eröffnung des Auftrags erforderlich sind. Um eine Order zu eröffnen , wenn ( Bid - Low[ 50] >= 30 pips)- um eine Order zu eröffnen.

 
MakarFX:

Unabhängig davon, welche Prüfung Sie sich einfallen lassen, wird sie bei jedem Tick durchgeführt - dies ist ein Merkmal der Funktion OnTick().

Danke. Wenn ich wüsste, dass .... hätte ich mich vielleicht nicht so sehr darum gekümmert.

Wenn ich also LOW nicht bei jedem Tick, sondern bei jedem Candlestick prüfe, wird das Programm immer noch Zeit für die Verarbeitung jedes Ticks aufwenden, und es wird genauso aussehen, als ob es bei jedem Tick geprüft würde.

Gibt es keine Möglichkeit, diese Funktion in Ihrem Code zu vermeiden? Sie sollte nicht bei jedem Tick, sondern zum Beispiel bei jedem LOU einer Minutenkerze durchgeführt werden.

 
ANDREY:

Ich danke Ihnen. Wenn ich wüsste, dass .... Vielleicht hätte ich mich dann nicht so sehr darum gekümmert.

Wenn ich also LOW nicht bei jedem Tick, sondern bei jeder Kerze prüfe, wird das Programm immer noch Zeit für die Verarbeitung jedes Ticks aufwenden, und die Zeit ist dieselbe wie bei der Prüfung bei jedem Tick?

Gibt es keine Möglichkeit, diese Funktion in Ihrem Code zu vermeiden? Sie würde nicht bei jedem Tick, sondern zum Beispiel bei jedem LOU einer Minutenkerze durchgeführt werden.

void()

Grund der Beschwerde: