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

 
MakarFX:

Dennoch wird bei jedem Ticken geprüft

und die Minimalberechnung gerät aus den Fugen... geht zwei Takte zurück.

Meine Mindestberechnung wurde wie auf Ihrem Bild getroffen. Aber dann fügte ich die Variable LoY1 hinzu, und der Fehler trat nicht mehr auf. Infolgedessen werden alle Aufträge auf dieselbe Art und Weise geöffnet (nach Zeit, Betrag und Preis) wie in meinem ursprünglichen Code, d. h. so, wie ich sie brauche. Mein Code ist an einer anderen Stelle fehlgeschlagen .... Aber ich habe es an der gleichen Stelle repariert.


double LoU,LoY1,Pr;
int x;
void OnTick()
{
if (Low[1]>Low[2]&&Time[2]>x&&Low[2]<LoY1)
{
LoU=Low[2];
LoY1=Low[2];
}
//**************************************************************
if (Bid-LoU>=0.0030&&Pr!=LoU)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
Pr=LoU;
LoU=Bid;
LoY1=Bid;
x=TimeCurrent();
}
}

Sie können auch eine Pending-Order in 30 Punkten ab LoU platzieren, anstatt sie am Markt zu eröffnen. Dann müssen Sie nicht bei jedem Tick das Bid überprüfen. Aber im Falle eines schwebenden Auftrags sollten wir jedes Mal, wenn sich die LoU ändert , den alten schwebenden Auftrag löschen und einen neuen einstellen, oder die Parameter eines aktuellen schwebenden Auftrags ändern, ohne ihn zu löschen. Und all dies sollte viel seltener geschehen als bei jedem Bid-Tick .

Welche Variante ist in meinem Fall die am wenigsten zeitaufwändige, was die Code-Implementierung angeht?

1. Prüfen Sie bei jedem Häkchen, ob das Gebot 30 Punkte von LoU entfernt ist.

2. Bei jeder Änderung der LoU löschen Sie die alte ausstehende und setzen eine neue.

3. Bei jedem Wechsel der LoU ändern Sie die Parameter der aktiven LoU

Vielen Dank für Ihre Hilfe
.

 
ANDREY:

Meine Berechnung des Minimums ging wie auf Ihrem Bild daneben. Aber dann fügte ich die Variable LoY1 hinzu, und das stoppte den Vorgang.

Es gibt die Standardfunktionen iLowest undiHighest.

 
ANDREY:

Meine Berechnung des Minimums ging wie auf Ihrem Bild daneben. Aber dann fügte ich eine Variable LoY1 hinzu, und das Abweichen wurde gestoppt. Infolgedessen werden alle Aufträge auf dieselbe Weise (nach Zeit, Betrag und Preis) wie in meinem ursprünglichen Code (d. h. so, wie ich es will) geöffnet. Mein Code ist an einer anderen Stelle fehlgeschlagen .... Aber ich habe es an der gleichen Stelle repariert.


Sie können auch eine Pending-Order in 30 Punkten ab LoU platzieren, anstatt sie am Markt zu eröffnen. Dann müssen Sie nicht bei jedem Tick das Bid überprüfen. Aber im Falle eines schwebenden Auftrags sollten wir jedes Mal, wenn sich die LoU ändert , den alten schwebenden Auftrag löschen und einen neuen einstellen oder die Parameter eines aktuellen schwebenden Auftrags ändern, ohne ihn zu löschen. Und all dies sollte viel seltener geschehen als bei jedem Bid-Tick .

Welche Variante ist in meinem Fall die am wenigsten zeitaufwendige, was die Code-Implementierung angeht?

1. Prüfen Sie bei jedem Häkchen, ob das Gebot 30 Punkte von LoU entfernt ist.

2. Bei jeder Änderung der LoU löschen Sie die alte ausstehende und setzen eine neue.

3. Bei jeder Änderung von LoU, Parameter der aktiven Position ändern

1) x ist nicht int, sondern datetime (wird sich in Zukunft als nützlich erweisen)

2) Ihr ursprünglicher Code hat keine ausstehenden Aufträge

3) Jetzt macht Ihr Code bei jedem Tick mehr Operationen

Überprüfen Sie Ihre Nachricht

 
Taras Slobodyanik:

gibt es die Standardfunktionen iLowest undiHighest.

Nicht geeignet... die Anzahl der Zeitreihenelemente ist nicht konstant
 
MakarFX:
Nein... die Anzahl der Zeitreihenelemente ist nicht konstant.

Hindert es Sie daran, den Höchst-/Tiefstwert zu finden?

 
Taras Slobodyanik:

äh... hindert Sie das daran, hoch/tief zu finden?

Die FunktioneniLowest undiHighest bedeuten, dass unter einer bestimmten Anzahl von Balken (Anzahl der Zeitreihenelemente) gesucht wird

in diesem Fall ist die Zahl unbekannt und ändert sich jedes Mal

 
MakarFX:

1) x ist nicht int, sondern datetime (dies wird sich in Zukunft als nützlich erweisen)

2) Ihr ursprünglicher Code hat keine ausstehenden Aufträge

3) Ihr Code führt nun bei jedem Tick mehr Operationen aus

Überprüfen Sie Ihre Nachricht.

Dies ist mein alter Code

Dies ist mein neuer Code für denselben Zeitraum wie der alte

Die Anzahl der Operationen pro Tick ist für mich viel weniger wichtig als die Zeit, die für diese Zahl aufgewendet wird. Und der neue Code benötigt 25% weniger Zeit.... wenn ich mich nicht irre.

Vielen Dank für die Hilfe.

 
Aleksei Stepanenko:
Es gibt hier eine gewisse Subtilität. Zuerst wird die Größe festgelegt und dann durch Zurücksetzen auf Null die Fixierung aufgehoben, ohne dass sich die Größe ändert. Es gibt keinen anderen Weg.
Herzlichen Dank!
 
MakarFX:

Dennoch wird bei jedem Ticken geprüft

und die Berechnung des Tiefs geht daneben... geht zwei Takte zurück.

Nachfolgend finden Sie meinen ursprünglichen Code ohne Ihre Ergänzungen

Nachfolgend mit Ihren neuesten Verbesserungen



Vielleicht sollte if(TimeSeconds(TimeCurrent())==0) nur auf die Abschnitte angewendet werden, in denen keine Aufträge eröffnet werden und in denen das nächste Minimum gesucht wird?

Wenn ich mich nicht irre, wurde mein Code dank Ihrer Funktion nur zu Beginn jeder Minutenkerze ausgeführt, weshalb er die Aufträge nicht korrekt öffnet.


Vielen Dank für die Hilfe.

 
ANDREY:

Nachfolgend finden Sie meinen ursprünglichen Code ohne Ihre Ergänzungen

Nachfolgend finden Sie den Code mit Ihren letzten Verbesserungen



Vielleicht sollte if(TimeSeconds(TimeCurrent())==0) nur auf die Abschnitte angewendet werden, in denen keine Aufträge eröffnet werden und in denen nach dem nächsten Tiefpunkt gesucht wird?

Wenn ich mich nicht irre, hat Ihre Funktion begonnen, meinen Code nur zu Beginn jeder Minutenkerze auszuführen.


Vielen Dank für die Hilfe.

Ja
Grund der Beschwerde: