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

 
andrey46:
Ich weiß nicht, warum der Expert Advisor im Strategy Tester einwandfrei funktioniert, Aufträge erteilt usw., aber im realen Konto, obwohl der Roboter aktiv ist, werden keine Aufträge erteilt

Sie müssen das Magazin lesen, vielleicht finden Sie eine Antwort

 

Können Sie mir sagen, wie ich das bekommen kann?

double w = 18.2

Hier...

int w = 18
 
TrederMT5:

Können Sie mir sagen, wie ich das bekommen kann?

Hier...

int w1;
double w = 18.2;
w1=(int)w;
w=round (w);

Eine explizite Typkonvertierung.

Sie können auch eine Ganzzahl aus einer Nicht-Ganzzahl runden, aber das Double wird 18,0 sein

 
scomoroh:

Dann werde ich die Frage wiederholen.

Der Ausdruck

if (izmb>b ||izmb<b || izms>s || izms<s)

ist mit diesem identisch:

if (izmb!=b || izms!=s)

Und wenn Sie etwas speichern wollen, tun Sie es in einer globalen Variablen.

Dies ist diejenige, die außerhalb des Funktionskörpers deklariert wird.

int izmb=0, izms=0;


void OnTick()
   {
   .........
 
Valeriy Yastremskiy:


Dankeschön
 

Einen guten Tag an Sie alle!

Frage zu MQL4. Hier ist ein einfacher Code

double LoY[31][31],LoU,LoU1;
int S,S1,S2;
void OnTick()
{
if (Minute()==20&&Minute()!=S1)
{
ArrayFill(LoY,0,31,0.5555);
S1=Minute();
}
//***************************************************************
if (Minute()!=S)
{
LoY[0][0]=Bid;
ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND);
Print("----LoY[0][1]-- Горизонтально ---  [0}  ",  LoY[0][0],"  [1] ",   LoY[0][1],"  [2] ",   LoY[0][2],"  [3] ",   LoY[0][3],"  [4] ",   LoY[0][4],"  [26] ",   LoY[0][26],"  [27] ",   LoY[0][27],"  [28] ",   LoY[0][28],"  [29] ",   LoY[0][29],"  [30] ",   LoY[0][30]);
Print("----LoY[1][0]-- Вертикалььно ---  [0}  ",  LoY[0][0],"  [1] ",   LoY[1][0],"  [2] ",   LoY[2][0],"  [3] ",   LoY[3][0],"  [4] ",   LoY[4][0],"  [26] ",   LoY[26][0],"  [27] ",   LoY[27][0],"  [28] ",   LoY[28][0],"  [29] ",   LoY[29][0],"  [30] ",   LoY[30][0]);
S=Minute();
}
}

Sie erstellt ein zweidimensionales Array und füllt es mit Werten. Es gibt zwei Funktionen im Code, die mich interessieren - ArrayFill(LoY,0,31,0.5555); und ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND); Laut dem Referenzhandbuch arbeiten beide Funktionen mit zweidimensionalen Arrays.ArrayFill() arbeitet strikt mit horizontal gefüllten Arrays , das Referenzbuch gibt an, dass es das Array strikt von links nach rechts mit Werten füllt (nicht von oben nach unten oder unten nach oben). ArraySort() sortiert ein zweidimensionales Array nach der ersten Dimension. Die Referenz sagt nicht, ob sie horizontal gefüllte oder vertikal gefüllte Arrays sortiert. Nach der Ausführung meines Codes zu urteilen, sortiert ArraySort() nur vertikal gefüllte Arrays. Es scheint, dass diese beiden Funktionen nicht ein und dasselbe Array in einem Programm verarbeiten können.

F. Es ist wichtig für mich, dass die Funktion ArraySort() korrekt funktioniert . Kann ArraySort() so konfiguriert werden, dass es horizontal gefüllte Arrays sortiert, mit denen ArrayFill() arbeitet? Oder die Sortierfunktion von MQL5, die in MQL4 funktioniert, kann mir stattdessen helfen? Oder gibt es eine Funktion, die ein horizontal gefülltes Array mit all seinen Werten in ein vertikales Array umwandelt, mit anderen Worten, wie kann ich mein Programm dazu bringen, ein Array horizontal zu sortieren?

Anmerkung. Die Verwendung einer Schleife anstelle von ArrayFill() funktioniert bei mir nicht.

Vielen Dank für die Hilfe.

 
ANDREY:

Einen guten Tag an Sie alle!

Frage zu MQL4. Hier ist ein einfacher Code

Sie erstellt ein zweidimensionales Array und füllt es mit Werten. Es gibt zwei Funktionen im Code, die mich interessieren - ArrayFill(LoY,0,31,0.5555); und ArraySort(LoY,WHOLE_ARRAY,0,MODE_ASCEND); Laut dem Referenzhandbuch arbeiten beide Funktionen mit zweidimensionalen Arrays.ArrayFill() arbeitet strikt mit horizontal gefüllten Arrays , das Referenzbuch gibt an, dass es das Array strikt von links nach rechts mit Werten füllt (nicht von oben nach unten oder unten nach oben). ArraySort() sortiert ein zweidimensionales Array nach der ersten Dimension. Die Referenz sagt nicht, ob sie horizontal gefüllte oder vertikal gefüllte Arrays sortiert. Nach der Ausführung meines Codes zu urteilen, sortiert ArraySort() nur vertikal gefüllte Arrays. Es scheint, dass diese beiden Funktionen nicht ein und dasselbe Array in einem Programm verarbeiten können.

F. Es ist wichtig für mich, dass die Funktion ArraySort() korrekt funktioniert . Kann ArraySort() so konfiguriert werden, dass es horizontal gefüllte Arrays sortiert, mit denen ArrayFill() arbeitet? Oder die Sortierfunktion von MQL5, die in MQL4 funktioniert, kann mir stattdessen helfen? Oder gibt es eine Funktion, die ein horizontal gefülltes Array mit all seinen Werten in ein vertikales Array umwandelt, kurz gesagt, wie kann ich mein Programm dazu bringen, ein Array horizontal zu sortieren?

Anmerkung. Die Verwendung einer Schleife anstelle von ArrayFill() funktioniert bei mir nicht.

Ich danke Ihnen für Ihre Hilfe.

Haben Sie bemerkt, dass die

Hinweis

ArrayFill

Einmehrdimensionales Array erscheint bei der Verarbeitung mit ArrayFill() als eindimensional, z.B. array[2][4] wird als array[8] verarbeitet, so dass es bei der Arbeit mit diesem Array akzeptabel ist, den Index des ersten Elements mit 5 anzugeben. Der Aufruf von ArrayFill(array, 5, 2, 3.14) für array[2][4] füllt also die Elemente von array[1][1] und array[1][2] mit 3.14.


Diese Zeichenfolge

ArrayFill(LoY,0,31,0.5555);

wird das Array mit genau einer Zeile gefüllt.

Was die Vertikalität/Horizontalität betrifft, so würden Sie Ihren Kopf so halten, wenn Sie den Eintrag betrachten. Schauen Sie sich die Excell-Tabelle an, dann wird Ihnen alles klar. Wenn die Spalte "A" mit Werten gefüllt ist, erhalten Sie ein eindimensionales Array. Wie ist sie aufgebaut? Richtig... waagerecht, weil ich es auf dem Sofa liegend betrachte.........

 
Alexey Viktorov:

Haben Sie bemerkt, dass die

Hinweis

Diese Linie

wird das Array mit genau einer Zeile gefüllt.

Was die Vertikalität/Horizontalität betrifft, so geht es darum, wie Sie Ihren Kopf halten würden, wenn Sie den Eintrag betrachten. Schauen Sie sich die Excell-Tabelle an, dann wird Ihnen alles klar. Wenn die Spalte "A" mit Werten gefüllt ist, erhalten Sie ein eindimensionales Array. Wie ist sie aufgebaut? Richtig... waagerecht, weil ich es auf der Couch liegend betrachte.........

Vielen Dank für die Antwort. Ich habe alles verstanden, was Sie geschrieben haben. Aber ich habe den Sinn dessen, was Sie geschrieben haben, nicht verstanden, was mein Problem betrifft.

Unter einem horizontalen zweidimensionalen Array in meinem Code verstehe ich, wenn es 2 Zeilen unter dem Index 0 oder 1 und Spalten unter den Indizes 0 bis 30 gibt. Die erste Dimension wird als[0][0],[0][1],[0][2], ... bezeichnet.[0][30] Die zweite Dimension wird bezeichnet als[1][0],[1][1],[1][2], ...[1][30]

Mit vertikalen zweidimensionalen Array in meinem Code meine ich, wenn es 31 Zeilen mit den Indizes 0 bis 30 und 2 Spalten mit den Indizes 0 und 1gibt. Die erste Dimension wird als[0][0],[1[0],[2][0], ... bezeichnet.[30][0] Die zweite Dimension wird als[0][1],[1][1],[2][1], ... bezeichnet.[30][1]

Wenn Sie meinen Code ausführen, wird das Array vertikal gefüllt. Und die Funktion ArraySort() sortiert das Array so, wie es sein sollte.

QUESTION Warum funktioniert die Funktion ArrayFill() in diesem Fall nicht? Schließlich habe ich ihn gebeten, die erste Dimension des Arrays (31 Elemente) in der zwanzigsten Minute mit denselben Werten 0,5555 zu füllen.
Danke für Ihre Hilfe.

 
MakarFX:

Das würde ich versuchen.

Ich danke Ihnen für Ihre Hilfe. Ich werde es ausprobieren.

 
Aleksei Stepanenko:

der Ausdruck

ist mit diesem identisch:

Und wenn Sie etwas speichern wollen, tun Sie es in einer globalen Variablen.

Dies ist diejenige, die außerhalb des Funktionskörpers deklariert wird.

Wir wollten die Suchbedingungen für die Eingabe des EA nicht bei jedem Tick überprüfen, sondern nur, wenn eine andere Order durch einen anderen EA oder manuell geöffnet oder geschlossen wird (um den Prozessor nicht unnötig zu belasten). Deshalb müssen wir prüfen, ob die Anzahl der Aufträge mit jedem Tick übereinstimmt.

Können wir eine statische Variable verwenden ? Wird das Programm in einer solchen Form funktionieren?

    double LB=0,LS=0;
    int b=0,s=0;
    static int izmb, izms; // статическая переменная
   
   for (int i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol())
         { 
            int tip = OrderType(); 
            if (tip==OP_BUY)             
            {  
               LB  += OrderLots();
               b++; 
            }                                         
            if (tip==OP_SELL)        
            {
               LS  += OrderLots();
               s++;
            } 
         }
     }
     
   }
    if (izmb!=b || izms!=s){ 
    izmb=b;
    izms=s 
           // далее идут условия для открытия ордера.
     }
Grund der Beschwerde: