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

 

kann jemand ein Schema vorschlagen, wie man von einem Array wie dieses erhalten

int array[15]= {0,0,5,5,5,1,9,9,9,0,2,2,1,0,0};

die Ziffern ermitteln, von denen 3 oder mehr in einer Reihe im Array vorhanden sind, d. h. die Werte "5" und "9" passen

müssen den Typ der

value1=9;

value2=5;

oder Array Wert[]={9,5};

Ich habe jetzt zwei Tage lang mit while do gepuzzelt und kann das Schema nicht herausfinden

 
Fast235:

Kann jemand ein Schema vorschlagen, wie man von einem Array wie diesem zu erhalten

die Ziffern ermitteln, von denen 3 oder mehr in einer Reihe im Array vorhanden sind, d. h. die Werte "5" und "9" passen

müssen den Typ der

value1=9;

value2=5;

oder Array Wert[]={9,5};

Tag zwei Ich kann das while do Schema nicht verstehen

skizzierte es, aber es löste es frontal, es funktioniert im Allgemeinen, aber meine Lösung gefiel nicht:

//+------------------------------------------------------------------+
void OnStart()
{
   int array[15] = {0, 0, 5, 5, 5, 1, 9, 9, 9, 0, 2, 2, 1, 0, 0};
   int arrrepeat[];
   getRepeatNumbers(array, arrrepeat);
   ArrayPrint(arrrepeat);
}
//+------------------------------------------------------------------+
void getRepeatNumbers(const int &inArr[], int &result[])
{
   ArrayFree(result);
   for(int i = 0; i < ArraySize(inArr) - 1; i++)
   {
      if(getRepeatCount(inArr, i) > 1)
      {
         int sz = ArraySize(result);
         ArrayResize(result, sz + 1);
         result[sz] = inArr[i];
      }
   }
}
//+------------------------------------------------------------------+
int getRepeatCount(const int &arr[], const int pos)
{
   int result = 0;
   for(int i = pos + 1; i < ArraySize(arr) - 1 && arr[i] == arr[pos]; i++)
   {
      result++;
   }
   return(result);
}
//+------------------------------------------------------------------+

2020.09.10 11:51:26.323 tst (EURUSD,M5) 5 9

 
Igor Makanu:

skizziert, sondern direkt entschieden, funktioniert im Allgemeinen, aber meine Lösung gefiel mir nicht:

2020.09.10 11:51:26.323 tst (EURUSD,M5) 5 9

Danke, zu viel Action

Ich möchte eine Lösung in der Schleife finden und werde versuchen, die Operatoren continue; und break; zu verwenden.

er muss bei jedem neuen Takt aus dem Indikatorpuffer entnommen werden prev_calculate-100 ca.

 
Fast235:

Danke, zu viel Action

Ich möchte eine Lösung in der Schleife finden und werde versuchen, die Operatoren continue; und break; zu verwenden.

er muss bei jedem neuen Takt aus dem Indikatorpuffer entnommen werden prev_calculate-100 oder so

es ist nicht umständlich, ich mochte es nicht, da ich nicht nach anderen Varianten gesucht habe - ich mache es immer so

die Schleife der zweiten Funktion.... in den Körper der ersten Funktion einfügen es wird weniger körperliche Anstrengung geben


ob mitoder ohne Pause - dieses Problem wird sowieso in 2 Schleifen gelöst.... aber es ist nicht genau! - entscheiden ;)

 
Igor Makanu:

nicht umständlich, mochte es nicht, weil ich nicht nach anderen Optionen gesucht habe - ich mache es immer auf diese Weise

die Schleife der zweiten Funktion.... in den Körper der ersten Funktion einfügen es wird weniger körperliche Anstrengung geben


ob mitoder ohne Pause - dieses Problem wird sowieso in 2 Schleifen gelöst.... aber es ist nicht genau! - entscheiden ;)

Ich werde versuchen, ein wenig herumzuprobieren, ich werde schreiben, wenn ich es schaffe.

 
Fast235:

Ich werde es ausprobieren und Sie wissen lassen, ob es funktioniert.

Es ist alles in einem Durchgang gelöst)))
 
Igor Makanu:

nicht umständlich, mochte es nicht, weil ich nicht nach anderen Optionen gesucht habe - ich mache es immer auf diese Weise

die Schleife der zweiten Funktion.... in den Körper der ersten Funktion einfügen es wird weniger körperliche Anstrengung geben


ob mitoder ohne Pause - dieses Problem wird sowieso in 2 Schleifen gelöst.... aber es ist nicht genau! - entscheiden ;)

Fehler, wenn sich in der Warteschlange vier "9er" statt 3 befinden, lautet das Ergebnis

5 9 9 2


 
Fast235:

Fehler, wenn in der Warteschlange nicht 3, sondern vier "9er" stehen, ist das Ergebnis

5 9 9 2


Ich habe dir gesagt, dass ich meine Lösung nicht mag (((

Zu faul, um wieder zu schreiben.

Googeln Sie "array find repetitions" - ich denke, Sie werden etwas finden

 
Fast235:

Kann jemand ein Schema vorschlagen, wie man von einem Array wie diesem zu erhalten

um die Ziffern zu erhalten, von denen es 3 oder mehr in einer Reihe im Array gibt, d. h. die Werte "5" und "9" passen

müssen den Typ der

value1=9;

value2=5;

oder Array Wert[]={9,5};

Ich kann das Schema für den zweiten Tag nicht herausfinden.

int qty[10]; // счётчики по цифрам

int total; // всего элементов в исходном массиве arr[]

int code=arr[0]; // текущая цифра

int count=1; // кол-во повторов

for(int i=1;i<total;i++) {

if (arr[i]!=code) { if (count>qty[code]) qty[code]=count;  code=arr[i]; count=1;}

        else count++;

}

if (count>qty[code]) qty[code]=count; 

/// в массиве qty - требуемое

zusätzliche Prüfungen über die Zulässigkeit von Elementen arr[] (dass es sich um Ziffern handelt) für den Geschmack hinzufügen

 

Guten Tag zusammen!
Ich teste den Algorithmus im MT-4-Tester mit mql4. Ich benötige die Print()-Funktion, um den Geldkurs in log mit 5 (fünf) Dezimalstellen auszugeben. Es würden aber nur 4 (vier) Dezimalstellen gedruckt. Ich habe die Funktion NormalizeDouble(Bid,Digits) verwendet, um die fünfte Stelle hinzuzufügen.

Bitte sagen Sie mir, wie ich meinen Fehler beheben kann, falls er existiert.
Hier ist mein Code.

void OnTick()
{
Print("=======Bid ======= ",NormalizeDouble(Bid,Digits) );

}


Wenn ich gleichzeitig mit Print() den Eröffnungs- und Schlusskurs einer Order (nach SL und TP) ausdrucke , dann druckt Print() den Kurs mit 5 (fünf) Ziffern, auch ohne die Hilfe von NormalizeDouble() und ohne die Hilfe anderer Funktionen.
Ich danke Ihnen allen für Ihre Hilfe.