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

 

Bitte beraten Sie mich, wie man am besten bei der Optimierung eines EA vorgeht:

Es gibt viele Parameter, die für die Einstellung des Indikators verantwortlich sind, und es gibt einen Parameter, der genau diesen Indikator aktiviert/deaktiviert.


Es macht absolut keinen Sinn, die Einstellungen des Indikators zu optimieren, wenn er deaktiviert ist.

Frage: Wie kann ich solche sinnlosen Überschreitungen vermeiden?

 
ANDREY:

Vielen Dank für die Hilfe und die neuen Informationen für mich. Doch dann fiel mir ein viel einfacherer Weg ein: ....
Wenn ich die erste Order auf einer Minutenkerze eröffne, speichere ich in der X-Variablen den LOW-Wert dieser Kerze zum Zeitpunkt der Eröffnung dieser ersten Order.
2. wenn eine Nullkerze eröffnet wird (die nächste Kerze nach der Kerze, bei der der Auftrag eröffnet wurde), erhalte ich LoY[1]
. Dann wende ich die Logik an und schließe
1. Wenn X = LoY[1], dann wurde der Auftrag nach dem LoY der Kerze eröffnet, bei der er eröffnet wurde
2.Wenn LoY[1]< X ist, bedeutet dies, dass der Preis nach der Ordereröffnung ein weiteres Mal gesunken ist und unter X lag. Das bedeutet, dass die Order eröffnet wurde, bevor LoY[] auf der angegebenen Kerze
gebildet wurde
Time LOW Ich musste nur wissen, wann die Order eröffnet wurde. vor oder nach der LoY[]-Bildung.
Und alle Orders auf eine einminütige Kerze öffnen eine über der anderen mit einer Differenz von 2 Pips. Das heißt, als sich die erste Kerze öffnete, öffneten sich auch die anderen auf diesem Leuchter.
Vielen Dank für die Hilfe.

Aber ich habe noch eine Frage.
Ich habe eine Order auf eine einminütige Kerze zum Preis X eröffnet. Einige Sekunden später wurde auf derselben Kerze ein weiterer Auftrag zu einem Preis von X+2 Pips eröffnet. Zwischen den beiden Punkten X und X+2 befindet sich ein Preistief.
Ich muss den Tiefpunkt herausfinden. Wenn es sich um verschiedene Candlesticks handelt, würde ich die Funktionen iLow und iLowest
verwenden, aber diese Funktionen müssen Bars als Intervallgrenzen angeben. Meine Intervallgrenzen sind jedoch keine Balken, sondern die Preise X und X+2, da es nur einen Balken gibt.
Ich weiß, wie ich das Minimum finde, das ich brauche. Aber dazu muss ich den Kurswert bei jedem Tick verfolgen. Ich weiß auch, wie man es mit einem Zyklus zum Zeitpunkt X+2 macht. Und wie man es auf einmal zum Zeitpunkt X+2 macht , wie im Fall von iLow undiLowest.
Ich wäre Ihnen sehr dankbar, wenn Sie mir zeigen könnten, wie man das macht.
Danke

Schreiben der Ticks in eine Datei
 
MakarFX:
Schreiben der Ticks in eine Datei

Ich danke Ihnen für die Informationen, die für mich neu sind. Ich habe noch nie Zecken in eine Datei geschrieben. Wo kann ich mehr darüber lesen, um zu verstehen, wie man es macht?

? Eine weitere Frage ..... kann ich Ticks mit Preisen in ein Array schreiben, um das Array mit Ticks zu sortieren und den Tick mit dem niedrigsten Preiswert zu erhalten? Oder mit der Hilfe von

ArrayMinimum


Vielen Dank für die Hilfe.

 
ANDREY:

Ich danke Ihnen für die Informationen, die für mich neu sind. Ich habe noch nie Zecken in eine Datei geschrieben. Wo kann ich mehr darüber lesen, um zu verstehen, wie man es macht?

? Eine weitere Frage ..... kann ich Ticks mit Preisen in ein Array schreiben, um das Array mit Ticks zu sortieren und den Tick mit dem niedrigsten Preiswert zu erhalten? Oder mit der Hilfe von

ArrayMinimum


Vielen Dank für die Hilfe.

Schreiben in die Datei FileWriteString

Im Allgemeinen ist es schwer zu verstehen, was Sie brauchen.

 
MakarFX:

FileWriteString

Es ist schwer zu wissen, wonach man sucht.

Ein Auftrag wurde bei einer einminütigen Kerze zum Kurs X eröffnet. Einige Sekunden später wurde auf derselben Kerze ein weiterer Auftrag bei X+2 eröffnet. Zwischen X und X+2 gibt es einen Preistiefpunkt.
Ich muss den Tiefpunkt herausfinden. Wenn es sich um verschiedene Candlesticks handelt, würde ich die Funktionen iLow und iLowest
verwenden, aber diese Funktionen müssen Bars als Intervallgrenzen angeben. Meine Intervallgrenzen sind jedoch keine Balken, sondern die Preise X und X+2, da es nur einen Balken gibt.
Ich weiß, wie ich das Minimum finde, das ich brauche. Aber dazu muss ich den Kurswert bei jedem Tick verfolgen. Ich weiß auch, wie man es mit einem Zyklus zum Zeitpunkt X+2 macht . Und wie man esauf einmal zum ZeitpunktX+2 macht, wie im Fall von iLow undiLowest.
Ich wäre Ihnen sehr dankbar, wenn Sie mir zeigen könnten, wie man das macht.
Danke
 
ANDREY:

Ich danke Ihnen für die Informationen, die für mich neu sind. Ich habe noch nie Zecken in eine Datei geschrieben. Wo kann ich mehr darüber lesen, um zu verstehen, wie man es macht?

? Eine weitere Frage ..... kann ich Ticks mit Preisen in ein Array schreiben, um das Array mit Ticks zu sortieren und den Tick mit dem niedrigsten Preiswert zu erhalten? Oder mit der Hilfe von

ArrayMinimum


Vielen Dank für die Hilfe.

Das ist möglich. Es ist nur notwendig, in die .bin Datei mit der Funktion zu schreiben

uint  FileWriteArray( 
   int          file_handle,         // handle файла 
   const void&  array[],             // массив 
   int          start=0,             // начальный индекс в массиве 
   int          count=WHOLE_ARRAY    // количество элементов 
   );

und lesen

uint  FileReadArray( 
   int    file_handle,               // handle файла 
   void&  array[],                   // массив для записи 
   int    start=0,                   // стартовая позиция для записи в массив 
   int    count=WHOLE_ARRAY          // сколько читать 
   );
 
Alexey Viktorov:

Sie können. Sie müssen nur in die .bin-Datei schreiben mit der Funktion

und lesen

Danke für die neuen Informationen für mich .... und nicht nur neue .... oooooooooo neu ?:=) Ich werde versuchen, es selbst zu lernen....

 
ANDREY:

Vielen Dank für die neuen Informationen für mich .... und nicht nur neue .... Sehr neu ?:=) Ich werde versuchen, es selbst zu verdauen....

Was gibt es hier Neues? Sie öffnen die Dokumentation, lesen die Überschriften und finden den Abschnitt "Dateioperationen", in dem verschiedene Funktionen beschrieben werden, darunter FileWriteArray()

Es ist nicht das erste Mal, dass ich Sie daran erinnere, dass Sie die Dokumentation öfter lesen sollten. Auch wenn Sie es im Moment nicht brauchen. Wenn Sie die Überschriften der Abschnitte lesen, werden Sie verstehen, was in der Dokumentation beschrieben wird. Sie sind derjenige, der es am meisten braucht.

 
Alexey Viktorov:

Was gibt es hier Neues? Öffnen Sie die Dokumentation, lesen Sie die Kopfzeilen und suchen Sie den Abschnitt "Dateioperationen", in dem verschiedene Funktionen beschrieben werden, darunter FileWriteArray()

Es ist nicht das erste Mal, dass ich Sie daran erinnere, dass Sie die Dokumentation öfter lesen sollten. Auch wenn Sie im Moment nichts brauchen. Wenn Sie die Überschriften der Abschnitte lesen, werden Sie verstehen, was in der Dokumentation beschrieben wird. Sie sind derjenige, der es braucht.

Vielen Dank für die wertvollen Ratschläge. Im Moment lese ich die Dokumentation nur, wenn ich gerade Code schreibe und vor einer Frage stehe, auf die ich keine Antwort weiß. Ich bin beim Schreiben meiner bisherigen Codes noch nie auf die Notwendigkeit gestoßen, Daten in Dateien zu schreiben, daher ist das ein völlig neues Thema für mich.
Sagen Sie mir, kann meine Idee nicht auf eine einfachere Art und Weise verwirklicht werden, ohne sie in eine Datei zu schreiben? Wie in meinem Code. Dies ist kein funktionierender Code, sondern soll meine Idee veranschaulichen, wie man das Minimum zwischen zwei benachbarten Aufträgen findet, die auf einer einminütigen Kerze eröffnet wurden
Danke für die Hilfe.

double P[60],Z;
int Tick,x,x1,G,G1,G2,T;

void OnTick()
{
Tick++;

if (OrdersTotal()==1&&Tick<2189)
{
P[x]=Bid;
Print("------------------------P[x]=Bid------------------------=", DoubleToString(P[x],5), "  x ",  x);
x++;
}
if (OrdersTotal()==2&&Tick==2189)
{
x1=x;
x=0;
ArraySort(P,WHOLE_ARRAY,0,MODE_ASCEND);
T=(60-x1);
Print("------------------------МИНИМУМ=------------------------=",DoubleToString(P[T],5), "  Tick ",  Tick, "  x1 ",  x);
}

if (Tick==2176||Tick==2188)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+300*Point,Ask-100*Point,"300",0);
G2=G;
G=Tick;
}
}

Das heißt, ich habe den Preis für jeden Tick direkt in das Array geschrieben, nicht in eine Datei.

 
ANDREY:

Vielen Dank für die Hilfe und die neuen Informationen für mich. Doch dann fiel mir ein viel einfacherer Weg ein: ....
Wenn ich die erste Order auf einer Minutenkerze eröffne, speichere ich in der X-Variablen den LOW-Wert dieser Kerze zum Zeitpunkt der Eröffnung dieser ersten Order.
2. wenn eine Nullkerze eröffnet wird (die nächste Kerze nach der Kerze, bei der der Auftrag eröffnet wurde), erhalte ich LoY[1]
. Dann wende ich die Logik an und schließe
1. Wenn X = LoY[1], dann wurde der Auftrag nach dem LoY der Kerze eröffnet, bei der er eröffnet wurde
2.Wenn LoY[1]< X ist, bedeutet dies, dass der Preis nach der Ordereröffnung ein weiteres Mal gesunken ist und unter X lag. Das bedeutet, dass die Order vor der Bildung von LoY[] auf der gegebenen Kerze
eröffnet wurde.

Sie können die Zeit überprüfen, aber Sie warten auf einen neuen Auftrag und fragen dann nach dem maximalen oder minimalen Tick.