Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 135

 

Guten Tag, wenn es nicht zu schwierig ist, bitte beraten Sie einen Neuling:

1) Wie kann man ein Array deklarieren, dessen Größe dem Wert einer Variablen entspricht? (bei i=7 Array double Muss[7] deklarieren und so weiter);

2) Warum wird ein Array in einer benutzerdefinierten Funktion als angemessen deklariert und verwendet, wenn die Bedingung immer falsch ist?

while (false){

Alert("aaaaaaaaaaa" );

static double Buf_max [9000000];

static double Buf_min [9000000];}

3) Gibt es einen Unterschied in der Benutzerfunktion und im Allgemeinen zwischen nur einem Array und einem statischen Array?

 
ALXIMIKS:

Guten Tag, wenn es nicht zu schwierig ist, bitte beraten Sie einen Neuling:

1) Wie kann man ein Array deklarieren, dessen Größe dem Wert einer Variablen entspricht? (Wenn i=7 deklarieren Sie array double Muss[7] und so weiter);

...

1) ArrayResize()

int i=7;
double Muss[]; // объявление динамического массива
//---
int init() 
{
  ArrayResize(Muss,i); // устанавливает новый размер массива
  return(0);
}
 

eine solche Sache:

Wenn Sie MarketInfo(Symbol(),MODE_TRADEALLOWED) aufrufen, wird - 1=Handel erlaubt zurückgegeben.

Wenn Sie jedoch mit dem Mauszeiger über das Symbol in der Marktübersicht fahren, wird ein Tooltip mit dem Text - Trade: Close - angezeigt.

Was ist der Trick dabei?

es lässt mich wirklich nicht handeln, aber warum gibt MODE_TRADEALLOWED einen falschen Wert zurück?

 
chief2000:

Wie oft haben Sie den Indikator ausgeführt? Es sieht so aus, als ob es mehrere Male vorkommt (die Zyklizität ist in Ihren Ergebnissen erkennbar).
Fügen Sie einen weiteren Druck zu deinit mit einem "Trennzeichen" hinzu, setzen Sie eine Eingabebedingung oder ändern Sie das Skript so, dass es nicht mehr als einmal gestartet wird, dann wird es klarer sein.


Tolle Idee))

Ich habe es einfacher gemacht, etwa so:

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   for(int i=0; i<11; i++)
   {
      i++;
      Print("_i = ", i);
   }

   for(x1=0; x1<Array_Size; x1++)
   {
      Print("Combination = ", Array[x1]);

      for(x2=x1+1; x2<Array_Size; x2++)
      {
         Print("Combination = ", Array[x1] + "   " + Array[x2]);

         for(x3=x2+1; x3<Array_Size; x3++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(x4=x3+1; x4<Array_Size; x4++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }
  for(int h=0; h<11; i++)
   {
      h++;
      Print("h = ", h);
   }


   return(0);
}

Der Anfang im Logbuch sieht folgendermaßen aus:

2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: Combination = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     massive_fffffffff test started
2013.09.10 17:09:04     TestGenerator: spread set to 2
2013.09.10 17:09:04     massive_fffffffff EURUSD.GI,M5: loaded successfully

Es gibt noch nicht einmal einen Zyklus. Es gibt keine Ordnung. Die Ausgabe ist in keiner Weise konsistent.

 
hoz:


Tolle Idee))

Ich habe es einfacher gemacht, etwa so:

Der Anfang im Logbuch sieht folgendermaßen aus:

Es gibt noch nicht einmal einen Zyklus. Es gibt keine Ordnung. Die Ausgabe ist in keiner Weise konsistent.


Sie haben die Dinge ein wenig komplizierter gemacht, in der Testphase kann alles in 1-2 Zeilen erledigt werden, je nach Variante. Es ist möglich, alles in der Inite zu machen. Die Reihenfolge der Ausgabe ist nicht festgelegt.


bool Status_Run = true;


start() {

   if(Status_Run==true) {
      Status_Run  = false;

      Print("---START ---");
      ......

   }
}
 
chief2000:

Sie haben die Dinge ein wenig komplizierter gemacht, in der Prüfungsphase kann alles in 1-2 Zeilen erledigt werden, je nach Variante. Es ist möglich, alles in der Inite zu machen. Die Reihenfolge der Ausgabe wurde nicht festgelegt.





Wollen Sie ein Flag einführen, damit die Schleifen einmal ausgeführt werden und das war's? Ich höre nicht auf zu exekutieren... Das ist die Art und Weise, wie es funktioniert:

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   bool Status_run = true;
   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   if (Status_run == true)
   {
      Status_run = false;

      for(x1=0; x1<Array_Size; x1++)
      {
         Print("Combination = ", Array[x1]);

         for(x2=x1+1; x2<Array_Size; x2++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2]);

            for(x3=x2+1; x3<Array_Size; x3++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

               for(x4=x3+1; x4<Array_Size; x4++)
               {
                  Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
               }
            }
         }
      }
   }

   return(0);
}

Im Grunde genommen sollte der Code jedoch ein für alle Mal wie in INITA funktionieren. Dann wird die boolesche Variable Status_run sofort auf false gesetzt und die if-Bedingung wird nicht mehr ausgeführt... Aber mein Log geht aus irgendeinem Grund nicht aus.

 
hoz:


Wollen Sie ein Flag einführen, damit die Schleifen einmal ausgeführt werden und das war's? Ich höre nicht auf zu laufen... Das ist die Art und Weise, wie es funktioniert:

Obwohl der Code im Grunde genommen wie in INITE funktionieren sollte, einmal und das war's. Dann nimmt die boolesche Variable Status_run sofort den Wert false an und die if-Bedingung wird nicht mehr ausgeführt... Aber aus irgendeinem Grund gehen mir die Ausgaben im Protokoll nicht aus.


Sie haben behauptet, dass die Schleife falsche Ergebnisse liefert, und ich habe Ihnen eine Möglichkeit angeboten, sie zu testen. Wenn es so funktioniert, wie Sie es wünschen, sollten Sie es in Übereinstimmung mit Ihrem Algorithmus tun, und wenn nicht, sollten Sie es während der Prüfung ändern.

PS "Status_run" muss vor start() erstellt werden, es handelt sich um eine globale Variable.
 

Gurus, ein kleiner Ratschlag. Ich setze die boolsche Variable Flag=true; zum Start,

Ich eröffne ein Geschäft

wenn ( Bedingung)

{

Opn_S = wahr;

Flag=false;

}

Es stellt sich die Frage nach dem Flag, wenn das Flag beim Öffnenfalse zurückgibt und dieses Flag in der Öffnungsbedingung vorhanden ist. Wie lange wird der an die Flagge weitergegebene Wert "wahr" oder "falsch" aufbewahrt, wird er am nächsten Tag auf Null zurückgesetzt?

 
Forexman77:

Gurus, ein kleiner Ratschlag. Ich setze die Variable bool=true; zum Start,

Ich eröffne ein Geschäft

wenn ( Bedingung)

{

Opn_S = wahr;

Flag=false;

}

Es stellt sich die Frage nach dem Flag, wenn das Flag beim Öffnenfalse zurückgibt und dieses Flag in der Öffnungsbedingung vorhanden ist. Wie lange wird der an die Flagge weitergegebene Wert "wahr" oder "falsch" aufbewahrt, wird er am nächsten Tag wieder auf Null gesetzt?


Nein, bei jedem neuen Tick wird der Wert von Flag true sein . https://book.mql4.com/ru/variables/types

Entweder Sie deklarieren die Variable global - zum Beispiel am Anfang eines Programms, außerhalb aller Funktionen.

Oder machen Sie die Variable statisch - static bool flag=true; .

 
ALXIMIKS:

Nein, bei jedem neuen Tick wird der Wert von Flag true sein . https://book.mql4.com/ru/variables/types

Entweder Sie deklarieren die Variable global - am Anfang des Programms, außerhalb aller Funktionen.

Oder machen Sie die Variable statisch - static bool flag=true; .

Ich danke Ihnen!
Grund der Beschwerde: